aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-06-18 12:15:46 +0100
committerMichael Williamson <mike@zwobble.org>2023-06-18 12:15:46 +0100
commit9e08a99b327c7d704f533e3535b77a1bbdc04919 (patch)
treebe0fc9ced28cfec9f14b315e80f5c5fb7d6d45c5 /src/test/java
parent0272455c8bb06d5c63220172b2888510aeb7f40b (diff)
Run examples automatically
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/backends/llvm/LlvmExampleTests.java52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/test/java/org/shedlang/compiler/backends/llvm/LlvmExampleTests.java b/src/test/java/org/shedlang/compiler/backends/llvm/LlvmExampleTests.java
new file mode 100644
index 00000000..6e57665f
--- /dev/null
+++ b/src/test/java/org/shedlang/compiler/backends/llvm/LlvmExampleTests.java
@@ -0,0 +1,52 @@
+package org.shedlang.compiler.backends.llvm;
+
+import org.junit.jupiter.api.DynamicTest;
+import org.junit.jupiter.api.TestFactory;
+import org.shedlang.compiler.ShedCompiler;
+import org.shedlang.compiler.config.ProjectConfig;
+import org.shedlang.compiler.filesystem.ShedCompilerFiles;
+
+import java.nio.charset.StandardCharsets;
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import static org.zwobble.precisely.AssertThat.assertThat;
+import static org.zwobble.precisely.Matchers.equalTo;
+
+public class LlvmExampleTests {
+ @TestFactory
+ public Stream<DynamicTest> tests() {
+ var examplesRoot = ShedCompilerFiles.getRoot().resolve("examples");
+ return Arrays.stream(examplesRoot.toFile()
+ .listFiles(file -> file.isDirectory()))
+ .map(exampleDirectory -> DynamicTest.dynamicTest(
+ exampleDirectory.getName(),
+ () -> {
+ var compiler = new ShedCompiler();
+ compiler.compile(exampleDirectory.toPath(), new LlvmBackend());
+
+ var config = ProjectConfig.read(exampleDirectory.toPath());
+ for (var example : config.examples()) {
+ var process = new ProcessBuilder()
+ .command(List.of(config.targetDir().resolve(example.bin()).toString()))
+ .start();
+
+ var exitCode = process.waitFor();
+
+ try (
+ var stdoutReader = process.inputReader(StandardCharsets.UTF_8);
+ var stderrReader = process.errorReader(StandardCharsets.UTF_8)
+ ) {
+ var stdout = stdoutReader.lines().collect(Collectors.joining());
+ var stderr = stderrReader.lines().collect(Collectors.joining());
+
+ assertThat(stderr, equalTo(""));
+ assertThat(stdout, equalTo(example.expectedOutput()));
+ }
+ }
+ }
+ ));
+ }
+}