From 50730c7784ee742c8c148d4d5b07c4ea312a8e58 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 12 Jan 2025 17:29:05 +0000 Subject: Improve collection of source files --- .../org/shedlang/compiler/SourceFilesTests.java | 57 ++++++++++++++++++++++ .../java/org/shedlang/compiler/TemporaryFiles.java | 14 ++++++ 2 files changed, 71 insertions(+) create mode 100644 src/test/java/org/shedlang/compiler/SourceFilesTests.java create mode 100644 src/test/java/org/shedlang/compiler/TemporaryFiles.java (limited to 'src/test/java') diff --git a/src/test/java/org/shedlang/compiler/SourceFilesTests.java b/src/test/java/org/shedlang/compiler/SourceFilesTests.java new file mode 100644 index 00000000..d904d057 --- /dev/null +++ b/src/test/java/org/shedlang/compiler/SourceFilesTests.java @@ -0,0 +1,57 @@ +package org.shedlang.compiler; + +import org.junit.jupiter.api.Test; +import org.shedlang.compiler.types.NamespaceName; + +import java.io.IOException; +import java.nio.file.Files; + +import static org.shedlang.compiler.TemporaryFiles.createTemporaryTestDirectory; +import static org.zwobble.precisely.AssertThat.assertThat; +import static org.zwobble.precisely.Matchers.*; + +public class SourceFilesTests { + @Test + public void whenDirectoryIsEmptyThenNoSourceFilesAreFound() throws IOException { + var sourceDirectory = createTemporaryTestDirectory("SourceFilesTests"); + + var sourceFiles = SourceFiles.collectSourceFiles(sourceDirectory); + + assertThat(sourceFiles, containsExactly()); + } + + @Test + public void whenDirectoryContainsFileWithShedExtensionThenSourceFileIsFound() throws IOException { + var sourceDirectory = createTemporaryTestDirectory("SourceFilesTests"); + Files.createFile(sourceDirectory.resolve("One.shed")); + + var sourceFiles = SourceFiles.collectSourceFiles(sourceDirectory); + + assertThat(sourceFiles, containsExactly( + allOf( + has("path", x -> x.path(), equalTo(sourceDirectory.resolve("One.shed"))), + has("namespaceName", x -> x.namespaceName(), equalTo(NamespaceName.of("One"))) + ) + )); + } + + @Test + public void whenDirectoryContainsFileWithNonShedExtensionThenNoSourceFileIsFound() throws IOException { + var sourceDirectory = createTemporaryTestDirectory("SourceFilesTests"); + Files.createFile(sourceDirectory.resolve("One.she")); + + var sourceFiles = SourceFiles.collectSourceFiles(sourceDirectory); + + assertThat(sourceFiles, containsExactly()); + } + + @Test + public void whenFileHasMultipleThenExtensionsThenFileIsNotTreatedAsSourceFile() throws IOException { + var sourceDirectory = createTemporaryTestDirectory("SourceFilesTests"); + Files.createFile(sourceDirectory.resolve("One.Two.shed")); + + var sourceFiles = SourceFiles.collectSourceFiles(sourceDirectory); + + assertThat(sourceFiles, containsExactly()); + } +} diff --git a/src/test/java/org/shedlang/compiler/TemporaryFiles.java b/src/test/java/org/shedlang/compiler/TemporaryFiles.java new file mode 100644 index 00000000..bfe084c6 --- /dev/null +++ b/src/test/java/org/shedlang/compiler/TemporaryFiles.java @@ -0,0 +1,14 @@ +package org.shedlang.compiler; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; + +public class TemporaryFiles { + private TemporaryFiles() {} + + public static Path createTemporaryTestDirectory(String name) throws IOException { + Files.createDirectories(Path.of("tests-tmp")); + return Files.createTempDirectory(Path.of("tests-tmp"), name); + } +} -- cgit v1.2.3