diff --git a/src/test/interpreter/VisitorUnitTest.java b/src/test/interpreter/VisitorUnitTest.java index ccc9fdc..4e861b6 100644 --- a/src/test/interpreter/VisitorUnitTest.java +++ b/src/test/interpreter/VisitorUnitTest.java @@ -28,6 +28,7 @@ class VisitorUnitTest { @Spy private final Visitor spyVisitor = visitor; @Mock private MineScriptParser.AssignContext mockAssignContext; + @Mock private MineScriptParser.ExpressionContext mockExpressionContext; @Mock private MineScriptParser.ExpressionContext mockExpressionContext1; @Mock private MineScriptParser.ExpressionContext mockExpressionContext2; @Mock private MineScriptParser.BoolContext mockBoolContext; @@ -37,10 +38,8 @@ class VisitorUnitTest { @Mock private MineScriptParser.IdContext mockIdContext; @Mock private MineScriptParser.NegContext mockNegContext; @Mock private MineScriptParser.NotExprContext mockNotExprContext; + @Mock private MineScriptParser.AndContext mockAndContext; @Mock private MineScriptParser.AddSubContext mockAddSubContext; - - - @ParameterizedTest @ValueSource(ints = {-1000, -10, 0, 10, 1000}) void visitAssignStoresCorrectNumber(int value) { @@ -259,6 +258,34 @@ void visitNumberInvalidInputThrowsRuntimeException(){ Mockito.when(mockNumberContext.NUMBER()).thenReturn(new MockTerminalNode("abc")); Assertions.assertThrows(RuntimeException.class, () -> spyVisitor.visitNumber(mockNumberContext)); } + @Test + void visitAndValidBoolsReturnsTrue(){ + Mockito.when(mockAndContext.expression(0)).thenReturn(mockExpressionContext1); + Mockito.when(mockAndContext.expression(1)).thenReturn(mockExpressionContext2); + Mockito.when(spyVisitor.visit(mockExpressionContext1)).thenReturn(new MSBool(true)); + Mockito.when(spyVisitor.visit(mockExpressionContext2)).thenReturn(new MSBool(true)); + + MSType result = spyVisitor.visitAnd(mockAndContext); + Assertions.assertTrue(((MSBool) result).getValue()); + } + @Test + void visitAndBoolsTrueAndFalseReturnsFalse(){ + Mockito.when(mockAndContext.expression(0)).thenReturn(mockExpressionContext1); + Mockito.when(mockAndContext.expression(1)).thenReturn(mockExpressionContext2); + Mockito.when(spyVisitor.visit(mockExpressionContext1)).thenReturn(new MSBool(true)); + Mockito.when(spyVisitor.visit(mockExpressionContext2)).thenReturn(new MSBool(false)); + + MSType result = spyVisitor.visitAnd(mockAndContext); + Assertions.assertFalse(((MSBool) result).getValue()); + } + @Test + void visitAndFalseWithShortCircuitReturnsFalse() { + Mockito.when(mockAndContext.expression(0)).thenReturn(mockExpressionContext1); + Mockito.when(spyVisitor.visit(mockExpressionContext1)).thenReturn(new MSBool(false)); + + MSType result = spyVisitor.visitAnd(mockAndContext); + Assertions.assertFalse(((MSBool) result).getValue()); + } @ParameterizedTest @CsvSource ({"1, 2, +", "2, 1, -", "0, 0, +", "-1, -2, +", "-2, -1, -"}) @@ -276,5 +303,4 @@ void visitAddSubValidInputReturnsNumber(int value1, int value2, String operator) Assertions.assertEquals(value1 - value2, ((MSNumber) result).getValue()); } } - }