Przeglądaj źródła

Merge branch 'master' into JourneyTestMakeWorkWithExercises

Frida Tveit 9 lat temu
rodzic
commit
b4767d6084

exercises/linked-list/src/example/java/Deque.java → exercises/linked-list/src/example/java/DoublyLinkedList.java Wyświetl plik

1
-public final class Deque<T> {
1
+public final class DoublyLinkedList<T> {
2
     private Element<T> head;
2
     private Element<T> head;
3
 
3
 
4
     public void push(T value) {
4
     public void push(T value) {

exercises/linked-list/src/test/java/DequeTest.java → exercises/linked-list/src/test/java/DoublyLinkedListTest.java Wyświetl plik

5
 import static org.hamcrest.CoreMatchers.*;
5
 import static org.hamcrest.CoreMatchers.*;
6
 import static org.junit.Assert.*;
6
 import static org.junit.Assert.*;
7
 
7
 
8
-public class DequeTest {
9
-    private Deque<Integer> subject;
8
+public class DoublyLinkedListTest {
9
+    private DoublyLinkedList<Integer> subject;
10
 
10
 
11
     @Before
11
     @Before
12
     public void setUp() {
12
     public void setUp() {
13
-        subject = new Deque<>();
13
+        subject = new DoublyLinkedList<>();
14
     }
14
     }
15
 
15
 
16
 
16
 

+ 19
- 25
exercises/phone-number/src/example/java/PhoneNumber.java Wyświetl plik

7
     }
7
     }
8
 
8
 
9
     private String extractDigits(String dirtyNumber) {
9
     private String extractDigits(String dirtyNumber) {
10
-        return dirtyNumber.replaceAll("[^\\d]", "");
10
+        StringBuilder stringBuilder = new StringBuilder();
11
+        for (char c : dirtyNumber.toCharArray()) {
12
+            if (c == ' ' || c == '.' || c == '(' || c == ')' || c == '-') {
13
+                // Remove spaces, dots, parentheses and hyphens
14
+                continue;
15
+            }
16
+            if (!Character.isDigit(c)) {
17
+                throw new IllegalArgumentException("Illegal character in phone number. "
18
+                        + "Only digits, spaces, parentheses, hyphens or dots accepted.");
19
+            }
20
+            stringBuilder.append(c);
21
+        }
22
+        return stringBuilder.toString();
11
     }
23
     }
12
 
24
 
13
     private String normalize(String number) {
25
     private String normalize(String number) {
14
-        if(number.length() > 11 || number.length() < 10){
26
+        if (number.length() > 11 || number.length() < 10) {
15
             throw new IllegalArgumentException("Number must be 10 or 11 digits");
27
             throw new IllegalArgumentException("Number must be 10 or 11 digits");
16
         }
28
         }
17
 
29
 
18
-        if(number.length() == 11){
19
-            if(number.startsWith("1")){
30
+        if (number.length() == 11) {
31
+            if (number.startsWith("1")) {
20
                 number = number.substring(1, number.length());
32
                 number = number.substring(1, number.length());
21
-            }
22
-            else{
33
+            } else {
23
                 throw new IllegalArgumentException("Can only have 11 digits if number starts with '1'");
34
                 throw new IllegalArgumentException("Can only have 11 digits if number starts with '1'");
24
             }
35
             }
25
-        } 
26
-        
36
+        }
37
+
27
         return number;
38
         return number;
28
     }
39
     }
29
 
40
 
30
     public String getNumber() {
41
     public String getNumber() {
31
         return number;
42
         return number;
32
     }
43
     }
33
-
34
-    public String getAreaCode() {
35
-        return number.substring(0, 3);
36
-    }
37
-
38
-    public String getExchangeCode() {
39
-        return number.substring(3, 6);
40
-    }
41
-
42
-    public String getSubscriberNumber() {
43
-        return number.substring(6, 10);
44
-    }
45
-
46
-    public String pretty() {
47
-        return "(" + getAreaCode() + ") " + getExchangeCode() + "-" + getSubscriberNumber();
48
-    }
49
-
50
 }
44
 }

+ 44
- 30
exercises/phone-number/src/test/java/PhoneNumberTest.java Wyświetl plik

1
-import org.junit.Test;
2
 import org.junit.Ignore;
1
 import org.junit.Ignore;
3
 import org.junit.Rule;
2
 import org.junit.Rule;
3
+import org.junit.Test;
4
 import org.junit.rules.ExpectedException;
4
 import org.junit.rules.ExpectedException;
5
 
5
 
6
-import static org.junit.Assert.*;
6
+import static org.junit.Assert.assertEquals;
7
 
7
 
8
 public class PhoneNumberTest {
8
 public class PhoneNumberTest {
9
+    private final static String wrongLengthExceptionMessage = "Number must be 10 or 11 digits";
10
+    private final static String numberIs11DigitsButDoesNotStartWith1ExceptionMessage =
11
+            "Can only have 11 digits if number starts with '1'";
12
+    private final static String illegalCharacterExceptionMessage =
13
+            "Illegal character in phone number. Only digits, spaces, parentheses, hyphens or dots accepted.";
9
 
14
 
10
     @Rule
15
     @Rule
11
     public ExpectedException expectedException = ExpectedException.none();
16
     public ExpectedException expectedException = ExpectedException.none();
16
         final String actualNumber = new PhoneNumber("(123) 456-7890").getNumber();
21
         final String actualNumber = new PhoneNumber("(123) 456-7890").getNumber();
17
 
22
 
18
         assertEquals(
23
         assertEquals(
19
-            expectedNumber, actualNumber
24
+                expectedNumber, actualNumber
20
         );
25
         );
21
     }
26
     }
22
 
27
 
27
         final String actualNumber = new PhoneNumber("123.456.7890").getNumber();
32
         final String actualNumber = new PhoneNumber("123.456.7890").getNumber();
28
 
33
 
29
         assertEquals(
34
         assertEquals(
30
-            expectedNumber, actualNumber
35
+                expectedNumber, actualNumber
31
         );
36
         );
32
     }
37
     }
