1561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/*
2561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  Licensed to the Apache Software Foundation (ASF) under one or more
3561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  contributor license agreements.  See the NOTICE file distributed with
4561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  this work for additional information regarding copyright ownership.
5561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  The ASF licenses this file to You under the Apache License, Version 2.0
6561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  (the "License"); you may not use this file except in compliance with
7561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  the License.  You may obtain a copy of the License at
8561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
9561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *     http://www.apache.org/licenses/LICENSE-2.0
10561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
11561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  Unless required by applicable law or agreed to in writing, software
12561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  distributed under the License is distributed on an "AS IS" BASIS,
13561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  See the License for the specific language governing permissions and
15561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  limitations under the License.
16561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
17561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
18561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespackage org.apache.harmony.luni.tests.java.net;
19561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
20561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.MalformedURLException;
21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.URI;
22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.URISyntaxException;
23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestCase;
24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport org.apache.harmony.testframework.serialization.SerializationTest;
25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class URITest extends TestCase {
27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private URI[] uris;
29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private URI[] getUris() throws URISyntaxException {
31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        if (uris != null) {
32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return uris;
33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        uris = new URI[] {
36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // single arg constructor
37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new URI(
38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        "http://user%60%20info@host/a%20path?qu%60%20ery#fr%5E%20ag"),
39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // escaped octets for illegal chars
40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new URI(
41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        "http://user%C3%9F%C2%A3info@host:80/a%E2%82%ACpath?qu%C2%A9%C2%AEery#fr%C3%A4%C3%A8g"),
42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // escaped octets for unicode chars
43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new URI(
44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        "ascheme://user\u00DF\u00A3info@host:0/a\u20ACpath?qu\u00A9\u00AEery#fr\u00E4\u00E8g"),
45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // unicode chars equivalent to = new
46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // URI("ascheme://user\u00df\u00a3info@host:0/a\u0080path?qu\u00a9\u00aeery#fr\u00e4\u00e8g"),
47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // multiple arg constructors
49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new URI("http", "user%60%20info", "host", 80, "/a%20path", //$NON-NLS-4$
50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        "qu%60%20ery", "fr%5E%20ag"),
51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // escaped octets for illegal
52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new URI("http", "user%C3%9F%C2%A3info", "host", -1,
53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        "/a%E2%82%ACpath", "qu%C2%A9%C2%AEery",
54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        "fr%C3%A4%C3%A8g"),
55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // escaped octets for unicode
56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new URI("ascheme", "user\u00DF\u00A3info", "host", 80,
57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        "/a\u20ACpath", "qu\u00A9\u00AEery", "fr\u00E4\u00E8g"),
58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // unicode chars equivalent to = new
59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // URI("ascheme", "user\u00df\u00a3info", "host", 80,
60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // "/a\u0080path", "qu\u00a9\u00aeery", "fr\u00e4\u00e8g"),
61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new URI("http", "user` info", "host", 81, "/a path", "qu` ery",
62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        "fr^ ag"), // illegal chars
63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new URI("http", "user%info", "host", 0, "/a%path", "que%ry",
64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        "f%rag"),
65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // % as illegal char, not escaped octet
66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // urls with undefined components
68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new URI("mailto", "user@domain.com", null),
69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // no host, path, query or fragment
70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new URI("../adirectory/file.html#"),
71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // relative path with empty fragment;
72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new URI("news", "comp.infosystems.www.servers.unix", null), //
73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new URI(null, null, null, "fragment"), // only fragment
74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new URI("telnet://server.org"), // only host
75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new URI("http://reg:istry?query"),
76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // malformed hostname, therefore registry-based,
77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // with query
78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new URI("file:///c:/temp/calculate.pl?"),
79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // empty authority, non empty path, empty query
80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        };
81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        return uris;
82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.URI#URI(java.lang.String)
86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_ConstructorLjava_lang_String() throws URISyntaxException {
88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // tests for public URI(String uri) throws URISyntaxException
89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String[] constructorTests = new String[] {
91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "http://user@www.google.com:45/search?q=helpinfo#somefragment",
92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // http with authority, query and fragment
93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "ftp://ftp.is.co.za/rfc/rfc1808.txt", // ftp
94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "gopher://spinaltap.micro.umn.edu/00/Weather/California/Los%20Angeles", // gopher
95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "mailto:mduerst@ifi.unizh.ch", // mailto
96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "news:comp.infosystems.www.servers.unix", // news
97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "telnet://melvyl.ucop.edu/", // telnet
98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "http://123.24.17.98/test", // IPv4 authority
99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "http://www.google.com:80/test",// domain name authority
100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "http://joe@[3ffe:2a00:100:7031::1]:80/test",
101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // IPv6 authority, with userinfo and port
102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "/relative", // relative starting with /
103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "//relative", // relative starting with //
104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "relative", // relative with no /
105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "#fragment",// relative just with fragment
106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "http://user@host:80", // UI, host,port
107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "http://user@host", // ui, host
108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "http://host", // host
109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "http://host:80", // host,port
110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "http://joe@:80", // ui, port (becomes registry-based)
111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "file:///foo/bar", // empty authority, non empty path
112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "ht?tp://hoe@host:80", // miscellaneous tests
113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "mai/lto:hey?joe#man", "http://host/a%20path#frag",
114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // path with an escaped octet for space char
115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "http://host/a%E2%82%ACpath#frag",
116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // path with escaped octet for unicode char, not USASCII
117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "http://host/a\u20ACpath#frag",
118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // path with unicode char, not USASCII equivalent to
119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // = "http://host/a\u0080path#frag",
120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "http://host%20name/", // escaped octets in host (becomes
121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // registry based)
122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "http://host\u00DFname/", // unicodechar in host (becomes
123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // registry based)
124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // equivalent to = "http://host\u00dfname/",
125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "ht123-+tp://www.google.com:80/test", // legal chars in scheme
126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        };
127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < constructorTests.length; i++) {
129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new URI(constructorTests[i]);
131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (URISyntaxException e) {
132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("Failed to construct URI for: " + constructorTests[i]
133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        + " : " + e);
134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String[] constructorTestsInvalid = new String[] {
138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "http:///a path#frag", // space char in path, not in escaped
139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // octet form, with no host
140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "http://host/a[path#frag", // an illegal char, not in escaped
141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // octet form, should throw an
142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // exception
143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "http://host/a%path#frag", // invalid escape sequence in path
144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "http://host/a%#frag", // incomplete escape sequence in path
145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "http://host#a frag", // space char in fragment, not in
147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // escaped octet form, no path
148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "http://host/a#fr#ag", // illegal char in fragment
149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "http:///path#fr%ag", // invalid escape sequence in fragment,
150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // with no host
151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "http://host/path#frag%", // incomplete escape sequence in
152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // fragment
153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "http://host/path?a query#frag", // space char in query, not
155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // in escaped octet form
156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "http://host?query%ag", // invalid escape sequence in query, no
157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // path
158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "http:///path?query%", // incomplete escape sequence in query,
159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // with no host
160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "mailto:user^name@fklkf.com" // invalid char in scheme
162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // specific part
163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        };
164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int[] constructorTestsInvalidIndices = new int[] { 9, 13, 13, 13, 13,
166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                16, 15, 21, 18, 17, 18, 11 };
167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < constructorTestsInvalid.length; i++) {
169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new URI(constructorTestsInvalid[i]);
171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("Failed to throw URISyntaxException for: "
172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        + constructorTestsInvalid[i]);
173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (URISyntaxException e) {
174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertTrue("Wrong index in URISytaxException for: "
175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        + constructorTestsInvalid[i] + " expected: "
176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        + constructorTestsInvalidIndices[i] + ", received: "
177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        + e.getIndex(),
178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        e.getIndex() == constructorTestsInvalidIndices[i]);
179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String invalid2[] = {
183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // authority validation
184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "http://user@[3ffe:2x00:100:7031::1]:80/test", // malformed
185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // IPv6 authority
186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "http://[ipv6address]/apath#frag", // malformed ipv6 address
187561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "http://[ipv6address/apath#frag", // malformed ipv6 address
188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "http://ipv6address]/apath#frag", // illegal char in host name
189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "http://ipv6[address/apath#frag",
190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "http://ipv6addr]ess/apath#frag",
191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "http://ipv6address[]/apath#frag",
192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // illegal char in username...
193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "http://us[]er@host/path?query#frag", "http://host name/path", // illegal
194561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // char
195561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // in
196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // authority
197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "http://host^name#fragment", // illegal char in authority
198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "telnet://us er@hostname/", // illegal char in authority
199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // missing components
200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "//", // Authority expected
201561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "ascheme://", // Authority expected
202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "ascheme:", // Scheme-specific part expected
203561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // scheme validation
204561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "a scheme://reg/", // illegal char
205561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "1scheme://reg/", // non alpha char as 1st char
206561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "asche\u00dfme:ssp", // unicode char , not USASCII
207561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "asc%20heme:ssp" // escape octets
208561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        };
209561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
210561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < invalid2.length; i++) {
211561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
212561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new URI(invalid2[i]);
213561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("Failed to throw URISyntaxException for: " + invalid2[i]);
214561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (URISyntaxException e) {
215561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
216561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
217561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
218561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Regression test for HARMONY-23
219561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
220561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            new URI("%3");
221561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Assert 0: URI constructor failed to throw exception on invalid input.");
222561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (URISyntaxException e) {
223561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
224561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals("Assert 1: Wrong index in URISyntaxException.", 0, e
225561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .getIndex());
226561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
227561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
228561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Regression test for HARMONY-25
229561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // if port value is negative, the authority should be considered
230561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // registry-based.
231561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        URI uri = new URI("http://host:-8096/path/index.html");
232561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Assert 2: returned wrong port value,", -1, uri.getPort());
233561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull("Assert 3: returned wrong host value,", uri.getHost());
234561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
235561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            uri.parseServerAuthority();
236561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Assert 4: Expected URISyntaxException");
237561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (URISyntaxException e) {
238561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
239561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
240561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
241561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        uri = new URI("http", "//myhost:-8096", null);
242561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Assert 5: returned wrong port value,", -1, uri.getPort());
243561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull("Assert 6: returned wrong host value,", uri.getHost());
244561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
245561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            uri.parseServerAuthority();
246561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Assert 7: Expected URISyntaxException");
247561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (URISyntaxException e) {
248561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
249561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
250561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
251561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
252561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
253561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.URI#URI(java.lang.String)
254561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
255561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_URI_String() {
256561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
257561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            URI myUri = new URI(":abc@mymail.com");
258561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("TestA, URISyntaxException expected, but not received.");
259561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (URISyntaxException e) {
260561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals("TestA, Wrong URISyntaxException index, ", 0, e
261561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .getIndex());
262561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
263561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
264561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
265561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            URI uri = new URI("path[one");
266561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("TestB, URISyntaxException expected, but not received.");
267561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (URISyntaxException e1) {
268561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals("TestB, Wrong URISyntaxException index, ", 4, e1
269561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .getIndex());
270561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
271561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
272561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
273561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            URI uri = new URI(" ");
274561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("TestC, URISyntaxException expected, but not received.");
275561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (URISyntaxException e2) {
276561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals("TestC, Wrong URISyntaxException index, ", 0, e2
277561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .getIndex());
278561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
279561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
280561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
281561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
282561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.URI#URI(java.lang.String, java.lang.String,
283561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     *        java.lang.String)
284561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
285561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_ConstructorLjava_lang_StringLjava_lang_StringLjava_lang_String()
286561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            throws URISyntaxException {
287561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        URI uri = new URI("mailto", "mduerst@ifi.unizh.ch", null);
288561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull("wrong userinfo", uri.getUserInfo());
289561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull("wrong hostname", uri.getHost());
290561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull("wrong authority", uri.getAuthority());
291561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("wrong port number", -1, uri.getPort());
292561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull("wrong path", uri.getPath());
293561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull("wrong query", uri.getQuery());
294561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull("wrong fragment", uri.getFragment());
295561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("wrong SchemeSpecificPart", "mduerst@ifi.unizh.ch", uri
296561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getSchemeSpecificPart());
297561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
298561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // scheme specific part can not be null
299561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
300561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            uri = new URI("mailto", null, null);
301561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Expected URISyntaxException");
302561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (URISyntaxException e) {
303561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
304561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
305561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
306561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // scheme needs to start with an alpha char
307561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
308561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            uri = new URI("3scheme", "//authority/path", "fragment");
309561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Expected URISyntaxException");
310561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (URISyntaxException e) {
311561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
312561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
313561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
314561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // scheme can not be empty string
315561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
316561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            uri = new URI("", "//authority/path", "fragment");
317561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Expected URISyntaxException");
318561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (URISyntaxException e) {
319561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
320561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
321561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
322561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
323561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
324561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.URI#URI(java.lang.String, java.lang.String,
325561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     *        java.lang.String, int, java.lang.String, java.lang.String,
326561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     *        java.lang.String)
327561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
328561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_ConstructorLjava_lang_StringLjava_lang_StringLjava_lang_StringILjava_lang_StringLjava_lang_StringLjava_lang_String() {
329561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // check for URISyntaxException for invalid Server Authority
330561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        construct1("http", "user", "host\u00DFname", -1, "/file", "query",
331561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "fragment"); // unicode chars in host name
332561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // equivalent to construct1("http", "user", "host\u00dfname", -1,
333561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // "/file", "query", "fragment");
334561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        construct1("http", "user", "host%20name", -1, "/file", "query",
335561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "fragment"); // escaped octets in host name
336561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        construct1("http", "user", "host name", -1, "/file", "query",
337561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "fragment"); // illegal char in host name
338561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        construct1("http", "user", "host]name", -1, "/file", "query",
339561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "fragment"); // illegal char in host name
340561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
341561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // missing host name
342561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        construct1("http", "user", "", 80, "/file", "query", "fragment");
343561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
344561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // missing host name
345561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        construct1("http", "user", "", -1, "/file", "query", "fragment");
346561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
347561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // malformed ipv4 address
348561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        construct1("telnet", null, "256.197.221.200", -1, null, null, null);
349561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
350561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // malformed ipv4 address
351561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        construct1("ftp", null, "198.256.221.200", -1, null, null, null);
352561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
353561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // These tests fail on other implementations...
354561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // construct1("http", "user", null, 80, "/file", "query", "fragment");
355561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // //missing host name
356561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // construct1("http", "user", null, -1, "/file", "query", "fragment");
357561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // //missing host name
358561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
359561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // check for URISyntaxException for invalid scheme
360561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        construct1("ht\u00DFtp", "user", "hostname", -1, "/file", "query",
361561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "fragment"); // unicode chars in scheme
362561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // equivalent to construct1("ht\u00dftp", "user", "hostname", -1,
363561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // "/file",
364561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // "query", "fragment");
365561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
366561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        construct1("ht%20tp", "user", "hostname", -1, "/file", "query",
367561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "fragment"); // escaped octets in scheme
368561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        construct1("ht tp", "user", "hostname", -1, "/file", "query",
369561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "fragment"); // illegal char in scheme
370561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        construct1("ht]tp", "user", "hostname", -1, "/file", "query",
371561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "fragment"); // illegal char in scheme
372561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
373561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // relative path with scheme
374561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        construct1("http", "user", "hostname", -1, "relative", "query",
375561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "fragment"); // unicode chars in scheme
376561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
377561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // functional test
378561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        URI uri;
379561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
380561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            uri = new URI("http", "us:e@r", "hostname", 85, "/file/dir#/qu?e/",
381561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    "qu?er#y", "frag#me?nt");
382561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals("wrong userinfo", "us:e@r", uri.getUserInfo());
383561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals("wrong hostname", "hostname", uri.getHost());
384561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals("wrong port number", 85, uri.getPort());
385561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals("wrong path", "/file/dir#/qu?e/", uri.getPath());
386561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals("wrong query", "qu?er#y", uri.getQuery());
387561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals("wrong fragment", "frag#me?nt", uri.getFragment());
388561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals("wrong SchemeSpecificPart",
389561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    "//us:e@r@hostname:85/file/dir#/qu?e/?qu?er#y", uri
390561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            .getSchemeSpecificPart());
391561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (URISyntaxException e) {
392561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Unexpected Exception: " + e);
393561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
394561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
395561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
396561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
397561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * helper method checking if the 7 arg constructor throws URISyntaxException
398561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * for a given set of parameters
399561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
400561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private void construct1(String scheme, String userinfo, String host,
401561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            int port, String path, String query, String fragment) {
402561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
403561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            URI uri = new URI(scheme, userinfo, host, port, path, query,
404561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    fragment);
405561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Expected URISyntaxException not thrown for URI: "
406561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    + uri.toString());
407561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (URISyntaxException e) {
408561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // this constructor throws URISyntaxException for malformed server
409561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // based authorities
410561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
411561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
412561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
413561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
414561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @throws URISyntaxException
415561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.URI#URI(java.lang.String, java.lang.String,
416561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     *        java.lang.String, java.lang.String)
417561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
418561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_ConstructorLjava_lang_StringLjava_lang_StringLjava_lang_StringLjava_lang_String()
419561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            throws URISyntaxException {
420561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // relative path
421561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
422561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            URI myUri = new URI("http", "www.joe.com", "relative", "jimmy");
423561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("URISyntaxException expected but not received.");
424561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (URISyntaxException e) {
425561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
426561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
427561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
428561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // valid parameters for this constructor
429561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        URI uri;
430561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
431561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        uri = new URI("http", "www.joe.com", "/path", "jimmy");
432561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
433561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // illegal char in path
434561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        uri = new URI("http", "www.host.com", "/path?q", "somefragment");
435561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
436561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // empty fragment
437561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        uri = new URI("ftp", "ftp.is.co.za", "/rfc/rfc1808.txt", "");
438561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
439561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // path with escaped octet for unicode char, not USASCII
440561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        uri = new URI("http", "host", "/a%E2%82%ACpath", "frag");
441561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
442561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // frag with unicode char, not USASCII
443561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // equivalent to = uri = new URI("http", "host", "/apath",
444561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // "\u0080frag");
445561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        uri = new URI("http", "host", "/apath", "\u20ACfrag");
446561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
447561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Regression test for Harmony-1693
448561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        new URI(null, null, null, null);
449561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
450561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // regression for Harmony-1346
451561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
452561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            uri = new URI("http", ":2:3:4:5:6:7:8", "/apath", "\u20ACfrag");
453561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should throw URISyntaxException");
454561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (URISyntaxException e) {
455561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
456561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
457561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
458561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
459561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
460561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @throws URISyntaxException
461561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.URI#URI(java.lang.String, java.lang.String,
462561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     *        java.lang.String, java.lang.String, java.lang.String)
463561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
464561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_ConstructorLjava_lang_StringLjava_lang_StringLjava_lang_StringLjava_lang_StringLjava_lang_String()
465561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            throws URISyntaxException {
466561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // URISyntaxException on relative path
467561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
468561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            URI myUri = new URI("http", "www.joe.com", "relative", "query",
469561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    "jimmy");
470561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("URISyntaxException expected but not received.");
471561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (URISyntaxException e) {
472561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
473561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
474561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
475561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // test if empty authority is parsed into undefined host, userinfo and
476561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // port and if unicode chars and escaped octets in components are
477561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // preserved, illegal chars are quoted
478561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        URI uri = new URI("ht12-3+tp", "", "/p#a%E2%82%ACth", "q^u%25ery",
479561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "f/r\u00DFag");
480561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
481561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("wrong scheme", "ht12-3+tp", uri.getScheme());
482561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull("wrong authority", uri.getUserInfo());
483561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull("wrong userinfo", uri.getUserInfo());
484561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull("wrong hostname", uri.getHost());
485561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("wrong port number", -1, uri.getPort());
486561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("wrong path", "/p#a%E2%82%ACth", uri.getPath());
487561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("wrong query", "q^u%25ery", uri.getQuery());
488561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("wrong fragment", "f/r\u00DFag", uri.getFragment());
489561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // equivalent to = assertTrue("wrong fragment",
490561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // uri.getFragment().equals("f/r\u00dfag"));
491561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("wrong SchemeSpecificPart", "///p#a%E2%82%ACth?q^u%25ery",
492561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                uri.getSchemeSpecificPart());
493561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("wrong RawSchemeSpecificPart",
494561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "///p%23a%25E2%2582%25ACth?q%5Eu%2525ery", uri
495561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        .getRawSchemeSpecificPart());
496561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(
497561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "incorrect toString()",
498561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "ht12-3+tp:///p%23a%25E2%2582%25ACth?q%5Eu%2525ery#f/r\u00dfag",
499561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                uri.toString());
500561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("incorrect toASCIIString()",
501561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
502561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        "ht12-3+tp:///p%23a%25E2%2582%25ACth?q%5Eu%2525ery#f/r%C3%9Fag", uri
503561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .toASCIIString());
504561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
505561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
506561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
507561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @throws URISyntaxException
508561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.URI#URI(java.lang.String, java.lang.String,
509561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     *        java.lang.String, java.lang.String, java.lang.String)
510561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
511561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_fiveArgConstructor() throws URISyntaxException {
512561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // accept [] as part of valid ipv6 host name
513561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        URI uri = new URI("ftp", "[0001:1234::0001]", "/dir1/dir2", "query",
514561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "frag");
515561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Returned incorrect host", "[0001:1234::0001]", uri
516561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getHost());
517561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
518561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // do not accept [] as part of invalid ipv6 address
519561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
520561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            uri = new URI("ftp", "[www.abc.com]", "/dir1/dir2", "query", "frag");
521561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Expected URISyntaxException for invalid ipv6 address");
522561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (URISyntaxException e) {
523561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
524561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
525561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
526561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // do not accept [] as part of user info
527561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
528561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            uri = new URI("ftp", "[user]@host", "/dir1/dir2", "query", "frag");
529561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Expected URISyntaxException invalid user info");
530561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (URISyntaxException e) {
531561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
532561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
533561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
534561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
535561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
536561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.URI#compareTo(java.lang.Object)
537561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
538561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_compareToLjava_lang_Object() throws Exception {
539561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // compareTo tests
540561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
541561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String[][] compareToData = new String[][] {
542561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // scheme tests
543561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "http:test", "" }, // scheme null, scheme not null
544561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "", "http:test" }, // reverse
545561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "http:test", "ftp:test" }, // schemes different
546561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "/test", "/test" }, // schemes null
547561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "http://joe", "http://joe" }, // schemes same
548561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "http://joe", "hTTp://joe" }, // schemes same ignoring case
549561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
550561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // opacity : one opaque, the other not
551561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "http:opaque", "http://nonopaque" },
552561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "http://nonopaque", "http:opaque" },
553561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "mailto:abc", "mailto:abc" }, // same ssp
554561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "mailto:abC", "mailto:Abc" }, // different, by case
555561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "mailto:abc", "mailto:def" }, // different by letter
556561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "mailto:abc#ABC", "mailto:abc#DEF" },
557561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "mailto:abc#ABC", "mailto:abc#ABC" },
558561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "mailto:abc#DEF", "mailto:abc#ABC" },
559561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
560561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // hierarchical tests..
561561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
562561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // different authorities
563561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "//www.test.com/test", "//www.test2.com/test" },
564561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
565561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "/nullauth", "//nonnullauth/test" }, // one null authority
566561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "//nonnull", "/null" },
567561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "/hello", "/hello" }, // both authorities null
568561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // different userinfo
569561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "http://joe@test.com:80", "http://test.com" },
570561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "http://jim@test.com", "http://james@test.com" },
571561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // different hostnames
572561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "http://test.com", "http://toast.com" },
573561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "http://test.com:80", "test.com:87" }, // different ports
574561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "http://test.com", "http://test.com:80" },
575561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // different paths
576561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "http://test.com:91/dir1", "http://test.com:91/dir2" },
577561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // one null host
578561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "http:/hostless", "http://hostfilled.com/hostless" },
579561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
580561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // queries
581561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "http://test.com/dir?query", "http://test.com/dir?koory" },
582561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "/test?query", "/test" },
583561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "/test", "/test?query" },
584561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "/test", "/test" },
585561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
586561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // fragments
587561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "ftp://test.com/path?query#frag", "ftp://test.com/path?query" },
588561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "ftp://test.com/path?query", "ftp://test.com/path?query#frag" },
589561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "#frag", "#frag" }, { "p", "" },
590561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
591561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "http://www.google.com", "#test" } // miscellaneous
592561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        };
593561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
594561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int[] compareToResults = { 1, -1, 2, 0, 0, 0, 1, -1, 0, 32, -3, -3, 0,
595561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                3, -4, -1, 1, 0, 1, 8, -10, -12, -81, -1, -1, 6, 1, -1, 0, 1,
596561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                -1, 0, 1, 1, };
597561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
598561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // test compareTo functionality
599561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < compareToResults.length; i++) {
600561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            URI b = new URI(compareToData[i][0]);
601561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            URI r = new URI(compareToData[i][1]);
602561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (b.compareTo(r) != compareToResults[i]) {
603561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("Test " + i + ": " + compareToData[i][0] + " compared to "
604561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        + compareToData[i][1] + " -> " + b.compareTo(r)
605561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        + " rather than " + compareToResults[i]);
606561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
607561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
608561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
609561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
610561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
611561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @throws URISyntaxException
612561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.URI#compareTo(java.lang.Object)
613561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
614561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_compareTo2() throws URISyntaxException {
615561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        URI uri, uri2;
616561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
617561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // test URIs with host names with different casing
618561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        uri = new URI("http://AbC.cOm/root/news");
619561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        uri2 = new URI("http://aBc.CoM/root/news");
620561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("TestA", 0, uri.compareTo(uri2));
621561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("TestB", 0, uri.compareTo(uri2));
622561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
623561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // test URIs with one undefined component
624561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        uri = new URI("http://abc.com:80/root/news");
625561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        uri2 = new URI("http://abc.com/root/news");
626561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("TestC", uri.compareTo(uri2) > 0);
627561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("TestD", uri2.compareTo(uri) < 0);
628561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
629561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // test URIs with one undefined component
630561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        uri = new URI("http://user@abc.com/root/news");
631561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        uri2 = new URI("http://abc.com/root/news");
632561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("TestE", uri.compareTo(uri2) > 0);
633561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("TestF", uri2.compareTo(uri) < 0);
634561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
635561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
636561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
637561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.URI#create(java.lang.String)
638561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
639561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_createLjava_lang_String() {
640561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
641561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            URI myUri = URI.create("a scheme://reg/");
642561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("IllegalArgumentException expected but not received.");
643561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IllegalArgumentException e) {
644561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
645561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
646561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
647561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
648561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
649561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.URI#equals(java.lang.Object)
650561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
651561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_equalsLjava_lang_Object() throws Exception {
652561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String[][] equalsData = new String[][] {
653561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "", "" }, // null frags
654561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "/path", "/path#frag" },
655561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "#frag", "#frag2" },
656561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "#frag", "#FRag" },
657561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
658561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // case insensitive on hex escapes
659561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "#fr%4F", "#fr%4f" },
660561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
661561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "scheme:test", "scheme2:test" }, // scheme stuff
662561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "test", "http:test" },
663561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "http:test", "test" },
664561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "SCheme:test", "schEMe:test" },
665561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
666561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // hierarchical/opaque mismatch
667561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "mailto:jim", "mailto://jim" },
668561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "mailto://test", "mailto:test" },
669561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
670561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // opaque
671561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "mailto:name", "mailto:name" },
672561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "mailtO:john", "mailto:jim" },
673561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
674561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // test hex case insensitivity on ssp
675561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "mailto:te%4Fst", "mailto:te%4fst" },
676561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
677561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "mailto:john#frag", "mailto:john#frag2" },
678561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
679561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // hierarchical
680561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "/test", "/test" }, // paths
681561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "/te%F4st", "/te%f4st" },
682561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "/TEst", "/teSt" },
683561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "", "/test" },
684561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
685561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // registry based because they don't resolve properly to
686561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // server-based add more tests here
687561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "//host.com:80err", "//host.com:80e" },
688561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "//host.com:81e%Abrr", "//host.com:81e%abrr" },
689561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
690561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "/test", "//auth.com/test" },
691561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "//test.com", "/test" },
692561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
693561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "//test.com", "//test.com" }, // hosts
694561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
695561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // case insensitivity for hosts
696561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "//HoSt.coM/", "//hOsT.cOm/" },
697561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "//te%ae.com", "//te%aE.com" },
698561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "//test.com:80", "//test.com:81" },
699561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "//joe@test.com:80", "//test.com:80" },
700561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "//jo%3E@test.com:82", "//jo%3E@test.com:82" },
701561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "//test@test.com:85", "//test@test.com" }, };
702561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
703561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        boolean[] equalsResults = new boolean[] { true, false, false, false,
704561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                true, false, false, false, true, false, false, true, false,
705561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                true, false, true, true, false, false, false, true, false,
706561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                false, true, true, true, false, false, true, false, };
707561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
708561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // test equals functionality
709561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < equalsResults.length; i++) {
710561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            URI b = new URI(equalsData[i][0]);
711561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            URI r = new URI(equalsData[i][1]);
712561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (b.equals(r) != equalsResults[i]) {
713561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("Error: " + equalsData[i][0] + " == " + equalsData[i][1]
714561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        + "? -> " + b.equals(r) + " expected "
715561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        + equalsResults[i]);
716561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
717561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
718561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
719561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
720561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
721561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
722561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @throws URISyntaxException
723561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.URI#equals(java.lang.Object)
724561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
725561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_equals2() throws URISyntaxException {
726561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // test URIs with empty string authority
727561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        URI uri = new URI("http:///~/dictionary");
728561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        URI uri2 = new URI(uri.getScheme(), uri.getAuthority(), uri.getPath(),
729561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                uri.getQuery(), uri.getFragment());
730561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(uri2.equals(uri));
731561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
732561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // test URIs with port number
733561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        uri = new URI("http://abc.com%E2%82%AC:88/root/news");
734561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        uri2 = new URI("http://abc.com%E2%82%AC/root/news");
735561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(uri.equals(uri2));
736561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(uri2.equals(uri));
737561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
738561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // test URIs with host names with different casing
739561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        uri = new URI("http://AbC.cOm/root/news");
740561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        uri2 = new URI("http://aBc.CoM/root/news");
741561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(uri.equals(uri2));
742561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(uri2.equals(uri));
743561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
744561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
745561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
746561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.URI#getAuthority()
747561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
748561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getAuthority() throws Exception {
749561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        URI[] uris = getUris();
750561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
751561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String[] getAuthorityResults = {
752561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "user` info@host",
753561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "user\u00DF\u00A3info@host:80", // =
754561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // "user\u00df\u00a3info@host:80",
755561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "user\u00DF\u00A3info@host:0", // =
756561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // "user\u00df\u00a3info@host:0",
757561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "user%60%20info@host:80",
758561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "user%C3%9F%C2%A3info@host",
759561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "user\u00DF\u00A3info@host:80", // =
760561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // "user\u00df\u00a3info@host:80",
761561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "user` info@host:81", "user%info@host:0", null, null, null,
762561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                null, "server.org", "reg:istry", null, };
763561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
764561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < uris.length; i++) {
765561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            String result = uris[i].getAuthority();
766561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (getAuthorityResults[i] != result
767561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    && !getAuthorityResults[i].equals(result)) {
768561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("Error: For URI \"" + uris[i].toString()
769561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        + "\", getAuthority() returned: " + result
770561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        + ", expected: " + getAuthorityResults[i]);
771561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
772561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
773561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // regression test for HARMONY-1119
774561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull(new URI(null, null, null, 127, null, null, null)
775561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getAuthority());
776561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
777561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
778561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
779561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.URI#getAuthority()
780561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
781561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getAuthority2() throws Exception {
782561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // tests for URIs with empty string authority component
783561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
784561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        URI uri = new URI("file:///tmp/");
785561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull("Authority not null for URI: " + uri, uri.getAuthority());
786561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull("Host not null for URI " + uri, uri.getHost());
787561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("testA, toString() returned incorrect value",
788561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "file:///tmp/", uri.toString());
789561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
790561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        uri = new URI("file", "", "/tmp", "frag");
791561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull("Authority not null for URI: " + uri, uri.getAuthority());
792561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull("Host not null for URI " + uri, uri.getHost());
793561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("testB, toString() returned incorrect value",
794561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "file:///tmp#frag", uri.toString());
795561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
796561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        uri = new URI("file", "", "/tmp", "query", "frag");
797561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull("Authority not null for URI: " + uri, uri.getAuthority());
798561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull("Host not null for URI " + uri, uri.getHost());
799561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("test C, toString() returned incorrect value",
800561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "file:///tmp?query#frag", uri.toString());
801561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
802561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // after normalization the host string info may be lost since the
803561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // uri string is reconstructed
804561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        uri = new URI("file", "", "/tmp/a/../b/c", "query", "frag");
805561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        URI uri2 = uri.normalize();
806561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull("Authority not null for URI: " + uri2, uri.getAuthority());
807561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull("Host not null for URI " + uri2, uri.getHost());
808561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("test D, toString() returned incorrect value",
809561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "file:///tmp/a/../b/c?query#frag", uri.toString());
810561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("test E, toString() returned incorrect value",
811561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "file:/tmp/b/c?query#frag", uri2.toString());
812561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
813561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // the empty string host will give URISyntaxException
814561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // for the 7 arg constructor
815561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
816561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            uri = new URI("file", "user", "", 80, "/path", "query", "frag");
817561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Expected URISyntaxException");
818561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (URISyntaxException e) {
819561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
820561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
821561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
822561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
823561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
824561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.URI#getFragment()
825561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
826561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getFragment() throws Exception {
827561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        URI[] uris = getUris();
828561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
829561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String[] getFragmentResults = { "fr^ ag", "fr\u00E4\u00E8g", // =
830561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // "fr\u00e4\u00e8g",
831561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "fr\u00E4\u00E8g", // = "fr\u00e4\u00e8g",
832561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "fr%5E%20ag", "fr%C3%A4%C3%A8g", "fr\u00E4\u00E8g", // =
833561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // "fr\u00e4\u00e8g",
834561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "fr^ ag", "f%rag", null, "", null, "fragment", null, null, null };
835561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
836561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < uris.length; i++) {
837561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            String result = uris[i].getFragment();
838561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (getFragmentResults[i] != result
839561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    && !getFragmentResults[i].equals(result)) {
840561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("Error: For URI \"" + uris[i].toString()
841561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        + "\", getFragment() returned: " + result
842561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        + ", expected: " + getFragmentResults[i]);
843561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
844561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
845561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
846561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
847561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
848561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.URI#getHost()
849561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
850561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getHost() throws Exception {
851561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        URI[] uris = getUris();
852561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
853561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String[] getHostResults = { "host", "host", "host", "host", "host",
854561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "host", "host", "host", null, null, null, null, "server.org",
855561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                null, null };
856561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
857561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < uris.length; i++) {
858561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            String result = uris[i].getHost();
859561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (getHostResults[i] != result
860561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    && !getHostResults[i].equals(result)) {
861561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("Error: For URI \"" + uris[i].toString()
862561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        + "\", getHost() returned: " + result + ", expected: "
863561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        + getHostResults[i]);
864561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
865561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
866561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
867561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
868561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
869561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.URI#getPath()
870561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
871561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getPath() throws Exception {
872561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        URI[] uris = getUris();
873561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
874561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String[] getPathResults = { "/a path",
875561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "/a\u20ACpath", // = "/a\u0080path",
876561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "/a\u20ACpath", // = "/a\u0080path",
877561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "/a%20path", "/a%E2%82%ACpath",
878561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "/a\u20ACpath", // = "/a\u0080path",
879561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "/a path", "/a%path", null, "../adirectory/file.html", null,
880561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "", "", "", "/c:/temp/calculate.pl" };
881561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
882561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < uris.length; i++) {
883561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            String result = uris[i].getPath();
884561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (getPathResults[i] != result
885561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    && !getPathResults[i].equals(result)) {
886561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("Error: For URI \"" + uris[i].toString()
887561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        + "\", getPath() returned: " + result + ", expected: "
888561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        + getPathResults[i]);
889561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
890561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
891561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
892561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
893561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
894561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.URI#getPort()
895561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
896561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getPort() throws Exception {
897561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        URI[] uris = getUris();
898561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
899561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int[] getPortResults = { -1, 80, 0, 80, -1, 80, 81, 0, -1, -1, -1, -1,
900561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                -1, -1, -1 };
901561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
902561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < uris.length; i++) {
903561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            int result = uris[i].getPort();
904561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertTrue("Error: For URI \"" + uris[i].toString()
905561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    + "\", getPort() returned: " + result + ", expected: "
906561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    + getPortResults[i], result == getPortResults[i]);
907561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
908561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
909561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
910561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
911561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.URI#getPort()
912561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
913561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getPort2() throws Exception {
914561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // if port value is negative, the authority should be
915561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // consider registry based.
916561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
917561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        URI uri = new URI("http://myhost:-8096/site/index.html");
918561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("TestA, returned wrong port value,", -1, uri.getPort());
919561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull("TestA, returned wrong host value,", uri.getHost());
920561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
921561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            uri.parseServerAuthority();
922561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("TestA, Expected URISyntaxException");
923561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (URISyntaxException e) {
924561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
925561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
926561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
927561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        uri = new URI("http", "//myhost:-8096", null);
928561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("TestB returned wrong port value,", -1, uri.getPort());
929561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull("TestB returned wrong host value,", uri.getHost());
930561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
931561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            uri.parseServerAuthority();
932561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("TestB, Expected URISyntaxException");
933561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (URISyntaxException e) {
934561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
935561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
936561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
937561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
938561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
939561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.URI#getQuery()
940561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
941561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getQuery() throws Exception {
942561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        URI[] uris = getUris();
943561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
944561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String[] getQueryResults = { "qu` ery", "qu\u00A9\u00AEery", // =
945561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // "qu\u00a9\u00aeery",
946561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "qu\u00A9\u00AEery", // = "qu\u00a9\u00aeery",
947561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "qu%60%20ery", "qu%C2%A9%C2%AEery", "qu\u00A9\u00AEery", // =
948561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // "qu\u00a9\u00aeery",
949561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "qu` ery", "que%ry", null, null, null, null, null, "query", "" };
950561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
951561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < uris.length; i++) {
952561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            String result = uris[i].getQuery();
953561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (getQueryResults[i] != result
954561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    && !getQueryResults[i].equals(result)) {
955561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("Error: For URI \"" + uris[i].toString()
956561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        + "\", getQuery() returned: " + result + ", expected: "
957561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        + getQueryResults[i]);
958561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
959561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
960561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
961561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
962561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
963561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.URI#getRawAuthority()
964561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
965561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getRawAuthority() throws Exception {
966561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        URI[] uris = getUris();
967561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
968561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String[] getRawAuthorityResults = {
969561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "user%60%20info@host",
970561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "user%C3%9F%C2%A3info@host:80",
971561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "user\u00DF\u00A3info@host:0", // =
972561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // "user\u00df\u00a3info@host:0",
973561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "user%2560%2520info@host:80",
974561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "user%25C3%259F%25C2%25A3info@host",
975561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "user\u00DF\u00A3info@host:80", // =
976561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // "user\u00df\u00a3info@host:80",
977561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "user%60%20info@host:81", "user%25info@host:0", null, null,
978561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                null, null, "server.org", "reg:istry", null };
979561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
980561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < uris.length; i++) {
981561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            String result = uris[i].getRawAuthority();
982561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (getRawAuthorityResults[i] != result
983561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    && !getRawAuthorityResults[i].equals(result)) {
984561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("Error: For URI \"" + uris[i].toString()
985561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        + "\", getRawAuthority() returned: " + result
986561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        + ", expected: " + getRawAuthorityResults[i]);
987561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
988561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
989561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
990561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
991561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
992561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.URI#getRawFragment()
993561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
994561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getRawFragment() throws Exception {
995561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        URI[] uris = getUris();
996561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
997561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String[] getRawFragmentResults = { "fr%5E%20ag",
998561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "fr%C3%A4%C3%A8g",
999561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "fr\u00E4\u00E8g", // = "fr\u00e4\u00e8g",
1000561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "fr%255E%2520ag", "fr%25C3%25A4%25C3%25A8g",
1001561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "fr\u00E4\u00E8g", // =
1002561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // "fr\u00e4\u00e8g",
1003561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "fr%5E%20ag", "f%25rag", null, "", null, "fragment", null,
1004561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                null, null };
1005561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1006561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < uris.length; i++) {
1007561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            String result = uris[i].getRawFragment();
1008561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (getRawFragmentResults[i] != result
1009561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    && !getRawFragmentResults[i].equals(result)) {
1010561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("Error: For URI \"" + uris[i].toString()
1011561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        + "\", getRawFragment() returned: " + result
1012561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        + ", expected: " + getRawFragmentResults[i]);
1013561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1014561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1015561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1016561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1017561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
1018561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.URI#getRawPath()
1019561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1020561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getRawPath() throws Exception {
1021561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        URI[] uris = getUris();
1022561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1023561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String[] getRawPathResults = { "/a%20path",
1024561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "/a%E2%82%ACpath",
1025561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "/a\u20ACpath", // = "/a\u0080path",
1026561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "/a%2520path", "/a%25E2%2582%25ACpath",
1027561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "/a\u20ACpath", // =
1028561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // "/a\u0080path",
1029561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "/a%20path", "/a%25path", null, "../adirectory/file.html",
1030561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                null, "", "", "", "/c:/temp/calculate.pl" };
1031561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1032561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < uris.length; i++) {
1033561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            String result = uris[i].getRawPath();
1034561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (getRawPathResults[i] != result
1035561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    && !getRawPathResults[i].equals(result)) {
1036561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("Error: For URI \"" + uris[i].toString()
1037561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        + "\", getRawPath() returned: " + result
1038561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        + ", expected: " + getRawPathResults[i]);
1039561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1040561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1041561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1042561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1043561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
1044561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.URI#getRawQuery()
1045561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1046561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getRawQuery() throws Exception {
1047561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        URI[] uris = getUris();
1048561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1049561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String[] getRawQueryResults = {
1050561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "qu%60%20ery",
1051561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "qu%C2%A9%C2%AEery",
1052561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "qu\u00A9\u00AEery", // = "qu\u00a9\u00aeery",
1053561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "qu%2560%2520ery",
1054561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "qu%25C2%25A9%25C2%25AEery",
1055561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "qu\u00A9\u00AEery", // = "qu\u00a9\u00aeery",
1056561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "qu%60%20ery", "que%25ry", null, null, null, null, null,
1057561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "query", "" };
1058561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1059561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < uris.length; i++) {
1060561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            String result = uris[i].getRawQuery();
1061561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (getRawQueryResults[i] != result
1062561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    && !getRawQueryResults[i].equals(result)) {
1063561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("Error: For URI \"" + uris[i].toString()
1064561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        + "\", getRawQuery() returned: " + result
1065561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        + ", expected: " + getRawQueryResults[i]);
1066561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1067561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1068561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1069561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1070561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1071561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
1072561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.URI#getRawSchemeSpecificPart()
1073561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1074561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getRawSchemeSpecificPart() throws Exception {
1075561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        URI[] uris = getUris();
1076561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1077561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String[] getRawSspResults = {
1078561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "//user%60%20info@host/a%20path?qu%60%20ery",
1079561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "//user%C3%9F%C2%A3info@host:80/a%E2%82%ACpath?qu%C2%A9%C2%AEery",
1080561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "//user\u00DF\u00A3info@host:0/a\u20ACpath?qu\u00A9\u00AEery", // =
1081561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // "//user\u00df\u00a3info@host:0/a\u0080path?qu\u00a9\u00aeery"
1082561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "//user%2560%2520info@host:80/a%2520path?qu%2560%2520ery",
1083561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "//user%25C3%259F%25C2%25A3info@host/a%25E2%2582%25ACpath?qu%25C2%25A9%25C2%25AEery",
1084561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "//user\u00DF\u00A3info@host:80/a\u20ACpath?qu\u00A9\u00AEery", // =
1085561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // "//user\u00df\u00a3info@host:80/a\u0080path?qu\u00a9\u00aeery"
1086561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "//user%60%20info@host:81/a%20path?qu%60%20ery",
1087561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "//user%25info@host:0/a%25path?que%25ry", "user@domain.com",
1088561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "../adirectory/file.html", "comp.infosystems.www.servers.unix",
1089561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "", "//server.org", "//reg:istry?query",
1090561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "///c:/temp/calculate.pl?" };
1091561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1092561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < uris.length; i++) {
1093561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            String result = uris[i].getRawSchemeSpecificPart();
1094561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (!getRawSspResults[i].equals(result)) {
1095561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("Error: For URI \"" + uris[i].toString()
1096561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        + "\", getRawSchemeSpecificPart() returned: " + result
1097561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        + ", expected: " + getRawSspResults[i]);
1098561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1099561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
1103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.URI#getRawUserInfo()
1104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getRawUserInfo() throws URISyntaxException {
1106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        URI[] uris = getUris();
1107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String[] getRawUserInfoResults = {
1109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "user%60%20info",
1110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "user%C3%9F%C2%A3info",
1111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "user\u00DF\u00A3info", // = "user\u00df\u00a3info",
1112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "user%2560%2520info",
1113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "user%25C3%259F%25C2%25A3info",
1114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "user\u00DF\u00A3info", // = "user\u00df\u00a3info",
1115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "user%60%20info", "user%25info", null, null, null, null, null,
1116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                null, null };
1117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < uris.length; i++) {
1119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            String result = uris[i].getRawUserInfo();
1120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (getRawUserInfoResults[i] != result
1121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    && !getRawUserInfoResults[i].equals(result)) {
1122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("Error: For URI \"" + uris[i].toString()
1123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        + "\", getRawUserInfo() returned: " + result
1124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        + ", expected: " + getRawUserInfoResults[i]);
1125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
1130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.URI#getScheme()
1131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getScheme() throws Exception {
1133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        URI[] uris = getUris();
1134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String[] getSchemeResults = { "http", "http", "ascheme", "http",
1136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "http", "ascheme", "http", "http", "mailto", null, "news",
1137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                null, "telnet", "http", "file" };
1138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < uris.length; i++) {
1140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            String result = uris[i].getScheme();
1141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (getSchemeResults[i] != result
1142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    && !getSchemeResults[i].equals(result)) {
1143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("Error: For URI \"" + uris[i].toString()
1144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        + "\", getScheme() returned: " + result
1145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        + ", expected: " + getSchemeResults[i]);
1146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
1151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.URI#getSchemeSpecificPart()
1152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getSchemeSpecificPart() throws Exception {
1154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        URI[] uris = getUris();
1155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String[] getSspResults = {
1157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "//user` info@host/a path?qu` ery",
1158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "//user\u00DF\u00A3info@host:80/a\u20ACpath?qu\u00A9\u00AEery", // =
1159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // "//user\u00df\u00a3info@host:80/a\u0080path?qu\u00a9\u00aeery",
1160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "//user\u00DF\u00A3info@host:0/a\u20ACpath?qu\u00A9\u00AEery", // =
1161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // "//user\u00df\u00a3info@host:0/a\u0080path?qu\u00a9\u00aeery",
1162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "//user%60%20info@host:80/a%20path?qu%60%20ery",
1163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "//user%C3%9F%C2%A3info@host/a%E2%82%ACpath?qu%C2%A9%C2%AEery",
1164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "//user\u00DF\u00A3info@host:80/a\u20ACpath?qu\u00A9\u00AEery", // =
1165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // "//user\u00df\u00a3info@host:80/a\u0080path?qu\u00a9\u00aeery",
1166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "//user` info@host:81/a path?qu` ery",
1167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "//user%info@host:0/a%path?que%ry", "user@domain.com",
1168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "../adirectory/file.html", "comp.infosystems.www.servers.unix",
1169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "", "//server.org", "//reg:istry?query",
1170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "///c:/temp/calculate.pl?" };
1171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < uris.length; i++) {
1173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            String result = uris[i].getSchemeSpecificPart();
1174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (!getSspResults[i].equals(result)) {
1175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("Error: For URI \"" + uris[i].toString()
1176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        + "\", getSchemeSpecificPart() returned: " + result
1177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        + ", expected: " + getSspResults[i]);
1178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
1184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.URI#getUserInfo()
1185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getUserInfo() throws Exception {
1187561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        URI[] uris = getUris();
1188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String[] getUserInfoResults = {
1190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "user` info",
1191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "user\u00DF\u00A3info", // =
1192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // "user\u00df\u00a3info",
1193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "user\u00DF\u00A3info", // = "user\u00df\u00a3info",
1194561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "user%60%20info",
1195561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "user%C3%9F%C2%A3info",
1196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "user\u00DF\u00A3info", // = "user\u00df\u00a3info",
1197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "user` info", "user%info", null, null, null, null, null, null,
1198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                null };
1199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < uris.length; i++) {
1201561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            String result = uris[i].getUserInfo();
1202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (getUserInfoResults[i] != result
1203561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    && !getUserInfoResults[i].equals(result)) {
1204561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("Error: For URI \"" + uris[i].toString()
1205561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        + "\", getUserInfo() returned: " + result
1206561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        + ", expected: " + getUserInfoResults[i]);
1207561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1208561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1209561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1210561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1211561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
1212561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.URI#hashCode()
1213561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1214561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_hashCode() throws Exception {
1215561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String[][] hashCodeData = new String[][] {
1216561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "", "" }, // null frags
1217561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "/path", "/path#frag" },
1218561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "#frag", "#frag2" },
1219561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "#frag", "#FRag" },
1220561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1221561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "#fr%4F", "#fr%4F" }, // case insensitive on hex escapes
1222561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1223561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "scheme:test", "scheme2:test" }, // scheme
1224561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "test", "http:test" },
1225561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "http:test", "test" },
1226561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1227561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // case insensitivity for scheme
1228561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "SCheme:test", "schEMe:test" },
1229561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1230561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // hierarchical/opaque mismatch
1231561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "mailto:jim", "mailto://jim" },
1232561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "mailto://test", "mailto:test" },
1233561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1234561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // opaque
1235561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "mailto:name", "mailto:name" },
1236561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "mailtO:john", "mailto:jim" },
1237561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "mailto:te%4Fst", "mailto:te%4Fst" },
1238561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "mailto:john#frag", "mailto:john#frag2" },
1239561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1240561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // hierarchical
1241561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "/test/", "/test/" }, // paths
1242561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "/te%F4st", "/te%F4st" },
1243561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "/TEst", "/teSt" },
1244561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "", "/test" },
1245561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1246561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // registry based because they don't resolve properly to
1247561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // server-based
1248561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // add more tests here
1249561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "//host.com:80err", "//host.com:80e" },
1250561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "//host.com:81e%Abrr", "//host.com:81e%Abrr" },
1251561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "//Host.com:80e", "//hoSt.com:80e" },
1252561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1253561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "/test", "//auth.com/test" },
1254561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "//test.com", "/test" },
1255561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1256561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "//test.com", "//test.com" }, // server based
1257561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1258561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // case insensitivity for host
1259561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "//HoSt.coM/", "//hOsT.cOm/" },
1260561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "//te%aE.com", "//te%aE.com" },
1261561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "//test.com:80", "//test.com:81" },
1262561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "//joe@test.com:80", "//test.com:80" },
1263561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "//jo%3E@test.com:82", "//jo%3E@test.com:82" },
1264561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "//test@test.com:85", "//test@test.com" }, };
1265561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1266561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        boolean[] hashCodeResults = new boolean[] { true, false, false, false,
1267561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                true, false, false, false, true, false, false, true, false,
1268561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                true, false, true, true, false, false, false, true, false,
1269561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                false, false, true, true, true, false, false, true, false, };
1270561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1271561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < hashCodeResults.length; i++) {
1272561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            URI b = new URI(hashCodeData[i][0]);
1273561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            URI r = new URI(hashCodeData[i][1]);
1274561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals("Error in hashcode equals results for" + b.toString()
1275561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    + " " + r.toString(), hashCodeResults[i], b.hashCode() == r
1276561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .hashCode());
1277561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1278561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1279561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1280561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1281561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
1282561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.URI#isAbsolute()
1283561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1284561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_isAbsolute() throws URISyntaxException {
1285561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String[] isAbsoluteData = new String[] { "mailto:user@ca.ibm.com",
1286561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "urn:isbn:123498989h", "news:software.ibm.com",
1287561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "http://www.amazon.ca", "file:///d:/temp/results.txt",
1288561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "scheme:ssp", "calculate.pl?isbn=123498989h",
1289561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "?isbn=123498989h", "//www.amazon.ca", "a.html", "#top",
1290561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "//pc1/", "//user@host/path/file" };
1291561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1292561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        boolean results[] = new boolean[] { true, true, true, true, true, true,
1293561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                false, false, false, false, false, false, false };
1294561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1295561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < isAbsoluteData.length; i++) {
1296561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            boolean result = new URI(isAbsoluteData[i]).isAbsolute();
1297561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals("new URI(" + isAbsoluteData[i] + ").isAbsolute()",
1298561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    results[i], result);
1299561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1300561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1301561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1302561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
1303561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.URI#isOpaque()
1304561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1305561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_isOpaque() throws URISyntaxException {
1306561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String[] isOpaqueData = new String[] { "mailto:user@ca.ibm.com",
1307561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "urn:isbn:123498989h", "news:software.ibm.com",
1308561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "http://www.amazon.ca", "file:///d:/temp/results.txt",
1309561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "scheme:ssp", "calculate.pl?isbn=123498989h",
1310561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "?isbn=123498989h", "//www.amazon.ca", "a.html", "#top",
1311561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "//pc1/", "//user@host/path/file" };
1312561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1313561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        boolean results[] = new boolean[] { true, true, true, false, false,
1314561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                true, false, false, false, false, false, false, false };
1315561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1316561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < isOpaqueData.length; i++) {
1317561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            boolean result = new URI(isOpaqueData[i]).isOpaque();
1318561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals("new URI(" + isOpaqueData[i] + ").isOpaque()",
1319561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    results[i], result);
1320561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1321561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1322561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1323561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
1324561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.URI#normalize()
1325561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1326561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_normalize() throws Exception {
13270eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        // normal
13280eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        testNormalize("/", "/");
13290eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        testNormalize("/a", "/a");
13300eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        testNormalize("/a/b", "/a/b");
13310eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        testNormalize("/a/b/c", "/a/b/c");
13320eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        // single, '.'
13330eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        testNormalize("/.", "/");
13340eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        testNormalize("/./", "/");
13350eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        testNormalize("/./.", "/");
13360eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        testNormalize("/././", "/");
13370eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        testNormalize("/./a", "/a");
13380eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        testNormalize("/./a/", "/a/");
13390eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        testNormalize("/././a", "/a");
13400eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        testNormalize("/././a/", "/a/");
13410eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        testNormalize("/a/.", "/a/");
13420eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        testNormalize("/a/./", "/a/");
13430eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        testNormalize("/a/./.", "/a/");
13440eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        testNormalize("/a/./b", "/a/b");
13450eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        // double, '..'
13460eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        testNormalize("/a/..", "/");
13470eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        testNormalize("/a/../", "/");
13480eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        testNormalize("/a/../b", "/b");
13490eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        testNormalize("/a/../b/..", "/");
13500eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        testNormalize("/a/../b/../", "/");
13510eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        testNormalize("/a/../b/../c", "/c");
13520eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        testNormalize("/..", "/..");
13530eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        testNormalize("/../", "/../");
13540eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        testNormalize("/../..", "/../..");
13550eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        testNormalize("/../../", "/../../");
13560eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        testNormalize("/../a", "/../a");
13570eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        testNormalize("/../a/", "/../a/");
13580eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        testNormalize("/../../a", "/../../a");
13590eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        testNormalize("/../../a/", "/../../a/");
13600eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        testNormalize("/a/b/../../c", "/c");
13610eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        testNormalize("/a/b/../..", "/");
13620eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        testNormalize("/a/b/../../", "/");
13630eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        testNormalize("/a/b/../../c", "/c");
13640eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        testNormalize("/a/b/c/../../../d", "/d");
13650eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        testNormalize("/a/b/..", "/a/");
13660eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        testNormalize("/a/b/../", "/a/");
13670eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        testNormalize("/a/b/../c", "/a/c");
13680eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        // miscellaneous
13690eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        testNormalize("/a/b/.././../../c/./d/../e", "/../c/e");
13700eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        testNormalize("/a/../../.c././../././c/d/../g/..", "/../c/");
13710eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        // '.' in the middle of segments
13720eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        testNormalize("/a./b", "/a./b");
13730eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        testNormalize("/.a/b", "/.a/b");
13740eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        testNormalize("/a.b/c", "/a.b/c");
13750eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        testNormalize("/a/b../c", "/a/b../c");
13760eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        testNormalize("/a/..b/c", "/a/..b/c");
13770eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        testNormalize("/a/b..c/d", "/a/b..c/d");
13780eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        // no leading slash, miscellaneous
13790eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        testNormalize("", "");
13800eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        testNormalize("a", "a");
13810eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        testNormalize("a/b", "a/b");
13820eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        testNormalize("a/b/c", "a/b/c");
13830eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        testNormalize("../", "../");
13840eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        testNormalize(".", "");
13850eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        testNormalize("..", "..");
13860eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        testNormalize("../g", "../g");
13870eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        testNormalize("g/a/../../b/c/./g", "b/c/g");
13880eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        testNormalize("a/b/.././../../c/./d/../e", "../c/e");
13890eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        testNormalize("a/../../.c././../././c/d/../g/..", "../c/");
13900eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson    }
1391561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
13920eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson    private void testNormalize(String original, String expected) throws URISyntaxException {
13930eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson        assertEquals(expected, new URI(original).normalize().toString());
1394561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1395561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1396561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
1397561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.URI#normalize()
1398561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1399561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_normalize2() throws URISyntaxException {
1400561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        URI uri1 = null, uri2 = null;
1401561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        uri1 = new URI("file:/D:/one/two/../../three");
1402561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        uri2 = uri1.normalize();
1403561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1404561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Normalized to incorrect URI", "file:/D:/three", uri2
1405561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .toString());
1406561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Resolved URI is not absolute", uri2.isAbsolute());
1407561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse("Resolved URI is opaque", uri2.isOpaque());
1408561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Resolved URI has incorrect scheme  specific part",
1409561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "/D:/three", uri2.getRawSchemeSpecificPart());
1410561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1411561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1412561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
1413561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.URI#normalize()
1414561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1415561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_normalize3() throws URISyntaxException {
1416561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // return same URI if it has a normalized path already
1417561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        URI uri1 = null, uri2 = null;
1418561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        uri1 = new URI("http://host/D:/one/two/three");
1419561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        uri2 = uri1.normalize();
1420561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertSame("Failed to return same URI after normalization", uri1, uri2);
1421561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1422561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // try with empty path
1423561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        uri1 = new URI("http", "host", null, "fragment");
1424561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        uri2 = uri1.normalize();
1425561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertSame("Failed to return same URI after normalization", uri1, uri2);
1426561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1427561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1428561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
1429561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.URI#parseServerAuthority()
1430561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1431561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_parseServerAuthority() throws URISyntaxException {
1432561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // registry based uris
1433561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        URI[] uris = null;
1434561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        uris = new URI[] {
1435561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // port number not digits
1436561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new URI("http://foo:bar/file#fragment"),
1437561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new URI("http", "//foo:bar/file", "fragment"),
1438561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1439561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // unicode char in the hostname = new
1440561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // URI("http://host\u00dfname/")
1441561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new URI("http://host\u00DFname/"),
1442561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1443561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new URI("http", "//host\u00DFname/", null),
1444561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // = new URI("http://host\u00dfname/", null),
1445561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1446561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // escaped octets in host name
1447561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new URI("http://host%20name/"),
1448561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new URI("http", "//host%20name/", null),
1449561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1450561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // missing host name, port number
1451561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new URI("http://joe@:80"),
1452561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1453561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // missing host name, no port number
1454561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new URI("http://user@/file?query#fragment"),
1455561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1456561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new URI("//host.com:80err"), // malformed port number
1457561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new URI("//host.com:81e%Abrr"),
1458561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1459561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // malformed ipv4 address
1460561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new URI("telnet", "//256.197.221.200", null),
1461561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1462561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new URI("telnet://198.256.221.200"),
1463561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new URI("//te%ae.com"), // misc ..
1464561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new URI("//:port"), new URI("//:80"),
1465561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1466561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // last label has to start with alpha char
1467561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new URI("//fgj234fkgj.jhj.123."),
1468561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1469561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new URI("//fgj234fkgj.jhj.123"),
1470561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1471561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // '-' cannot be first or last character in a label
1472561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new URI("//-domain.name"), new URI("//domain.name-"),
1473561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new URI("//domain-"),
1474561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1475561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // illegal char in host name
1476561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new URI("//doma*in"),
1477561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1478561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // host expected
1479561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new URI("http://:80/"), new URI("http://user@/"),
1480561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1481561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // ipv6 address not enclosed in "[]"
1482561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new URI("http://3ffe:2a00:100:7031:22:1:80:89/"),
1483561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1484561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // expected ipv6 addresses to be enclosed in "[]"
1485561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new URI("http", "34::56:78", "/path", "query", "fragment"),
1486561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1487561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // expected host
1488561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new URI("http", "user@", "/path", "query", "fragment") };
1489561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // these URIs do not have valid server based authorities,
1490561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // but single arg, 3 and 5 arg constructors
1491561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // parse them as valid registry based authorities
1492561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1493561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // exception should occur when parseServerAuthority is
1494561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // requested on these uris
1495561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < uris.length; i++) {
1496561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
1497561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                URI uri = uris[i].parseServerAuthority();
1498561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("URISyntaxException expected but not received for URI: "
1499561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        + uris[i].toString());
1500561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (URISyntaxException e) {
1501561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // Expected
1502561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1503561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1504561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1505561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // valid Server based authorities
1506561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        new URI("http", "3ffe:2a00:100:7031:2e:1:80:80", "/path", "fragment")
1507561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .parseServerAuthority();
1508561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        new URI("http", "host:80", "/path", "query", "fragment")
1509561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .parseServerAuthority();
1510561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        new URI("http://[::3abc:4abc]:80/").parseServerAuthority();
1511561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        new URI("http", "34::56:78", "/path", "fragment")
1512561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .parseServerAuthority();
1513561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        new URI("http", "[34:56::78]:80", "/path", "fragment")
1514561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .parseServerAuthority();
1515561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1516561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // invalid authorities (neither server nor registry)
1517561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
1518561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            URI uri = new URI("http://us[er@host:80/");
1519561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Expected URISyntaxException for URI " + uri.toString());
1520561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (URISyntaxException e) {
1521561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
1522561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1523561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1524561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
1525561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            URI uri = new URI("http://[ddd::hgghh]/");
1526561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Expected URISyntaxException for URI " + uri.toString());
1527561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (URISyntaxException e) {
1528561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
1529561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1530561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1531561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
1532561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            URI uri = new URI("http", "[3ffe:2a00:100:7031:2e:1:80:80]a:80",
1533561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    "/path", "fragment");
1534561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Expected URISyntaxException for URI " + uri.toString());
1535561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (URISyntaxException e) {
1536561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
1537561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1538561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1539561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
1540561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            URI uri = new URI("http", "host:80", "/path", "fragment");
1541561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Expected URISyntaxException for URI " + uri.toString());
1542561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (URISyntaxException e) {
1543561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
1544561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1545561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1546561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // regression test for HARMONY-1126
1547561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNotNull(URI.create("file://C:/1.txt").parseServerAuthority());
1548561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1549561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1550561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
1551561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.URI#relativize(java.net.URI)
1552561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1553561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_relativizeLjava_net_URI() throws URISyntaxException {
1554163222ea86e16dbb3ddaabe1d6c549037f0c1b63Jesse Wilson        // rel = opaque
1555163222ea86e16dbb3ddaabe1d6c549037f0c1b63Jesse Wilson        testRelativize("http://www.google.com/dir1/dir2", "mailto:test", "mailto:test");
1556163222ea86e16dbb3ddaabe1d6c549037f0c1b63Jesse Wilson        // base = opaque
1557163222ea86e16dbb3ddaabe1d6c549037f0c1b63Jesse Wilson        testRelativize("mailto:test", "http://www.google.com", "http://www.google.com");
1558163222ea86e16dbb3ddaabe1d6c549037f0c1b63Jesse Wilson        // different authority
1559163222ea86e16dbb3ddaabe1d6c549037f0c1b63Jesse Wilson        testRelativize("http://www.eclipse.org/dir1", "http://www.google.com/dir1/dir2",
1560163222ea86e16dbb3ddaabe1d6c549037f0c1b63Jesse Wilson                "http://www.google.com/dir1/dir2");
1561163222ea86e16dbb3ddaabe1d6c549037f0c1b63Jesse Wilson        // different scheme
1562163222ea86e16dbb3ddaabe1d6c549037f0c1b63Jesse Wilson        testRelativize("http://www.google.com", "ftp://www.google.com", "ftp://www.google.com");
1563163222ea86e16dbb3ddaabe1d6c549037f0c1b63Jesse Wilson        testRelativize("http://www.google.com/dir1/dir2/",
1564163222ea86e16dbb3ddaabe1d6c549037f0c1b63Jesse Wilson                "http://www.google.com/dir3/dir4/file.txt",
1565163222ea86e16dbb3ddaabe1d6c549037f0c1b63Jesse Wilson                "http://www.google.com/dir3/dir4/file.txt");
1566163222ea86e16dbb3ddaabe1d6c549037f0c1b63Jesse Wilson        testRelativize("http://www.google.com/dir1/", "http://www.google.com/dir1/dir2/file.txt",
1567163222ea86e16dbb3ddaabe1d6c549037f0c1b63Jesse Wilson                "dir2/file.txt");
1568163222ea86e16dbb3ddaabe1d6c549037f0c1b63Jesse Wilson        testRelativize("./dir1/", "./dir1/hi", "hi");
1569163222ea86e16dbb3ddaabe1d6c549037f0c1b63Jesse Wilson        testRelativize("/dir1/./dir2", "/dir1/./dir2/hi", "dir2/hi");
1570163222ea86e16dbb3ddaabe1d6c549037f0c1b63Jesse Wilson        testRelativize("/dir1/dir2/..", "/dir1/dir2/../hi", "hi");
1571163222ea86e16dbb3ddaabe1d6c549037f0c1b63Jesse Wilson        testRelativize("/dir1/dir2/..", "/dir1/dir2/hi", "dir2/hi");
1572163222ea86e16dbb3ddaabe1d6c549037f0c1b63Jesse Wilson        testRelativize("/dir1/dir2/", "/dir1/dir3/../dir2/text", "text");
1573163222ea86e16dbb3ddaabe1d6c549037f0c1b63Jesse Wilson        testRelativize("//www.google.com", "//www.google.com/dir1/file", "/dir1/file");
1574163222ea86e16dbb3ddaabe1d6c549037f0c1b63Jesse Wilson        testRelativize("/dir1", "/dir1/hi", "dir1/hi");
1575163222ea86e16dbb3ddaabe1d6c549037f0c1b63Jesse Wilson        testRelativize("/dir1/", "/dir1/hi", "hi");
1576561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1577561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        URI a = new URI("http://host/dir");
1578561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        URI b = new URI("http://host/dir/file?query");
1579163222ea86e16dbb3ddaabe1d6c549037f0c1b63Jesse Wilson        assertEquals("Assert 0: URI relativized incorrectly,",
1580163222ea86e16dbb3ddaabe1d6c549037f0c1b63Jesse Wilson                new URI("dir/file?query"), a.relativize(b));
1581561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1582561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // One URI with empty host
1583561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        a = new URI("file:///~/first");
1584561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        b = new URI("file://tools/~/first");
1585561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Assert 1: URI relativized incorrectly,", new URI(
1586561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "file://tools/~/first"), a.relativize(b));
1587561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Assert 2: URI relativized incorrectly,", new URI(
1588561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "file:///~/first"), b.relativize(a));
1589561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1590561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Both URIs with empty hosts
1591561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        b = new URI("file:///~/second");
1592163222ea86e16dbb3ddaabe1d6c549037f0c1b63Jesse Wilson        assertEquals("Assert 3: URI relativized incorrectly,", new URI("second"), a.relativize(b));
1593163222ea86e16dbb3ddaabe1d6c549037f0c1b63Jesse Wilson        assertEquals("Assert 4: URI relativized incorrectly,", new URI("first"), b.relativize(a));
1594163222ea86e16dbb3ddaabe1d6c549037f0c1b63Jesse Wilson    }
1595163222ea86e16dbb3ddaabe1d6c549037f0c1b63Jesse Wilson
1596163222ea86e16dbb3ddaabe1d6c549037f0c1b63Jesse Wilson    private void testRelativize(String base, String target, String expected)
1597163222ea86e16dbb3ddaabe1d6c549037f0c1b63Jesse Wilson            throws URISyntaxException {
1598163222ea86e16dbb3ddaabe1d6c549037f0c1b63Jesse Wilson        assertEquals(expected, new URI(base).relativize(new URI(target)).toString());
1599561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1600561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1601561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // Regression test for HARMONY-6075
1602561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_relativize3() throws Exception {
1603561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        URI uri = new URI("file", null, "/test/location", null);
1604561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1605561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        URI base = new URI("file", null, "/test", null);
1606561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1607561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        URI relative = base.relativize(uri);
1608163222ea86e16dbb3ddaabe1d6c549037f0c1b63Jesse Wilson        assertEquals("test/location", relative.getSchemeSpecificPart());
1609561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull(relative.getScheme());
1610561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1611561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1612561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
1613561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.URI#relativize(java.net.URI)
1614561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1615561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_relativize2() throws URISyntaxException {
1616561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        URI a = new URI("http://host/dir");
1617561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        URI b = new URI("http://host/dir/file?query");
1618163222ea86e16dbb3ddaabe1d6c549037f0c1b63Jesse Wilson        assertEquals("relativized incorrectly,", new URI("dir/file?query"), a.relativize(b));
1619561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1620561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // one URI with empty host
1621561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        a = new URI("file:///~/dictionary");
1622561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        b = new URI("file://tools/~/dictionary");
1623561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("relativized incorrectly,", new URI(
1624561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "file://tools/~/dictionary"), a.relativize(b));
1625561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("relativized incorrectly,",
1626561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new URI("file:///~/dictionary"), b.relativize(a));
1627561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1628561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // two URIs with empty hosts
1629163222ea86e16dbb3ddaabe1d6c549037f0c1b63Jesse Wilson        b = new URI("file:///~/thesaurus");
1630163222ea86e16dbb3ddaabe1d6c549037f0c1b63Jesse Wilson        assertEquals("relativized incorrectly,", new URI("thesaurus"), a.relativize(b));
1631163222ea86e16dbb3ddaabe1d6c549037f0c1b63Jesse Wilson        assertEquals("relativized incorrectly,", new URI("dictionary"), b.relativize(a));
1632561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1633561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        URI one = new URI("file:/C:/test/ws");
1634561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        URI two = new URI("file:/C:/test/ws");
1635561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1636561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        URI empty = new URI("");
1637561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(empty, one.relativize(two));
1638561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1639561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        one = new URI("file:/C:/test/ws");
1640561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        two = new URI("file:/C:/test/ws/p1");
1641163222ea86e16dbb3ddaabe1d6c549037f0c1b63Jesse Wilson        assertEquals(new URI("ws/p1"), one.relativize(two));
1642561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1643561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        one = new URI("file:/C:/test/ws/");
1644163222ea86e16dbb3ddaabe1d6c549037f0c1b63Jesse Wilson        assertEquals(new URI("p1"), one.relativize(two));
1645561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1646561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1647561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
1648561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.URI#resolve(java.net.URI)
1649561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1650561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_resolve() throws URISyntaxException {
1651561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        URI uri1 = null, uri2 = null;
1652561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        uri1 = new URI("file:/D:/one/two/three");
1653561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        uri2 = uri1.resolve(new URI(".."));
1654561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1655561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Resolved to incorrect URI", "file:/D:/one/", uri2
1656561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .toString());
1657561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Resolved URI is not absolute", uri2.isAbsolute());
1658561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse("Resolved URI is opaque", uri2.isOpaque());
1659561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Resolved URI has incorrect scheme  specific part",
1660561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "/D:/one/", uri2.getRawSchemeSpecificPart());
1661561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1662561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1663561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
1664561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.URI#resolve(java.net.URI)
1665561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1666561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_resolveLjava_net_URI() {
1667561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // resolution tests
1668561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String[][] resolveData = new String[][] {
1669561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // authority in given URI
1670561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "http://www.test.com/dir",
1671561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        "//www.test.com/hello?query#fragment" },
1672561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // no authority, absolute path
1673561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "http://www.test.com/dir", "/abspath/file.txt" },
1674561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // no authority, relative paths
1675561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "/", "dir1/file.txt" }, { "/dir1", "dir2/file.txt" },
1676561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "/dir1/", "dir2/file.txt" }, { "", "dir1/file.txt" },
1677561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "dir1", "dir2/file.txt" }, { "dir1/", "dir2/file.txt" },
1678561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // normalization required
1679561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "/dir1/dir2/../dir3/./", "dir4/./file.txt" },
1680561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // allow a standalone fragment to be resolved
1681561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "http://www.google.com/hey/joe?query#fragment", "#frag2" },
1682561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // return given when base is opaque
1683561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "mailto:idontexist@uk.ibm.com", "dir1/dir2" },
1684561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // return given when given is absolute
1685561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                { "http://www.google.com/hi/joe", "http://www.oogle.com" }, };
1686561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1687561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // expected results
1688561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String[] resolveResults = new String[] {
1689561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "http://www.test.com/hello?query#fragment",
1690561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "http://www.test.com/abspath/file.txt", "/dir1/file.txt",
1691561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "/dir2/file.txt", "/dir1/dir2/file.txt", "dir1/file.txt",
1692561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "dir2/file.txt", "dir1/dir2/file.txt",
1693561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "/dir1/dir3/dir4/file.txt",
1694561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "http://www.google.com/hey/joe?query#frag2", "dir1/dir2",
1695561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "http://www.oogle.com", };
1696561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1697561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < resolveResults.length; i++) {
1698561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
1699561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                URI b = new URI(resolveData[i][0]);
1700561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                URI r = new URI(resolveData[i][1]);
1701561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                URI result = b.resolve(r);
1702561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                if (!result.toString().equals(resolveResults[i])) {
1703561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    fail("Error: resolve, " + resolveData[i][0] + ", "
1704561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            + resolveData[i][1] + " returned: " + b.resolve(r)
1705561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            + ", expected:" + resolveResults[i]);
1706561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
1707561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                if (!b.isOpaque()) {
1708561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    assertEquals(b + " and " + result
1709561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            + " incorrectly differ in absoluteness", b
1710561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            .isAbsolute(), result.isAbsolute());
1711561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
1712561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (URISyntaxException e) {
1713561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("Exception on resolve test on data " + resolveData[i][0]
1714561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        + ", " + resolveData[i][1] + ": " + e);
1715561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1716561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1717561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1718561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1719561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
1720561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.URI#toASCIIString()
1721561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1722561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_toASCIIString() throws Exception {
1723561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        URI[] uris = getUris();
1724561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1725561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String[] toASCIIStringResults0 = new String[] {
1726561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "http://user%60%20info@host/a%20path?qu%60%20ery#fr%5E%20ag",
1727561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "http://user%C3%9F%C2%A3info@host:80/a%E2%82%ACpath?qu%C2%A9%C2%AEery#fr%C3%A4%C3%A8g",
1728561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "ascheme://user%C3%9F%C2%A3info@host:0/a%E2%82%ACpath?qu%C2%A9%C2%AEery#fr%C3%A4%C3%A8g",
1729561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "http://user%2560%2520info@host:80/a%2520path?qu%2560%2520ery#fr%255E%2520ag",
1730561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "http://user%25C3%259F%25C2%25A3info@host/a%25E2%2582%25ACpath?qu%25C2%25A9%25C2%25AEery#fr%25C3%25A4%25C3%25A8g",
1731561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "ascheme://user%C3%9F%C2%A3info@host:80/a%E2%82%ACpath?qu%C2%A9%C2%AEery#fr%C3%A4%C3%A8g",
1732561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "http://user%60%20info@host:81/a%20path?qu%60%20ery#fr%5E%20ag",
1733561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "http://user%25info@host:0/a%25path?que%25ry#f%25rag",
1734561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "mailto:user@domain.com", "../adirectory/file.html#",
1735561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "news:comp.infosystems.www.servers.unix", "#fragment",
1736561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "telnet://server.org", "http://reg:istry?query",
1737561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "file:///c:/temp/calculate.pl?" };
1738561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1739561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < uris.length; i++) {
1740561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            String result = uris[i].toASCIIString();
1741561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertTrue("Error: For URI \"" + uris[i].toString()
1742561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    + "\", toASCIIString() returned: " + result
1743561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    + ", expected: " + toASCIIStringResults0[i], result
1744561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .equals(toASCIIStringResults0[i]));
1745561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1746561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1747561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String[] toASCIIStringData = new String[] {
1748561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "http://www.test.com/\u00DF/dir/",
1749561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "http://www.test.com/\u20AC/dir", "http://www.\u20AC.com/dir",
1750561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "http://www.test.com/\u20AC/dir/file#fragment",
1751561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "mailto://user@domain.com", "mailto://user\u00DF@domain.com", };
1752561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1753561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String[] toASCIIStringResults = new String[] {
1754561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "http://www.test.com/%C3%9F/dir/",
1755561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "http://www.test.com/%E2%82%AC/dir",
1756561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "http://www.%E2%82%AC.com/dir",
1757561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "http://www.test.com/%E2%82%AC/dir/file#fragment",
1758561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "mailto://user@domain.com", "mailto://user%C3%9F@domain.com", };
1759561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1760561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < toASCIIStringData.length; i++) {
1761561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            URI test = new URI(toASCIIStringData[i]);
1762561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            String result = test.toASCIIString();
1763561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertTrue("Error: new URI(\"" + toASCIIStringData[i]
1764561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    + "\").toASCIIString() returned: " + result
1765561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    + ", expected: " + toASCIIStringResults[i], result
1766561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .equals(toASCIIStringResults[i]));
1767561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1768561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1769561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1770561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
1771561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.URI#toString()
1772561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1773561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_toString() throws Exception {
1774561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        URI[] uris = getUris();
1775561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1776561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String[] toStringResults = {
1777561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "http://user%60%20info@host/a%20path?qu%60%20ery#fr%5E%20ag",
1778561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "http://user%C3%9F%C2%A3info@host:80/a%E2%82%ACpath?qu%C2%A9%C2%AEery#fr%C3%A4%C3%A8g",
1779561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "ascheme://user\u00DF\u00A3info@host:0/a\u20ACpath?qu\u00A9\u00AEery#fr\u00E4\u00E8g",
1780561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // =
1781561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // "ascheme://user\u00df\u00a3info@host:0/a\u0080path?qu\u00a9\u00aeery#fr\u00e4\u00e8g",
1782561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "http://user%2560%2520info@host:80/a%2520path?qu%2560%2520ery#fr%255E%2520ag",
1783561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "http://user%25C3%259F%25C2%25A3info@host/a%25E2%2582%25ACpath?qu%25C2%25A9%25C2%25AEery#fr%25C3%25A4%25C3%25A8g",
1784561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "ascheme://user\u00DF\u00A3info@host:80/a\u20ACpath?qu\u00A9\u00AEery#fr\u00E4\u00E8g",
1785561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // =
1786561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // "ascheme://user\u00df\u00a3info@host:80/a\u0080path?qu\u00a9\u00aeery#fr\u00e4\u00e8g",
1787561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "http://user%60%20info@host:81/a%20path?qu%60%20ery#fr%5E%20ag",
1788561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "http://user%25info@host:0/a%25path?que%25ry#f%25rag",
1789561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "mailto:user@domain.com", "../adirectory/file.html#",
1790561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "news:comp.infosystems.www.servers.unix", "#fragment",
1791561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "telnet://server.org", "http://reg:istry?query",
1792561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "file:///c:/temp/calculate.pl?" };
1793561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1794561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < uris.length; i++) {
1795561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            String result = uris[i].toString();
1796561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertTrue("Error: For URI \"" + uris[i].toString()
1797561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    + "\", toString() returned: " + result + ", expected: "
1798561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    + toStringResults[i], result.equals(toStringResults[i]));
1799561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1800561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1801561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1802561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
1803561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.net.URI#toURL()
1804561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1805561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_toURL() throws Exception {
1806561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String absoluteuris[] = new String[] { "mailto:noreply@apache.org",
1807561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "urn:isbn:123498989h", "news:software.ibm.com",
1808561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "http://www.apache.org", "file:///d:/temp/results.txt",
1809561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "scheme:ssp", };
1810561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1811561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String relativeuris[] = new String[] { "calculate.pl?isbn=123498989h",
1812561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "?isbn=123498989h", "//www.apache.org", "a.html", "#top",
1813561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "//pc1/", "//user@host/path/file" };
1814561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1815561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < absoluteuris.length; i++) {
1816561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
1817561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new URI(absoluteuris[i]).toURL();
1818561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (MalformedURLException e) {
1819561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // not all the URIs can be translated into valid URLs
1820561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1821561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1822561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1823561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < relativeuris.length; i++) {
1824561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
1825561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new URI(relativeuris[i]).toURL();
1826561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("Expected IllegalArgumentException not thrown");
1827561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (IllegalArgumentException e) {
1828561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // Expected
1829561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1830561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1831561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
18320eefc54c2ae7a461cb28a8f117b515071df19f1eJesse Wilson
1833561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
1834561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests serialization/deserialization.
1835561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1836561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testSerializationSelf() throws Exception {
1837561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        URI uri = new URI("http://harmony.apache.org/");
1838561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1839561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        SerializationTest.verifySelf(uri);
1840561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1841561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes}
1842