~ubuntu-branches/ubuntu/utopic/jetty/utopic-proposed

« back to all changes in this revision

Viewing changes to modules/util/src/test/java/org/mortbay/util/URITest.java

  • Committer: Bazaar Package Importer
  • Author(s): Torsten Werner
  • Date: 2009-08-09 08:48:10 UTC
  • Revision ID: james.westby@ubuntu.com-20090809084810-k522b97ind2robyd
Import upstream version 6.1.19

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// ========================================================================
 
2
// Copyright 2004-2005 Mort Bay Consulting Pty. Ltd.
 
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
// http://www.apache.org/licenses/LICENSE-2.0
 
8
// Unless required by applicable law or agreed to in writing, software
 
9
// distributed under the License is distributed on an "AS IS" BASIS,
 
10
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
11
// See the License for the specific language governing permissions and
 
12
// limitations under the License.
 
13
// ========================================================================
 
14
 
 
15
package org.mortbay.util;
 
16
 
 
17
import junit.framework.TestSuite;
 
18
 
 
19
 
 
20
/* ------------------------------------------------------------ */
 
21
/** Util meta Tests.
 
22
 * @author Greg Wilkins (gregw)
 
23
 */
 
24
public class URITest extends junit.framework.TestCase
 
25
{
 
26
    public URITest(String name)
 
27
    {
 
28
      super(name);
 
29
    }
 
30
    
 
31
    public static junit.framework.Test suite() {
 
32
        TestSuite suite = new TestSuite(URITest.class);
 
33
        return suite;                  
 
34
    }
 
35
 
 
36
    /* ------------------------------------------------------------ */
 
37
    /** main.
 
38
     */
 
39
    public static void main(String[] args)
 
40
    {
 
41
      junit.textui.TestRunner.run(suite());
 
42
    }    
 
43
    
 
44
    /* ------------------------------------------------------------ */
 
45
    public void testEncodePath()
 
46
    {
 
47
        // test basic encode/decode
 
48
        StringBuffer buf = new StringBuffer();
 
49
        
 
50
        
 
51
        buf.setLength(0);
 
52
        URIUtil.encodePath(buf,"/foo%23+;,:=/b a r/?info ");
 
53
        assertEquals("/foo%2523+%3B,:=/b%20a%20r/%3Finfo%20",buf.toString());
 
54
 
 
55
        assertEquals("/foo%2523+%3B,:=/b%20a%20r/%3Finfo%20",URIUtil.encodePath("/foo%23+;,:=/b a r/?info "));
 
56
                
 
57
        buf.setLength(0);
 
58
        URIUtil.encodeString(buf,"foo%23;,:=b a r",";,= ");
 
59
        assertEquals("foo%2523%3b%2c:%3db%20a%20r",buf.toString());
 
60
        
 
61
        buf.setLength(0);
 
62
        URIUtil.encodePath(buf,"/context/'list'/\"me\"/;<script>window.alert('xss');</script>");
 
63
        assertEquals("/context/%27list%27/%22me%22/%3B%3Cscript%3Ewindow.alert(%27xss%27)%3B%3C/script%3E", buf.toString());
 
64
    }    
 
65
    
 
66
    /* ------------------------------------------------------------ */
 
67
    public void testDecodePath()
 
68
    {
 
69
        assertEquals("foo%23;,:=b a r",URIUtil.decodePath("foo%2523%3b%2c:%3db%20a%20r")); 
 
70
        assertEquals("foo%23;,:=b a r=",URIUtil.decodePath("xxxfoo%2523%3b%2c:%3db%20a%20r%3Dxxx".getBytes(),3,30));
 
71
        assertEquals("fää%23;,:=b a r=",URIUtil.decodePath("fää%2523%3b%2c:%3db%20a%20r%3D"));   
 
72
        assertEquals("f\u0629\u0629%23;,:=b a r",URIUtil.decodePath("f%d8%a9%d8%a9%2523%3b%2c:%3db%20a%20r"));   
 
73
    }
 
74
    
 
75
    /* ------------------------------------------------------------ */
 
76
    public void testAddPaths()
 
77
    {
 
78
        assertEquals("null+null", URIUtil.addPaths(null,null),null);
 
79
        assertEquals("null+", URIUtil.addPaths(null,""),"");
 
80
        assertEquals("null+bbb", URIUtil.addPaths(null,"bbb"),"bbb");
 
81
        assertEquals("null+/", URIUtil.addPaths(null,"/"),"/");
 
82
        assertEquals("null+/bbb", URIUtil.addPaths(null,"/bbb"),"/bbb");
 
83
        
 
84
        assertEquals("+null", URIUtil.addPaths("",null),"");
 
85
        assertEquals("+", URIUtil.addPaths("",""),"");
 
86
        assertEquals("+bbb", URIUtil.addPaths("","bbb"),"bbb");
 
87
        assertEquals("+/", URIUtil.addPaths("","/"),"/");
 
88
        assertEquals("+/bbb", URIUtil.addPaths("","/bbb"),"/bbb");
 
89
        
 
90
        assertEquals("aaa+null", URIUtil.addPaths("aaa",null),"aaa");
 
91
        assertEquals("aaa+", URIUtil.addPaths("aaa",""),"aaa");
 
92
        assertEquals("aaa+bbb", URIUtil.addPaths("aaa","bbb"),"aaa/bbb");
 
93
        assertEquals("aaa+/", URIUtil.addPaths("aaa","/"),"aaa/");
 
94
        assertEquals("aaa+/bbb", URIUtil.addPaths("aaa","/bbb"),"aaa/bbb");
 
95
        
 
96
        assertEquals("/+null", URIUtil.addPaths("/",null),"/");
 
97
        assertEquals("/+", URIUtil.addPaths("/",""),"/");
 
98
        assertEquals("/+bbb", URIUtil.addPaths("/","bbb"),"/bbb");
 
99
        assertEquals("/+/", URIUtil.addPaths("/","/"),"/");
 
100
        assertEquals("/+/bbb", URIUtil.addPaths("/","/bbb"),"/bbb");
 
101
        
 
102
        assertEquals("aaa/+null", URIUtil.addPaths("aaa/",null),"aaa/");
 
103
        assertEquals("aaa/+", URIUtil.addPaths("aaa/",""),"aaa/");
 
104
        assertEquals("aaa/+bbb", URIUtil.addPaths("aaa/","bbb"),"aaa/bbb");
 
105
        assertEquals("aaa/+/", URIUtil.addPaths("aaa/","/"),"aaa/");
 
106
        assertEquals("aaa/+/bbb", URIUtil.addPaths("aaa/","/bbb"),"aaa/bbb");
 
107
        
 
108
        assertEquals(";JS+null", URIUtil.addPaths(";JS",null),";JS");
 
109
        assertEquals(";JS+", URIUtil.addPaths(";JS",""),";JS");
 
110
        assertEquals(";JS+bbb", URIUtil.addPaths(";JS","bbb"),"bbb;JS");
 
111
        assertEquals(";JS+/", URIUtil.addPaths(";JS","/"),"/;JS");
 
112
        assertEquals(";JS+/bbb", URIUtil.addPaths(";JS","/bbb"),"/bbb;JS");
 
113
        
 
114
        assertEquals("aaa;JS+null", URIUtil.addPaths("aaa;JS",null),"aaa;JS");
 
115
        assertEquals("aaa;JS+", URIUtil.addPaths("aaa;JS",""),"aaa;JS");
 
116
        assertEquals("aaa;JS+bbb", URIUtil.addPaths("aaa;JS","bbb"),"aaa/bbb;JS");
 
117
        assertEquals("aaa;JS+/", URIUtil.addPaths("aaa;JS","/"),"aaa/;JS");
 
118
        assertEquals("aaa;JS+/bbb", URIUtil.addPaths("aaa;JS","/bbb"),"aaa/bbb;JS");
 
119
        
 
120
        assertEquals("aaa;JS+null", URIUtil.addPaths("aaa/;JS",null),"aaa/;JS");
 
121
        assertEquals("aaa;JS+", URIUtil.addPaths("aaa/;JS",""),"aaa/;JS");
 
122
        assertEquals("aaa;JS+bbb", URIUtil.addPaths("aaa/;JS","bbb"),"aaa/bbb;JS");
 
123
        assertEquals("aaa;JS+/", URIUtil.addPaths("aaa/;JS","/"),"aaa/;JS");
 
124
        assertEquals("aaa;JS+/bbb", URIUtil.addPaths("aaa/;JS","/bbb"),"aaa/bbb;JS");
 
125
        
 
126
        assertEquals("?A=1+null", URIUtil.addPaths("?A=1",null),"?A=1");
 
127
        assertEquals("?A=1+", URIUtil.addPaths("?A=1",""),"?A=1");
 
128
        assertEquals("?A=1+bbb", URIUtil.addPaths("?A=1","bbb"),"bbb?A=1");
 
129
        assertEquals("?A=1+/", URIUtil.addPaths("?A=1","/"),"/?A=1");
 
130
        assertEquals("?A=1+/bbb", URIUtil.addPaths("?A=1","/bbb"),"/bbb?A=1");
 
131
        
 
132
        assertEquals("aaa?A=1+null", URIUtil.addPaths("aaa?A=1",null),"aaa?A=1");
 
133
        assertEquals("aaa?A=1+", URIUtil.addPaths("aaa?A=1",""),"aaa?A=1");
 
134
        assertEquals("aaa?A=1+bbb", URIUtil.addPaths("aaa?A=1","bbb"),"aaa/bbb?A=1");
 
135
        assertEquals("aaa?A=1+/", URIUtil.addPaths("aaa?A=1","/"),"aaa/?A=1");
 
136
        assertEquals("aaa?A=1+/bbb", URIUtil.addPaths("aaa?A=1","/bbb"),"aaa/bbb?A=1");
 
137
        
 
138
        assertEquals("aaa?A=1+null", URIUtil.addPaths("aaa/?A=1",null),"aaa/?A=1");
 
139
        assertEquals("aaa?A=1+", URIUtil.addPaths("aaa/?A=1",""),"aaa/?A=1");
 
140
        assertEquals("aaa?A=1+bbb", URIUtil.addPaths("aaa/?A=1","bbb"),"aaa/bbb?A=1");
 
141
        assertEquals("aaa?A=1+/", URIUtil.addPaths("aaa/?A=1","/"),"aaa/?A=1");
 
142
        assertEquals("aaa?A=1+/bbb", URIUtil.addPaths("aaa/?A=1","/bbb"),"aaa/bbb?A=1");
 
143
        
 
144
        assertEquals(";JS?A=1+null", URIUtil.addPaths(";JS?A=1",null),";JS?A=1");
 
145
        assertEquals(";JS?A=1+", URIUtil.addPaths(";JS?A=1",""),";JS?A=1");
 
146
        assertEquals(";JS?A=1+bbb", URIUtil.addPaths(";JS?A=1","bbb"),"bbb;JS?A=1");
 
147
        assertEquals(";JS?A=1+/", URIUtil.addPaths(";JS?A=1","/"),"/;JS?A=1");
 
148
        assertEquals(";JS?A=1+/bbb", URIUtil.addPaths(";JS?A=1","/bbb"),"/bbb;JS?A=1");
 
149
        
 
150
        assertEquals("aaa;JS?A=1+null", URIUtil.addPaths("aaa;JS?A=1",null),"aaa;JS?A=1");
 
151
        assertEquals("aaa;JS?A=1+", URIUtil.addPaths("aaa;JS?A=1",""),"aaa;JS?A=1");
 
152
        assertEquals("aaa;JS?A=1+bbb", URIUtil.addPaths("aaa;JS?A=1","bbb"),"aaa/bbb;JS?A=1");
 
153
        assertEquals("aaa;JS?A=1+/", URIUtil.addPaths("aaa;JS?A=1","/"),"aaa/;JS?A=1");
 
154
        assertEquals("aaa;JS?A=1+/bbb", URIUtil.addPaths("aaa;JS?A=1","/bbb"),"aaa/bbb;JS?A=1");
 
155
        
 
156
        assertEquals("aaa;JS?A=1+null", URIUtil.addPaths("aaa/;JS?A=1",null),"aaa/;JS?A=1");
 
157
        assertEquals("aaa;JS?A=1+", URIUtil.addPaths("aaa/;JS?A=1",""),"aaa/;JS?A=1");
 
158
        assertEquals("aaa;JS?A=1+bbb", URIUtil.addPaths("aaa/;JS?A=1","bbb"),"aaa/bbb;JS?A=1");
 
159
        assertEquals("aaa;JS?A=1+/", URIUtil.addPaths("aaa/;JS?A=1","/"),"aaa/;JS?A=1");
 
160
        assertEquals("aaa;JS?A=1+/bbb", URIUtil.addPaths("aaa/;JS?A=1","/bbb"),"aaa/bbb;JS?A=1");
 
161
 
 
162
    }
 
163
 
 
164
    /* ------------------------------------------------------------ */
 
165
    public void testCompactPath()
 
166
    {
 
167
        assertEquals("/foo/bar", URIUtil.compactPath("/foo/bar"));
 
168
        assertEquals("/foo/bar?a=b//c", URIUtil.compactPath("/foo/bar?a=b//c"));
 
169
 
 
170
        assertEquals("/foo/bar", URIUtil.compactPath("//foo//bar"));
 
171
        assertEquals("/foo/bar?a=b//c", URIUtil.compactPath("//foo//bar?a=b//c"));
 
172
        
 
173
        assertEquals("/foo/bar", URIUtil.compactPath("/foo///bar"));
 
174
        assertEquals("/foo/bar?a=b//c", URIUtil.compactPath("/foo///bar?a=b//c"));
 
175
    }
 
176
    
 
177
    /* ------------------------------------------------------------ */
 
178
    public void testParentPath()
 
179
    {
 
180
        assertEquals("parent /aaa/bbb/","/aaa/", URIUtil.parentPath("/aaa/bbb/"));
 
181
        assertEquals("parent /aaa/bbb","/aaa/", URIUtil.parentPath("/aaa/bbb"));
 
182
        assertEquals("parent /aaa/","/", URIUtil.parentPath("/aaa/"));
 
183
        assertEquals("parent /aaa","/", URIUtil.parentPath("/aaa"));
 
184
        assertEquals("parent /",null, URIUtil.parentPath("/"));
 
185
        assertEquals("parent null",null, URIUtil.parentPath(null));
 
186
 
 
187
    }
 
188
    
 
189
    /* ------------------------------------------------------------ */
 
190
    public void testCanonicalPath()
 
191
    {
 
192
        String[][] canonical = 
 
193
        {
 
194
            {"/aaa/bbb/","/aaa/bbb/"},
 
195
            {"/aaa//bbb/","/aaa//bbb/"},
 
196
            {"/aaa///bbb/","/aaa///bbb/"},
 
197
            {"/aaa/./bbb/","/aaa/bbb/"},
 
198
            {"/aaa/../bbb/","/bbb/"},
 
199
            {"/aaa/./../bbb/","/bbb/"},
 
200
            {"/aaa/bbb/ccc/../../ddd/","/aaa/ddd/"},
 
201
            {"./bbb/","bbb/"},
 
202
            {"./aaa/../bbb/","bbb/"},
 
203
            {"./",""},
 
204
            {".//",".//"},
 
205
            {".///",".///"},
 
206
            {"/.","/"},
 
207
            {"//.","//"},
 
208
            {"///.","///"},
 
209
            {"/","/"},
 
210
            {"aaa/bbb","aaa/bbb"},
 
211
            {"aaa/","aaa/"},
 
212
            {"aaa","aaa"},
 
213
            {"/aaa/bbb","/aaa/bbb"},
 
214
            {"/aaa//bbb","/aaa//bbb"},
 
215
            {"/aaa/./bbb","/aaa/bbb"},
 
216
            {"/aaa/../bbb","/bbb"},
 
217
            {"/aaa/./../bbb","/bbb"},
 
218
            {"./bbb","bbb"},
 
219
            {"./aaa/../bbb","bbb"},
 
220
            {"aaa/bbb/..","aaa/"},
 
221
            {"aaa/bbb/../","aaa/"},
 
222
            {"/aaa//../bbb","/aaa/bbb"},
 
223
            {"/aaa/./../bbb","/bbb"},
 
224
            {"./",""},
 
225
            {".",""},
 
226
            {"",""},
 
227
            {"..",null},
 
228
            {"./..",null},
 
229
            {"aaa/../..",null},
 
230
            {"/foo/bar/../../..",null},
 
231
            {"/../foo",null},
 
232
            {"/foo/.","/foo/"},
 
233
            {"a","a"},
 
234
            {"a/","a/"},
 
235
            {"a/.","a/"},
 
236
            {"a/..",""},
 
237
            {"a/../..",null},
 
238
            {"/foo/../bar//","/bar//"},
 
239
        };
 
240
 
 
241
        for (int t=0;t<canonical.length;t++)
 
242
            assertEquals( "canonical "+canonical[t][0],
 
243
                          canonical[t][1],
 
244
                          URIUtil.canonicalPath(canonical[t][0])
 
245
                          );
 
246
        
 
247
    }
 
248
    
 
249
 
 
250
}