diff options
Diffstat (limited to 'chapter28b/src/test/java/com')
| -rw-r--r-- | chapter28b/src/test/java/com/seaofnodes/simple/IncrementalBuildTest.java | 15 | ||||
| -rw-r--r-- | chapter28b/src/test/java/com/seaofnodes/simple/codegen/ParseAllTestSupport.java | 16 |
2 files changed, 31 insertions, 0 deletions
diff --git a/chapter28b/src/test/java/com/seaofnodes/simple/IncrementalBuildTest.java b/chapter28b/src/test/java/com/seaofnodes/simple/IncrementalBuildTest.java index 3c53c004..d8f7ef34 100644 --- a/chapter28b/src/test/java/com/seaofnodes/simple/IncrementalBuildTest.java +++ b/chapter28b/src/test/java/com/seaofnodes/simple/IncrementalBuildTest.java @@ -10,6 +10,21 @@ import org.junit.Test; import static org.junit.Assert.*; public class IncrementalBuildTest { + @Test public void testRequiredTypesBelongToTheirSource() throws Exception { + Path base = Path.of("build/objs/incremental"); + Files.createDirectories(base); + Path root = Files.createTempDirectory(base,"required-types-"); + Path src = Files.createDirectory(root.resolve("src")), obj = Files.createDirectory(root.resolve("obj")); + write(src,"App","val marker = 0;",1000); + write(src,"App/Main","return A.x+C.y;",1000); + write(src,"App/A","int x = 0; val readB = { B b -> b.x; };",1000); + write(src,"App/B","int x = 0;",1000); + write(src,"App/C","int y = 0;",1000); + CodeGen code = new CodeGen(src.toString(),obj.toString(),null,"App/Main",null,123,true,TypeInteger.BOT) + .parse(); + ParseAllTestSupport.checkRequiredTypes(code); + } + @Test public void testTransitiveSourceChange() throws Exception { Path base=Path.of("build/objs/incremental"); Files.createDirectories(base); diff --git a/chapter28b/src/test/java/com/seaofnodes/simple/codegen/ParseAllTestSupport.java b/chapter28b/src/test/java/com/seaofnodes/simple/codegen/ParseAllTestSupport.java new file mode 100644 index 00000000..2ce97a8e --- /dev/null +++ b/chapter28b/src/test/java/com/seaofnodes/simple/codegen/ParseAllTestSupport.java @@ -0,0 +1,16 @@ +package com.seaofnodes.simple.codegen; + +import static org.junit.Assert.*; + +public class ParseAllTestSupport { + public static void checkRequiredTypes(CodeGen code) { + CompUnit a = code._compunits.get("App/A"); + CompUnit b = code._compunits.get("App/B"); + CompUnit c = code._compunits.get("App/C"); + assertNotNull(b); + assertTrue(a._deps.find(b)!=-1); + // C was parsed after A, while B's layout was still unresolved. + // Only A used that layout; C must not inherit A's build dependency. + assertNull(c._deps); + } +} |
