Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added bin/CalculatorUtils.class
Binary file not shown.
Binary file added bin/NumberObject.class
Binary file not shown.
Binary file modified bin/StringCalculator.class
Binary file not shown.
Binary file modified bin/StringCalculatorTest.class
Binary file not shown.
27 changes: 27 additions & 0 deletions src/CalculatorUtils.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

// Refactor: Extract method

public class CalculatorUtils {

// Beautify this class and handle errors
public static String[] convertToNumberStringArray(String numbers) {

String[] arrayOfNumbers = numbers.split("\\s*,\\s*");

return arrayOfNumbers;
}

public static String[] removeEmptyStrings(String[] numbersArray) {

List<String> myList = new ArrayList<String>(Arrays.asList(numbersArray));
myList.remove("");

String[] myStrArray = myList.toArray(new String[0]);

return myStrArray;
}

}
59 changes: 59 additions & 0 deletions src/NumberObject.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@

// Refactor: Introduce Parameter Object
public class NumberObject {
private String numbersStr;
private int value;
private String[] numbersArray;

public NumberObject(String numbersStr) {
this.numbersStr = numbersStr;
this.value = 0;
this.numbersArray = null;
}

public String getNumbersStr() {
return this.numbersStr;
}

public String[] getNumbersArray() {
return this.numbersArray;
}

public void setNumbersArray(String[] numbersArray) {
this.numbersArray = numbersArray;
}

public int getValue() {
return this.value;
}

public void setValue(int value) {
this.value = value;
}

// Refactor: BAD SMELL, JDEADORANT MOVED
public boolean isNumberStrValid() {
return getNumbersStr() != null && getNumbersStr() != "";
}

// Refactor: Extract method
// Refactor: BAD SMELL, JDEADORANT MOVED
public int calculate() throws StringCalculatorException {
try {
// Remove the "" from the list
setNumbersArray(CalculatorUtils.convertToNumberStringArray(getNumbersStr()));
setNumbersArray(CalculatorUtils.removeEmptyStrings(getNumbersArray()));

int val = 0;
for (String numberString : getNumbersArray()) {
val += Integer.parseInt(numberString);
}
setValue(val);
}
catch (IllegalArgumentException e) {
throw new StringCalculatorException();
}
return getValue();
}

}
25 changes: 21 additions & 4 deletions src/StringCalculator.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,26 @@
/*
Implement a simple String calculator with a method int Add(string numbers)
1. The method can take 0, 1 or 2 numbers, and will return their sum (for an empty string it will
return 0) for example �� or �1� or �1,2�
2. Add method to handle an unknown amount of numbers
3. Add method to handle new lines between numbers (instead of commas).
1. the following input is ok: �1\n2,3� (will equal 6)
2. the following input is NOT ok: �1,\n�
4. Calling Add with a negative numbers or invalid input (not numbers) will throw an
StringCalculatorException
*/

public class StringCalculator {
public int add(String numbersStr) {
// Returns the sum of the numbers given in numbersStr
// Main function
public int add(String numbersStr) throws StringCalculatorException {

// not yet implemented
return 0;
NumberObject numberObject = new NumberObject(numbersStr);

int val = 0;
if (numberObject.isNumberStrValid()) {
val = numberObject.calculate();
}
return val;
}

}
116 changes: 114 additions & 2 deletions tests/StringCalculatorTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,122 @@
import org.junit.Test;

public class StringCalculatorTest {

@Test
public void test_add_valid() throws StringCalculatorException{
// Arrange
StringCalculator calculator = new StringCalculator();
String testString = "11, 2, , 3, 31";

// Act
int returnedValue = calculator.add(testString);

// Assert
assertEquals(47, returnedValue);
}

@Test
public void test() {
fail("Not yet implemented");
public void test_add_with_zero() throws StringCalculatorException{
// Arrange
StringCalculator calculator = new StringCalculator();
String testString = "0, 2, , 3";

// Act
int returnedValue = calculator.add(testString);

// Assert
assertEquals(5, returnedValue);
}

@Test
public void test_add_zero() throws StringCalculatorException{
// Arrange
StringCalculator calculator = new StringCalculator();
String testString = "0, ";

// Act
int returnedValue = calculator.add(testString);

// Assert
assertEquals(0, returnedValue);
}

@Test (expected = StringCalculatorException.class)
public void test_add_empty() throws StringCalculatorException{
// Arrange
StringCalculator calculator = new StringCalculator();
String testString = " ";

// Act
calculator.add(testString);
}

@Test
public void test_add_null() throws StringCalculatorException{
// Arrange
StringCalculator calculator = new StringCalculator();

// Act
int returnedValue = calculator.add(null);

// Assert
assertEquals(0, returnedValue);
}

@Test
public void test_removeEmptyString() {
// Arrange
String[] testArray = {"21", "1", "", "15"};

// Act
String[] returnedArray = CalculatorUtils.removeEmptyStrings(testArray);

// Assert
String[] expectedArray = {"21", "1", "15"};
assertArrayEquals(returnedArray, expectedArray);
}

@Test
public void test_convertToArray() {
// Arrange
String testString = "1,15\n , ,3";

// Act
String[] returnedArray = CalculatorUtils.convertToNumberStringArray(testString);

// Assert
String[] expectedArray = {"1", "15", "", "3"};
assertArrayEquals(returnedArray, expectedArray);
}


@Test
public void test_add_plainString() throws StringCalculatorException{
// Arrange
StringCalculator calculator = new StringCalculator();
String testString = "1,40\n, 3";

// Act
int returnedValue = calculator.add(testString);

// Assert
int expected = 44;
assertEquals(expected, returnedValue);

}

@Test
public void test_add_plainStringWithEmpty() throws StringCalculatorException{
// Arrange
StringCalculator calculator = new StringCalculator();
String testString = " , 2\n , , , , ";

// Act
int returnedValue = calculator.add(testString);

// Assert
int expected = 2;
assertEquals(expected, returnedValue);

}
}