1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
|
/*
* Copyright (C) 2009 The Guava Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.common.net;
import static com.google.common.escape.testing.EscaperAsserts.assertEscaping;
import static com.google.common.escape.testing.EscaperAsserts.assertUnescaped;
import static com.google.common.escape.testing.EscaperAsserts.assertUnicodeEscaping;
import static com.google.common.net.UrlEscapers.urlFormParameterEscaper;
import static com.google.common.net.UrlEscapers.urlFragmentEscaper;
import static com.google.common.net.UrlEscapers.urlPathSegmentEscaper;
import com.google.common.annotations.GwtCompatible;
import com.google.common.escape.UnicodeEscaper;
import junit.framework.TestCase;
/**
* Tests for the {@link UrlEscapers} class.
*
* @author David Beaumont
*/
@GwtCompatible
public class UrlEscapersTest extends TestCase {
/**
* Helper to assert common expected behaviour of uri escapers. You should call
* assertBasicUrlEscaper() unless the escaper explicitly does not escape '%'.
*/
static void assertBasicUrlEscaperExceptPercent(UnicodeEscaper e) {
// URL escapers should throw null pointer exceptions for null input
try {
e.escape((String) null);
fail("Escaping null string should throw exception");
} catch (NullPointerException x) {
// pass
}
// All URL escapers should leave 0-9, A-Z, a-z unescaped
assertUnescaped(e, 'a');
assertUnescaped(e, 'z');
assertUnescaped(e, 'A');
assertUnescaped(e, 'Z');
assertUnescaped(e, '0');
assertUnescaped(e, '9');
// Unreserved characters used in java.net.URLEncoder
assertUnescaped(e, '-');
assertUnescaped(e, '_');
assertUnescaped(e, '.');
assertUnescaped(e, '*');
assertEscaping(e, "%00", '\u0000'); // nul
assertEscaping(e, "%7F", '\u007f'); // del
assertEscaping(e, "%C2%80", '\u0080'); // xx-00010,x-000000
assertEscaping(e, "%DF%BF", '\u07ff'); // xx-11111,x-111111
assertEscaping(e, "%E0%A0%80", '\u0800'); // xxx-0000,x-100000,x-00,0000
assertEscaping(e, "%EF%BF%BF", '\uffff'); // xxx-1111,x-111111,x-11,1111
assertUnicodeEscaping(e, "%F0%90%80%80", '\uD800', '\uDC00');
assertUnicodeEscaping(e, "%F4%8F%BF%BF", '\uDBFF', '\uDFFF');
assertEquals("", e.escape(""));
assertEquals("safestring", e.escape("safestring"));
assertEquals("embedded%00null", e.escape("embedded\0null"));
assertEquals("max%EF%BF%BFchar", e.escape("max\uffffchar"));
}
// Helper to assert common expected behaviour of uri escapers.
static void assertBasicUrlEscaper(UnicodeEscaper e) {
assertBasicUrlEscaperExceptPercent(e);
// The escape character must always be escaped
assertEscaping(e, "%25", '%');
}
public void testUrlFormParameterEscaper() {
UnicodeEscaper e = (UnicodeEscaper) urlFormParameterEscaper();
// Verify that these are the same escaper (as documented)
assertSame(e, urlFormParameterEscaper());
assertBasicUrlEscaper(e);
/*
* Specified as safe by RFC 2396 but not by java.net.URLEncoder. These tests will start failing
* when the escaper is made compliant with RFC 2396, but that's a good thing (just change them
* to assertUnescaped).
*/
assertEscaping(e, "%21", '!');
assertEscaping(e, "%28", '(');
assertEscaping(e, "%29", ')');
assertEscaping(e, "%7E", '~');
assertEscaping(e, "%27", '\'');
// Plus for spaces
assertEscaping(e, "+", ' ');
assertEscaping(e, "%2B", '+');
assertEquals("safe+with+spaces", e.escape("safe with spaces"));
assertEquals("foo%40bar.com", e.escape("foo@bar.com"));
}
public void testUrlPathSegmentEscaper() {
UnicodeEscaper e = (UnicodeEscaper) urlPathSegmentEscaper();
assertPathEscaper(e);
assertUnescaped(e, '+');
}
static void assertPathEscaper(UnicodeEscaper e) {
assertBasicUrlEscaper(e);
assertUnescaped(e, '!');
assertUnescaped(e, '\'');
assertUnescaped(e, '(');
assertUnescaped(e, ')');
assertUnescaped(e, '~');
assertUnescaped(e, ':');
assertUnescaped(e, '@');
// Don't use plus for spaces
assertEscaping(e, "%20", ' ');
assertEquals("safe%20with%20spaces", e.escape("safe with spaces"));
assertEquals("foo@bar.com", e.escape("foo@bar.com"));
}
public void testUrlFragmentEscaper() {
UnicodeEscaper e = (UnicodeEscaper) urlFragmentEscaper();
assertUnescaped(e, '+');
assertUnescaped(e, '/');
assertUnescaped(e, '?');
assertPathEscaper(e);
}
}
|