1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package net.grinder.util.http;
23
24 import net.grinder.testutility.DelegatingStubFactory;
25 import net.grinder.util.http.URIParser.ParseListener;
26
27 import junit.framework.TestCase;
28
29
30
31
32
33
34
35 public class TestURIParserImplementation extends TestCase {
36
37 private ParseListener m_testParseListener =
38 new TestParseListener();
39
40 private final DelegatingStubFactory<ParseListener>
41 m_parseListenerStubFactory =
42 DelegatingStubFactory.create(m_testParseListener);
43 private final ParseListener m_parseListener =
44 m_parseListenerStubFactory.getStub();
45
46 public void testBasicURIs() throws Exception {
47 final URIParser parser = new URIParserImplementation();
48
49 parser.parse("simple", m_parseListener);
50 m_parseListenerStubFactory.assertSuccess("path", "simple");
51 m_parseListenerStubFactory.assertNoMoreCalls();
52
53 parser.parse("http://foo/simple/", m_parseListener);
54 m_parseListenerStubFactory.assertSuccess("scheme", "http");
55 m_parseListenerStubFactory.assertSuccess("authority", "foo");
56 m_parseListenerStubFactory.assertSuccess("path", "/simple/");
57 m_parseListenerStubFactory.assertNoMoreCalls();
58
59 parser.parse("http://foo:1234/?hello#world", m_parseListener);
60 m_parseListenerStubFactory.assertSuccess("scheme", "http");
61 m_parseListenerStubFactory.assertSuccess("authority", "foo:1234");
62 m_parseListenerStubFactory.assertSuccess("path", "/");
63 m_parseListenerStubFactory.assertSuccess("queryString", "hello");
64 m_parseListenerStubFactory.assertSuccess("fragment", "world");
65 m_parseListenerStubFactory.assertNoMoreCalls();
66
67 parser.parse("http://foo:1234/bah%20dah?%42%77", m_parseListener);
68 m_parseListenerStubFactory.assertSuccess("scheme", "http");
69 m_parseListenerStubFactory.assertSuccess("authority", "foo:1234");
70 m_parseListenerStubFactory.assertSuccess("path", "/bah dah");
71 m_parseListenerStubFactory.assertSuccess("queryString", "Bw");
72 m_parseListenerStubFactory.assertNoMoreCalls();
73
74
75 parser.parse("http://foo:1234/bah%20dah?%42%77", m_parseListener);
76
77 }
78
79 public void testParseTermination() {
80 final URIParser parser = new URIParserImplementation();
81
82 parser.parse("stop://stop/stop?stop#stop", m_parseListener);
83 m_parseListenerStubFactory.assertSuccess("scheme", "stop");
84 m_parseListenerStubFactory.assertNoMoreCalls();
85
86 parser.parse("scheme://stop/stop?stop#stop", m_parseListener);
87 m_parseListenerStubFactory.assertSuccess("scheme", "scheme");
88 m_parseListenerStubFactory.assertSuccess("authority", "stop");
89 m_parseListenerStubFactory.assertNoMoreCalls();
90
91 parser.parse("scheme://authority/stop?stop#stop", m_parseListener);
92 m_parseListenerStubFactory.assertSuccess("scheme", "scheme");
93 m_parseListenerStubFactory.assertSuccess("authority", "authority");
94 m_parseListenerStubFactory.assertSuccess("path", "/stop");
95 m_parseListenerStubFactory.assertNoMoreCalls();
96
97 parser.parse("scheme://authority/path?stop#stop", m_parseListener);
98 m_parseListenerStubFactory.assertSuccess("scheme", "scheme");
99 m_parseListenerStubFactory.assertSuccess("authority", "authority");
100 m_parseListenerStubFactory.assertSuccess("path", "/path");
101 m_parseListenerStubFactory.assertSuccess("queryString", "stop");
102 m_parseListenerStubFactory.assertNoMoreCalls();
103
104 parser.parse("scheme://authority/path?queryString#stop", m_parseListener);
105 m_parseListenerStubFactory.assertSuccess("scheme", "scheme");
106 m_parseListenerStubFactory.assertSuccess("authority", "authority");
107 m_parseListenerStubFactory.assertSuccess("path", "/path");
108 m_parseListenerStubFactory.assertSuccess("queryString", "queryString");
109 m_parseListenerStubFactory.assertSuccess("fragment", "stop");
110 m_parseListenerStubFactory.assertNoMoreCalls();
111
112 parser.parse("scheme://authority/path?queryString#fragment", m_parseListener);
113 m_parseListenerStubFactory.assertSuccess("scheme", "scheme");
114 m_parseListenerStubFactory.assertSuccess("authority", "authority");
115 m_parseListenerStubFactory.assertSuccess("path", "/path");
116 m_parseListenerStubFactory.assertSuccess("queryString", "queryString");
117 m_parseListenerStubFactory.assertSuccess("fragment", "fragment");
118 m_parseListenerStubFactory.assertNoMoreCalls();
119
120 parser.parse("scheme://authority/path;stop=value?queryString#fragment", m_parseListener);
121 m_parseListenerStubFactory.assertSuccess("scheme", "scheme");
122 m_parseListenerStubFactory.assertSuccess("authority", "authority");
123 m_parseListenerStubFactory.assertSuccess("path", "/path;");
124 m_parseListenerStubFactory.assertSuccess("pathParameterNameValue", "stop", "value");
125 m_parseListenerStubFactory.assertNoMoreCalls();
126
127 parser.parse("scheme://authority/path;foo=bah&==name=value?queryString#fragment", m_parseListener);
128 m_parseListenerStubFactory.assertSuccess("scheme", "scheme");
129 m_parseListenerStubFactory.assertSuccess("authority", "authority");
130 m_parseListenerStubFactory.assertSuccess("path", "/path;");
131 m_parseListenerStubFactory.assertSuccess("pathParameterNameValue", "foo", "bah");
132 m_parseListenerStubFactory.assertSuccess("path", "&==");
133 m_parseListenerStubFactory.assertNoMoreCalls();
134
135 parser.parse("scheme://authority/path?name=value&stop=foo", m_parseListener);
136 m_parseListenerStubFactory.assertSuccess("scheme", "scheme");
137 m_parseListenerStubFactory.assertSuccess("authority", "authority");
138 m_parseListenerStubFactory.assertSuccess("path", "/path");
139 m_parseListenerStubFactory.assertSuccess("queryStringNameValue", "name", "value");
140 m_parseListenerStubFactory.assertSuccess("queryString", "&");
141 m_parseListenerStubFactory.assertSuccess("queryStringNameValue", "stop", "foo");
142 m_parseListenerStubFactory.assertNoMoreCalls();
143
144 parser.parse("scheme://authority/path?foo=bah&==name=value", m_parseListener);
145 m_parseListenerStubFactory.assertSuccess("scheme", "scheme");
146 m_parseListenerStubFactory.assertSuccess("authority", "authority");
147 m_parseListenerStubFactory.assertSuccess("path", "/path");
148 m_parseListenerStubFactory.assertSuccess("queryStringNameValue", "foo", "bah");
149 m_parseListenerStubFactory.assertSuccess("queryString", "&==");
150 m_parseListenerStubFactory.assertNoMoreCalls();
151 }
152
153 public void testPathParameterNameValues() throws Exception {
154 final URIParser parser = new URIParserImplementation();
155
156 parser.parse("http:/foo;hello=world/simple/", m_parseListener);
157 m_parseListenerStubFactory.assertSuccess("scheme", "http");
158 m_parseListenerStubFactory.assertSuccess("path", "/foo;");
159 m_parseListenerStubFactory.assertSuccess(
160 "pathParameterNameValue", "hello", "world");
161 m_parseListenerStubFactory.assertSuccess("path", "/simple/");
162 m_parseListenerStubFactory.assertNoMoreCalls();
163
164 parser.parse("http:/foo;hello=world&JSESSIONID=1234", m_parseListener);
165 m_parseListenerStubFactory.assertSuccess("scheme", "http");
166 m_parseListenerStubFactory.assertSuccess("path", "/foo;");
167 m_parseListenerStubFactory.assertSuccess(
168 "pathParameterNameValue", "hello", "world");
169 m_parseListenerStubFactory.assertSuccess("path", "&");
170 m_parseListenerStubFactory.assertSuccess(
171 "pathParameterNameValue", "JSESSIONID", "1234");
172 m_parseListenerStubFactory.assertNoMoreCalls();
173
174 parser.parse("http:;JSESSIONID=", m_parseListener);
175 m_parseListenerStubFactory.assertSuccess("scheme", "http");
176 m_parseListenerStubFactory.assertSuccess("path", ";");
177 m_parseListenerStubFactory.assertSuccess(
178 "pathParameterNameValue", "JSESSIONID", "");
179 m_parseListenerStubFactory.assertNoMoreCalls();
180 }
181
182 public void testQueryStringNameValues() throws Exception {
183 final URIParser parser = new URIParserImplementation();
184
185 parser.parse("http:/foo?hello=world/simple/", m_parseListener);
186 m_parseListenerStubFactory.assertSuccess("scheme", "http");
187 m_parseListenerStubFactory.assertSuccess("path", "/foo");
188 m_parseListenerStubFactory.assertSuccess(
189 "queryStringNameValue", "hello", "world/simple/");
190 m_parseListenerStubFactory.assertNoMoreCalls();
191 }
192
193 public static final class TestParseListener implements ParseListener {
194
195 public boolean scheme(String scheme) {
196 return !scheme.equals("stop");
197 }
198
199 public boolean authority(String authority) {
200 return !authority.equals("stop");
201 }
202
203 public boolean path(String path) {
204 return !path.equals("/stop") && !path.equals("&==");
205 }
206
207 public boolean pathParameterNameValue(String name, String value) {
208 return !name.equals("stop");
209 }
210
211 public boolean queryString(String queryString) {
212 return !queryString.equals("stop") && !queryString.equals("&==");
213 }
214
215 public boolean queryStringNameValue(String name, String value) {
216 return !name.equals("stop");
217 }
218
219 public boolean fragment(String fragment) {
220 return !fragment.equals("stop");
221 }
222 }
223 }