From e29c22656458e9252ca0fc32a396d605496b4b4d Mon Sep 17 00:00:00 2001 From: Cliff Click Date: Mon, 5 Aug 2024 13:52:54 -0700 Subject: More error cases, error checking disallow e.g. "struct x { int i; }; x = new x; x.i=3.14;" --- .../java/com/seaofnodes/simple/Chapter12Test.java | 50 ++++++++++++++++++++++ 1 file changed, 50 insertions(+) (limited to 'chapter13/src/test') 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()); } + } } -- cgit v1.2.3