Skip to content

Commit 14958ea

Browse files
committed
Cover parser and diagnostic core paths
1 parent e8b5d03 commit 14958ea

3 files changed

Lines changed: 106 additions & 0 deletions

File tree

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package de.peeeq.wurstscript.attributes;
2+
3+
import de.peeeq.wurstscript.gui.WurstGuiCliImpl;
4+
import de.peeeq.wurstscript.parser.WPos;
5+
import org.testng.annotations.Test;
6+
7+
import static org.testng.Assert.assertEquals;
8+
import static org.testng.Assert.assertFalse;
9+
import static org.testng.Assert.assertSame;
10+
import static org.testng.Assert.assertTrue;
11+
12+
public class ErrorHandlerTests {
13+
@Test
14+
public void tracksErrorsWarningsAndPerFileBuckets() {
15+
WurstGuiCliImpl gui = new WurstGuiCliImpl();
16+
ErrorHandler handler = new ErrorHandler(gui);
17+
CompileError error = new CompileError(new WPos("one.wurst", null, 1, 1), "bad");
18+
CompileError warning = new CompileError(new WPos("one.wurst", null, 2, 1), "careful",
19+
CompileError.ErrorType.WARNING);
20+
21+
handler.sendError(error);
22+
handler.sendError(warning);
23+
24+
assertEquals(handler.getErrorCount(), 1);
25+
assertEquals(handler.getErrors(), java.util.List.of(error));
26+
assertEquals(handler.getWarnings(), java.util.List.of(warning));
27+
assertEquals(handler.getBucketForFile("one.wurst", CompileError.ErrorType.ERROR), java.util.List.of(error));
28+
assertEquals(handler.getBucketForFile("one.wurst", CompileError.ErrorType.WARNING), java.util.List.of(warning));
29+
assertEquals(gui.getErrorList().size(), 1);
30+
31+
handler.removeFromGlobal(error);
32+
handler.removeFromGlobal(warning);
33+
assertTrue(handler.getErrors().isEmpty());
34+
assertTrue(handler.getWarnings().isEmpty());
35+
assertEquals(handler.getBucketForFile("one.wurst", CompileError.ErrorType.ERROR), null);
36+
assertEquals(handler.getBucketForFile("one.wurst", CompileError.ErrorType.WARNING), null);
37+
}
38+
39+
@Test
40+
public void exposesGuiAndUnitTestMode() {
41+
WurstGuiCliImpl gui = new WurstGuiCliImpl();
42+
ErrorHandler handler = new ErrorHandler(gui);
43+
44+
assertSame(handler.getGui(), gui);
45+
assertFalse(handler.isUnitTestMode());
46+
handler.enableUnitTestMode();
47+
assertTrue(handler.isUnitTestMode());
48+
assertFalse(handler.isOutputTestSource());
49+
}
50+
}

de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/WurstOperatorTests.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@
99

1010
import static org.testng.Assert.assertEquals;
1111
import static org.testng.Assert.assertFalse;
12+
import static org.testng.Assert.assertNotNull;
1213
import static org.testng.Assert.assertTrue;
14+
import static org.testng.Assert.expectThrows;
1315

1416
public class WurstOperatorTests {
1517
@Test
@@ -48,4 +50,21 @@ public void unaryEvaluationAndLazyClassificationAreConsistent() {
4850
assertFalse(((ILconstBool) WurstOperator.NOT.evaluateUnaryOperator(ILconstBool.instance(true))).getVal());
4951
assertEquals(((ILconstInt) WurstOperator.UNARY_MINUS.evaluateUnaryOperator(new ILconstInt(4))).getVal(), -4);
5052
}
53+
54+
@Test
55+
public void operatorMetadataAndBackendMappingsAreExplicit() {
56+
assertTrue(WurstOperator.PLUS.isBinaryOp());
57+
assertFalse(WurstOperator.PLUS.isUnaryOp());
58+
assertTrue(WurstOperator.NOT.isUnaryOp());
59+
assertFalse(WurstOperator.NOT.isBinaryOp());
60+
assertEquals(WurstOperator.DIV_REAL.toString(), "/");
61+
assertEquals(WurstOperator.PLUS.getOverloadingFuncName(), "op_plus");
62+
assertNotNull(WurstOperator.DIV_INT.jassTranslateBinary());
63+
assertNotNull(WurstOperator.MOD_REAL.luaTranslateBinary());
64+
assertNotNull(WurstOperator.UNARY_MINUS.jassTranslateUnary());
65+
assertNotNull(WurstOperator.NOT.jassTranslateUnary());
66+
expectThrows(Error.class, () -> WurstOperator.MOD_INT.jassTranslateBinary());
67+
expectThrows(Error.class, () -> WurstOperator.MOD_INT.luaTranslateBinary());
68+
expectThrows(Error.class, () -> WurstOperator.PLUS.jassTranslateUnary());
69+
}
5170
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package tests.wurstscript.tests;
2+
3+
import de.peeeq.wurstscript.WurstParser;
4+
import de.peeeq.wurstscript.attributes.ErrorHandler;
5+
import de.peeeq.wurstscript.gui.WurstGuiCliImpl;
6+
import org.testng.annotations.Test;
7+
8+
import java.io.StringReader;
9+
10+
import static org.testng.Assert.assertEquals;
11+
import static org.testng.Assert.assertNotNull;
12+
13+
public class WurstParserTests {
14+
@Test
15+
public void parsesWurstJassAndJurstCompilationUnits() {
16+
WurstGuiCliImpl gui = new WurstGuiCliImpl();
17+
ErrorHandler errors = new ErrorHandler(gui);
18+
WurstParser parser = new WurstParser(errors, gui);
19+
String jassFunction = "function foo takes nothing returns nothing\nendfunction\n";
20+
21+
assertNotNull(parser.parse(new StringReader("package Demo\n"), "demo.wurst", false));
22+
assertNotNull(parser.parseJass(new StringReader(jassFunction), "demo.j", false));
23+
assertNotNull(parser.parseJurst(new StringReader(jassFunction), "demo.jurst", false));
24+
assertEquals(errors.getErrorCount(), 0);
25+
}
26+
27+
@Test
28+
public void canLeaveSyntacticSugarForDownstreamInspection() {
29+
WurstGuiCliImpl gui = new WurstGuiCliImpl();
30+
ErrorHandler errors = new ErrorHandler(gui);
31+
WurstParser parser = new WurstParser(errors, gui);
32+
parser.setRemoveSugar(false);
33+
34+
assertNotNull(parser.parse(new StringReader("package Demo\nfunction foo()\n"), "demo.wurst", false));
35+
assertEquals(errors.getErrorCount(), 0);
36+
}
37+
}

0 commit comments

Comments
 (0)