UriComponent { public static MultivaluedMap<String, String> decodeQuery(final URI u, final boolean decode) { return decodeQuery(u.getRawQuery(), decode); } private  UriComponent(); static void validate(final String s, final Type t); static void validate(final String s, final Type t, final boolean template); static boolean valid(final String s, final Type t); static boolean valid(final String s, final Type t, final boolean template); static String contextualEncode(final String s, final Type t); static String contextualEncode(final String s, final Type t, final boolean template); static String encode(final String s, final Type t); static String encode(final String s, final Type t, final boolean template); static String encodeTemplateNames(String s); static String decode(final String s, final Type t); static MultivaluedMap<String, String> decodeQuery(final URI u, final boolean decode); static MultivaluedMap<String, String> decodeQuery(final String q, final boolean decode); static MultivaluedMap<String, String> decodeQuery(final String q, final boolean decodeNames,
                                                             final boolean decodeValues); static List<PathSegment> decodePath(final URI u, final boolean decode); static List<PathSegment> decodePath(final String path, final boolean decode); static void decodePathSegment(final List<PathSegment> segments, final String segment, final boolean decode); static MultivaluedMap<String, String> decodeMatrix(final String pathSegment, final boolean decode); static boolean isHexCharacter(final char c); static String fullRelativeUri(final URI uri);  }
@Test public void testDecodeQuery() { _testDecodeQuery(""); _testDecodeQuery("&"); _testDecodeQuery("="); _testDecodeQuery("&=junk"); _testDecodeQuery("&&"); _testDecodeQuery("a", "a", ""); _testDecodeQuery("a&", "a", ""); _testDecodeQuery("&a&", "a", ""); _testDecodeQuery("a&&", "a", ""); _testDecodeQuery("a=", "a", ""); _testDecodeQuery("a=&", "a", ""); _testDecodeQuery("a=&&", "a", ""); _testDecodeQuery("a=x", "a", "x"); _testDecodeQuery("a==x", "a", "=x"); _testDecodeQuery("a=x&", "a", "x"); _testDecodeQuery("a=x&&", "a", "x"); _testDecodeQuery("a=x&b=y", "a", "x", "b", "y"); _testDecodeQuery("a=x&&b=y", "a", "x", "b", "y"); _testDecodeQuery("+a+", true, " a ", ""); _testDecodeQuery("+a+=", true, " a ", ""); _testDecodeQuery("+a+=+x+", true, " a ", " x "); _testDecodeQuery("%20a%20=%20x%20", true, " a ", " x "); _testDecodeQuery("+a+", false, " a ", ""); _testDecodeQuery("+a+=", false, " a ", ""); _testDecodeQuery("+a+=+x+", false, " a ", "+x+"); _testDecodeQuery("%20a%20=%20x%20", false, " a ", "%20x%20"); _testDecodeQuery("+a+", false, true, "+a+", ""); _testDecodeQuery("+a+=", false, true, "+a+", ""); _testDecodeQuery("+a+=+x+", false, true, "+a+", " x "); _testDecodeQuery("%20a%20=%20x%20", false, true, "%20a%20", " x "); _testDecodeQuery("+a+", false, false, "+a+", ""); _testDecodeQuery("+a+=", false, false, "+a+", ""); _testDecodeQuery("+a+=+x+", false, false, "+a+", "+x+"); _testDecodeQuery("%20a%20=%20x%20", false, false, "%20a%20", "%20x%20"); }