diff --git a/exercises/phone-number/.meta/src/reference/java/PhoneNumber.java b/exercises/phone-number/.meta/src/reference/java/PhoneNumber.java index 929b3412a..de340be5a 100644 --- a/exercises/phone-number/.meta/src/reference/java/PhoneNumber.java +++ b/exercises/phone-number/.meta/src/reference/java/PhoneNumber.java @@ -13,9 +13,11 @@ private String extractDigits(String dirtyNumber) { // Remove spaces, dots, parentheses, hyphens and pluses continue; } + if ("-@:!".indexOf(c) > -1) { + throw new IllegalArgumentException("punctuations not permitted"); + } if (!Character.isDigit(c)) { - throw new IllegalArgumentException("Illegal character in phone number. " - + "Only digits, spaces, parentheses, hyphens or dots accepted."); + throw new IllegalArgumentException("letters not permitted"); } stringBuilder.append(c); } @@ -23,24 +25,36 @@ private String extractDigits(String dirtyNumber) { } private String normalize(String number) { - if (number.length() > 11 || number.length() < 10) { - throw new IllegalArgumentException("Number must be 10 or 11 digits"); + if (number.length() < 10) { + throw new IllegalArgumentException("incorrect number of digits"); } + if (number.length() > 11) { + throw new IllegalArgumentException("more than 11 digits"); + } + if (number.length() == 11) { if (number.startsWith("1")) { number = number.substring(1, number.length()); } else { - throw new IllegalArgumentException("Can only have 11 digits if number starts with '1'"); + throw new IllegalArgumentException("11 digits must start with 1"); } } - - if (number.startsWith("0") || number.startsWith("1")) { - throw new IllegalArgumentException("Illegal Area Or Exchange Code. " - + "Only 2-9 are valid digits"); - } else if (number.charAt(3) == '0' || number.charAt(3) == '1') { - throw new IllegalArgumentException("Illegal Area Or Exchange Code. " - + "Only 2-9 are valid digits"); + + if (number.startsWith("0")) { + throw new IllegalArgumentException("area code cannot start with zero"); + } + + if (number.startsWith("1")) { + throw new IllegalArgumentException("area code cannot start with one"); + } + + if (number.charAt(3) == '0') { + throw new IllegalArgumentException("exchange code cannot start with zero"); + } + + if (number.charAt(3) == '1') { + throw new IllegalArgumentException("exchange code cannot start with one"); } return number; diff --git a/exercises/phone-number/.meta/version b/exercises/phone-number/.meta/version index dc1e644a1..bd8bf882d 100644 --- a/exercises/phone-number/.meta/version +++ b/exercises/phone-number/.meta/version @@ -1 +1 @@ -1.6.0 +1.7.0 diff --git a/exercises/phone-number/src/test/java/PhoneNumberTest.java b/exercises/phone-number/src/test/java/PhoneNumberTest.java index 03152aad5..faf37b19b 100644 --- a/exercises/phone-number/src/test/java/PhoneNumberTest.java +++ b/exercises/phone-number/src/test/java/PhoneNumberTest.java @@ -6,14 +6,23 @@ import static org.junit.Assert.assertEquals; public class PhoneNumberTest { - private static String wrongLengthExceptionMessage = "Number must be 10 or 11 digits"; + private static String wrongLengthExceptionMessage = "incorrect number of digits"; + private static String moreThan11DigitsExceptionMessage = "more than 11 digits"; private static String numberIs11DigitsButDoesNotStartWith1ExceptionMessage = - "Can only have 11 digits if number starts with '1'"; + "11 digits must start with 1"; private static String illegalCharacterExceptionMessage = - "Illegal character in phone number. Only digits, spaces, parentheses, hyphens or dots accepted."; - private static String illegalAreaOrExchangeCodeMessage = - "Illegal Area Or Exchange Code. Only 2-9 are valid digits"; - + "letters not permitted"; + private static String illegalPunctuationExceptionMessage = + "punctuations not permitted"; + private static String areaCodeStartsWithZeroExceptionMessage = + "area code cannot start with zero"; + private static String areaCodeStartsWithOneExceptionMessage = + "area code cannot start with one"; + private static String exchangeCodeStartsWithZeroExceptionMessage = + "exchange code cannot start with zero"; + private static String exchangeCodeStartsWithOneExceptionMessage = + "exchange code cannot start with one"; + @Rule public ExpectedException expectedException = ExpectedException.none(); @@ -91,7 +100,7 @@ public void validWhen11DigitsAndStartingWith1EvenWithPunctuation() { @Test public void invalidWhenMoreThan11Digits() { expectedException.expect(IllegalArgumentException.class); - expectedException.expectMessage(wrongLengthExceptionMessage); + expectedException.expectMessage(moreThan11DigitsExceptionMessage); new PhoneNumber("321234567890"); } @@ -107,7 +116,7 @@ public void invalidWithLetters() { @Test public void invalidWithPunctuations() { expectedException.expect(IllegalArgumentException.class); - expectedException.expectMessage(illegalCharacterExceptionMessage); + expectedException.expectMessage(illegalPunctuationExceptionMessage); new PhoneNumber("123-@:!-7890"); } @@ -115,7 +124,7 @@ public void invalidWithPunctuations() { @Test public void invalidIfAreaCodeStartsWith0() { expectedException.expect(IllegalArgumentException.class); - expectedException.expectMessage(illegalAreaOrExchangeCodeMessage); + expectedException.expectMessage(areaCodeStartsWithZeroExceptionMessage); new PhoneNumber("(023) 456-7890"); } @@ -123,7 +132,7 @@ public void invalidIfAreaCodeStartsWith0() { @Test public void invalidIfAreaCodeStartsWith1() { expectedException.expect(IllegalArgumentException.class); - expectedException.expectMessage(illegalAreaOrExchangeCodeMessage); + expectedException.expectMessage(areaCodeStartsWithOneExceptionMessage); new PhoneNumber("(123) 456-7890"); } @@ -131,7 +140,7 @@ public void invalidIfAreaCodeStartsWith1() { @Test public void invalidIfExchangeCodeStartsWith0() { expectedException.expect(IllegalArgumentException.class); - expectedException.expectMessage(illegalAreaOrExchangeCodeMessage); + expectedException.expectMessage(exchangeCodeStartsWithZeroExceptionMessage); new PhoneNumber("(223) 056-7890"); } @@ -139,7 +148,7 @@ public void invalidIfExchangeCodeStartsWith0() { @Test public void invalidIfExchangeCodeStartsWith1() { expectedException.expect(IllegalArgumentException.class); - expectedException.expectMessage(illegalAreaOrExchangeCodeMessage); + expectedException.expectMessage(exchangeCodeStartsWithOneExceptionMessage); new PhoneNumber("(223) 156-7890"); } @@ -147,7 +156,7 @@ public void invalidIfExchangeCodeStartsWith1() { @Test public void invalidIfAreaCodeStartsWith0OnValid11DigitNumber() { expectedException.expect(IllegalArgumentException.class); - expectedException.expectMessage(illegalAreaOrExchangeCodeMessage); + expectedException.expectMessage(areaCodeStartsWithZeroExceptionMessage); new PhoneNumber("1 (023) 456-7890"); } @@ -155,7 +164,7 @@ public void invalidIfAreaCodeStartsWith0OnValid11DigitNumber() { @Test public void invalidIfAreaCodeStartsWith1OnValid11DigitNumber() { expectedException.expect(IllegalArgumentException.class); - expectedException.expectMessage(illegalAreaOrExchangeCodeMessage); + expectedException.expectMessage(areaCodeStartsWithOneExceptionMessage); new PhoneNumber("1 (123) 456-7890"); } @@ -163,7 +172,7 @@ public void invalidIfAreaCodeStartsWith1OnValid11DigitNumber() { @Test public void invalidIfExchangeCodeStartsWith0OnValid11DigitNumber() { expectedException.expect(IllegalArgumentException.class); - expectedException.expectMessage(illegalAreaOrExchangeCodeMessage); + expectedException.expectMessage(exchangeCodeStartsWithZeroExceptionMessage); new PhoneNumber("1 (223) 056-7890"); } @@ -171,7 +180,7 @@ public void invalidIfExchangeCodeStartsWith0OnValid11DigitNumber() { @Test public void invalidIfExchangeCodeStartsWith1OnValid11DigitNumber() { expectedException.expect(IllegalArgumentException.class); - expectedException.expectMessage(illegalAreaOrExchangeCodeMessage); + expectedException.expectMessage(exchangeCodeStartsWithOneExceptionMessage); new PhoneNumber("1 (223) 156-7890"); } }