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..0a2bef83 100644 --- a/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java +++ b/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java @@ -5,6 +5,14 @@ * https://www.online-calculator.com/ aufgerufen werden kann (ohne die Memory-Funktionen) * und dessen Bildschirm bis zu zehn Ziffern plus einem Dezimaltrennzeichen darstellen kann. * Enthält mit Absicht noch diverse Bugs oder unvollständige Funktionen. + * + * Teilaufgabe 2: Schreiben Sie zwei weitere zusätzliche Tests, die zwei unterschiedliche + * Fehlerkategorien aufdecken (d.h. deren Fehlerursachen in unterschiedlichen Methoden liegen) und somit fehlschlagen. + * + * Teilaufgabe 3: Schreiben Sie zwei Bugfixes (also Änderungen der Implementierungsklasse Calculator), + * sodass die zwei zuvor hinzugefügten Tests erfolgreich durchlaufen. Falls Sie dabei das Verhalten so erweitern, + * dass es über das im JavaDoc spezifizierte hinausgeht (aber zum Verhalten des Online Calculator passt), + * dann erweitern Sie bitte auch das JavaDoc entsprechend. */ public class Calculator { @@ -23,26 +31,29 @@ 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. + * 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. * @param digit Die Ziffer, deren Taste gedrückt wurde */ public void pressDigitKey(int digit) { - if(digit > 9 || digit < 0) throw new IllegalArgumentException(); - - if(screen.equals("0") || latestValue == Double.parseDouble(screen)) screen = ""; + if (digit > 9 || digit < 0) { + throw new IllegalArgumentException(); + } + if (screen.equals("0") || latestValue == Double.parseDouble(screen)) { + screen = ""; + } screen = screen + digit; } /** * Empfängt den Befehl der C- bzw. CE-Taste (Clear bzw. Clear Entry). - * Einmaliges Drücken der Taste löscht die zuvor eingegebenen Ziffern auf dem Bildschirm - * so dass "0" angezeigt wird, jedoch ohne zuvor zwischengespeicherte Werte zu löschen. + * Einmaliges Drücken der Taste löscht die zuvor eingegebenen Ziffern auf dem Bildschirm, + * sodass "0" angezeigt wird, jedoch ohne zuvor zwischengespeicherte Werte zu löschen. * Wird daraufhin noch einmal die Taste gedrückt, dann werden auch zwischengespeicherte - * Werte sowie der aktuelle Operationsmodus zurückgesetzt, so dass der Rechner wieder - * im Ursprungszustand ist. + * Werte sowie der aktuelle Operationsmodus zurückgesetzt, sodass der Rechner wieder + * im Ursprungszustand ist... */ public void pressClearKey() { screen = "0"; @@ -100,7 +111,7 @@ public void pressDotKey() { /** * Empfängt den Befehl der gedrückten Vorzeichenumkehrstaste ("+/-"). * Zeigt der Bildschirm einen positiven Wert an, so wird ein "-" links angehängt, der Bildschirm - * aktualisiert und die Inhalt fortan als negativ interpretiert. + * aktualisier und der Inhalt fortan als negativ interpretiert. * Zeigt der Bildschirm bereits einen negativen Wert mit führendem Minus an, dann wird dieses * entfernt und der Inhalt fortan als positiv interpretiert. */ @@ -130,4 +141,5 @@ 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..f76e662a 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,74 @@ void testMultipleDecimalDots() { assertEquals(expected, actual); } + @Test + @DisplayName("Prüft ob die Negation auf der richtigen Stelle ist") + void testNegativKeyIndex(){ + Calculator calc = new Calculator(); + + calc.pressBinaryOperationKey("-"); + calc.pressDigitKey(1); + calc.readScreen(); + + String expected = "1"; + String actual = calc.readScreen(); + + assertEquals(expected,actual); + } + + + @Test + @DisplayName(" Prüft ob man Zahlen < 9 und Zahlen > 0 eingeben kann ") + void testScreenEingabe(){ + Calculator calc = new Calculator(); + calc.pressDigitKey(22); + calc.pressBinaryOperationKey("+"); + calc.pressDigitKey(2); + calc.pressEqualsKey(); + + String expected = "24"; + String actual = calc.readScreen(); + + + } + + @Test + @DisplayName(" Prüft ob man Zahlen < 9 und Zahlen > 0 eingeben kann ") + void testDevide(){ + Calculator calc = new Calculator(); + calc.pressDigitKey(22); + calc.pressBinaryOperationKey("+"); + calc.pressDigitKey(2); + calc.pressEqualsKey(); + + String expected = "24"; + String actual = calc.readScreen(); + + + } + + @Test + @DisplayName("Nach dem Drücken von ClearKey darf LastOperation nicht zurückgesetzt werden ") + void testOfClearKey(){ + + Calculator calc = new Calculator(); + //calc.pressNegativeKey(); + calc.pressDigitKey(6); + calc.pressBinaryOperationKey("x"); + calc.pressDigitKey(6); + calc.pressClearKey(); + calc.pressDigitKey(5); + calc.pressEqualsKey(); + calc.readScreen(); + + String expected = "30"; + String actual = calc.readScreen(); + + + } + + + //TODO hier weitere Tests erstellen }