summaryrefslogtreecommitdiff
path: root/chapter13/src/test
diff options
context:
space:
mode:
authorCliff Click <cliffc@acm.org>2024-08-05 13:52:54 -0700
committerDibyendu Majumdar <dibyendumajumdar@users.noreply.github.com>2024-08-06 00:50:58 +0100
commite29c22656458e9252ca0fc32a396d605496b4b4d (patch)
tree30007cb51ba01bfcded2aab2807b6cb237ce0905 /chapter13/src/test
parent9bc99b3987f1daea61c329b9327814d9a9148ebe (diff)
downloadSimple-e29c22656458e9252ca0fc32a396d605496b4b4d.tar.gz
Simple-e29c22656458e9252ca0fc32a396d605496b4b4d.zip
More error cases, error checking
disallow e.g. "struct x { int i; }; x = new x; x.i=3.14;"
Diffstat (limited to 'chapter13/src/test')
-rw-r--r--chapter13/src/test/java/com/seaofnodes/simple/Chapter12Test.java50
1 files changed, 50 insertions, 0 deletions
diff --git a/chapter13/src/test/java/com/seaofnodes/simple/Chapter12Test.java b/chapter13/src/test/java/com/seaofnodes/simple/Chapter12Test.java
index e36c7577..8eceb0fa 100644
--- a/chapter13/src/test/java/com/seaofnodes/simple/Chapter12Test.java
+++ b/chapter13/src/test/java/com/seaofnodes/simple/Chapter12Test.java
@@ -121,4 +121,54 @@ return f0.i.f.i.i;
assertEquals("return 17;", stop.toString());
}
+ @Test
+ public void testNullRef0() {
+ Parser parser = new Parser(
+"""
+struct N { N next; int i; }
+N n = new N;
+return n.next;
+""");
+ StopNode stop = parser.parse(false).iterate(false);
+ assertEquals("return null;", stop.toString());
+ }
+
+ @Test
+ public void testNullRef1() {
+ Parser parser = new Parser(
+"""
+struct N { N next; int i; }
+N n = new N;
+n.next = new N;
+return n.next;
+""");
+ StopNode stop = parser.parse(false).iterate(false);
+ assertEquals("return new N;", stop.toString());
+ }
+
+ @Test
+ public void testNullRef2() {
+ Parser parser = new Parser(
+"""
+struct N { N next; int i; }
+N n = new N;
+n.next = null;
+return n.next;
+""");
+ try { parser.parse(true).iterate(true); fail(); }
+ catch( Exception e ) { assertEquals("Cannot store null into field *N next",e.getMessage()); }
+ }
+
+ @Test
+ public void testNullRef3() {
+ Parser parser = new Parser(
+"""
+struct N { N next; int i; }
+N n = new N;
+n.i = 3.14;
+return n.i;
+""");
+ try { parser.parse(true).iterate(true); fail(); }
+ catch( Exception e ) { assertEquals("Cannot store 3.14 into field IntBot i",e.getMessage()); }
+ }
}