From cc856b3d05ea6c30c7a81ef3d5287cdb4bc4d32f Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 28 Dec 2015 22:15:26 +0100 Subject: [PATCH] add some more tests for the other buttons --- .../com/simple_calculator/MainActivity.java | 106 ++++++++------ .../simple_calculator/MainActivityTest.java | 138 +++++++++++++++++- 2 files changed, 194 insertions(+), 50 deletions(-) diff --git a/app/src/main/java/calculator/simplemobiletools/com/simple_calculator/MainActivity.java b/app/src/main/java/calculator/simplemobiletools/com/simple_calculator/MainActivity.java index 6b0958ce..f0033999 100644 --- a/app/src/main/java/calculator/simplemobiletools/com/simple_calculator/MainActivity.java +++ b/app/src/main/java/calculator/simplemobiletools/com/simple_calculator/MainActivity.java @@ -27,6 +27,7 @@ public class MainActivity extends AppCompatActivity { public static final int DIVIDE = 5; public static final int MODULO = 6; public static final int POWER = 7; + public static final int ROOT = 8; @Override protected void onCreate(Bundle savedInstanceState) { @@ -36,41 +37,46 @@ public class MainActivity extends AppCompatActivity { resetValues(); } - private void resetValues() { + public void resetValues() { baseValue = 0; secondValue = 0; resetValue = false; lastKey = 0; lastOperation = 0; - setResult("0"); + setValueDouble(0); } public void addDigit(int number) { final String currentValue = getDisplayedNumber(); final String newValue = removeLeadingZero(currentValue + number); - setResult(newValue); + setValue(newValue); } - public void setResult(String value) { + public void setValue(String value) { result.setText(value); } + public void setValueDouble(double d) { + setValue(Formatter.doubleToString(d)); + lastKey = DIGIT; + } + private String removeLeadingZero(String str) { final double doubleValue = Double.parseDouble(str); return Formatter.doubleToString(doubleValue); } - private String getDisplayedNumber() { + public String getDisplayedNumber() { return result.getText().toString(); } - public double getDisplayedNumberAsDouble() { + private double getDisplayedNumberAsDouble() { return Double.parseDouble(getDisplayedNumber()); } private void resetValueIfNeeded() { if (resetValue) - setResult("0"); + setValueDouble(0); resetValue = false; } @@ -103,11 +109,50 @@ public class MainActivity extends AppCompatActivity { return; if (lastKey == DIGIT) - getResult(); + handleResult(); resetValue = true; lastKey = operation; lastOperation = operation; + + if (operation == ROOT) + calculateResult(); + } + + public void handleClear() { + final String oldValue = getDisplayedNumber(); + String newValue; + final int len = oldValue.length(); + int minLen = 1; + if (oldValue.contains("-")) + minLen++; + + if (len > minLen) + newValue = oldValue.substring(0, len - 1); + else + newValue = "0"; + + if (newValue.equals("-0")) + newValue = "0"; + + setValue(newValue); + baseValue = Double.parseDouble(newValue); + } + + public void handleLongClear() { + resetValues(); + } + + public void handleEquals() { + if (lastKey == EQUALS) + calculateResult(); + + if (lastKey != DIGIT) + return; + + secondValue = getDisplayedNumberAsDouble(); + calculateResult(); + lastKey = EQUALS; } @OnClick(R.id.btn_plus) @@ -142,71 +187,45 @@ public class MainActivity extends AppCompatActivity { @OnClick(R.id.btn_root) public void rootClicked() { - getResult(); - lastOperation = EQUALS; - updateResult(Math.sqrt(baseValue)); + handleOperation(ROOT); } @OnClick(R.id.btn_clear) public void clearClicked() { - final String oldValue = getDisplayedNumber(); - String newValue; - final int len = oldValue.length(); - int minLen = 1; - if (oldValue.contains("-")) - minLen++; - - if (len > minLen) - newValue = oldValue.substring(0, len - 1); - else - newValue = "0"; - - if (newValue.equals("-0")) - newValue = "0"; - - setResult(newValue); - baseValue = Double.parseDouble(newValue); + handleClear(); } @OnLongClick(R.id.btn_clear) public boolean clearLongClicked() { - resetValues(); + handleLongClear(); return true; } @OnClick(R.id.btn_equals) public void equalsClicked() { - if (lastKey == EQUALS) - calculateResult(); - - if (lastKey != DIGIT) - return; - - secondValue = getDisplayedNumberAsDouble(); - calculateResult(); - lastKey = EQUALS; + handleEquals(); } public void decimalClicked() { String value = getDisplayedNumber(); if (!value.contains(".")) value += "."; - setResult(value); + setValue(value); } public void zeroClicked() { String value = getDisplayedNumber(); if (!value.equals("0")) value += "0"; - setResult(value); + setValue(value); } private void updateResult(double value) { - setResult(Formatter.doubleToString(value)); + setValue(Formatter.doubleToString(value)); baseValue = value; } - public void getResult() { + public void handleResult() { secondValue = getDisplayedNumberAsDouble(); calculateResult(); baseValue = getDisplayedNumberAsDouble(); @@ -232,6 +251,9 @@ public class MainActivity extends AppCompatActivity { case POWER: powerNumbers(); break; + case ROOT: + updateResult(Math.sqrt(baseValue)); + break; default: break; } diff --git a/app/src/test/java/calculator/simplemobiletools/com/simple_calculator/MainActivityTest.java b/app/src/test/java/calculator/simplemobiletools/com/simple_calculator/MainActivityTest.java index cce6cdbd..3e507666 100644 --- a/app/src/test/java/calculator/simplemobiletools/com/simple_calculator/MainActivityTest.java +++ b/app/src/test/java/calculator/simplemobiletools/com/simple_calculator/MainActivityTest.java @@ -24,22 +24,144 @@ public class MainActivityTest { @Test public void addSimpleDigit() { activity.addDigit(2); - assertEquals(2.0, activity.getDisplayedNumberAsDouble()); + assertEquals("2", getDisplayedNumber()); } @Test public void removeLeadingZero() { activity.addDigit(0); activity.addDigit(5); - assertEquals(5.0, activity.getDisplayedNumberAsDouble()); + assertEquals("5", getDisplayedNumber()); } @Test - public void addition_test() { - activity.setResult("-1.2"); - activity.handleOperation(MainActivity.PLUS); - activity.setResult("3.4"); - activity.getResult(); - assertEquals(2.2, activity.getDisplayedNumberAsDouble()); + public void additionTest() { + String res = calcResult(-1.2, MainActivity.PLUS, 3.4); + assertEquals("2.2", res); + } + + @Test + public void subtractionTest() { + String res = calcResult(7.8, MainActivity.MINUS, 2.5); + assertEquals("5.3", res); + } + + @Test + public void multiplyTest() { + String res = calcResult(-3.2, MainActivity.MULTIPLY, 6.6); + assertEquals("-21.12", res); + } + + @Test + public void divisionTest() { + String res = calcResult(18.25, MainActivity.DIVIDE, 5); + assertEquals("3.65", res); + } + + @Test + public void divisionByZero_returnsZero() { + String res = calcResult(6, MainActivity.DIVIDE, 0); + assertEquals("0", res); + } + + @Test + public void moduloTest() { + String res = calcResult(6.5, MainActivity.MODULO, 3); + assertEquals("0.5", res); + } + + @Test + public void powerTest() { + String res = calcResult(3, MainActivity.POWER, 6); + assertEquals("729", res); + } + + @Test + public void rootTest() { + setDouble(16); + handleOperation(MainActivity.ROOT); + activity.handleResult(); + assertEquals("4", getDisplayedNumber()); + } + + @Test + public void clearBtnSimpleTest() { + setDouble(156); + activity.handleClear(); + assertEquals("15", getDisplayedNumber()); + } + + @Test + public void clearBtnComplexTest() { + setDouble(-26); + activity.handleClear(); + assertEquals("-2", getDisplayedNumber()); + activity.handleClear(); + assertEquals("0", getDisplayedNumber()); + } + + @Test + public void clearBtnLongClick_resetsEverything() { + calcResult(-1.2, MainActivity.PLUS, 3.4); + activity.handleLongClear(); + handleOperation(MainActivity.PLUS); + setDouble(3); + activity.handleResult(); + assertEquals("3", getDisplayedNumber()); + } + + @Test + public void complexTest() { + setDouble(-12.2); + handleOperation(MainActivity.PLUS); + setDouble(21); + handleOperation(MainActivity.MINUS); + assertEquals("8.8", getDisplayedNumber()); + + setDouble(1.6); + activity.handleEquals(); + assertEquals("7.2", getDisplayedNumber()); + activity.handleEquals(); + assertEquals("5.6", getDisplayedNumber()); + + handleOperation(MainActivity.MULTIPLY); + setDouble(5); + handleOperation(MainActivity.DIVIDE); + assertEquals("28", getDisplayedNumber()); + + setDouble(4); + handleOperation(MainActivity.MODULO); + assertEquals("7", getDisplayedNumber()); + + setDouble(5); + handleOperation(MainActivity.POWER); + assertEquals("2", getDisplayedNumber()); + + setDouble(8); + handleOperation(MainActivity.ROOT); + assertEquals("16", getDisplayedNumber()); + + activity.handleClear(); + assertEquals("1", getDisplayedNumber()); + } + + private void setDouble(double d) { + activity.setValueDouble(d); + } + + private void handleOperation(int operation) { + activity.handleOperation(operation); + } + + private String calcResult(double baseValue, int operation, double secondValue) { + setDouble(baseValue); + handleOperation(operation); + setDouble(secondValue); + activity.handleResult(); + return getDisplayedNumber(); + } + + private String getDisplayedNumber() { + return activity.getDisplayedNumber(); } }