1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package com.google.common.net;
18
19 import static com.google.common.escape.testing.EscaperAsserts.assertEscaping;
20 import static com.google.common.escape.testing.EscaperAsserts.assertUnescaped;
21 import static com.google.common.escape.testing.EscaperAsserts.assertUnicodeEscaping;
22 import static com.google.common.net.UrlEscapers.urlFormParameterEscaper;
23 import static com.google.common.net.UrlEscapers.urlFragmentEscaper;
24 import static com.google.common.net.UrlEscapers.urlPathSegmentEscaper;
25
26 import com.google.common.annotations.GwtCompatible;
27 import com.google.common.escape.UnicodeEscaper;
28
29 import junit.framework.TestCase;
30
31
32
33
34
35
36 @GwtCompatible
37 public class UrlEscapersTest extends TestCase {
38
39
40
41
42 static void assertBasicUrlEscaperExceptPercent(UnicodeEscaper e) {
43
44 try {
45 e.escape((String) null);
46 fail("Escaping null string should throw exception");
47 } catch (NullPointerException x) {
48
49 }
50
51
52 assertUnescaped(e, 'a');
53 assertUnescaped(e, 'z');
54 assertUnescaped(e, 'A');
55 assertUnescaped(e, 'Z');
56 assertUnescaped(e, '0');
57 assertUnescaped(e, '9');
58
59
60 assertUnescaped(e, '-');
61 assertUnescaped(e, '_');
62 assertUnescaped(e, '.');
63 assertUnescaped(e, '*');
64
65 assertEscaping(e, "%00", '\u0000');
66 assertEscaping(e, "%7F", '\u007f');
67 assertEscaping(e, "%C2%80", '\u0080');
68 assertEscaping(e, "%DF%BF", '\u07ff');
69 assertEscaping(e, "%E0%A0%80", '\u0800');
70 assertEscaping(e, "%EF%BF%BF", '\uffff');
71 assertUnicodeEscaping(e, "%F0%90%80%80", '\uD800', '\uDC00');
72 assertUnicodeEscaping(e, "%F4%8F%BF%BF", '\uDBFF', '\uDFFF');
73
74 assertEquals("", e.escape(""));
75 assertEquals("safestring", e.escape("safestring"));
76 assertEquals("embedded%00null", e.escape("embedded\0null"));
77 assertEquals("max%EF%BF%BFchar", e.escape("max\uffffchar"));
78 }
79
80
81 static void assertBasicUrlEscaper(UnicodeEscaper e) {
82 assertBasicUrlEscaperExceptPercent(e);
83
84 assertEscaping(e, "%25", '%');
85 }
86
87 public void testUrlFormParameterEscaper() {
88 UnicodeEscaper e = (UnicodeEscaper) urlFormParameterEscaper();
89
90 assertSame(e, urlFormParameterEscaper());
91 assertBasicUrlEscaper(e);
92
93
94
95
96
97
98 assertEscaping(e, "%21", '!');
99 assertEscaping(e, "%28", '(');
100 assertEscaping(e, "%29", ')');
101 assertEscaping(e, "%7E", '~');
102 assertEscaping(e, "%27", '\'');
103
104
105 assertEscaping(e, "+", ' ');
106 assertEscaping(e, "%2B", '+');
107
108 assertEquals("safe+with+spaces", e.escape("safe with spaces"));
109 assertEquals("foo%40bar.com", e.escape("foo@bar.com"));
110 }
111
112 public void testUrlPathSegmentEscaper() {
113 UnicodeEscaper e = (UnicodeEscaper) urlPathSegmentEscaper();
114 assertPathEscaper(e);
115 assertUnescaped(e, '+');
116 }
117
118 static void assertPathEscaper(UnicodeEscaper e) {
119 assertBasicUrlEscaper(e);
120
121 assertUnescaped(e, '!');
122 assertUnescaped(e, '\'');
123 assertUnescaped(e, '(');
124 assertUnescaped(e, ')');
125 assertUnescaped(e, '~');
126 assertUnescaped(e, ':');
127 assertUnescaped(e, '@');
128
129
130 assertEscaping(e, "%20", ' ');
131
132 assertEquals("safe%20with%20spaces", e.escape("safe with spaces"));
133 assertEquals("foo@bar.com", e.escape("foo@bar.com"));
134 }
135
136 public void testUrlFragmentEscaper() {
137 UnicodeEscaper e = (UnicodeEscaper) urlFragmentEscaper();
138 assertUnescaped(e, '+');
139 assertUnescaped(e, '/');
140 assertUnescaped(e, '?');
141
142 assertPathEscaper(e);
143 }
144 }