39
39
import org .eclipse .aether .DefaultRepositorySystemSession ;
40
40
import org .eclipse .aether .RepositorySystemSession ;
41
41
import org .junit .jupiter .api .Test ;
42
+ import org .junit .jupiter .params .ParameterizedTest ;
43
+ import org .junit .jupiter .params .provider .CsvSource ;
44
+ import org .junit .jupiter .params .provider .EmptySource ;
45
+ import org .junit .jupiter .params .provider .NullAndEmptySource ;
46
+ import org .junit .jupiter .params .provider .ValueSource ;
42
47
43
48
import java .io .File ;
44
49
import java .io .IOException ;
45
50
import java .io .InputStream ;
46
51
import java .net .URI ;
47
52
import java .net .URL ;
53
+ import java .time .Instant ;
54
+ import java .time .format .DateTimeParseException ;
48
55
import java .util .ArrayList ;
49
56
import java .util .Collections ;
50
57
import java .util .Comparator ;
61
68
import java .util .zip .ZipEntry ;
62
69
63
70
import static org .assertj .core .api .Assertions .assertThat ;
64
- import static org .junit . jupiter .api .Assertions .fail ;
71
+ import static org .assertj . core .api .Assertions .assertThatExceptionOfType ;
65
72
66
73
class MavenArchiverTest
67
74
{
@@ -79,28 +86,21 @@ public boolean equals( Object o )
79
86
}
80
87
}
81
88
82
- @ Test
83
- void testInvalidModuleNames ()
89
+ @ ParameterizedTest
90
+ @ EmptySource
91
+ @ ValueSource ( strings = { "." , "dash-is-invalid" , "plus+is+invalid" , "colon:is:invalid" , "new.class" ,
92
+ "123.at.start.is.invalid" , "digit.at.123start.is.invalid" } )
93
+ void testInvalidModuleNames ( String value )
84
94
{
85
- assertThat ( MavenArchiver .isValidModuleName ( "" ) ).isFalse ();
86
- assertThat ( MavenArchiver .isValidModuleName ( "." ) ).isFalse ();
87
- assertThat ( MavenArchiver .isValidModuleName ( "dash-is-invalid" ) ).isFalse ();
88
- assertThat ( MavenArchiver .isValidModuleName ( "plus+is+invalid" ) ).isFalse ();
89
- assertThat ( MavenArchiver .isValidModuleName ( "colon:is:invalid" ) ).isFalse ();
90
- assertThat ( MavenArchiver .isValidModuleName ( "new.class" ) ).isFalse ();
91
- assertThat ( MavenArchiver .isValidModuleName ( "123.at.start.is.invalid" ) ).isFalse ();
92
- assertThat ( MavenArchiver .isValidModuleName ( "digit.at.123start.is.invalid" ) ).isFalse ();
95
+ assertThat ( MavenArchiver .isValidModuleName ( value ) ).isFalse ();
93
96
}
94
97
95
- @ Test
96
- void testValidModuleNames ()
98
+ @ ParameterizedTest
99
+ @ ValueSource ( strings = { "a" , "a.b" , "a_b" , "trailing0.digits123.are456.ok789" , "UTF8.chars.are.okay.äëïöüẍ" ,
100
+ "ℤ€ℕ" } )
101
+ void testValidModuleNames ( String value )
97
102
{
98
- assertThat ( MavenArchiver .isValidModuleName ( "a" ) ).isTrue ();
99
- assertThat ( MavenArchiver .isValidModuleName ( "a.b" ) ).isTrue ();
100
- assertThat ( MavenArchiver .isValidModuleName ( "a_b" ) ).isTrue ();
101
- assertThat ( MavenArchiver .isValidModuleName ( "trailing0.digits123.are456.ok789" ) ).isTrue ();
102
- assertThat ( MavenArchiver .isValidModuleName ( "UTF8.chars.are.okay.äëïöüẍ" ) ).isTrue ();
103
- assertThat ( MavenArchiver .isValidModuleName ( "ℤ€ℕ" ) ).isTrue ();
103
+ assertThat ( MavenArchiver .isValidModuleName ( value ) ).isTrue ();
104
104
}
105
105
106
106
@ Test
@@ -1366,7 +1366,8 @@ private File getClasspathFile( String file )
1366
1366
URL resource = Thread .currentThread ().getContextClassLoader ().getResource ( file );
1367
1367
if ( resource == null )
1368
1368
{
1369
- fail ( "Cannot retrieve java.net.URL for file: " + file + " on the current test classpath." );
1369
+ throw new IllegalStateException ( "Cannot retrieve java.net.URL for file: " + file
1370
+ + " on the current test classpath." );
1370
1371
}
1371
1372
1372
1373
URI uri = new File ( resource .getPath () ).toURI ().normalize ();
@@ -1444,54 +1445,53 @@ public void testParseOutputTimestamp()
1444
1445
assertThat ( archiver .parseOutputTimestamp ( "*" ) ).isNull ();
1445
1446
1446
1447
assertThat ( archiver .parseOutputTimestamp ( "1570300662" ).getTime () ).isEqualTo ( 1570300662000L );
1447
- assertThat ( archiver .parseOutputTimestamp ( "0" ).getTime () ).isEqualTo ( 0L );
1448
+ assertThat ( archiver .parseOutputTimestamp ( "0" ).getTime () ).isZero ( );
1448
1449
assertThat ( archiver .parseOutputTimestamp ( "1" ).getTime () ).isEqualTo ( 1000L );
1449
1450
1450
- assertThat ( archiver .parseOutputTimestamp ( "2019-10-05T18:37:42Z" ).getTime () ).isEqualTo ( 1570300662000L );
1451
- assertThat ( archiver .parseOutputTimestamp ( "2019-10-05T20:37:42+02:00" ).getTime () ).isEqualTo (
1452
- 1570300662000L );
1453
- assertThat ( archiver .parseOutputTimestamp ( "2019-10-05T16:37:42-02:00" ).getTime () ).isEqualTo (
1454
- 1570300662000L );
1451
+ assertThat ( archiver .parseOutputTimestamp ( "2019-10-05T18:37:42Z" ).getTime () )
1452
+ .isEqualTo ( 1570300662000L );
1453
+ assertThat ( archiver .parseOutputTimestamp ( "2019-10-05T20:37:42+02:00" ).getTime () )
1454
+ .isEqualTo ( 1570300662000L );
1455
+ assertThat ( archiver .parseOutputTimestamp ( "2019-10-05T16:37:42-02:00" ).getTime () )
1456
+ .isEqualTo ( 1570300662000L );
1455
1457
1456
1458
// These must result in IAE because we expect extended ISO format only (ie with - separator for date and
1457
1459
// : separator for timezone), hence the XXX SimpleDateFormat for tz offset
1458
1460
// X SimpleDateFormat accepts timezone without separator while date has separator, which is a mix between
1459
1461
// basic (no separators, both for date and timezone) and extended (separator for both)
1460
- try
1461
- {
1462
- archiver .parseOutputTimestamp ( "2019-10-05T20:37:42+0200" );
1463
- fail ();
1464
- }
1465
- catch ( IllegalArgumentException ignored )
1466
- {
1467
- }
1468
- try
1469
- {
1470
- archiver .parseOutputTimestamp ( "2019-10-05T20:37:42-0200" );
1471
- fail ();
1472
- }
1473
- catch ( IllegalArgumentException ignored )
1474
- {
1475
- }
1462
+ assertThatExceptionOfType ( IllegalArgumentException .class )
1463
+ .isThrownBy ( () -> archiver .parseOutputTimestamp ( "2019-10-05T20:37:42+0200" ) );
1464
+ assertThatExceptionOfType ( IllegalArgumentException .class )
1465
+ .isThrownBy ( () -> archiver .parseOutputTimestamp ( "2019-10-05T20:37:42-0200" ) );
1466
+ }
1476
1467
1477
- // These unfortunately fail although the input is valid according to ISO 8601
1478
- // SDF does not allow strict telescoping parsing w/o permitting invalid input as depicted above.
1479
- // One has to use the new Java Time API for this.
1480
- try
1481
- {
1482
- archiver .parseOutputTimestamp ( "2019-10-05T20:37:42+02" );
1483
- fail ();
1484
- }
1485
- catch ( IllegalArgumentException ignored )
1486
- {
1487
- }
1488
- try
1489
- {
1490
- archiver .parseOutputTimestamp ( "2019-10-05T20:37:42-02" );
1491
- fail ();
1492
- }
1493
- catch ( IllegalArgumentException ignored )
1494
- {
1495
- }
1468
+ @ ParameterizedTest
1469
+ @ NullAndEmptySource
1470
+ @ ValueSource ( strings = { "." , " " , "_" , "-" , "T" , "/" , "!" , "!" , "*" , "ñ" } )
1471
+ public void testEmptyParseOutputTimestampInstant ( String value )
1472
+ {
1473
+ // Empty optional if null or 1 char
1474
+ assertThat ( MavenArchiver .parseBuildOutputTimestamp ( value ) ).isEmpty ();
1475
+ }
1476
+
1477
+ @ ParameterizedTest
1478
+ @ CsvSource ( { "0,0" , "1,1000" , "9,9000" , "1570300662,1570300662000" , "2147483648,2147483648000" ,
1479
+ "2019-10-05T18:37:42Z,1570300662000" , "2019-10-05T20:37:42+02:00,1570300662000" ,
1480
+ "2019-10-05T16:37:42-02:00,1570300662000" , "1988-02-22T15:23:47.76598Z,572541827000" } )
1481
+ public void testParseOutputTimestampInstant ( String value , long expected )
1482
+ {
1483
+ assertThat ( MavenArchiver .parseBuildOutputTimestamp ( value ) )
1484
+ .contains ( Instant .ofEpochMilli ( expected ) );
1485
+ }
1486
+
1487
+ @ ParameterizedTest
1488
+ @ ValueSource ( strings = { "2019-10-05T20:37:42+0200" , "2019-10-05T20:37:42-0200" , "2019-10-05T25:00:00Z" ,
1489
+ "2019-10-05" , "XYZ" , "Tue, 3 Jun 2008 11:05:30 GMT" , "2011-12-03T10:15:30+01:00[Europe/Paris]" } )
1490
+ public void testThrownParseOutputTimestampInstant ( String outputTimestamp )
1491
+ {
1492
+ // Invalid parsing
1493
+ assertThatExceptionOfType ( IllegalArgumentException .class )
1494
+ .isThrownBy ( () -> MavenArchiver .parseBuildOutputTimestamp ( outputTimestamp ) )
1495
+ .withCauseInstanceOf ( DateTimeParseException .class );
1496
1496
}
1497
1497
}
0 commit comments