From f66ab11456244b12c48ee9231cec5c8b54b47efe Mon Sep 17 00:00:00 2001 From: Cliff Click Date: Mon, 10 Aug 2026 11:11:18 -0700 Subject: Chapter 29: Tech Debt Cleanup Co-authored-by: Hsiang-Ying Fu <66062782+fuhsnn@users.noreply.github.com> Co-authored-by: fuhsnn <66062782+fuhsnn@users.noreply.github.com> Co-authored-by: Symious <14933944+symious@users.noreply.github.com> Co-authored-by: Jun Kawasaki Co-authored-by: Claude Opus 5 --- .../java/com/seaofnodes/simple/ParserTest.java | 33 ++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 src/test/java/com/seaofnodes/simple/ParserTest.java (limited to 'src/test/java/com/seaofnodes/simple/ParserTest.java') diff --git a/src/test/java/com/seaofnodes/simple/ParserTest.java b/src/test/java/com/seaofnodes/simple/ParserTest.java new file mode 100644 index 00000000..364979f2 --- /dev/null +++ b/src/test/java/com/seaofnodes/simple/ParserTest.java @@ -0,0 +1,33 @@ +package com.seaofnodes.simple; + +import com.seaofnodes.simple.codegen.CodeGen; +import com.seaofnodes.simple.parser.Parser; +import org.junit.Test; +import static org.junit.Assert.*; + +public class ParserTest { + @Test public void testDeferredFragments() { + // The for update is scanned before the body, then parsed after it. + // Delimiters in strings, characters and comments must not end the scan. + String[] updates = {"n=n+\") (\"#", "n=n+')'", "n=n+/* ) */2", "n=n+{ -> 2; }()"}; + String[] results = {"6", "82", "4", "4"}; + for( int i = 0; i x=\"}\"#; }; }; return new Box().x;") + .driver(CodeGen.Phase.TypeCheck); + assertEquals("1",Eval2.eval(code,0)); + } + + @Test public void testUnclosedDeferredFragment() { + try { + new CodeGen("for(int i=0; i<2; i++").driver(CodeGen.Phase.TypeCheck); + fail("Accepted an unterminated for update"); + } catch( Parser.ParseException e ) { + assertEquals("Unclosed for update",e.getMessage()); + } + } +} -- cgit v1.2.3