@ -28,12 +28,14 @@ import org.junit.Rule;
import org.junit.Test ;
import org.junit.Test ;
import org.junit.rules.ExpectedException ;
import org.junit.rules.ExpectedException ;
import static org.hamcrest.Matchers.contains ;
import static org.hamcrest.Matchers.hasSize ;
import static org.hamcrest.Matchers.hasSize ;
import static org.hamcrest.Matchers.is ;
import static org.hamcrest.Matchers.is ;
import static org.junit.Assert.assertThat ;
import static org.junit.Assert.assertThat ;
/ * *
/ * *
* Tests for { @link PathPatternRegistry }
* Tests for { @link PathPatternRegistry }
*
* @author Brian Clozel
* @author Brian Clozel
* /
* /
public class PathPatternRegistryTests {
public class PathPatternRegistryTests {
@ -48,6 +50,21 @@ public class PathPatternRegistryTests {
this . registry = new PathPatternRegistry ( ) ;
this . registry = new PathPatternRegistry ( ) ;
}
}
@Test
public void shouldFixFileExtensions ( ) {
Set < String > fileExtensions = new HashSet < > ( ) ;
fileExtensions . add ( "json" ) ;
fileExtensions . add ( "xml" ) ;
this . registry . setFileExtensions ( fileExtensions ) ;
assertThat ( this . registry . getFileExtensions ( ) , contains ( ".json" , ".xml" ) ) ;
}
@Test
public void shouldPrependPatternsWithSlash ( ) {
this . registry . register ( "foo/bar" ) ;
assertThat ( getPatternList ( this . registry . getPatterns ( ) ) , Matchers . containsInAnyOrder ( "/foo/bar" ) ) ;
}
@Test
@Test
public void shouldNotRegisterInvalidPatterns ( ) {
public void shouldNotRegisterInvalidPatterns ( ) {
this . thrown . expect ( PatternParseException . class ) ;
this . thrown . expect ( PatternParseException . class ) ;
@ -58,58 +75,59 @@ public class PathPatternRegistryTests {
@Test
@Test
public void shouldNotRegisterPatternVariants ( ) {
public void shouldNotRegisterPatternVariants ( ) {
List < PathPattern > patterns = this . registry . register ( "/foo/{bar}" ) ;
List < PathPattern > patterns = this . registry . register ( "/foo/{bar}" ) ;
assertPathPatternListContains ( patterns , "/foo/{bar}" ) ;
assertThat ( getPatternList ( patterns ) , Matchers . containsInAnyOrder ( "/foo/{bar}" ) ) ;
}
}
@Test
@Test
public void shouldRegisterTrailingSlashVariants ( ) {
public void shouldRegisterTrailingSlashVariants ( ) {
this . registry . setUseTrailingSlashMatch ( true ) ;
this . registry . setUseTrailingSlashMatch ( true ) ;
List < PathPattern > patterns = this . registry . register ( "/foo/{bar}" ) ;
List < PathPattern > patterns = this . registry . register ( "/foo/{bar}" ) ;
assertPathPatternListContains ( patterns , "/foo/{bar}" , "/foo/{bar}/" ) ;
assertThat ( getPatternList ( patterns ) , Matchers . containsInAnyOrder ( "/foo/{bar}" , "/foo/{bar}/" ) ) ;
}
}
@Test
@Test
public void shouldRegisterSuffixVariants ( ) {
public void shouldRegisterSuffixVariants ( ) {
this . registry . setUseSuffixPatternMatch ( true ) ;
this . registry . setUseSuffixPatternMatch ( true ) ;
List < PathPattern > patterns = this . registry . register ( "/foo/{bar}" ) ;
List < PathPattern > patterns = this . registry . register ( "/foo/{bar}" ) ;
assertPathPatternListContains ( patterns , "/foo/{bar}" , "/foo/{bar}.*" ) ;
assertThat ( getPatternList ( patterns ) , Matchers . containsInAnyOrder ( "/foo/{bar}" , "/foo/{bar}.*" ) ) ;
}
}
@Test
@Test
public void shouldRegisterExtensionsVariants ( ) {
public void shouldRegisterExtensionsVariants ( ) {
Set < String > fileExtensions = new HashSet < > ( ) ;
Set < String > fileExtensions = new HashSet < > ( ) ;
fileExtensions . add ( "json" ) ;
fileExtensions . add ( ". json" ) ;
fileExtensions . add ( "xml" ) ;
fileExtensions . add ( ". xml" ) ;
this . registry . setUseSuffixPatternMatch ( true ) ;
this . registry . setUseSuffixPatternMatch ( true ) ;
this . registry . setFileExtensions ( fileExtensions ) ;
this . registry . setFileExtensions ( fileExtensions ) ;
List < PathPattern > patterns = this . registry . register ( "/foo/{bar}" ) ;
List < PathPattern > patterns = this . registry . register ( "/foo/{bar}" ) ;
assertPathPatternListContains ( patterns , "/foo/{bar}" , "/foo/{bar}.xml" , "/foo/{bar}.json" ) ;
assertThat ( getPatternList ( patterns ) ,
Matchers . containsInAnyOrder ( "/foo/{bar}" , "/foo/{bar}.xml" , "/foo/{bar}.json" ) ) ;
}
}
@Test
@Test
public void shouldRegisterAllVariants ( ) {
public void shouldRegisterAllVariants ( ) {
Set < String > fileExtensions = new HashSet < > ( ) ;
Set < String > fileExtensions = new HashSet < > ( ) ;
fileExtensions . add ( "json" ) ;
fileExtensions . add ( ". json" ) ;
fileExtensions . add ( "xml" ) ;
fileExtensions . add ( ". xml" ) ;
this . registry . setUseSuffixPatternMatch ( true ) ;
this . registry . setUseSuffixPatternMatch ( true ) ;
this . registry . setUseTrailingSlashMatch ( true ) ;
this . registry . setUseTrailingSlashMatch ( true ) ;
this . registry . setFileExtensions ( fileExtensions ) ;
this . registry . setFileExtensions ( fileExtensions ) ;
List < PathPattern > patterns = this . registry . register ( "/foo/{bar}" ) ;
List < PathPattern > patterns = this . registry . register ( "/foo/{bar}" ) ;
assertPathPatternListContains ( patterns , "/foo/{bar}" ,
assertThat ( getPatternList ( patterns ) , Matchers . containsInAnyOrder ( "/foo/{bar}" ,
"/foo/{bar}.xml" , "/foo/{bar}.json" , "/foo/{bar}/" ) ;
"/foo/{bar}.xml" , "/foo/{bar}.json" , "/foo/{bar}/" ) ) ;
}
}
@Test
@Test
public void combineEmptyRegistries ( ) {
public void combineEmptyRegistries ( ) {
PathPatternRegistry result = this . registry . combine ( new PathPatternRegistry ( ) ) ;
PathPatternRegistry result = this . registry . combine ( new PathPatternRegistry ( ) ) ;
assertPathPatternListContains ( result . getPatterns ( ) , "" ) ;
assertThat ( getPatternList ( result . getPatterns ( ) ) , Matchers . containsInAnyOrder ( "" ) ) ;
}
}
@Test
@Test
public void combineWithEmptyRegistry ( ) {
public void combineWithEmptyRegistry ( ) {
this . registry . register ( "/foo" ) ;
this . registry . register ( "/foo" ) ;
PathPatternRegistry result = this . registry . combine ( new PathPatternRegistry ( ) ) ;
PathPatternRegistry result = this . registry . combine ( new PathPatternRegistry ( ) ) ;
assertPathPatternListContains ( result . getPatterns ( ) , "/foo" ) ;
assertThat ( getPatternList ( result . getPatterns ( ) ) , Matchers . containsInAnyOrder ( "/foo" ) ) ;
}
}
@Test
@Test
@ -119,7 +137,7 @@ public class PathPatternRegistryTests {
other . register ( "/bar" ) ;
other . register ( "/bar" ) ;
other . register ( "/baz" ) ;
other . register ( "/baz" ) ;
PathPatternRegistry result = this . registry . combine ( other ) ;
PathPatternRegistry result = this . registry . combine ( other ) ;
assertPathPatternListContains ( result . getPatterns ( ) , "/foo/bar" , "/foo/baz" ) ;
assertThat ( getPatternList ( result . getPatterns ( ) ) , Matchers . containsInAnyOrder ( "/foo/bar" , "/foo/baz" ) ) ;
}
}
@Test
@Test
@ -131,7 +149,7 @@ public class PathPatternRegistryTests {
this . registry . add ( fooOne ) ;
this . registry . add ( fooOne ) ;
this . registry . add ( fooTwo ) ;
this . registry . add ( fooTwo ) ;
Set < PathPattern > matches = this . registry . findMatches ( "/foo" ) ;
Set < PathPattern > matches = this . registry . findMatches ( "/foo" ) ;
assertPathPatternListContains ( matches , "/f?o" , "/fo?" ) ;
assertThat ( getPatternList ( matches ) , Matchers . contains ( "/f?o" , "/fo?" ) ) ;
}
}
@Test
@Test
@ -146,15 +164,14 @@ public class PathPatternRegistryTests {
this . registry . register ( "/foo/bar/baz" ) ;
this . registry . register ( "/foo/bar/baz" ) ;
this . registry . register ( "/foo/bar/{baz}" ) ;
this . registry . register ( "/foo/bar/{baz}" ) ;
Set < PathPattern > matches = this . registry . findMatches ( "/foo/bar/baz" ) ;
Set < PathPattern > matches = this . registry . findMatches ( "/foo/bar/baz" ) ;
assertPathPatternListContains ( matches , "/foo/bar/baz" , "/foo/bar/{baz}" ,
assertThat ( getPatternList ( matches ) , Matchers . contains ( "/foo/bar/baz" , "/foo/bar/{baz}" ,
"/foo/{*baz}" ) ;
"/foo/{*baz}" ) ) ;
}
}
private void assertPathPatternListContains ( Collection < PathPattern > parsedPatterns , String . . . pathPatterns ) {
private List < String > getPatternList ( Collection < PathPattern > parsedPatterns ) {
List < String > patternList = parsedPatterns .
return parsedPatterns . stream ( ) . map ( pattern - > pattern . getPatternString ( ) ) . collect ( Collectors . toList ( ) ) ;
stream ( ) . map ( pattern - > pattern . getPatternString ( ) ) . collect ( Collectors . toList ( ) ) ;
assertThat ( patternList , Matchers . contains ( pathPatterns ) ) ;
}
}
}
}