@@ -0,0 +1,1256 @@
+import static org.junit.jupiter.api.Assertions.assertEquals;%0Aimport static org.junit.jupiter.api.Assertions.assertLinesMatch;%0Aimport static org.junit.jupiter.api.Assertions.assertThrows;%0A%0Aimport java.nio.file.Path;%0Aimport java.util.List;%0Aimport org.junit.jupiter.api.Nested;%0Aimport org.junit.jupiter.api.Test;%0Aimport org.junit.jupiter.api.io.TempDir;%0A%0Aclass TestProjectTests %7B%0A%0A  private final Path projects = Path.of(%22src/test-project%22);%0A%0A  @Nested%0A  class Empty %7B%0A%0A    @Test%0A    void build(@TempDir Path work) %7B%0A      assertThrows(AssertionError.class, () -%3E new Probe(projects.resolve(%22empty%22), work));%0A    %7D%0A  %7D%0A%0A  @Nested%0A  class MissingModule %7B%0A%0A    @Test%0A    void build(@TempDir Path work) %7B%0A      var probe = new Probe(projects.resolve(%22missing-module%22), work);%0A      assertEquals(1, probe.bach.main(List.of(%22build%22)), probe.toString());%0A      assertLinesMatch(%0A          List.of(%22%3E%3E INIT %3E%3E%22, %22%3E%3E build(%3Cempty%3E)%22, %22%3E%3E BUILD %3E%3E%22, %22Bach::compile%22),%0A          probe.lines());%0A      assertLinesMatch(%0A          List.of(%0A              %22project.modules=%5Ba%5D%22,%0A              %22project.requires=%5Bb%5D%22,%0A              %22found in library=%5B%5D%22,%0A              %22Missing module(s) are: b%22,%0A              %22Compilation failed.%22),%0A          probe.errors());%0A    %7D%0A  %7D%0A%7D%0A

Build all test projects as part of the integration tests