From 808cb79af9302bacc3927d74a34a29acbde15c62 Mon Sep 17 00:00:00 2001 From: Simon Mikkelsen Bejer Date: Tue, 16 May 2023 15:00:49 +0200 Subject: [PATCH] VisitAnd Unit tests --- src/test/interpreter/VisitorUnitTest.java | 31 +++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/test/interpreter/VisitorUnitTest.java b/src/test/interpreter/VisitorUnitTest.java index d285165..2fc1d01 100644 --- a/src/test/interpreter/VisitorUnitTest.java +++ b/src/test/interpreter/VisitorUnitTest.java @@ -23,6 +23,8 @@ 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; @Mock private MineScriptParser.AbsDirContext mockAbsDirContext; @Mock private MineScriptParser.RelDirContext mockRelDirContext; @@ -30,6 +32,7 @@ class VisitorUnitTest { @Mock private MineScriptParser.IdContext mockIdContext; @Mock private MineScriptParser.NegContext mockNegContext; @Mock private MineScriptParser.NotExprContext mockNotExprContext; + @Mock private MineScriptParser.AndContext mockAndContext; @ParameterizedTest @ValueSource(ints = {-1000, -10, 0, 10, 1000}) @@ -189,4 +192,32 @@ 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()); + } }