package org.shedlang.compiler.sourcefiles; 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()); } }