diff --git a/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java b/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java index 84c04f21..ebe81a9e 100644 --- a/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java +++ b/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java @@ -24,8 +24,9 @@ public String readScreen() { /** * Empfängt den Wert einer gedrückten Zifferntaste. Da man nur eine Taste auf einmal * drücken kann muss der Wert positiv und einstellig sein und zwischen 0 und 9 liegen. - * Führt in jedem Fall dazu, dass die gerade gedrückte Ziffer auf dem Bildschirm angezeigt - * oder rechts an die zuvor gedrückte Ziffer angehängt angezeigt wird. + * Führt dazu, dass die gerade gedrückte Ziffer auf dem Bildschirm angezeigt + * oder rechts an die zuvor gedrückte Ziffer angehängt angezeigt wird, wenn 8 oder + * weniger Ziffern auf dem Bildschirm zu sehen sind. * @param digit Die Ziffer, deren Taste gedrückt wurde */ public void pressDigitKey(int digit) { @@ -33,7 +34,11 @@ public void pressDigitKey(int digit) { if(screen.equals("0") || latestValue == Double.parseDouble(screen)) screen = ""; - screen = screen + digit; + if(screen.length() == 9){ + + }else { + screen = screen + digit; + } } /** @@ -81,6 +86,7 @@ public void pressUnaryOperationKey(String operation) { default -> throw new IllegalArgumentException(); }; screen = Double.toString(result); + if(screen.equals("Infinity")) screen = "Error"; if(screen.equals("NaN")) screen = "Error"; if(screen.contains(".") && screen.length() > 11) screen = screen.substring(0, 10); @@ -130,4 +136,7 @@ public void pressEqualsKey() { if(screen.endsWith(".0")) screen = screen.substring(0,screen.length()-2); if(screen.contains(".") && screen.length() > 11) screen = screen.substring(0, 10); } + + + } diff --git a/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java b/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java index ddff0daf..92d5a635 100644 --- a/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java +++ b/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java @@ -88,6 +88,58 @@ void testMultipleDecimalDots() { assertEquals(expected, actual); } + @Test + @DisplayName("should display result after inverting a number") + void testInvertingANumber() { + Calculator calc = new Calculator(); + + calc.pressDigitKey(4); + calc.pressUnaryOperationKey("1/x"); + + String expected = "0.25"; + String actual = calc.readScreen(); + + assertEquals(expected, actual); + } + + @Test + @DisplayName("should prohibit inversion of 0") + void testInvertingZero() { + Calculator calc = new Calculator(); + + calc.pressDigitKey(0); + calc.pressUnaryOperationKey("1/x"); + + String expected = "Error"; + String actual = calc.readScreen(); + + assertEquals(expected, actual); + } + + @Test + @DisplayName("should not add another digit to screen when nine numbers are on screen") + void testDontAllow10thDigit() { + Calculator calc = new Calculator(); + + calc.pressDigitKey(1); + calc.pressDigitKey(1); + calc.pressDigitKey(1); + calc.pressDigitKey(1); + calc.pressDigitKey(1); + calc.pressDigitKey(1); + calc.pressDigitKey(1); + calc.pressDigitKey(1); + calc.pressDigitKey(1); + calc.pressDigitKey(1); + + + + String expected = "111111111"; + String actual = calc.readScreen(); + + assertEquals(expected, actual); + + } //TODO hier weitere Tests erstellen }