Parcourir la source

Ukonczony krok piaty

Adam Matuszewski il y a 1 an
Parent
commit
9dcd7019fe

+ 13 - 1
StringCalculator/src/main/java/pl/dmcs/Calculator.java

@@ -1,5 +1,7 @@
 package pl.dmcs;
 
+import java.util.ArrayList;
+import java.util.List;
 import java.util.regex.Pattern;
 
 public class Calculator {
@@ -17,11 +19,21 @@ public class Calculator {
 
         String[] numArray = numbers.split(delimiter);
         int sum = 0;
+        List<Integer> negativeNumbers = new ArrayList<>();
         for (String num : numArray) {
             if (!num.trim().isEmpty()) {
-                sum += Integer.parseInt(num.trim());
+                int number = Integer.parseInt(num.trim());
+                if (number < 0) {
+                    negativeNumbers.add(number);
+                }
+                sum += number;
             }
         }
+
+        if (!negativeNumbers.isEmpty()) {
+            throw new NegativeNumberException(negativeNumbers);
+        }
+
         return sum;
     }
 }

+ 11 - 0
StringCalculator/src/main/java/pl/dmcs/NegativeNumberException.java

@@ -0,0 +1,11 @@
+package pl.dmcs;
+
+import java.util.List;
+
+public class NegativeNumberException extends RuntimeException {
+
+    public NegativeNumberException(List<Integer> negativeNumbers) {
+        super("Negatives not allowed: " + negativeNumbers.toString());
+    }
+}
+

+ 17 - 6
StringCalculator/src/test/java/pl/dmcs/CalculatorTest.java

@@ -2,44 +2,55 @@ package pl.dmcs;
 
 import org.junit.jupiter.api.Test;
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
 
 public class CalculatorTest {
 
     private final Calculator calculator = new Calculator();
 
     @Test
-    public void testAddEmptyString() {
+    void testAddEmptyString() {
         assertEquals(0, calculator.add(""));
     }
 
     @Test
-    public void testAddOneNumber() {
+    void testAddOneNumber() {
         assertEquals(1, calculator.add("1"));
     }
 
     @Test
-    public void testAddTwoNumbers() {
+    void testAddTwoNumbers() {
         assertEquals(3, calculator.add("1,2"));
     }
 
     @Test
-    public void testAddMultipleNumbers() {
+    void testAddMultipleNumbers() {
         assertEquals(6, calculator.add("1,2,3"));
         assertEquals(10, calculator.add("1,2,3,4"));
         assertEquals(15, calculator.add("1,2,3,4,5"));
     }
 
     @Test
-    public void testAddNumbersWithNewLines() {
+    void testAddNumbersWithNewLines() {
         assertEquals(6, calculator.add("1\n2,3"));
         assertEquals(10, calculator.add("1\n2\n3,4"));
         assertEquals(15, calculator.add("1,2\n3\n4,5"));
     }
 
     @Test
-    public void testAddWithCustomDelimiter() {
+    void testAddWithCustomDelimiter() {
         assertEquals(3, calculator.add("//;\n1;2"));
         assertEquals(6, calculator.add("//|\n1|2|3"));
         assertEquals(10, calculator.add("//sep\n1sep2sep3sep4"));
     }
+
+    @Test
+    void testAddWithNegativeNumbers() {
+        NegativeNumberException exception = assertThrows(
+                NegativeNumberException.class,
+                () -> calculator.add("1,-2,3,-4")
+        );
+        assertEquals("Negatives not allowed: [-2, -4]", exception.getMessage());
+    }
 }