diff --git a/bin/StringCalculator.class b/bin/StringCalculator.class index a937b0c..c1acb1c 100644 Binary files a/bin/StringCalculator.class and b/bin/StringCalculator.class differ diff --git a/bin/StringCalculatorTest.class b/bin/StringCalculatorTest.class index d44b83f..3012e26 100644 Binary files a/bin/StringCalculatorTest.class and b/bin/StringCalculatorTest.class differ diff --git a/src/StringCalculator.java b/src/StringCalculator.java index 487916b..0c26689 100644 --- a/src/StringCalculator.java +++ b/src/StringCalculator.java @@ -1,9 +1,74 @@ +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; public class StringCalculator { public int add(String numbersStr) { // Returns the sum of the numbers given in numbersStr + ArrayList stringArray = new ArrayList(); + ArrayList integerArray = new ArrayList(); + int result; + + stringArray = getArrayFromString(numbersStr); + try { + integerArray = convertArrayList(stringArray); + } catch (StringCalculatorException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + result = calculateSum(integerArray); // not yet implemented - return 0; + return result; + } + + public ArrayList getArrayFromString(String numbersStr){ + + if(numbersStr == "") + return new ArrayList(Arrays.asList("0")); + + String[] numbers = numbersStr.split(",|\\n", -1); + ArrayList stringArray = new ArrayList(Arrays.asList(numbers)); + + return stringArray; + } + + public ArrayList convertArrayList(ArrayList stringArray) throws StringCalculatorException{ + + ArrayList integerArray = new ArrayList(); + + boolean numeric = true; + int number = 0; + + for(String stringValue : stringArray) { + + try { + number = Integer.parseInt(stringValue); + integerArray.add(number); + }catch(Exception e) { + numeric = false; + } + + if(numeric == false) { + throw new StringCalculatorException(); + }else if(number < 0) { + throw new StringCalculatorException(); + } + + } + + return integerArray; + } + + public int calculateSum(ArrayList integerArray) { + + int sum = 0; + + for(int number : integerArray) { + sum += number; + } + return sum; } + + } diff --git a/tests/StringCalculatorTest.java b/tests/StringCalculatorTest.java index 4ec9afe..ea3a064 100644 --- a/tests/StringCalculatorTest.java +++ b/tests/StringCalculatorTest.java @@ -1,12 +1,246 @@ import static org.junit.Assert.*; +import java.util.ArrayList; + import org.junit.Test; public class StringCalculatorTest { + /* @Test public void test() { fail("Not yet implemented"); } + */ + + @Test + public void testGetArrayFromString_0_1() { + //Arrange + String numbersStr = "0,1"; + ArrayList numbers = new ArrayList(); + StringCalculator calc = new StringCalculator(); + String[] expectedOutput = {"0", "1"}; + + //Act + numbers = calc.getArrayFromString(numbersStr); + + //Assert + assertArrayEquals(expectedOutput, numbers.toArray()); + } + + @Test + public void testGetArrayFromString_1() { + //Arrange + String numbersStr = "1"; + ArrayList numbers = new ArrayList(); + StringCalculator calc = new StringCalculator(); + String[] expectedOutput = {"1"}; + + //Act + numbers = calc.getArrayFromString(numbersStr); + + //Assert + assertArrayEquals(expectedOutput, numbers.toArray()); + } + + @Test + public void testGetArrayFromString_EmptyString() { + //Arrange + String numbersStr = ""; + ArrayList numbers = new ArrayList(); + StringCalculator calc = new StringCalculator(); + String[] expectedOutput = {"0"}; + + //Act + numbers = calc.getArrayFromString(numbersStr); + + //Assert + assertArrayEquals(expectedOutput, numbers.toArray()); + } + + @Test + public void testGetArrayFromString_0_1_2_3_4_5_6() { + //Arrange + String numbersStr = "0,1,2,3,4,5,6"; + ArrayList numbers = new ArrayList(); + StringCalculator calc = new StringCalculator(); + String[] expectedOutput = {"0", "1", "2", "3", "4", "5", "6"}; + + //Act + numbers = calc.getArrayFromString(numbersStr); + + //Assert + assertArrayEquals(expectedOutput, numbers.toArray()); + } + + @Test + public void testConvertArray_0_1() { + //Arrange + ArrayList stringArray = new ArrayList(); + stringArray.add("0"); + stringArray.add("1"); + + StringCalculator calc = new StringCalculator(); + + ArrayList integerArray = new ArrayList(); + + ArrayList expectedOutput = new ArrayList(); + expectedOutput.add(0); + expectedOutput.add(1); + + + //Act + try { + integerArray = calc.convertArrayList(stringArray); + } catch (StringCalculatorException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + //Assert + assertArrayEquals(expectedOutput.toArray(), integerArray.toArray()); + } + + @Test + public void testCalculateSum_3_4() { + //Arrange + ArrayList integerArray = new ArrayList(); + integerArray.add(3); + integerArray.add(4); + + StringCalculator calc = new StringCalculator(); + + int expectedSum = 7; + + //Act + int result = calc.calculateSum(integerArray); + + //Assert + assertEquals(expectedSum, result); + } + + @Test + public void testCalculateSum_0_0() { + //Arrange + ArrayList integerArray = new ArrayList(); + integerArray.add(0); + integerArray.add(0); + + StringCalculator calc = new StringCalculator(); + + int expectedSum = 0; + + //Act + int result = calc.calculateSum(integerArray); + + //Assert + assertEquals(expectedSum, result); + } + + + @Test + public void testGetArrayFromString_NewLine() { + //Arrange + String numbersStr = "1\n2,3"; + ArrayList numbers = new ArrayList(); + StringCalculator calc = new StringCalculator(); + String[] expectedOutput = {"1", "2", "3"}; + + //Act + numbers = calc.getArrayFromString(numbersStr); + + //Assert + assertArrayEquals(expectedOutput, numbers.toArray()); + } + + @Test(expected = StringCalculatorException.class) + public void testConvertArray_Letter_StringCalculatorException() throws StringCalculatorException { + //Arrange + ArrayList stringArray = new ArrayList(); + stringArray.add("0"); + stringArray.add("a"); + + StringCalculator calc = new StringCalculator(); + + ArrayList integerArray = new ArrayList(); + + //Act + integerArray = calc.convertArrayList(stringArray); + } + + @Test(expected = StringCalculatorException.class) + public void testConvertArray_DoubleValue_StringCalculatorException() throws StringCalculatorException { + //Arrange + ArrayList stringArray = new ArrayList(); + stringArray.add("0"); + stringArray.add("2.34"); + + StringCalculator calc = new StringCalculator(); + + ArrayList integerArray = new ArrayList(); + + //Act + integerArray = calc.convertArrayList(stringArray); + } + + + @Test(expected = StringCalculatorException.class) + public void testConvertArray_NegativeNumber_StringCalculatorException() throws StringCalculatorException { + //Arrange + ArrayList stringArray = new ArrayList(); + stringArray.add("0"); + stringArray.add("-1"); + + StringCalculator calc = new StringCalculator(); + + ArrayList integerArray = new ArrayList(); + + //Act + integerArray = calc.convertArrayList(stringArray); + } + + @Test (expected = StringCalculatorException.class) + public void testInvalidInput_Comma_NewLine() throws StringCalculatorException{ + //Arrange + String numbersStr = "1,\n"; + ArrayList stringArray = new ArrayList(); + StringCalculator calc = new StringCalculator(); + ArrayList integerArray = new ArrayList(); + + //Act + stringArray = calc.getArrayFromString(numbersStr); + integerArray = calc.convertArrayList(stringArray); + } + + @Test + public void testAdd_1_5_6_1_0() { + //Arrange + String numbersStr = "1,5,6,1,0"; + int result; + StringCalculator calc = new StringCalculator(); + + //Act + result = calc.add(numbersStr); + + //Assert + assertEquals(13, result); + } + + @Test + public void testAdd_EmptyString() { + //Arrange + String numbersStr = ""; + int result; + StringCalculator calc = new StringCalculator(); + + //Act + result = calc.add(numbersStr); + + //Assert + assertEquals(0, result); + } + + + }