diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-06-18 12:15:46 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-06-18 12:15:46 +0100 |
| commit | 9e08a99b327c7d704f533e3535b77a1bbdc04919 (patch) | |
| tree | be0fc9ced28cfec9f14b315e80f5c5fb7d6d45c5 /src/test/java | |
| parent | 0272455c8bb06d5c63220172b2888510aeb7f40b (diff) | |
Run examples automatically
Diffstat (limited to 'src/test/java')
| -rw-r--r-- | src/test/java/org/shedlang/compiler/backends/llvm/LlvmExampleTests.java | 52 |
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())); + } + } + } + )); + } +} |
