@ -18,6 +18,7 @@ package org.springframework.web.reactive.result.condition;
@@ -18,6 +18,7 @@ package org.springframework.web.reactive.result.condition;
import java.util.Arrays ;
import java.util.Iterator ;
import java.util.stream.Collectors ;
import org.junit.Test ;
@ -38,15 +39,11 @@ import static org.springframework.mock.http.server.reactive.test.MockServerHttpR
@@ -38,15 +39,11 @@ import static org.springframework.mock.http.server.reactive.test.MockServerHttpR
* /
public class PatternsRequestConditionTests {
@Test
public void prependSlash ( ) {
PatternsRequestCondition c = new PatternsRequestCondition ( "foo" ) ;
assertEquals ( "/foo" , c . getPatterns ( ) . iterator ( ) . next ( ) . getPatternString ( ) ) ;
}
private final PathPatternParser parser = new PathPatternParser ( ) ;
@Test
public void prependNonEmptyPatternsOnly ( ) {
PatternsRequestCondition c = new PatternsRequest Condition( "" ) ;
PatternsRequestCondition c = createPatternsCondition ( "" ) ;
assertEquals ( "Do not prepend empty patterns (SPR-8255)" , "" ,
c . getPatterns ( ) . iterator ( ) . next ( ) . getPatternString ( ) ) ;
}
@ -56,33 +53,33 @@ public class PatternsRequestConditionTests {
@@ -56,33 +53,33 @@ public class PatternsRequestConditionTests {
PatternsRequestCondition c1 = new PatternsRequestCondition ( ) ;
PatternsRequestCondition c2 = new PatternsRequestCondition ( ) ;
assertEquals ( new PatternsRequestCondition ( "" ) , c1 . combine ( c2 ) ) ;
assertEquals ( createPatternsCondition ( ) , c1 . combine ( c2 ) ) ;
}
@Test
public void combineOnePatternWithEmptySet ( ) {
PatternsRequestCondition c1 = new PatternsRequest Condition( "/type1" , "/type2" ) ;
PatternsRequestCondition c1 = createPatterns Condition( "/type1" , "/type2" ) ;
PatternsRequestCondition c2 = new PatternsRequestCondition ( ) ;
assertEquals ( new PatternsRequest Condition( "/type1" , "/type2" ) , c1 . combine ( c2 ) ) ;
assertEquals ( createPatterns Condition( "/type1" , "/type2" ) , c1 . combine ( c2 ) ) ;
c1 = new PatternsRequestCondition ( ) ;
c2 = new PatternsRequest Condition( "/method1" , "/method2" ) ;
c2 = createPatterns Condition( "/method1" , "/method2" ) ;
assertEquals ( new PatternsRequest Condition( "/method1" , "/method2" ) , c1 . combine ( c2 ) ) ;
assertEquals ( createPatterns Condition( "/method1" , "/method2" ) , c1 . combine ( c2 ) ) ;
}
@Test
public void combineMultiplePatterns ( ) {
PatternsRequestCondition c1 = new PatternsRequest Condition( "/t1" , "/t2" ) ;
PatternsRequestCondition c2 = new PatternsRequest Condition( "/m1" , "/m2" ) ;
PatternsRequestCondition c1 = createPatterns Condition( "/t1" , "/t2" ) ;
PatternsRequestCondition c2 = createPatterns Condition( "/m1" , "/m2" ) ;
assertEquals ( new PatternsRequest Condition( "/t1/m1" , "/t1/m2" , "/t2/m1" , "/t2/m2" ) , c1 . combine ( c2 ) ) ;
assertEquals ( createPatterns Condition( "/t1/m1" , "/t1/m2" , "/t2/m1" , "/t2/m2" ) , c1 . combine ( c2 ) ) ;
}
@Test
public void matchDirectPath ( ) throws Exception {
PatternsRequestCondition condition = new PatternsRequest Condition( "/foo" ) ;
PatternsRequestCondition condition = createPatterns Condition( "/foo" ) ;
PatternsRequestCondition match = condition . getMatchingCondition ( get ( "/foo" ) . toExchange ( ) ) ;
assertNotNull ( match ) ;
@ -90,7 +87,7 @@ public class PatternsRequestConditionTests {
@@ -90,7 +87,7 @@ public class PatternsRequestConditionTests {
@Test
public void matchPattern ( ) throws Exception {
PatternsRequestCondition condition = new PatternsRequest Condition( "/foo/*" ) ;
PatternsRequestCondition condition = createPatterns Condition( "/foo/*" ) ;
PatternsRequestCondition match = condition . getMatchingCondition ( get ( "/foo/bar" ) . toExchange ( ) ) ;
assertNotNull ( match ) ;
@ -98,9 +95,9 @@ public class PatternsRequestConditionTests {
@@ -98,9 +95,9 @@ public class PatternsRequestConditionTests {
@Test
public void matchSortPatterns ( ) throws Exception {
PatternsRequestCondition condition = new PatternsRequest Condition( "/*/*" , "/foo/bar" , "/foo/*" ) ;
PatternsRequestCondition condition = createPatterns Condition( "/*/*" , "/foo/bar" , "/foo/*" ) ;
PatternsRequestCondition match = condition . getMatchingCondition ( get ( "/foo/bar" ) . toExchange ( ) ) ;
PatternsRequestCondition expected = new PatternsRequest Condition( "/foo/bar" , "/foo/*" , "/*/*" ) ;
PatternsRequestCondition expected = createPatterns Condition( "/foo/bar" , "/foo/*" , "/*/*" ) ;
assertEquals ( expected , match ) ;
}
@ -109,14 +106,14 @@ public class PatternsRequestConditionTests {
@@ -109,14 +106,14 @@ public class PatternsRequestConditionTests {
public void matchTrailingSlash ( ) throws Exception {
MockServerWebExchange exchange = get ( "/foo/" ) . toExchange ( ) ;
PatternsRequestCondition condition = new PatternsRequest Condition( "/foo" ) ;
PatternsRequestCondition condition = createPatterns Condition( "/foo" ) ;
PatternsRequestCondition match = condition . getMatchingCondition ( exchange ) ;
assertNotNull ( match ) ;
assertEquals ( "Should match by default" , "/foo" ,
match . getPatterns ( ) . iterator ( ) . next ( ) . getPatternString ( ) ) ;
condition = new PatternsRequest Condition( new String [ ] { "/foo" } , null ) ;
condition = createPatterns Condition( "/foo" ) ;
match = condition . getMatchingCondition ( exchange ) ;
assertNotNull ( match ) ;
@ -125,7 +122,7 @@ public class PatternsRequestConditionTests {
@@ -125,7 +122,7 @@ public class PatternsRequestConditionTests {
PathPatternParser parser = new PathPatternParser ( ) ;
parser . setMatchOptionalTrailingSlash ( false ) ;
condition = new PatternsRequestCondition ( new String [ ] { "/foo" } , parser ) ;
condition = new PatternsRequestCondition ( parser . parse ( "/foo" ) ) ;
match = condition . getMatchingCondition ( get ( "/foo/" ) . toExchange ( ) ) ;
assertNull ( match ) ;
@ -133,7 +130,7 @@ public class PatternsRequestConditionTests {
@@ -133,7 +130,7 @@ public class PatternsRequestConditionTests {
@Test
public void matchPatternContainsExtension ( ) throws Exception {
PatternsRequestCondition condition = new PatternsRequest Condition( "/foo.jpg" ) ;
PatternsRequestCondition condition = createPatterns Condition( "/foo.jpg" ) ;
PatternsRequestCondition match = condition . getMatchingCondition ( get ( "/foo.html" ) . toExchange ( ) ) ;
assertNull ( match ) ;
@ -141,15 +138,15 @@ public class PatternsRequestConditionTests {
@@ -141,15 +138,15 @@ public class PatternsRequestConditionTests {
@Test
public void compareEqualPatterns ( ) throws Exception {
PatternsRequestCondition c1 = new PatternsRequest Condition( "/foo*" ) ;
PatternsRequestCondition c2 = new PatternsRequest Condition( "/foo*" ) ;
PatternsRequestCondition c1 = createPatterns Condition( "/foo*" ) ;
PatternsRequestCondition c2 = createPatterns Condition( "/foo*" ) ;
assertEquals ( 0 , c1 . compareTo ( c2 , get ( "/foo" ) . toExchange ( ) ) ) ;
}
@Test
public void equallyMatchingPatternsAreBothPresent ( ) throws Exception {
PatternsRequestCondition c = new PatternsRequest Condition( "/a" , "/b" ) ;
PatternsRequestCondition c = createPatterns Condition( "/a" , "/b" ) ;
assertEquals ( 2 , c . getPatterns ( ) . size ( ) ) ;
Iterator < PathPattern > itr = c . getPatterns ( ) . iterator ( ) ;
assertEquals ( "/a" , itr . next ( ) . getPatternString ( ) ) ;
@ -158,8 +155,8 @@ public class PatternsRequestConditionTests {
@@ -158,8 +155,8 @@ public class PatternsRequestConditionTests {
@Test
public void comparePatternSpecificity ( ) throws Exception {
PatternsRequestCondition c1 = new PatternsRequest Condition( "/fo*" ) ;
PatternsRequestCondition c2 = new PatternsRequest Condition( "/foo" ) ;
PatternsRequestCondition c1 = createPatterns Condition( "/fo*" ) ;
PatternsRequestCondition c2 = createPatterns Condition( "/foo" ) ;
assertEquals ( 1 , c1 . compareTo ( c2 , get ( "/foo" ) . toExchange ( ) ) ) ;
}
@ -168,8 +165,8 @@ public class PatternsRequestConditionTests {
@@ -168,8 +165,8 @@ public class PatternsRequestConditionTests {
public void compareNumberOfMatchingPatterns ( ) throws Exception {
ServerWebExchange exchange = get ( "/foo.html" ) . toExchange ( ) ;
PatternsRequestCondition c1 = new PatternsRequest Condition( "/foo.*" , "/foo.jpeg" ) ;
PatternsRequestCondition c2 = new PatternsRequest Condition( "/foo.*" , "/foo.html" ) ;
PatternsRequestCondition c1 = createPatterns Condition( "/foo.*" , "/foo.jpeg" ) ;
PatternsRequestCondition c2 = createPatterns Condition( "/foo.*" , "/foo.html" ) ;
PatternsRequestCondition match1 = c1 . getMatchingCondition ( exchange ) ;
PatternsRequestCondition match2 = c2 . getMatchingCondition ( exchange ) ;
@ -178,4 +175,11 @@ public class PatternsRequestConditionTests {
@@ -178,4 +175,11 @@ public class PatternsRequestConditionTests {
assertEquals ( 1 , match1 . compareTo ( match2 , exchange ) ) ;
}
private PatternsRequestCondition createPatternsCondition ( String . . . patterns ) {
return new PatternsRequestCondition ( Arrays
. stream ( patterns )
. map ( rawPattern - > this . parser . parse ( rawPattern ) )
. collect ( Collectors . toList ( ) ) ) ;
}
}