1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.impl;
20
21 import java.io.IOException;
22 import java.nio.file.Files;
23 import java.nio.file.Path;
24 import java.nio.file.PathMatcher;
25 import java.util.HashSet;
26 import java.util.List;
27 import java.util.Set;
28
29 import org.apache.maven.api.services.PathMatcherFactory;
30 import org.junit.jupiter.api.Test;
31 import org.junit.jupiter.api.io.TempDir;
32
33 import static org.junit.jupiter.api.Assertions.assertEquals;
34 import static org.junit.jupiter.api.Assertions.assertFalse;
35 import static org.junit.jupiter.api.Assertions.assertNotNull;
36 import static org.junit.jupiter.api.Assertions.assertSame;
37 import static org.junit.jupiter.api.Assertions.assertThrows;
38 import static org.junit.jupiter.api.Assertions.assertTrue;
39
40
41
42
43 public class DefaultPathMatcherFactoryTest {
44
45 private final PathMatcherFactory factory = new DefaultPathMatcherFactory();
46
47 @Test
48 public void testCreatePathMatcherWithNullBaseDirectory() {
49 assertThrows(NullPointerException.class, () -> {
50 factory.createPathMatcher(null, List.of("**/*.java"), List.of("**/target/**"), false);
51 });
52 }
53
54 @Test
55 public void testCreatePathMatcherBasic(@TempDir Path tempDir) throws IOException {
56
57 Path srcDir = Files.createDirectories(tempDir.resolve("src/main/java"));
58 Path testDir = Files.createDirectories(tempDir.resolve("src/test/java"));
59 Path targetDir = Files.createDirectories(tempDir.resolve("target"));
60
61 Files.createFile(srcDir.resolve("Main.java"));
62 Files.createFile(testDir.resolve("Test.java"));
63 Files.createFile(targetDir.resolve("compiled.class"));
64 Files.createFile(tempDir.resolve("README.txt"));
65
66 PathMatcher matcher = factory.createPathMatcher(tempDir, List.of("**/*.java"), List.of("**/target/**"), false);
67
68 assertNotNull(matcher);
69 assertTrue(matcher.matches(srcDir.resolve("Main.java")));
70 assertTrue(matcher.matches(testDir.resolve("Test.java")));
71 assertFalse(matcher.matches(targetDir.resolve("compiled.class")));
72 assertFalse(matcher.matches(tempDir.resolve("README.txt")));
73 }
74
75 @Test
76 public void testCreatePathMatcherWithDefaultExcludes(@TempDir Path tempDir) throws IOException {
77
78 Path srcDir = Files.createDirectories(tempDir.resolve("src"));
79 Path gitDir = Files.createDirectories(tempDir.resolve(".git"));
80
81 Files.createFile(srcDir.resolve("Main.java"));
82 Files.createFile(gitDir.resolve("config"));
83 Files.createFile(tempDir.resolve(".gitignore"));
84
85 PathMatcher matcher = factory.createPathMatcher(tempDir, List.of("**/*"), null, true);
86
87 assertNotNull(matcher);
88 assertTrue(matcher.matches(srcDir.resolve("Main.java")));
89 assertFalse(matcher.matches(gitDir.resolve("config")));
90 assertFalse(matcher.matches(tempDir.resolve(".gitignore")));
91 }
92
93 @Test
94 public void testCreateIncludeOnlyMatcher(@TempDir Path tempDir) throws IOException {
95 Files.createFile(tempDir.resolve("Main.java"));
96 Files.createFile(tempDir.resolve("README.txt"));
97
98 PathMatcher matcher = factory.createIncludeOnlyMatcher(tempDir, List.of("**/*.java"));
99
100 assertNotNull(matcher);
101 assertTrue(matcher.matches(tempDir.resolve("Main.java")));
102 assertFalse(matcher.matches(tempDir.resolve("README.txt")));
103 }
104
105 @Test
106 public void testCreateExcludeOnlyMatcher(@TempDir Path tempDir) throws IOException {
107
108 Files.createFile(tempDir.resolve("included.txt"));
109 Files.createFile(tempDir.resolve("excluded.txt"));
110
111
112 PathMatcher matcher = factory.createExcludeOnlyMatcher(tempDir, List.of("excluded.txt"), false);
113 assertNotNull(matcher);
114
115
116 assertTrue(matcher.matches(tempDir.resolve("included.txt")));
117
118
119
120
121
122 }
123
124 @Test
125 public void testCreatePathMatcherDefaultMethod(@TempDir Path tempDir) throws IOException {
126 Files.createFile(tempDir.resolve("Main.java"));
127 Files.createFile(tempDir.resolve("Test.java"));
128
129
130 PathMatcher matcher = factory.createPathMatcher(tempDir, List.of("**/*.java"), List.of("**/Test.java"));
131
132 assertNotNull(matcher);
133 assertTrue(matcher.matches(tempDir.resolve("Main.java")));
134 assertFalse(matcher.matches(tempDir.resolve("Test.java")));
135 }
136
137 @Test
138 public void testIncludesAll(@TempDir Path tempDir) {
139 PathMatcher matcher = factory.createPathMatcher(tempDir, null, null, false);
140
141
142
143 assertSame(factory.includesAll(), matcher);
144 }
145
146
147
148
149
150 @Test
151 public void testFactoryWithFileTree(@TempDir Path directory) throws IOException {
152 Path foo = Files.createDirectory(directory.resolve("foo"));
153 Path bar = Files.createDirectory(foo.resolve("bar"));
154 Path baz = Files.createDirectory(directory.resolve("baz"));
155 Files.createFile(directory.resolve("root.txt"));
156 Files.createFile(bar.resolve("leaf.txt"));
157 Files.createFile(baz.resolve("excluded.txt"));
158
159 PathMatcher matcher = factory.createPathMatcher(directory, List.of("**/*.txt"), List.of("baz/**"), false);
160
161 Set<Path> filtered =
162 new HashSet<>(Files.walk(directory).filter(matcher::matches).toList());
163
164 String[] expected = {"root.txt", "foo/bar/leaf.txt"};
165 assertEquals(expected.length, filtered.size());
166
167 for (String path : expected) {
168 assertTrue(filtered.contains(directory.resolve(path)), "Expected path not found: " + path);
169 }
170 }
171
172 @Test
173 public void testNullParameterThrowsNPE(@TempDir Path tempDir) {
174
175 assertThrows(
176 NullPointerException.class,
177 () -> factory.createPathMatcher(null, List.of("*.txt"), List.of("*.tmp"), false));
178
179 assertThrows(
180 NullPointerException.class, () -> factory.createPathMatcher(null, List.of("*.txt"), List.of("*.tmp")));
181
182 assertThrows(NullPointerException.class, () -> factory.createExcludeOnlyMatcher(null, List.of("*.tmp"), false));
183
184 assertThrows(NullPointerException.class, () -> factory.createIncludeOnlyMatcher(null, List.of("*.txt")));
185
186
187 assertThrows(
188 NullPointerException.class, () -> PathSelector.of(null, List.of("*.txt"), List.of("*.tmp"), false));
189
190
191 assertThrows(NullPointerException.class, () -> factory.deriveDirectoryMatcher(null));
192 }
193
194 @Test
195 public void testDeriveDirectoryMatcher(@TempDir Path tempDir) throws IOException {
196
197 Path subDir = Files.createDirectory(tempDir.resolve("subdir"));
198 Path excludedDir = Files.createDirectory(tempDir.resolve("excluded"));
199
200
201 PathMatcher anyMatcher = factory.createPathMatcher(tempDir, List.of("**/*.txt"), null, false);
202 PathMatcher dirMatcher = factory.deriveDirectoryMatcher(anyMatcher);
203
204 assertNotNull(dirMatcher);
205
206 assertTrue(dirMatcher.matches(subDir));
207 assertTrue(dirMatcher.matches(excludedDir));
208
209
210 PathMatcher allMatcher = factory.createPathMatcher(tempDir, null, null, false);
211 PathMatcher dirMatcher2 = factory.deriveDirectoryMatcher(allMatcher);
212
213 assertNotNull(dirMatcher2);
214
215 assertTrue(dirMatcher2.matches(subDir));
216 assertTrue(dirMatcher2.matches(excludedDir));
217
218
219 PathMatcher customMatcher = path -> true;
220 PathMatcher dirMatcher3 = factory.deriveDirectoryMatcher(customMatcher);
221
222 assertNotNull(dirMatcher3);
223
224 assertTrue(dirMatcher3.matches(subDir));
225 assertTrue(dirMatcher3.matches(excludedDir));
226
227
228
229 PathMatcher pathSelectorMatcher = factory.createPathMatcher(tempDir, List.of("*.txt"), List.of("*.tmp"), false);
230 PathMatcher dirMatcher4 = factory.deriveDirectoryMatcher(pathSelectorMatcher);
231
232 assertNotNull(dirMatcher4);
233
234
235 assertTrue(dirMatcher4.matches(subDir)
236 || !dirMatcher4.matches(subDir));
237 }
238 }