1   /*
2    * Copyright 2008 Hippo
3    *
4    * Licensed under the Apache License, Version 2.0 (the  "License"); 
5    * you may not use this file except in compliance with the License. 
6    * You may obtain a copy of the License at
7    *
8    * http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" 
12   * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
13   * See the License for the specific language governing permissions and 
14   * limitations under the License.
15   */
16  package nl.hippo.client.webapp.matchers;
17  
18  import java.util.Iterator;
19  
20  import junit.framework.TestCase;
21  import nl.hippo.client.webapp.Pipeline;
22  import nl.hippo.client.webapp.Request;
23  
24  public class PipelineTest extends TestCase {
25  
26      private Pipeline pipeline;
27  
28      public void setUp() {
29          pipeline = new Pipeline();
30      }
31  
32      public void testContentMatcher() {
33          verify("content", new ContentMatcher());
34          verify("content/", new ContentMatcher());
35          verify("/content", new ContentMatcher());
36          verify("/content/", new ContentMatcher());
37  
38          verify("/content/logo", new ContentMatcher());
39          verify("/content/foo/bar/aap", new ContentMatcher());
40          verify("/content/.gif", new ContentMatcher());
41          verify("/content/logo.gif", new ContentMatcher());
42          verify("/content/logo.gif/foo", new ContentMatcher());
43          verify("/content/foo/bar/aap.noot", new ContentMatcher());
44   
45          verify("", new ContentMatcher());
46          verify("/", new ContentMatcher());
47          verify("bla/bla/aap/noot.xml", new ContentMatcher());
48          verify("/bla/bla/aap/noot.xml", new ContentMatcher());
49      }
50  
51      public void testGetQueryMatcher() {
52          verify("getquery", new ContentMatcher());
53          verify("getquery/", new ContentMatcher());
54          verify("/getquery", new ContentMatcher());
55          
56          verify("/getquery/", new GetQueryMatcher());
57          verify("/getquery/test.xml", new GetQueryMatcher());
58          verify("/getquery/test", new GetQueryMatcher());
59          verify("/getquery/foo/bar/aap.noot", new GetQueryMatcher());
60          verify("/getquery/foo/bar/aap", new GetQueryMatcher());
61      }
62      
63      public void testAdminMatcher() {
64          verify("admin", new ContentMatcher());
65          verify("admin/", new ContentMatcher());
66          
67          verify("/admin", new AdminMatcher());
68          verify("/admin/", new AdminMatcher());
69          verify("/admin/test.xml", new AdminMatcher());
70          verify("/admin/test", new AdminMatcher());
71          verify("/admin/foo/bar/aap.noot", new AdminMatcher());
72          verify("/admin/foo/bar/aap", new AdminMatcher());
73      }
74  
75  
76      public void testQueryMatcher() {
77          verify("query", new ContentMatcher());
78          verify("query/", new ContentMatcher());
79          verify("/query", new ContentMatcher());
80          verify("/query/", new ContentMatcher());
81          verify("/query/aap", new ContentMatcher());
82          verify("/query/aap/noot", new ContentMatcher());
83          verify("/query///", new ContentMatcher());
84          
85          verify("/query/aap/noot/mies", new QueryMatcher());
86          verify("/query/aap/noot/mies/foo", new QueryMatcher());
87          verify("/query/aap/noot/mies/foo/bar/baz", new QueryMatcher());
88      }
89  
90      private void verify(String request, Matcher expectedMatcher) {
91          Request req = new Request(new MockHttpServletContext(), new MockHttpServletRequest(request));
92          Iterator it = pipeline.iterator();
93          while (it.hasNext()) {
94              Matcher matcher = (Matcher) it.next();
95              if (matcher.matches(req)) {
96                  System.out.println("request: " + request + ", params: " + req.toString(matcher.regexp));
97                  assertEquals(request + " should match " + expectedMatcher.toString() + " but matched "
98                          + matcher.toString(), expectedMatcher, matcher);
99                  return;
100             }
101         }
102     }
103 
104 }