From 450c0ab7356f0141f06865632e667a364afb4aec Mon Sep 17 00:00:00 2001 From: sabotack Date: Wed, 17 May 2023 09:50:30 +0200 Subject: [PATCH] added visitIsIsNot tests --- src/main/interpreter/Visitor.java | 1 - src/test/interpreter/VisitorUnitTest.java | 67 ++++++++++++++++++++++- 2 files changed, 66 insertions(+), 2 deletions(-) diff --git a/src/main/interpreter/Visitor.java b/src/main/interpreter/Visitor.java index 082b626..59e206a 100644 --- a/src/main/interpreter/Visitor.java +++ b/src/main/interpreter/Visitor.java @@ -190,7 +190,6 @@ public MSType visitBool(MineScriptParser.BoolContext ctx) { return new MSBool(Boolean.parseBoolean(ctx.getText())); } - @Override public MSType visitNotExpr(MineScriptParser.NotExprContext ctx) { MSType value = visit(ctx.expression()); diff --git a/src/test/interpreter/VisitorUnitTest.java b/src/test/interpreter/VisitorUnitTest.java index 9d60d4b..ab414e2 100644 --- a/src/test/interpreter/VisitorUnitTest.java +++ b/src/test/interpreter/VisitorUnitTest.java @@ -39,6 +39,7 @@ class VisitorUnitTest { @Mock private MineScriptParser.AddSubContext mockAddSubContext; @Mock private MineScriptParser.OrContext mockOrContext; @Mock private MineScriptParser.MultDivModContext mockMultDivModContext; + @Mock private MineScriptParser.IsIsNotContext mockIsIsNotContext; @ParameterizedTest @ValueSource(ints = {-1000, -10, 0, 10, 1000}) @@ -310,7 +311,71 @@ void visitOrValidInputReturnsOrValue(boolean value1, boolean value2) { MSType result = spyVisitor.visitOr(mockOrContext); Assertions.assertEquals(value1 || value2, ((MSBool) result).getValue()); } - + + @ParameterizedTest + @CsvSource({"0,0,is", "0,1,is not", "1,0,is not", "1,1,is"}) + void visitIsIsNotNumberReturnsCorrectBool(int left, int right, String operator) { + mockIsIsNotContext.op = new MockToken(operator); + Mockito.when(mockIsIsNotContext.expression(0)).thenReturn(mockExpressionContext1); + Mockito.when(mockIsIsNotContext.expression(1)).thenReturn(mockExpressionContext2); + Mockito.when(spyVisitor.visit(mockExpressionContext1)).thenReturn(new MSNumber(left)); + Mockito.when(spyVisitor.visit(mockExpressionContext2)).thenReturn(new MSNumber(right)); + + MSType result = spyVisitor.visitIsIsNot(mockIsIsNotContext); + switch (operator) { + case "is" -> Assertions.assertEquals(left == right, ((MSBool) result).getValue()); + case "is not" -> Assertions.assertEquals(left != right, ((MSBool) result).getValue()); + } + } + + @ParameterizedTest + @CsvSource({"false,false,is", "false,true,is not", "true,false,is not", "true,true,is"}) + void visitIsIsNotBoolReturnsCorrectBool(boolean left, boolean right, String operator) { + mockIsIsNotContext.op = new MockToken(operator); + Mockito.when(mockIsIsNotContext.expression(0)).thenReturn(mockExpressionContext1); + Mockito.when(mockIsIsNotContext.expression(1)).thenReturn(mockExpressionContext2); + Mockito.when(spyVisitor.visit(mockExpressionContext1)).thenReturn(new MSBool(left)); + Mockito.when(spyVisitor.visit(mockExpressionContext2)).thenReturn(new MSBool(right)); + + MSType result = spyVisitor.visitIsIsNot(mockIsIsNotContext); + switch (operator) { + case "is" -> Assertions.assertEquals(left == right, ((MSBool) result).getValue()); + case "is not" -> Assertions.assertEquals(left != right, ((MSBool) result).getValue()); + } + } + + @ParameterizedTest + @CsvSource({"north,south,is", "east,west,is not", "top,bottom,is not", "north,north,is"}) + void visitIsIsNotAbsDirReturnsCorrectBool(String left, String right, String operator) { + mockIsIsNotContext.op = new MockToken(operator); + Mockito.when(mockIsIsNotContext.expression(0)).thenReturn(mockExpressionContext1); + Mockito.when(mockIsIsNotContext.expression(1)).thenReturn(mockExpressionContext2); + Mockito.when(spyVisitor.visit(mockExpressionContext1)).thenReturn(new MSAbsDir(left)); + Mockito.when(spyVisitor.visit(mockExpressionContext2)).thenReturn(new MSAbsDir(right)); + + MSType result = spyVisitor.visitIsIsNot(mockIsIsNotContext); + switch (operator) { + case "is" -> Assertions.assertEquals(left.equals(right), ((MSBool) result).getValue()); + case "is not" -> Assertions.assertEquals(!left.equals(right), ((MSBool) result).getValue()); + } + } + + @ParameterizedTest + @CsvSource({"left,right,is", "up,down,is not", "left,left,is not", "right,right,is"}) + void visitIsIsNotRelDirReturnCorrectBool(String left, String right, String operator) { + mockIsIsNotContext.op = new MockToken(operator); + Mockito.when(mockIsIsNotContext.expression(0)).thenReturn(mockExpressionContext1); + Mockito.when(mockIsIsNotContext.expression(1)).thenReturn(mockExpressionContext2); + Mockito.when(spyVisitor.visit(mockExpressionContext1)).thenReturn(new MSRelDir(left)); + Mockito.when(spyVisitor.visit(mockExpressionContext2)).thenReturn(new MSRelDir(right)); + + MSType result = spyVisitor.visitIsIsNot(mockIsIsNotContext); + switch (operator) { + case "is" -> Assertions.assertEquals(left.equals(right), ((MSBool) result).getValue()); + case "is not" -> Assertions.assertEquals(!left.equals(right), ((MSBool) result).getValue()); + } + } + @ParameterizedTest @CsvSource ({"2,2,*", "2,2,/", "2,2,%"}) void visitMultDivModValidInputReturnsNumber(int left, int right, String operator) {