Skip to content
Open

HA1 #128

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
30 changes: 21 additions & 9 deletions app/src/main/java/htw/berlin/prog2/ha1/Calculator.java
Original file line number Diff line number Diff line change
Expand Up @@ -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 {

Expand All @@ -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";
Expand Down Expand Up @@ -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.
*/
Expand Down Expand Up @@ -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);
}

}
68 changes: 68 additions & 0 deletions app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Expand Down