-
Notifications
You must be signed in to change notification settings - Fork 15
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Remove test files for IndexQueryReader
See issue #214.
- Loading branch information
Showing
1 changed file
with
141 additions
and
37 deletions.
There are no files selected for viewing
178 changes: 141 additions & 37 deletions
178
src/test/java/org/aksw/iguana/cc/utils/IndexedQueryReaderTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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<String> expectedStrings | ||
) {} | ||
|
||
public static Collection<TestData> 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<String>(); | ||
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<Arguments> indexWithLineEndingData() throws IOException { | ||
final var out = new ArrayList<Arguments>(); | ||
|
||
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<Arguments> indexWithBlankLinesData() throws IOException { | ||
final var out = new ArrayList<Arguments>(); | ||
|
||
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<Arguments> indexWithCustomSeparatorData() throws IOException { | ||
final var out = new ArrayList<Arguments>(); | ||
|
||
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()); | ||
} | ||
} |