From dc35595d912b26bcd474bbd25b4456891ee111d8 Mon Sep 17 00:00:00 2001
From: Laurent Pierron <Laurent.Pierron@inria.fr>
Date: Sun, 29 Jan 2023 19:10:55 +0100
Subject: [PATCH] Adding a new operator '=' to avoid to do a sub again after an
 equal operation.

---
 src/main/java/fr/nancy/iut/CalcEngine.java    |  3 +-
 .../java/fr/nancy/iut/CalcEngineTest.java     | 28 ++++++++++++++++++-
 2 files changed, 29 insertions(+), 2 deletions(-)

diff --git a/src/main/java/fr/nancy/iut/CalcEngine.java b/src/main/java/fr/nancy/iut/CalcEngine.java
index 14bc40d..3ab5436 100755
--- a/src/main/java/fr/nancy/iut/CalcEngine.java
+++ b/src/main/java/fr/nancy/iut/CalcEngine.java
@@ -72,10 +72,11 @@ public class CalcEngine
         if (previousOperator == '+') {
             displayValue = leftOperand + displayValue;
         }
-        else {
+        else if (previousOperator == '-') {
             displayValue = leftOperand - displayValue;
         }
         leftOperand = 0;
+        previousOperator = '=';
     }
 
     /**
diff --git a/src/test/java/fr/nancy/iut/CalcEngineTest.java b/src/test/java/fr/nancy/iut/CalcEngineTest.java
index f9138b6..1b4053e 100644
--- a/src/test/java/fr/nancy/iut/CalcEngineTest.java
+++ b/src/test/java/fr/nancy/iut/CalcEngineTest.java
@@ -25,7 +25,7 @@ public class CalcEngineTest {
     }
 
     @Test
-    @DisplayName("TTesting the addition operation : 3 + 4 = 7")
+    @DisplayName("Testing the addition operation : 3 + 4 = 7")
     void testPlus() {
         // Make sure the engine is in a valid starting state.
         engine.clear();
@@ -38,4 +38,30 @@ public class CalcEngineTest {
         assertEquals(7, engine.getDisplayValue());
     }
 
+    @Test
+    @DisplayName("Testing the operation : 1 + 2 + 3 =  - 2 = - 1 = 3 ")
+    void testComplexFormula() {
+        // Make sure the engine is in a valid starting state.
+        engine.clear();
+        // Simulate the key presses: 1 + 2 + 3 =
+        engine.numberPressed(1);
+        engine.plus();
+        engine.numberPressed(2);
+        engine.plus();
+        engine.numberPressed(3);
+        engine.equals();
+        // Intermediate result : 6
+        assertEquals(6, engine.getDisplayValue());
+        engine.minus();
+        engine.numberPressed(2);
+        engine.equals();
+        // Intermediate result : 4 (6 _ 2)
+        assertEquals(4, engine.getDisplayValue());
+        engine.minus();
+        engine.numberPressed(1);
+        engine.equals();
+        // Final result : 3 (4 - 1).
+        assertEquals(3, engine.getDisplayValue());
+    }
+
 }
-- 
GitLab