From 02674bf8ca706211596be5c5db9c95dd36593392 Mon Sep 17 00:00:00 2001 From: Nick Molcanov <32801560+nck-mlcnv@users.noreply.github.com> Date: Sat, 4 Nov 2023 22:10:37 +0100 Subject: [PATCH] Remove test files for IndexQueryReader See issue #214. --- .../cc/utils/IndexedQueryReaderTest.java | 178 ++++++++++++++---- 1 file changed, 141 insertions(+), 37 deletions(-) diff --git a/src/test/java/org/aksw/iguana/cc/utils/IndexedQueryReaderTest.java b/src/test/java/org/aksw/iguana/cc/utils/IndexedQueryReaderTest.java index 7833f140..b279c815 100644 --- a/src/test/java/org/aksw/iguana/cc/utils/IndexedQueryReaderTest.java +++ b/src/test/java/org/aksw/iguana/cc/utils/IndexedQueryReaderTest.java @@ -1,65 +1,169 @@ package org.aksw.iguana.cc.utils; -import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; -import org.junit.jupiter.params.provider.ValueSource; import java.io.IOException; +import java.io.StringWriter; +import java.nio.file.Files; import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.Collection; +import java.util.ArrayList; import java.util.List; import static org.junit.jupiter.api.Assertions.assertEquals; public class IndexedQueryReaderTest { - @org.junit.jupiter.params.ParameterizedTest - @ValueSource(strings = {"src/test/resources/readLineTestFile1.txt", "src/test/resources/readLineTestFile2.txt", "src/test/resources/readLineTestFile3.txt"}) - public void testIndexingWithLineEndings(String path) throws IOException { - var reader = IndexedQueryReader.make(Paths.get(path)); - assertEquals("line 1", reader.readQuery(0)); - assertEquals("line 2", reader.readQuery(1)); - assertEquals("line 3", reader.readQuery(2)); - assertEquals("line 4", reader.readQuery(3)); - } + private static Path tempDir; - @Test - public void testIndexingWithBlankLines() throws IOException { - IndexedQueryReader reader = IndexedQueryReader.makeWithEmptyLines(Paths.get("src/test/resources/utils/indexingtestfile3.txt")); - String le = FileUtils.getLineEnding(Paths.get("src/test/resources/utils/indexingtestfile3.txt")); + @BeforeAll + public static void createTestFolder() throws IOException { + tempDir = Files.createTempDirectory("iguana-indexed-query-reader-test"); + } - assertEquals(" line 1" + le + "line 2", reader.readQuery(0)); - assertEquals("line 3", reader.readQuery(1)); - assertEquals("line 4" + le + "line 5", reader.readQuery(2)); + @AfterAll + public static void removeData() throws IOException { + org.apache.commons.io.FileUtils.deleteDirectory(tempDir.toFile()); } private record TestData ( - Path filepath, - String separator, - String[] expectedStrings + Path filepath, + String separator, + List expectedStrings ) {} - public static Collection data() throws IOException { - // all the files should have the same line ending - String le = FileUtils.getLineEnding(Path.of("src/test/resources/utils/indexingtestfile1.txt")); - return List.of( - new TestData(Path.of("src/test/resources/utils/indexingtestfile1.txt"), "#####" + le, new String[]{"line 1" + le, le + "line 2" + le}), - new TestData(Path.of("src/test/resources/utils/indexingtestfile2.txt"), "#####" + le, new String[]{"line 0" + le, "line 1" + le + "#####"}), - new TestData(Path.of("src/test/resources/utils/indexingtestfile4.txt"), "###$", new String[]{"a#", "b"}), - new TestData(Path.of("src/test/resources/utils/indexingtestfile5.txt"), "211", new String[]{"a21", "b"}) - ); + private static TestData createTestFile(String content, String separator, boolean emptyBegin, boolean leadingEmptyLine, int number, int spacing) throws IOException { + final var file = Files.createTempFile(tempDir, "line", "queries.txt"); + final var writer = new StringWriter(); + final var lines = new ArrayList(); + for (int i = (emptyBegin ? -1 : 0); i < (number * spacing) + 1; i++) { + if (i % spacing == 0) { + writer.append(content + i); + lines.add(content + i); + } + if (leadingEmptyLine || i != number * spacing) { + writer.append(separator); + } + } + Files.writeString(file, writer.toString()); + return new TestData(file, separator, lines); + } + + public static List indexWithLineEndingData() throws IOException { + final var out = new ArrayList(); + + final var numbers = List.of(1, 5, 10); + final var spacings = List.of(1, 2, 5, 10, 100, 1000000); + final var separators = List.of("\n", "\r\n", "\r"); + final var emptyBegins = List.of(true, false); + final var leadingEmptyLines = List.of(true, false); + + // cartesian product + for (var number : numbers) { + for (var spacing : spacings) { + for (var separator : separators) { + for (var emptyBegin : emptyBegins) { + for (var leadingEmptyLine : leadingEmptyLines) { + out.add(Arguments.of(createTestFile("line: ", separator, emptyBegin, leadingEmptyLine, number, spacing))); + } + } + } + } + } + + return out; + } + + public static List indexWithBlankLinesData() throws IOException { + final var out = new ArrayList(); + + final var numbers = List.of(1, 5, 10, 100, 10000); + final var spacings = List.of(2); + final var separators = List.of("\n", "\r\n", "\r"); + final var emptyBegins = List.of(false); + final var leadingEmptyLines = List.of(false); + + // cartesian product + for (var number : numbers) { + for (var spacing : spacings) { + for (var separator : separators) { + for (var emptyBegin : emptyBegins) { + for (var leadingEmptyLine : leadingEmptyLines) { + out.add(Arguments.of(createTestFile(String.format("this is %s line: ", separator), separator, emptyBegin, leadingEmptyLine, number, spacing))); + out.add(Arguments.of(createTestFile("line: ", separator, emptyBegin, leadingEmptyLine, number, spacing))); + out.add(Arguments.of(createTestFile(String.format("make this %s three lines %s long: ", separator, separator), separator, emptyBegin, leadingEmptyLine, number, spacing))); + } + } + } + } + } + + return out; + } + + public static List indexWithCustomSeparatorData() throws IOException { + final var out = new ArrayList(); + + final var numbers = List.of(1, 5, 10, 100, 10000); + final var spacings = List.of(1); + final var separators = List.of("\n", "\r\n", "\r", "\n+++\n", "\t\t\t", "test", "###$"); + final var emptyBegins = List.of(false); + final var leadingEmptyLines = List.of(false); + + // cartesian product + for (var number : numbers) { + for (var spacing : spacings) { + for (var separator : separators) { + for (var emptyBegin : emptyBegins) { + for (var leadingEmptyLine : leadingEmptyLines) { + out.add(Arguments.of(createTestFile("line: ", separator, emptyBegin, leadingEmptyLine, number, spacing))); + } + } + } + } + } + + final var file1 = Files.createTempFile(tempDir, "iguana", "queries.txt"); + final var file2 = Files.createTempFile(tempDir, "iguana", "queries.txt"); + Files.writeString(file1, "a####$b"); + Files.writeString(file2, "a21212111b"); + + out.add(Arguments.of(new TestData(file1, "###$", List.of("a#", "b")))); + out.add(Arguments.of(new TestData(file2, "211", List.of("a2121", "1b")))); + + return out; + } + + @ParameterizedTest + @MethodSource("indexWithLineEndingData") + public void testIndexingWithLineEndings(TestData data) throws IOException { + var reader = IndexedQueryReader.make(data.filepath); + for (int i = 0; i < data.expectedStrings.size(); i++) { + assertEquals(data.expectedStrings.get(i), reader.readQuery(i)); + } + assertEquals(data.expectedStrings.size(), reader.size()); + } + + @ParameterizedTest + @MethodSource("indexWithBlankLinesData") + public void testIndexingWithBlankLines(TestData data) throws IOException { + IndexedQueryReader reader = IndexedQueryReader.makeWithEmptyLines(data.filepath); + for (int i = 0; i < data.expectedStrings.size(); i++) { + assertEquals(data.expectedStrings.get(i), reader.readQuery(i)); + } + assertEquals(data.expectedStrings.size(), reader.size()); } @ParameterizedTest - @MethodSource("data") + @MethodSource("indexWithCustomSeparatorData") public void testIndexingWithCustomSeparator(TestData data) throws IOException { IndexedQueryReader reader = IndexedQueryReader.makeWithStringSeparator(data.filepath, data.separator); - for (int i = 0; i < data.expectedStrings.length; i++) { - String read = reader.readQuery(i); - assertEquals(data.expectedStrings[i], read); + for (int i = 0; i < data.expectedStrings.size(); i++) { + assertEquals(data.expectedStrings.get(i), reader.readQuery(i)); } - assertEquals(data.expectedStrings.length, reader.readQueries().size()); + assertEquals(data.expectedStrings.size(), reader.size()); } }