1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.rat.analysis.matchers;
20
21 import static org.junit.jupiter.api.Assertions.assertEquals;
22 import static org.junit.jupiter.api.Assertions.assertFalse;
23
24 import java.util.ArrayList;
25 import java.util.Arrays;
26 import java.util.HashSet;
27 import java.util.List;
28 import java.util.Set;
29 import java.util.stream.Stream;
30
31 import org.apache.rat.analysis.IHeaderMatcher.State;
32 import org.junit.jupiter.params.ParameterizedTest;
33 import org.junit.jupiter.params.provider.Arguments;
34 import org.junit.jupiter.params.provider.MethodSource;
35
36 public class CopyrightMatcherTest {
37 private final static int NAME = 0;
38 private final static int TEXT = 1;
39
40 private static String[] prefix = { "Copyright", "©", "(C)", "(c)" };
41
42 private final static String[] D = { "-d", " 1990-1991" };
43 private final static String[] DO = { "-d-o", " 1990-1991 an owner" };
44 private final static String[] OD = { "-o-d", " an owner 1990-1991" };
45 private final static String[] DOS = { "-d-o-s", " 1990 - 1991 an owner" };
46 private final static String[] ODS = { "-o-d-s", " an owner 1990 - 1991" };
47 private final static String[] S = { "-s", " 1990" };
48 private final static String[] O = { "-o", " an owner" };
49 private final static String[] OS = { "-o-s", " an owner 1990" };
50 private final static String[] SO = { "-s-o", " 1990 an owner" };
51
52 private static final int TOTAL_TESTS = prefix.length * 9;
53
54 static Arguments startStopOwner = Arguments.of("start-stop-owner", "1990", "1991", "an owner",
55 expandResults( DO, OD, DOS, ODS) , expandResults( D, S, O, OS, SO ));
56 static Arguments startOwner = Arguments.of( "start-owner", "1990", null, "an owner",
57 expandResults( OS, SO, OD, ODS ), expandResults( D, DO, DOS, S, O ) );
58 static Arguments start = Arguments.of("start", "1990", null, null, expandResults(D, DO, DOS, S, SO ),
59 expandResults(OD, ODS, O, OS ) );
60 static Arguments owner = Arguments.of("owner", null, null, "an owner", expandResults( O, OD, ODS, OS ),
61 expandResults( DO, DOS, S, D, SO ) );
62 static Arguments nada = Arguments.of("nada", null, null, null, expandResults( D, DO, DOS, S, SO ),
63 expandResults( OD, ODS, O, OS ) );
64
65
66
67 public static Stream<Arguments> parameterProvider() {
68 return Stream.of( startStopOwner, startOwner, start, owner, nada);
69 }
70
71 private static String[][] expandResults( String[]...args) {
72 List<String[]> arry = new ArrayList<>();
73 for (String pfx : prefix) {
74 Arrays.stream(args).map(origin -> new String[] { pfx + origin[0], pfx + origin[1] })
75 .forEach(arry::add);
76 }
77 return arry.toArray(new String[arry.size()][2]);
78 }
79
80 private static void verify(String testName, String[][] pass, String[][] fail) {
81 assertEquals(TOTAL_TESTS, pass.length + fail.length, "Wrong number of pass/fail tests");
82 Set<String> passSet = new HashSet<String>();
83 Arrays.stream(pass).forEach(s -> passSet.add(s[0]));
84 Set<String> failSet = new HashSet<String>();
85 Arrays.stream(fail).forEach(s -> failSet.add(s[0]));
86 for (String s : passSet) {
87 assertFalse(failSet.contains(s), ()->String.format("%s is in both pass and fail sets for %s", s, testName));
88 }
89 }
90
91 @ParameterizedTest
92 @MethodSource("parameterProvider")
93 public void testPass(String testName, String start, String stop, String owner, String[][] pass,
94 String[][] fail) {
95 verify(testName, pass, fail);
96 CopyrightMatcher matcher = new CopyrightMatcher(start, stop, owner);
97 for (String[] target : pass) {
98 assertEquals(State.i, matcher.currentState(), ()->String.format("%s:%s failed", testName, target[NAME]));
99 assertEquals(State.t, matcher.matches(target[TEXT]), ()->String.format("%s:%s failed", testName, target[NAME]));
100 matcher.reset();
101 assertEquals(State.i, matcher.currentState(),()->String.format("%s:%s failed", testName, target[NAME]));
102 }
103 }
104
105 @ParameterizedTest
106 @MethodSource("parameterProvider")
107 public void testFail(String testName, String start, String stop, String owner, String[][] pass,
108 String[][] fail) {
109 verify(testName, pass, fail);
110 CopyrightMatcher matcher = new CopyrightMatcher(start, stop, owner);
111 for (String[] target : fail) {
112 assertEquals( State.i, matcher.currentState(), ()->String.format("%s:%s passed", testName, target[NAME]));
113 assertEquals( State.i, matcher.matches(target[TEXT]), ()->String.format("%s:%s passed", testName, target[NAME]));
114 assertEquals( State.f, matcher.finalizeState(), ()->String.format("%s:%s passed", testName, target[NAME]));
115 matcher.reset();
116 assertEquals( State.i, matcher.currentState(), ()->String.format("%s:%s passed", testName, target[NAME]));
117 }
118 }
119 }