1 package org.codehaus.plexus.compiler.util.scan;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 import java.io.File;
20 import java.util.Collections;
21 import java.util.Set;
22
23 import org.codehaus.plexus.compiler.util.scan.mapping.SingleTargetSourceMapping;
24 import org.codehaus.plexus.compiler.util.scan.mapping.SourceMapping;
25 import org.codehaus.plexus.compiler.util.scan.mapping.SuffixMapping;
26 import org.junit.jupiter.api.BeforeEach;
27 import org.junit.jupiter.api.Test;
28
29 import static org.junit.jupiter.api.Assertions.assertEquals;
30 import static org.junit.jupiter.api.Assertions.assertTrue;
31
32
33
34
35
36 public class StaleSourceScannerTest extends AbstractSourceInclusionScannerTest {
37
38 @BeforeEach
39 public void setUp() throws Exception {
40 scanner = new StaleSourceScanner();
41 }
42
43 @Test
44 public void testWithDefaultConstructorShouldFindOneStaleSource() throws Exception {
45 File base = new File(getTestBaseDir(), "test1");
46
47 long now = System.currentTimeMillis();
48
49 File targetFile = new File(base, "file.xml");
50
51 writeFile(targetFile);
52
53 targetFile.setLastModified(now - 60000);
54
55 File sourceFile = new File(base, "file.java");
56
57 writeFile(sourceFile);
58
59 sourceFile.setLastModified(now);
60
61 SuffixMapping mapping = new SuffixMapping(".java", ".xml");
62
63 scanner.addSourceMapping(mapping);
64
65 Set<File> result = scanner.getIncludedSources(base, base);
66
67 assertEquals(1, result.size(), "wrong number of stale sources returned.");
68
69 assertTrue(result.contains(sourceFile), "expected stale source file not found in result");
70 }
71
72 @Test
73 public void testWithDefaultConstructorShouldNotFindStaleSources() throws Exception {
74 File base = new File(getTestBaseDir(), "test2");
75
76 long now = System.currentTimeMillis();
77
78 File sourceFile = new File(base, "file.java");
79
80 writeFile(sourceFile);
81
82 sourceFile.setLastModified(now - 60000);
83
84 File targetFile = new File(base, "file.xml");
85
86 writeFile(targetFile);
87
88 targetFile.setLastModified(now);
89
90 SuffixMapping mapping = new SuffixMapping(".java", ".xml");
91
92 scanner.addSourceMapping(mapping);
93
94 Set<File> result = scanner.getIncludedSources(base, base);
95
96 assertEquals(0, result.size(), "wrong number of stale sources returned.");
97
98 assertTrue(result.isEmpty(), "expected stale source file not found in result");
99 }
100
101 @Test
102 public void testWithDefaultConstructorShouldFindStaleSourcesBecauseOfMissingTargetFile() throws Exception {
103 File base = new File(getTestBaseDir(), "test3");
104
105 File sourceFile = new File(base, "file.java");
106
107 writeFile(sourceFile);
108
109 SuffixMapping mapping = new SuffixMapping(".java", ".xml");
110
111 scanner.addSourceMapping(mapping);
112
113 Set<File> result = scanner.getIncludedSources(base, base);
114
115 assertEquals(1, result.size(), "wrong number of stale sources returned.");
116
117 assertTrue(result.contains(sourceFile), "expected stale source file not found in result");
118 }
119
120 @Test
121 public void testWithDefaultConstructorShouldFindStaleSourcesOneBecauseOfMissingTargetAndOneBecauseOfStaleTarget()
122 throws Exception {
123 File base = new File(getTestBaseDir(), "test4");
124
125 long now = System.currentTimeMillis();
126
127 File targetFile = new File(base, "file2.xml");
128
129 writeFile(targetFile);
130
131 targetFile.setLastModified(now - 60000);
132
133 File sourceFile = new File(base, "file.java");
134
135 writeFile(sourceFile);
136
137 File sourceFile2 = new File(base, "file2.java");
138
139 writeFile(sourceFile2);
140
141 sourceFile2.setLastModified(now);
142
143 SuffixMapping mapping = new SuffixMapping(".java", ".xml");
144
145 scanner.addSourceMapping(mapping);
146
147 Set<File> result = scanner.getIncludedSources(base, base);
148
149 assertEquals(2, result.size(), "wrong number of stale sources returned.");
150
151 assertEquals(2, result.size());
152 assertTrue(
153 result.contains(sourceFile) && result.contains(sourceFile2),
154 "expected stale source file not found in result");
155 }
156
157 @Test
158 public void testWithDefaultConstructorShouldFindOneStaleSourcesWithStaleTargetAndOmitUpToDateSource()
159 throws Exception {
160 File base = new File(getTestBaseDir(), "test5");
161
162 long now = System.currentTimeMillis();
163
164
165
166
167
168 File targetFile = new File(base, "file.xml");
169
170 writeFile(targetFile);
171
172 targetFile.setLastModified(now - 60000);
173
174
175 File sourceFile = new File(base, "file.java");
176
177 writeFile(sourceFile);
178
179 sourceFile.setLastModified(now);
180
181
182
183
184
185 File sourceFile2 = new File(base, "file2.java");
186
187 writeFile(sourceFile2);
188
189 sourceFile2.setLastModified(now - 60000);
190
191
192 File targetFile2 = new File(base, "file2.xml");
193
194 writeFile(targetFile2);
195
196 targetFile2.setLastModified(now);
197
198 SuffixMapping mapping = new SuffixMapping(".java", ".xml");
199
200 scanner.addSourceMapping(mapping);
201
202 Set<File> result = scanner.getIncludedSources(base, base);
203
204 assertEquals(1, result.size(), "wrong number of stale sources returned.");
205
206 assertTrue(result.contains(sourceFile), "expected stale source file not found in result");
207 }
208
209 @Test
210 public void testConstructedWithMsecsShouldReturnOneSourceFileOfTwoDueToLastMod() throws Exception {
211 File base = new File(getTestBaseDir(), "test6");
212
213 long now = System.currentTimeMillis();
214
215 File targetFile = new File(base, "file.xml");
216
217 writeFile(targetFile);
218
219
220 targetFile.setLastModified(now - 8000);
221
222 File sourceFile = new File(base, "file.java");
223
224 writeFile(sourceFile);
225
226
227 sourceFile.setLastModified(now);
228
229 File targetFile2 = new File(base, "file2.xml");
230
231 writeFile(targetFile2);
232
233 targetFile2.setLastModified(now - 12000);
234
235 File sourceFile2 = new File(base, "file2.java");
236
237 writeFile(sourceFile2);
238
239
240 sourceFile2.setLastModified(now);
241
242 SuffixMapping mapping = new SuffixMapping(".java", ".xml");
243
244 scanner = new StaleSourceScanner(10000);
245
246 scanner.addSourceMapping(mapping);
247
248 Set<File> result = scanner.getIncludedSources(base, base);
249
250 assertEquals(1, result.size(), "wrong number of stale sources returned.");
251
252 assertTrue(result.contains(sourceFile2), "expected stale source file not found in result");
253 }
254
255 @Test
256 public void testConstructedWithMsecsIncludesAndExcludesShouldReturnOneSourceFileOfThreeDueToIncludePattern()
257 throws Exception {
258 File base = new File(getTestBaseDir(), "test7");
259
260 long now = System.currentTimeMillis();
261
262 File targetFile = new File(base, "file.xml");
263
264 writeFile(targetFile);
265
266
267 targetFile.setLastModified(now - 12000);
268
269 File sourceFile = new File(base, "file.java");
270
271 writeFile(sourceFile);
272
273
274 sourceFile.setLastModified(now);
275
276 File targetFile2 = new File(base, "file2.xml");
277
278 writeFile(targetFile2);
279
280 targetFile2.setLastModified(now - 12000);
281
282 File sourceFile2 = new File(base, "file2.java");
283
284 writeFile(sourceFile2);
285
286
287 sourceFile2.setLastModified(now);
288
289 File targetFile3 = new File(base, "file3.xml");
290
291 writeFile(targetFile3);
292
293 targetFile3.setLastModified(now - 12000);
294
295 File sourceFile3 = new File(base, "file3.java");
296
297 writeFile(sourceFile3);
298
299
300 sourceFile3.setLastModified(now);
301
302 SuffixMapping mapping = new SuffixMapping(".java", ".xml");
303
304 scanner = new StaleSourceScanner(0, Collections.singleton("*3.java"), Collections.<String>emptySet());
305
306 scanner.addSourceMapping(mapping);
307
308 Set<File> result = scanner.getIncludedSources(base, base);
309
310 assertEquals(1, result.size(), "wrong number of stale sources returned.");
311
312 assertTrue(result.contains(sourceFile3), "expected stale source file not found in result");
313 }
314
315 @Test
316 public void testConstructedWithMsecsIncludesAndExcludesShouldReturnTwoSourceFilesOfThreeDueToExcludePattern()
317 throws Exception {
318 File base = new File(getTestBaseDir(), "test8");
319
320 long now = System.currentTimeMillis();
321
322 File targetFile = new File(base, "fileX.xml");
323
324 writeFile(targetFile);
325
326
327 targetFile.setLastModified(now - 12000);
328
329 File sourceFile = new File(base, "fileX.java");
330
331 writeFile(sourceFile);
332
333
334 sourceFile.setLastModified(now);
335
336 File targetFile2 = new File(base, "file2.xml");
337
338 writeFile(targetFile2);
339
340 targetFile2.setLastModified(now - 12000);
341
342 File sourceFile2 = new File(base, "file2.java");
343
344 writeFile(sourceFile2);
345
346
347 sourceFile2.setLastModified(now);
348
349 File targetFile3 = new File(base, "file3.xml");
350
351 writeFile(targetFile3);
352
353 targetFile3.setLastModified(now - 12000);
354
355 File sourceFile3 = new File(base, "file3.java");
356
357 writeFile(sourceFile3);
358
359
360 sourceFile3.setLastModified(now);
361
362 SuffixMapping mapping = new SuffixMapping(".java", ".xml");
363
364 scanner = new StaleSourceScanner(0, Collections.singleton("**/*"), Collections.singleton("*X.*"));
365
366 scanner.addSourceMapping(mapping);
367
368 Set<File> result = scanner.getIncludedSources(base, base);
369
370 assertEquals(2, result.size(), "wrong number of stale sources returned.");
371
372 assertEquals(2, result.size());
373 assertTrue(
374 result.contains(sourceFile2) && result.contains(sourceFile3),
375 "expected stale source file not found in result");
376 }
377
378 @Test
379 public void testSingleFileSourceMapping() throws Exception {
380 File src = new File(getTestBaseDir(), "test9-src");
381
382 File target = new File(getTestBaseDir(), "test9-target");
383
384 long now = System.currentTimeMillis();
385
386
387
388
389
390 File fooCs = new File(src, "Foo.cs");
391
392 writeFile(fooCs);
393
394 fooCs.setLastModified(now - 10000);
395
396 SourceMapping mapping = new SingleTargetSourceMapping(".cs", "Application.exe");
397
398 scanner = new StaleSourceScanner(0);
399
400 scanner.addSourceMapping(mapping);
401
402 Set<File> result = scanner.getIncludedSources(src, target);
403
404 assertEquals(1, result.size());
405
406 assertTrue(result.contains(fooCs));
407
408
409
410
411
412 File barCs = new File(src, "Bar.cs");
413
414 writeFile(barCs);
415
416 barCs.setLastModified(now - 20000);
417
418 result = scanner.getIncludedSources(src, target);
419
420 assertEquals(2, result.size());
421
422 assertEquals(2, result.size());
423 assertTrue(result.contains(fooCs) && result.contains(barCs));
424
425
426
427
428
429 File applicationExe = new File(target, "Application.exe");
430
431 writeFile(applicationExe);
432
433 applicationExe.setLastModified(now);
434
435 result = scanner.getIncludedSources(src, target);
436
437 assertTrue(result.isEmpty());
438
439
440
441
442
443 applicationExe.setLastModified(now - 15000);
444
445 result = scanner.getIncludedSources(src, target);
446
447 assertEquals(1, result.size());
448
449 assertTrue(result.contains(fooCs));
450 }
451 }