1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
package edu.caltech.cs2.helpers;
import org.junit.jupiter.api.extension.ExtensionContext;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.ArgumentsProvider;
import org.junit.jupiter.params.support.AnnotationConsumer;
import org.junit.platform.commons.util.Preconditions;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.stream.Stream;
import static org.junit.jupiter.api.Assertions.fail;
public class FileSourceProvider implements ArgumentsProvider, AnnotationConsumer<FileSource> {
private String[] inputs;
private String[] outputFiles;
@Override
public void accept(FileSource source) {
this.inputs = source.inputs();//Stream.of(source.inputs()).map((x) -> Arrays.asList(x.split("\\|"))).collect(Collectors.toList());
this.outputFiles = source.outputFiles();
}
@Override
public Stream<? extends Arguments> provideArguments(ExtensionContext context) {
Arguments[] args = new Arguments[this.outputFiles.length];
for (int i = 0; i < this.outputFiles.length; i++) {
Object inputArgs = null;
String sArgs = this.inputs[i];
if (sArgs.startsWith("{")) {
sArgs = sArgs.substring(1, sArgs.length() - 1);
String[] argMaps = sArgs.split(", ");
Map<String, String> m = new HashMap<>();
for (String s : argMaps) {
String[] pieces = s.split(" = ");
m.put(pieces[0], pieces[1]);
}
inputArgs = m;
}
else {
inputArgs = sArgs;
}
Scanner in = getScanner(this.outputFiles[i]);
String output = in.useDelimiter("\\Z").next();
args[i] = Arguments.arguments(inputArgs, output);
}
return Stream.of(args);
}
private Scanner getScanner(String resource) {
Preconditions.notBlank(resource, "Test file " + resource + " must not be null or blank");
try {
return new Scanner(new File("tests/data/" + resource));
} catch (FileNotFoundException e) {
fail("Test file " + resource + " does not exist");
}
return null;
}
}