1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.enforcer.rules.utils;
20
21 import java.util.ArrayList;
22 import java.util.Collection;
23
24 import org.apache.maven.artifact.Artifact;
25 import org.apache.maven.artifact.DefaultArtifact;
26 import org.apache.maven.artifact.handler.ArtifactHandler;
27 import org.apache.maven.artifact.handler.DefaultArtifactHandler;
28 import org.apache.maven.artifact.versioning.ArtifactVersion;
29 import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
30 import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
31 import org.apache.maven.artifact.versioning.VersionRange;
32 import org.apache.maven.enforcer.rules.utils.ArtifactMatcher.Pattern;
33 import org.apache.maven.enforcer.rules.version.RequireJavaVersion;
34 import org.junit.jupiter.api.Test;
35
36 import static org.junit.jupiter.api.Assertions.assertEquals;
37 import static org.junit.jupiter.api.Assertions.assertFalse;
38 import static org.junit.jupiter.api.Assertions.assertTrue;
39 import static org.junit.jupiter.api.Assertions.fail;
40
41 class TestArtifactMatcher {
42
43 Collection<String> patterns = new ArrayList<>();
44
45 Collection<String> ignorePatterns = new ArrayList<>();
46
47 @Test
48 void testPatternInvalidInput() {
49 try {
50 new Pattern(null);
51 fail("NullPointerException expected.");
52 } catch (NullPointerException ignored) {
53 }
54
55 try {
56 new Pattern("a:b:c:d:e:f:g");
57 fail("IllegalArgumentException expected.");
58 } catch (IllegalArgumentException ignored) {
59 }
60
61 try {
62 new Pattern("a::");
63 fail("IllegalArgumentException expected.");
64 } catch (IllegalArgumentException ignored) {
65 }
66
67 try {
68 Pattern p = new Pattern("*");
69 p.match((Artifact) null);
70 fail("NullPointerException expected.");
71 } catch (NullPointerException ignored) {
72 }
73 }
74
75 @Test
76 void testPattern() throws InvalidVersionSpecificationException {
77 assertPatternDoesMatch("groupId:artifactId:1.0:jar:compile", "groupId", "artifactId", "1.0", "compile", "jar");
78
79 assertPatternDoesMatch("groupId:artifactId:1.0:jar:compile", "groupId", "artifactId", "1.0", "", "");
80
81 assertPatternDoesMatch("groupId:artifactId:1.0", "groupId", "artifactId", "1.0", "", "");
82
83 assertPatternDoesMatch("groupId:artifactId:1.0", "groupId", "artifactId", "1.1", "", "");
84
85 assertPatternDoesNotMatch("groupId:artifactId:[1.0]", "groupId", "artifactId", "1.1", "", "");
86
87 assertPatternDoesMatch("groupId:*:1.0", "groupId", "artifactId", "1.0", "test", "");
88
89 assertPatternDoesMatch("*:*:1.0", "groupId", "artifactId", "1.0", "", "");
90
91 assertPatternDoesMatch("*:artifactId:*", "groupId", "artifactId", "1.0", "", "");
92
93 assertPatternDoesMatch("*", "groupId", "artifactId", "1.0", "", "");
94
95
96 assertPatternDoesMatchWithClassifier(
97 "*:*:*:jar:compile:tests", "groupId", "artifactId", "1.0", "", "", "tests");
98
99
100 assertPatternDoesMatch("*upId", "groupId", "artifactId", "1.0", "", "");
101
102 assertPatternDoesMatch("gr*pId:?rt?f?ct?d:1.0", "groupId", "artifactId", "1.0", "", "");
103
104 assertPatternDoesMatch("org.apache.*:maven-*:*", "org.apache.maven", "maven-core", "3.0", "", "");
105 }
106
107 @Test
108 void testMatch() {
109 patterns.add("groupId:artifactId:1.0");
110 patterns.add("*:anotherArtifact");
111
112 ignorePatterns.add("badGroup:*:*:test");
113 ignorePatterns.add("*:anotherArtifact:1.1");
114
115 ArtifactMatcher matcher = new ArtifactMatcher(patterns, ignorePatterns);
116
117 executeMatch(matcher, "groupId", "artifactId", "1.0", "", "", true);
118
119 executeMatch(matcher, "groupId", "anotherArtifact", "1.0", "", "", true);
120
121 executeMatch(matcher, "badGroup", "artifactId", "1.0", "", "test", false);
122
123 executeMatch(matcher, "badGroup", "anotherArtifact", "1.0", "", "", true);
124
125 executeMatch(matcher, "groupId", "anotherArtifact", "1.1", "", "", false);
126 }
127
128 private void assertPatternDoesMatch(
129 final String pattern,
130 final String groupId,
131 final String artifactId,
132 final String versionRange,
133 final String scope,
134 final String type) {
135 assertPatternDoesMatchWithClassifier(pattern, groupId, artifactId, versionRange, scope, type, "");
136 }
137
138 private void assertPatternDoesNotMatch(
139 final String pattern,
140 final String groupId,
141 final String artifactId,
142 final String versionRange,
143 final String scope,
144 final String type) {
145 assertPatternDoesNotMatchWithClassifier(pattern, groupId, artifactId, versionRange, scope, type, "");
146 }
147
148 private void assertPatternDoesMatchWithClassifier(
149 final String pattern,
150 final String groupId,
151 final String artifactId,
152 final String versionRange,
153 final String scope,
154 final String type,
155 final String classifier) {
156 assertTrue(new ArtifactMatcher.Pattern(pattern)
157 .match(createMockArtifact(groupId, artifactId, versionRange, scope, type, classifier)));
158 }
159
160 private void assertPatternDoesNotMatchWithClassifier(
161 final String pattern,
162 final String groupId,
163 final String artifactId,
164 final String versionRange,
165 final String scope,
166 final String type,
167 final String classifier) {
168 assertFalse(new ArtifactMatcher.Pattern(pattern)
169 .match(createMockArtifact(groupId, artifactId, versionRange, scope, type, classifier)));
170 }
171
172 private void executeMatch(
173 final ArtifactMatcher matcher,
174 final String groupId,
175 final String artifactId,
176 final String versionRange,
177 final String scope,
178 final String type,
179 final boolean expectedResult) {
180 assertEquals(
181 expectedResult, matcher.match(createMockArtifact(groupId, artifactId, versionRange, scope, type, "")));
182 }
183
184 private static Artifact createMockArtifact(
185 final String groupId,
186 final String artifactId,
187 final String versionRange,
188 final String scope,
189 final String type,
190 final String classifier) {
191 ArtifactHandler artifactHandler = new DefaultArtifactHandler();
192
193 VersionRange version = VersionRange.createFromVersion(versionRange);
194 return new DefaultArtifact(groupId, artifactId, version, scope, type, classifier, artifactHandler);
195 }
196
197
198
199
200
201
202 @Test
203 void testContainsVersion() throws InvalidVersionSpecificationException {
204 ArtifactVersion version = new DefaultArtifactVersion("2.0.5");
205
206 assertTrue(ArtifactMatcher.containsVersion(VersionRange.createFromVersionSpec("[2.0.5,)"), version));
207 assertTrue(ArtifactMatcher.containsVersion(VersionRange.createFromVersionSpec("[2.0.4,)"), version));
208 assertTrue(ArtifactMatcher.containsVersion(VersionRange.createFromVersionSpec("[2.0.4,2.0.5]"), version));
209 assertTrue(ArtifactMatcher.containsVersion(VersionRange.createFromVersionSpec("[2.0.4,2.0.6]"), version));
210 assertTrue(ArtifactMatcher.containsVersion(VersionRange.createFromVersionSpec("[2.0.4,2.0.6)"), version));
211 assertTrue(ArtifactMatcher.containsVersion(VersionRange.createFromVersionSpec("[2.0,)"), version));
212 assertTrue(ArtifactMatcher.containsVersion(VersionRange.createFromVersionSpec("[2.0.0,)"), version));
213
214 assertFalse(ArtifactMatcher.containsVersion(VersionRange.createFromVersionSpec("[2.0.4,2.0.5)"), version));
215 assertFalse(ArtifactMatcher.containsVersion(VersionRange.createFromVersionSpec("[2.0.6,)"), version));
216 assertFalse(ArtifactMatcher.containsVersion(VersionRange.createFromVersionSpec("(2.0.5,)"), version));
217
218
219 assertTrue(ArtifactMatcher.containsVersion(VersionRange.createFromVersionSpec("2.0"), version));
220 assertTrue(ArtifactMatcher.containsVersion(VersionRange.createFromVersionSpec("2.0.4"), version));
221 assertTrue(ArtifactMatcher.containsVersion(VersionRange.createFromVersionSpec("2.0.5"), version));
222
223 assertFalse(ArtifactMatcher.containsVersion(VersionRange.createFromVersionSpec("2.0.6"), version));
224
225 version = new DefaultArtifactVersion("1.5.0-7");
226 assertTrue(ArtifactMatcher.containsVersion(VersionRange.createFromVersionSpec("[1.5.0,)"), version));
227 assertTrue(ArtifactMatcher.containsVersion(VersionRange.createFromVersionSpec("[1.5,1.6)"), version));
228
229 version = new DefaultArtifactVersion(RequireJavaVersion.normalizeJDKVersion("1.5.0-07"));
230 assertTrue(ArtifactMatcher.containsVersion(VersionRange.createFromVersionSpec("[1.5.0,)"), version));
231 assertTrue(ArtifactMatcher.containsVersion(VersionRange.createFromVersionSpec("[1.5,1.6)"), version));
232
233
234 version = new DefaultArtifactVersion("2.1.0-M1-RC12");
235 assertTrue(ArtifactMatcher.containsVersion(VersionRange.createFromVersionSpec("[2.1.0-M1-RC12,)"), version));
236 assertFalse(ArtifactMatcher.containsVersion(VersionRange.createFromVersionSpec("[2.1.0-M1,)"), version));
237 }
238 }