33
 
38
 
34
     @Ignore
39
     @Ignore
35
     @Test
40
     @Test
36
-    public void validWhen11DigitsAndFirstIs1() {
41
+    public void cleansNumberWithMultipleSpaces() {
37
         final String expectedNumber = "1234567890";
42
         final String expectedNumber = "1234567890";
38
-        final String actualNumber = new PhoneNumber("11234567890").getNumber();
43
+        final String actualNumber = new PhoneNumber("123 456   7890   ").getNumber();
39
 
44
 
40
         assertEquals(
45
         assertEquals(
41
-            expectedNumber, actualNumber
46
+                expectedNumber, actualNumber
42
         );
47
         );
43
     }
48
     }
44
 
49
 
45
     @Ignore
50
     @Ignore
46
     @Test
51
     @Test
47
-    public void invalidWhenOnly11Digits() {
52
+    public void invalidWhen9Digits() {
48
         expectedException.expect(IllegalArgumentException.class);
53
         expectedException.expect(IllegalArgumentException.class);
49
-        expectedException.expectMessage("Can only have 11 digits if number starts with '1'");
50
-        new PhoneNumber("21234567890").getNumber();
54
+        expectedException.expectMessage(wrongLengthExceptionMessage);
55
+        new PhoneNumber("123456789");
51
     }
56
     }
52
 
57
 
53
     @Ignore
58
     @Ignore
54
     @Test
59
     @Test
55
-    public void invalidWhen9Digits() {
60
+    public void invalidWhen11Digits() {
56
         expectedException.expect(IllegalArgumentException.class);
61
         expectedException.expect(IllegalArgumentException.class);
57
-        expectedException.expectMessage("Number must be 10 or 11 digits");
58
-        new PhoneNumber("123456789").getNumber();
62
+        expectedException.expectMessage(numberIs11DigitsButDoesNotStartWith1ExceptionMessage);
63
+        new PhoneNumber("21234567890");
59
     }
64
     }
60
 
65
 
61
     @Ignore
66
     @Ignore
62
     @Test
67
     @Test
63
-    public void areaCode() {
64
-        final String expectedAreaCode = "123";
65
-        final String actualAreaCode = new PhoneNumber("1234567890").getAreaCode();
68
+    public void validWhen11DigitsAndFirstIs1() {
69
+        final String expectedNumber = "1234567890";
70
+        final String actualNumber = new PhoneNumber("11234567890").getNumber();
66
 
71
 
67
         assertEquals(
72
         assertEquals(
68
-            expectedAreaCode, actualAreaCode
73
+                expectedNumber, actualNumber
69
         );
74
         );
70
     }
75
     }
71
 
76
 
72
     @Ignore
77
     @Ignore
73
     @Test
78
     @Test
74
-    public void prettyPrint() {
75
-        final String expectedPrettyNumber = "(123) 456-7890";
76
-        final String actualPrettyNumber = new PhoneNumber("1234567890").pretty();
77
-
78
-        assertEquals(
79
-            expectedPrettyNumber, actualPrettyNumber
80
-        );
79
+    public void invalidWhen12Digits() {
80
+        expectedException.expect(IllegalArgumentException.class);
81
+        expectedException.expectMessage(wrongLengthExceptionMessage);
82
+        new PhoneNumber("321234567890");
81
     }
83
     }
82
 
84
 
83
     @Ignore
85
     @Ignore
84
     @Test
86
     @Test
85
-    public void prettyPrintWithFullUSPhoneNumber() {
86
-        final String expectedPrettyNumber = "(123) 456-7890";
87
-        final String actualPrettyNumber = new PhoneNumber("11234567890").pretty();
87
+    public void invalidWithLetters() {
88
+        expectedException.expect(IllegalArgumentException.class);
89
+        expectedException.expectMessage(illegalCharacterExceptionMessage);
90
+        new PhoneNumber("123-abc-7890");
91
+    }
88
 
92
 
89
-        assertEquals(
90
-            expectedPrettyNumber, actualPrettyNumber
91
-        );
93
+    @Ignore
94
+    @Test
95
+    public void invalidWithPunctuation() {
96
+        expectedException.expect(IllegalArgumentException.class);
97
+        expectedException.expectMessage(illegalCharacterExceptionMessage);
98
+        new PhoneNumber("123-@:!-7890");
92
     }
99
     }
93
 
100
 
101
+    @Ignore
102
+    @Test
103
+    public void invalidWithRightNumberOfDigitsButLettersMixedIn() {
104
+        expectedException.expect(IllegalArgumentException.class);
105
+        expectedException.expectMessage(illegalCharacterExceptionMessage);
106
+        new PhoneNumber("1a2b3c4d5e6f7g8h9i0j");
107
+    }
94
 }
108
 }