diff --git a/src/main/java/htw/berlin/prog2/ha1/Calculator.java b/src/main/java/htw/berlin/prog2/ha1/Calculator.java index 84c04f2..de10f4b 100644 --- a/src/main/java/htw/berlin/prog2/ha1/Calculator.java +++ b/src/main/java/htw/berlin/prog2/ha1/Calculator.java @@ -29,11 +29,13 @@ public String readScreen() { * @param digit Die Ziffer, deren Taste gedrückt wurde */ public void pressDigitKey(int digit) { - if(digit > 9 || digit < 0) throw new IllegalArgumentException(); + if(digit > 9 || digit < 0) throw new IllegalArgumentException(); - if(screen.equals("0") || latestValue == Double.parseDouble(screen)) screen = ""; + if(screen.equals("0") || latestValue == Double.parseDouble(screen)) screen = ""; + if (screen.length() < 9) { + screen = screen + digit; + } - screen = screen + digit; } /** @@ -62,8 +64,12 @@ public void pressClearKey() { public void pressBinaryOperationKey(String operation) { latestValue = Double.parseDouble(screen); latestOperation = operation; + } + + + /** * Empfängt den Wert einer gedrückten unären Operationstaste, also eine der drei Operationen * Quadratwurzel, Prozent, Inversion, welche nur einen Operanden benötigen. @@ -81,9 +87,8 @@ public void pressUnaryOperationKey(String operation) { default -> throw new IllegalArgumentException(); }; screen = Double.toString(result); - if(screen.equals("NaN")) screen = "Error"; - if(screen.contains(".") && screen.length() > 11) screen = screen.substring(0, 10); - + if(screen.equals("NaN") || screen.equals("Infinity") ) screen = "Error"; + if(screen.contains(".") && screen.length() > 11) screen = screen.substring(0, 10);; } /** diff --git a/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java b/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java index ddff0da..e0362f0 100644 --- a/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java +++ b/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java @@ -90,5 +90,57 @@ void testMultipleDecimalDots() { //TODO hier weitere Tests erstellen -} + @Test + @DisplayName("should display result after subtracting two positive numbers") + void testPositiveSubtraction() { + Calculator calc = new Calculator(); + + calc.pressDigitKey(9); + calc.pressBinaryOperationKey("-"); + calc.pressDigitKey(4); + calc.pressEqualsKey(); + + String expected = "5"; + String actual = calc.readScreen(); + + assertEquals(expected, actual); + } + @Test + @DisplayName("should limit input number to 9 digits") + void testInput() { + Calculator calc = new Calculator(); + + calc.pressDigitKey(9); + calc.pressDigitKey(9); + calc.pressDigitKey(9); + calc.pressDigitKey(9); + calc.pressDigitKey(9); + calc.pressDigitKey(9); + calc.pressDigitKey(9); + calc.pressDigitKey(9); + calc.pressDigitKey(9); + calc.pressDigitKey(9); + + + String expected = "999999999"; + String actual = calc.readScreen(); + + assertEquals(expected, actual); + } + + @Test + @DisplayName("should display error when calculating inverse of zero") + void testInverse0zero() { + Calculator calc = new Calculator(); + + calc.pressDigitKey(0); + calc.pressUnaryOperationKey("1/x"); + + String expected = "Error"; // 1/0= Error + String actual = calc.readScreen(); + + assertEquals(expected, actual); + } + +} \ No newline at end of file