summaryrefslogtreecommitdiff
path: root/chapter28b/src/test
diff options
context:
space:
mode:
authorCliff Click <cliffc@acm.org>2026-10-27 15:47:43 -0700
committerCliff Click <cliffc@acm.org>2026-10-27 15:47:43 -0700
commit0bf3ce826ca0546b08f9d7a513930017fcf63f89 (patch)
tree4d93a5ab433a487908f2fa711714e627e86e98f8 /chapter28b/src/test
parent615eb0cf4545d354dc0889d76ec60b6b18ef9e7a (diff)
downloadSimple-0bf3ce826ca0546b08f9d7a513930017fcf63f89.tar.gz
Simple-0bf3ce826ca0546b08f9d7a513930017fcf63f89.zip
Gather types during loading instead another walk
Diffstat (limited to 'chapter28b/src/test')
-rw-r--r--chapter28b/src/test/java/com/seaofnodes/simple/IncrementalBuildTest.java15
-rw-r--r--chapter28b/src/test/java/com/seaofnodes/simple/codegen/ParseAllTestSupport.java16
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);
+ }
+}