Home | History | Annotate | Download | only in net
      1 /*
      2  *  Licensed to the Apache Software Foundation (ASF) under one or more
      3  *  contributor license agreements.  See the NOTICE file distributed with
      4  *  this work for additional information regarding copyright ownership.
      5  *  The ASF licenses this file to You under the Apache License, Version 2.0
      6  *  (the "License"); you may not use this file except in compliance with
      7  *  the License.  You may obtain a copy of the License at
      8  *
      9  *     http://www.apache.org/licenses/LICENSE-2.0
     10  *
     11  *  Unless required by applicable law or agreed to in writing, software
     12  *  distributed under the License is distributed on an "AS IS" BASIS,
     13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14  *  See the License for the specific language governing permissions and
     15  *  limitations under the License.
     16  */
     17 
     18 package org.apache.harmony.luni.tests.java.net;
     19 
     20 import java.io.File;
     21 import java.io.IOException;
     22 import java.io.InputStream;
     23 import java.net.InetAddress;
     24 import java.net.InetSocketAddress;
     25 import java.net.MalformedURLException;
     26 import java.net.Proxy;
     27 import java.net.Proxy.Type;
     28 import java.net.ProxySelector;
     29 import java.net.SocketAddress;
     30 import java.net.URI;
     31 import java.net.URL;
     32 import java.net.URLConnection;
     33 import java.net.URLStreamHandler;
     34 import java.net.URLStreamHandlerFactory;
     35 import java.util.ArrayList;
     36 import java.util.List;
     37 import junit.framework.TestCase;
     38 import tests.support.Support_Configuration;
     39 import tests.support.resource.Support_Resources;
     40 
     41 public class URLTest extends TestCase {
     42 
     43     public static class MyHandler extends URLStreamHandler {
     44         protected URLConnection openConnection(URL u)
     45                 throws IOException {
     46             return null;
     47         }
     48     }
     49 
     50     URL u;
     51 
     52     URL u1;
     53 
     54     URL u2;
     55 
     56     URL u3;
     57 
     58     URL u4;
     59 
     60     URL u5;
     61 
     62     URL u6;
     63 
     64     boolean caught = false;
     65 
     66     static boolean isSelectCalled;
     67 
     68     /**
     69      * @tests java.net.URL#URL(java.lang.String)
     70      */
     71     public void test_ConstructorLjava_lang_String() throws IOException {
     72         // Tests for multiple URL instantiation basic parsing test
     73         u = new URL(
     74                 "http://www.yahoo1.com:8080/dir1/dir2/test.cgi?point1.html#anchor1");
     75         assertEquals("u returns a wrong protocol", "http", u.getProtocol());
     76         assertEquals("u returns a wrong host", "www.yahoo1.com", u.getHost());
     77         assertEquals("u returns a wrong port", 8080, u.getPort());
     78         assertEquals("u returns a wrong file",
     79                 "/dir1/dir2/test.cgi?point1.html", u.getFile());
     80         assertEquals("u returns a wrong anchor", "anchor1", u.getRef());
     81 
     82         // test for no file
     83         u1 = new URL("http://www.yahoo2.com:9999");
     84         assertEquals("u1 returns a wrong protocol", "http", u1.getProtocol());
     85         assertEquals("u1 returns a wrong host", "www.yahoo2.com", u1.getHost());
     86         assertEquals("u1 returns a wrong port", 9999, u1.getPort());
     87         assertTrue("u1 returns a wrong file", u1.getFile().equals(""));
     88         assertNull("u1 returns a wrong anchor", u1.getRef());
     89 
     90         // test for no port
     91         u2 = new URL(
     92                 "http://www.yahoo3.com/dir1/dir2/test.cgi?point1.html#anchor1");
     93         assertEquals("u2 returns a wrong protocol", "http", u2.getProtocol());
     94         assertEquals("u2 returns a wrong host", "www.yahoo3.com", u2.getHost());
     95         assertEquals("u2 returns a wrong port", -1, u2.getPort());
     96         assertEquals("u2 returns a wrong file",
     97                 "/dir1/dir2/test.cgi?point1.html", u2.getFile());
     98         assertEquals("u2 returns a wrong anchor", "anchor1", u2.getRef());
     99 
    100         // test for no port
    101         URL u2a = new URL("file://www.yahoo3.com/dir1/dir2/test.cgi#anchor1");
    102         assertEquals("u2a returns a wrong protocol", "file", u2a.getProtocol());
    103         assertEquals("u2a returns a wrong host", "www.yahoo3.com", u2a
    104                 .getHost());
    105         assertEquals("u2a returns a wrong port", -1, u2a.getPort());
    106         assertEquals("u2a returns a wrong file", "/dir1/dir2/test.cgi", u2a
    107                 .getFile());
    108         assertEquals("u2a returns a wrong anchor", "anchor1", u2a.getRef());
    109 
    110         // test for no file, no port
    111         u3 = new URL("http://www.yahoo4.com/");
    112         assertEquals("u3 returns a wrong protocol", "http", u3.getProtocol());
    113         assertEquals("u3 returns a wrong host", "www.yahoo4.com", u3.getHost());
    114         assertEquals("u3 returns a wrong port", -1, u3.getPort());
    115         assertEquals("u3 returns a wrong file", "/", u3.getFile());
    116         assertNull("u3 returns a wrong anchor", u3.getRef());
    117 
    118         // test for no file, no port
    119         URL u3a = new URL("file://www.yahoo4.com/");
    120         assertEquals("u3a returns a wrong protocol", "file", u3a.getProtocol());
    121         assertEquals("u3a returns a wrong host", "www.yahoo4.com", u3a
    122                 .getHost());
    123         assertEquals("u3a returns a wrong port", -1, u3a.getPort());
    124         assertEquals("u3a returns a wrong file", "/", u3a.getFile());
    125         assertNull("u3a returns a wrong anchor", u3a.getRef());
    126 
    127         // test for no file, no port
    128         URL u3b = new URL("file://www.yahoo4.com");
    129         assertEquals("u3b returns a wrong protocol", "file", u3b.getProtocol());
    130         assertEquals("u3b returns a wrong host", "www.yahoo4.com", u3b
    131                 .getHost());
    132         assertEquals("u3b returns a wrong port", -1, u3b.getPort());
    133         assertTrue("u3b returns a wrong file", u3b.getFile().equals(""));
    134         assertNull("u3b returns a wrong anchor", u3b.getRef());
    135 
    136         // test for non-port ":" and wierd characters occurrences
    137         u4 = new URL(
    138                 "http://www.yahoo5.com/di!@$%^&*()_+r1/di:::r2/test.cgi?point1.html#anchor1");
    139         assertEquals("u4 returns a wrong protocol", "http", u4.getProtocol());
    140         assertEquals("u4 returns a wrong host", "www.yahoo5.com", u4.getHost());
    141         assertEquals("u4 returns a wrong port", -1, u4.getPort());
    142         assertEquals("u4 returns a wrong file",
    143                 "/di!@$%^&*()_+r1/di:::r2/test.cgi?point1.html", u4.getFile());
    144         assertEquals("u4 returns a wrong anchor", "anchor1", u4.getRef());
    145 
    146         u5 = new URL("file:/testing.tst");
    147         assertEquals("u5 returns a wrong protocol", "file", u5.getProtocol());
    148         assertTrue("u5 returns a wrong host", u5.getHost().equals(""));
    149         assertEquals("u5 returns a wrong port", -1, u5.getPort());
    150         assertEquals("u5 returns a wrong file", "/testing.tst", u5.getFile());
    151         assertNull("u5 returns a wrong anchor", u5.getRef());
    152 
    153         URL u5a = new URL("file:testing.tst");
    154         assertEquals("u5a returns a wrong protocol", "file", u5a.getProtocol());
    155         assertTrue("u5a returns a wrong host", u5a.getHost().equals(""));
    156         assertEquals("u5a returns a wrong port", -1, u5a.getPort());
    157         assertEquals("u5a returns a wrong file", "testing.tst", u5a.getFile());
    158         assertNull("u5a returns a wrong anchor", u5a.getRef());
    159 
    160         URL u6 = new URL("http://host:/file");
    161         assertEquals("u6 return a wrong port", -1, u6.getPort());
    162 
    163         URL u7 = new URL("file:../../file.txt");
    164         assertTrue("u7 returns a wrong file: " + u7.getFile(), u7.getFile()
    165                 .equals("../../file.txt"));
    166 
    167         URL u8 = new URL("http://[fec0::1:20d:60ff:fe24:7410]:35/file.txt");
    168         assertTrue("u8 returns a wrong protocol " + u8.getProtocol(), u8
    169                 .getProtocol().equals("http"));
    170         assertTrue("u8 returns a wrong host " + u8.getHost(), u8.getHost()
    171                 .equals("[fec0::1:20d:60ff:fe24:7410]"));
    172         assertTrue("u8 returns a wrong port " + u8.getPort(),
    173                 u8.getPort() == 35);
    174         assertTrue("u8 returns a wrong file " + u8.getFile(), u8.getFile()
    175                 .equals("/file.txt"));
    176         assertNull("u8 returns a wrong anchor " + u8.getRef(), u8.getRef());
    177 
    178         URL u9 = new URL("file://[fec0::1:20d:60ff:fe24:7410]/file.txt#sogood");
    179         assertTrue("u9 returns a wrong protocol " + u9.getProtocol(), u9
    180                 .getProtocol().equals("file"));
    181         assertTrue("u9 returns a wrong host " + u9.getHost(), u9.getHost()
    182                 .equals("[fec0::1:20d:60ff:fe24:7410]"));
    183         assertTrue("u9 returns a wrong port " + u9.getPort(),
    184                 u9.getPort() == -1);
    185         assertTrue("u9 returns a wrong file " + u9.getFile(), u9.getFile()
    186                 .equals("/file.txt"));
    187         assertTrue("u9 returns a wrong anchor " + u9.getRef(), u9.getRef()
    188                 .equals("sogood"));
    189 
    190         URL u10 = new URL("file://[fec0::1:20d:60ff:fe24:7410]");
    191         assertTrue("u10 returns a wrong protocol " + u10.getProtocol(), u10
    192                 .getProtocol().equals("file"));
    193         assertTrue("u10 returns a wrong host " + u10.getHost(), u10.getHost()
    194                 .equals("[fec0::1:20d:60ff:fe24:7410]"));
    195         assertTrue("u10 returns a wrong port " + u10.getPort(),
    196                 u10.getPort() == -1);
    197 
    198 		URL u11 = new URL("file:////file.txt");
    199         assertNull("u11 returns a wrong authority " + u11.getAuthority(), u11
    200                 .getAuthority());
    201         assertTrue("u11 returns a wrong file " + u11.getFile(), u11.getFile()
    202                 .equals("////file.txt"));
    203 
    204         URL u12 = new URL("file:///file.txt");
    205         assertTrue("u12 returns a wrong authority", u12.getAuthority().equals(
    206                 ""));
    207         assertTrue("u12 returns a wrong file " + u12.getFile(), u12.getFile()
    208                 .equals("/file.txt"));
    209 
    210 
    211         // test for error catching
    212 
    213         // Bad HTTP format - no "//"
    214         u = new URL(
    215                 "http:www.yahoo5.com::22/dir1/di:::r2/test.cgi?point1.html#anchor1");
    216 
    217         caught = false;
    218         try {
    219             u = new URL(
    220                     "http://www.yahoo5.com::22/dir1/di:::r2/test.cgi?point1.html#anchor1");
    221         } catch (MalformedURLException e) {
    222             caught = true;
    223         }
    224         assertTrue("Should have throw MalformedURLException", caught);
    225 
    226         // unknown protocol
    227         try {
    228             u = new URL("myProtocol://www.yahoo.com:22");
    229         } catch (MalformedURLException e) {
    230             caught = true;
    231         }
    232         assertTrue("3 Failed to throw MalformedURLException", caught);
    233 
    234         caught = false;
    235         // no protocol
    236         try {
    237             u = new URL("www.yahoo.com");
    238         } catch (MalformedURLException e) {
    239             caught = true;
    240         }
    241         assertTrue("4 Failed to throw MalformedURLException", caught);
    242 
    243         caught = false;
    244 
    245         URL u1 = null;
    246         try {
    247             // No leading or trailing spaces.
    248             u1 = new URL("file:/some/path");
    249             assertEquals("5 got wrong file length1", 10, u1.getFile().length());
    250 
    251             // Leading spaces.
    252             u1 = new URL("  file:/some/path");
    253             assertEquals("5 got wrong file length2", 10, u1.getFile().length());
    254 
    255             // Trailing spaces.
    256             u1 = new URL("file:/some/path  ");
    257             assertEquals("5 got wrong file length3", 10, u1.getFile().length());
    258 
    259             // Leading and trailing.
    260             u1 = new URL("  file:/some/path ");
    261             assertEquals("5 got wrong file length4", 10, u1.getFile().length());
    262 
    263             // in-place spaces.
    264             u1 = new URL("  file:  /some/path ");
    265             assertEquals("5 got wrong file length5", 12, u1.getFile().length());
    266 
    267         } catch (MalformedURLException e) {
    268             fail("5 Did not expect the exception " + e);
    269         }
    270 
    271         // testing jar protocol with relative path
    272         // to make sure it's not canonicalized
    273         try {
    274             String file = "file:/a!/b/../d";
    275 
    276             u = new URL("jar:" + file);
    277             assertEquals("Wrong file (jar protocol, relative path)", file, u
    278                     .getFile());
    279         } catch (MalformedURLException e) {
    280             fail("Unexpected exception (jar protocol, relative path)" + e);
    281         }
    282     }
    283 
    284     /**
    285      * @tests java.net.URL#URL(java.net.URL, java.lang.String)
    286      */
    287     public void test_ConstructorLjava_net_URLLjava_lang_String()
    288             throws Exception {
    289         // Test for method java.net.URL(java.net.URL, java.lang.String)
    290         u = new URL("http://www.yahoo.com");
    291         URL uf = new URL("file://www.yahoo.com");
    292         // basic ones
    293         u1 = new URL(u, "file.java");
    294         assertEquals("1 returns a wrong protocol", "http", u1.getProtocol());
    295         assertEquals("1 returns a wrong host", "www.yahoo.com", u1.getHost());
    296         assertEquals("1 returns a wrong port", -1, u1.getPort());
    297         assertEquals("1 returns a wrong file", "/file.java", u1.getFile());
    298         assertNull("1 returns a wrong anchor", u1.getRef());
    299 
    300         URL u1f = new URL(uf, "file.java");
    301         assertEquals("1f returns a wrong protocol", "file", u1f.getProtocol());
    302         assertEquals("1f returns a wrong host", "www.yahoo.com", u1f.getHost());
    303         assertEquals("1f returns a wrong port", -1, u1f.getPort());
    304         assertEquals("1f returns a wrong file", "/file.java", u1f.getFile());
    305         assertNull("1f returns a wrong anchor", u1f.getRef());
    306 
    307         u1 = new URL(u, "dir1/dir2/../file.java");
    308         assertEquals("3 returns a wrong protocol", "http", u1.getProtocol());
    309         assertTrue("3 returns a wrong host: " + u1.getHost(), u1.getHost()
    310                 .equals("www.yahoo.com"));
    311         assertEquals("3 returns a wrong port", -1, u1.getPort());
    312         assertEquals("3 returns a wrong file", "/dir1/dir2/../file.java", u1
    313                 .getFile());
    314         assertNull("3 returns a wrong anchor", u1.getRef());
    315 
    316         u1 = new URL(u, "http:dir1/dir2/../file.java");
    317         assertEquals("3a returns a wrong protocol", "http", u1.getProtocol());
    318         assertTrue("3a returns a wrong host: " + u1.getHost(), u1.getHost()
    319                 .equals(""));
    320         assertEquals("3a returns a wrong port", -1, u1.getPort());
    321         assertEquals("3a returns a wrong file", "dir1/dir2/../file.java", u1
    322                 .getFile());
    323         assertNull("3a returns a wrong anchor", u1.getRef());
    324 
    325         u = new URL("http://www.apache.org/testing/");
    326         u1 = new URL(u, "file.java");
    327         assertEquals("4 returns a wrong protocol", "http", u1.getProtocol());
    328         assertEquals("4 returns a wrong host", "www.apache.org", u1.getHost());
    329         assertEquals("4 returns a wrong port", -1, u1.getPort());
    330         assertEquals("4 returns a wrong file", "/testing/file.java", u1
    331                 .getFile());
    332         assertNull("4 returns a wrong anchor", u1.getRef());
    333 
    334         uf = new URL("file://www.apache.org/testing/");
    335         u1f = new URL(uf, "file.java");
    336         assertEquals("4f returns a wrong protocol", "file", u1f.getProtocol());
    337         assertEquals("4f returns a wrong host", "www.apache.org", u1f.getHost());
    338         assertEquals("4f returns a wrong port", -1, u1f.getPort());
    339         assertEquals("4f returns a wrong file", "/testing/file.java", u1f
    340                 .getFile());
    341         assertNull("4f returns a wrong anchor", u1f.getRef());
    342 
    343         uf = new URL("file:/testing/");
    344         u1f = new URL(uf, "file.java");
    345         assertEquals("4fa returns a wrong protocol", "file", u1f.getProtocol());
    346         assertTrue("4fa returns a wrong host", u1f.getHost().equals(""));
    347         assertEquals("4fa returns a wrong port", -1, u1f.getPort());
    348         assertEquals("4fa returns a wrong file", "/testing/file.java", u1f
    349                 .getFile());
    350         assertNull("4fa returns a wrong anchor", u1f.getRef());
    351 
    352         uf = new URL("file:testing/");
    353         u1f = new URL(uf, "file.java");
    354         assertEquals("4fb returns a wrong protocol", "file", u1f.getProtocol());
    355         assertTrue("4fb returns a wrong host", u1f.getHost().equals(""));
    356         assertEquals("4fb returns a wrong port", -1, u1f.getPort());
    357         assertEquals("4fb returns a wrong file", "testing/file.java", u1f
    358                 .getFile());
    359         assertNull("4fb returns a wrong anchor", u1f.getRef());
    360 
    361         u1f = new URL(uf, "file:file.java");
    362         assertEquals("4fc returns a wrong protocol", "file", u1f.getProtocol());
    363         assertTrue("4fc returns a wrong host", u1f.getHost().equals(""));
    364         assertEquals("4fc returns a wrong port", -1, u1f.getPort());
    365         assertEquals("4fc returns a wrong file", "file.java", u1f.getFile());
    366         assertNull("4fc returns a wrong anchor", u1f.getRef());
    367 
    368         u1f = new URL(uf, "file:");
    369         assertEquals("4fd returns a wrong protocol", "file", u1f.getProtocol());
    370         assertTrue("4fd returns a wrong host", u1f.getHost().equals(""));
    371         assertEquals("4fd returns a wrong port", -1, u1f.getPort());
    372         assertTrue("4fd returns a wrong file", u1f.getFile().equals(""));
    373         assertNull("4fd returns a wrong anchor", u1f.getRef());
    374 
    375         u = new URL("http://www.apache.org/testing");
    376         u1 = new URL(u, "file.java");
    377         assertEquals("5 returns a wrong protocol", "http", u1.getProtocol());
    378         assertEquals("5 returns a wrong host", "www.apache.org", u1.getHost());
    379         assertEquals("5 returns a wrong port", -1, u1.getPort());
    380         assertEquals("5 returns a wrong file", "/file.java", u1.getFile());
    381         assertNull("5 returns a wrong anchor", u1.getRef());
    382 
    383         uf = new URL("file://www.apache.org/testing");
    384         u1f = new URL(uf, "file.java");
    385         assertEquals("5f returns a wrong protocol", "file", u1f.getProtocol());
    386         assertEquals("5f returns a wrong host", "www.apache.org", u1f.getHost());
    387         assertEquals("5f returns a wrong port", -1, u1f.getPort());
    388         assertEquals("5f returns a wrong file", "/file.java", u1f.getFile());
    389         assertNull("5f returns a wrong anchor", u1f.getRef());
    390 
    391         uf = new URL("file:/testing");
    392         u1f = new URL(uf, "file.java");
    393         assertEquals("5fa returns a wrong protocol", "file", u1f.getProtocol());
    394         assertTrue("5fa returns a wrong host", u1f.getHost().equals(""));
    395         assertEquals("5fa returns a wrong port", -1, u1f.getPort());
    396         assertEquals("5fa returns a wrong file", "/file.java", u1f.getFile());
    397         assertNull("5fa returns a wrong anchor", u1f.getRef());
    398 
    399         uf = new URL("file:testing");
    400         u1f = new URL(uf, "file.java");
    401         assertEquals("5fb returns a wrong protocol", "file", u1f.getProtocol());
    402         assertTrue("5fb returns a wrong host", u1f.getHost().equals(""));
    403         assertEquals("5fb returns a wrong port", -1, u1f.getPort());
    404         assertEquals("5fb returns a wrong file", "file.java", u1f.getFile());
    405         assertNull("5fb returns a wrong anchor", u1f.getRef());
    406 
    407         u = new URL("http://www.apache.org/testing/foobaz");
    408         u1 = new URL(u, "/file.java");
    409         assertEquals("6 returns a wrong protocol", "http", u1.getProtocol());
    410         assertEquals("6 returns a wrong host", "www.apache.org", u1.getHost());
    411         assertEquals("6 returns a wrong port", -1, u1.getPort());
    412         assertEquals("6 returns a wrong file", "/file.java", u1.getFile());
    413         assertNull("6 returns a wrong anchor", u1.getRef());
    414 
    415         uf = new URL("file://www.apache.org/testing/foobaz");
    416         u1f = new URL(uf, "/file.java");
    417         assertEquals("6f returns a wrong protocol", "file", u1f.getProtocol());
    418         assertEquals("6f returns a wrong host", "www.apache.org", u1f.getHost());
    419         assertEquals("6f returns a wrong port", -1, u1f.getPort());
    420         assertEquals("6f returns a wrong file", "/file.java", u1f.getFile());
    421         assertNull("6f returns a wrong anchor", u1f.getRef());
    422 
    423         u = new URL("http://www.apache.org:8000/testing/foobaz");
    424         u1 = new URL(u, "/file.java");
    425         assertEquals("7 returns a wrong protocol", "http", u1.getProtocol());
    426         assertEquals("7 returns a wrong host", "www.apache.org", u1.getHost());
    427         assertEquals("7 returns a wrong port", 8000, u1.getPort());
    428         assertEquals("7 returns a wrong file", "/file.java", u1.getFile());
    429         assertNull("7 returns a wrong anchor", u1.getRef());
    430 
    431         u = new URL("http://www.apache.org/index.html");
    432         u1 = new URL(u, "#bar");
    433         assertEquals("8 returns a wrong host", "www.apache.org", u1.getHost());
    434         assertEquals("8 returns a wrong file", "/index.html", u1.getFile());
    435         assertEquals("8 returns a wrong anchor", "bar", u1.getRef());
    436 
    437         u = new URL("http://www.apache.org/index.html#foo");
    438         u1 = new URL(u, "http:#bar");
    439         assertEquals("9 returns a wrong host", "www.apache.org", u1.getHost());
    440         assertEquals("9 returns a wrong file", "/index.html", u1.getFile());
    441         assertEquals("9 returns a wrong anchor", "bar", u1.getRef());
    442 
    443         u = new URL("http://www.apache.org/index.html");
    444         u1 = new URL(u, "");
    445         assertEquals("10 returns a wrong host", "www.apache.org", u1.getHost());
    446         assertEquals("10 returns a wrong file", "/index.html", u1.getFile());
    447         assertNull("10 returns a wrong anchor", u1.getRef());
    448 
    449         uf = new URL("file://www.apache.org/index.html");
    450         u1f = new URL(uf, "");
    451         assertEquals("10f returns a wrong host", "www.apache.org", u1.getHost());
    452         assertEquals("10f returns a wrong file", "/index.html", u1.getFile());
    453         assertNull("10f returns a wrong anchor", u1.getRef());
    454 
    455         u = new URL("http://www.apache.org/index.html");
    456         u1 = new URL(u, "http://www.apache.org");
    457         assertEquals("11 returns a wrong host", "www.apache.org", u1.getHost());
    458         assertTrue("11 returns a wrong file", u1.getFile().equals(""));
    459         assertNull("11 returns a wrong anchor", u1.getRef());
    460 
    461         // test for question mark processing
    462         u = new URL("http://www.foo.com/d0/d1/d2/cgi-bin?foo=bar/baz");
    463 
    464         // test for relative file and out of bound "/../" processing
    465         u1 = new URL(u, "../dir1/./dir2/../file.java");
    466         assertTrue("A) returns a wrong file: " + u1.getFile(), u1.getFile()
    467                 .equals("/d0/d1/dir1/file.java"));
    468 
    469         // test for absolute and relative file processing
    470         u1 = new URL(u, "/../dir1/./dir2/../file.java");
    471         assertEquals("B) returns a wrong file", "/../dir1/./dir2/../file.java",
    472                 u1.getFile());
    473 
    474         try {
    475             // u should raise a MalFormedURLException because u, the context is
    476             // null
    477             u = null;
    478             u1 = new URL(u, "file.java");
    479             fail("didn't throw the expected MalFormedURLException");
    480         } catch (MalformedURLException e) {
    481             // valid
    482         }
    483 
    484         // Regression test for HARMONY-3258
    485         // testing jar context url with relative file
    486         try {
    487             // check that relative path with null context is not canonicalized
    488             String spec = "jar:file:/a!/b/../d";
    489             URL ctx = null;
    490             u = new URL(ctx, spec);
    491             assertEquals("1 Wrong file (jar protocol, relative path)", spec, u
    492                     .toString());
    493 
    494             spec = "../d";
    495             ctx = new URL("jar:file:/a!/b");
    496             u = new URL(ctx, spec);
    497             assertEquals("2 Wrong file (jar protocol, relative path)",
    498                     "file:/a!/d", u.getFile());
    499 
    500             spec = "../d";
    501             ctx = new URL("jar:file:/a!/b/c");
    502             u = new URL(ctx, spec);
    503             assertEquals("3 Wrong file (jar protocol, relative path)",
    504                     "file:/a!/d", u.getFile());
    505 
    506             spec = "../d";
    507             ctx = new URL("jar:file:/a!/b/c/d");
    508             u = new URL(ctx, spec);
    509             assertEquals("4 Wrong file (jar protocol, relative path)",
    510                     "file:/a!/b/d", u.getFile());
    511 
    512             // added the real example
    513             spec = "../pdf/PDF.settings";
    514             ctx = new URL(
    515                     "jar:file:/C:/Program%20Files/Netbeans-5.5/ide7/modules/org-netbeans-modules-utilities.jar!/org/netbeans/modules/utilities/Layer.xml");
    516             u = new URL(ctx, spec);
    517             assertEquals(
    518                     "5 Wrong file (jar protocol, relative path)",
    519                     "file:/C:/Program%20Files/Netbeans-5.5/ide7/modules/org-netbeans-modules-utilities.jar!/org/netbeans/modules/pdf/PDF.settings",
    520                     u.getFile());
    521         } catch (MalformedURLException e) {
    522             fail("Testing jar protocol, relative path failed: " + e);
    523         }
    524     }
    525 
    526     /**
    527      * @tests java.net.URL#URL(java.net.URL, java.lang.String,
    528      *        java.net.URLStreamHandler)
    529      */
    530     public void test_ConstructorLjava_net_URLLjava_lang_StringLjava_net_URLStreamHandler()
    531             throws Exception {
    532         // Test for method java.net.URL(java.net.URL, java.lang.String,
    533         // java.net.URLStreamHandler)
    534         u = new URL("http://www.yahoo.com");
    535         // basic ones
    536         u1 = new URL(u, "file.java", new MyHandler());
    537         assertEquals("1 returns a wrong protocol", "http", u1.getProtocol());
    538         assertEquals("1 returns a wrong host", "www.yahoo.com", u1.getHost());
    539         assertEquals("1 returns a wrong port", -1, u1.getPort());
    540         assertEquals("1 returns a wrong file", "/file.java", u1.getFile());
    541         assertNull("1 returns a wrong anchor", u1.getRef());
    542 
    543         u1 = new URL(u, "systemresource:/+/FILE0/test.java", new MyHandler());
    544         assertEquals("2 returns a wrong protocol", "systemresource", u1
    545                 .getProtocol());
    546         assertTrue("2 returns a wrong host", u1.getHost().equals(""));
    547         assertEquals("2 returns a wrong port", -1, u1.getPort());
    548         assertEquals("2 returns a wrong file", "/+/FILE0/test.java", u1
    549                 .getFile());
    550         assertNull("2 returns a wrong anchor", u1.getRef());
    551 
    552         u1 = new URL(u, "dir1/dir2/../file.java", null);
    553         assertEquals("3 returns a wrong protocol", "http", u1.getProtocol());
    554         assertEquals("3 returns a wrong host", "www.yahoo.com", u1.getHost());
    555         assertEquals("3 returns a wrong port", -1, u1.getPort());
    556         assertEquals("3 returns a wrong file", "/dir1/dir2/../file.java", u1
    557                 .getFile());
    558         assertNull("3 returns a wrong anchor", u1.getRef());
    559 
    560         // test for question mark processing
    561         u = new URL("http://www.foo.com/d0/d1/d2/cgi-bin?foo=bar/baz");
    562 
    563         // test for relative file and out of bound "/../" processing
    564         u1 = new URL(u, "../dir1/dir2/../file.java", new MyHandler());
    565         assertTrue("A) returns a wrong file: " + u1.getFile(), u1.getFile()
    566                 .equals("/d0/d1/dir1/file.java"));
    567 
    568         // test for absolute and relative file processing
    569         u1 = new URL(u, "/../dir1/dir2/../file.java", null);
    570         assertEquals("B) returns a wrong file", "/../dir1/dir2/../file.java",
    571                 u1.getFile());
    572 
    573         URL one;
    574         try {
    575             one = new URL("http://www.ibm.com");
    576         } catch (MalformedURLException ex) {
    577             // Should not happen.
    578             throw new RuntimeException(ex.getMessage());
    579         }
    580         try {
    581             new URL(one, (String) null);
    582             fail("Specifying null spec on URL constructor should throw MalformedURLException");
    583         } catch (MalformedURLException e) {
    584             // expected
    585         }
    586 
    587         try {
    588             // u should raise a MalFormedURLException because u, the context is
    589             // null
    590             u = null;
    591             u1 = new URL(u, "file.java", new MyHandler());
    592         } catch (MalformedURLException e) {
    593             return;
    594         }
    595         fail("didn't throw expected MalFormedURLException");
    596     }
    597 
    598     /**
    599      * @tests java.net.URL#URL(java.lang.String, java.lang.String,
    600      *        java.lang.String)
    601      */
    602     public void test_ConstructorLjava_lang_StringLjava_lang_StringLjava_lang_String()
    603             throws MalformedURLException {
    604 
    605         u = new URL("http", "www.yahoo.com", "test.html#foo");
    606         assertEquals("http", u.getProtocol());
    607         assertEquals("www.yahoo.com", u.getHost());
    608         assertEquals(-1, u.getPort());
    609         assertEquals("test.html", u.getFile());
    610         assertEquals("foo", u.getRef());
    611 
    612         // Strange behavior in reference, the hostname contains a ':' so it gets
    613         // wrapped in '[', ']'
    614         URL testURL = new URL("http", "www.apache.org:8080", "test.html#anch");
    615         assertEquals("wrong protocol", "http", testURL.getProtocol());
    616         assertEquals("wrong host", "[www.apache.org:8080]", testURL.getHost());
    617         assertEquals("wrong port", -1, testURL.getPort());
    618         assertEquals("wrong file", "test.html", testURL.getFile());
    619         assertEquals("wrong anchor", "anch", testURL.getRef());
    620     }
    621 
    622     /**
    623      * @tests java.net.URL#URL(java.lang.String, java.lang.String, int,
    624      *        java.lang.String)
    625      */
    626     public void test_ConstructorLjava_lang_StringLjava_lang_StringILjava_lang_String()
    627             throws MalformedURLException {
    628         u = new URL("http", "www.yahoo.com", 8080, "test.html#foo");
    629         assertEquals("SSIS returns a wrong protocol", "http", u.getProtocol());
    630         assertEquals("SSIS returns a wrong host", "www.yahoo.com", u.getHost());
    631         assertEquals("SSIS returns a wrong port", 8080, u.getPort());
    632         assertEquals("SSIS returns a wrong file", "test.html", u.getFile());
    633         assertTrue("SSIS returns a wrong anchor: " + u.getRef(), u.getRef()
    634                 .equals("foo"));
    635 
    636         // Regression for HARMONY-83
    637         new URL("http", "apache.org", 123456789, "file");
    638         try {
    639             new URL("http", "apache.org", -123, "file");
    640             fail("Assert 0: Negative port should throw exception");
    641         } catch (MalformedURLException e) {
    642             // expected
    643         }
    644 
    645     }
    646 
    647     /**
    648      * @tests java.net.URL#URL(java.lang.String, java.lang.String, int,
    649      *        java.lang.String, java.net.URLStreamHandler)
    650      */
    651     public void test_ConstructorLjava_lang_StringLjava_lang_StringILjava_lang_StringLjava_net_URLStreamHandler()
    652             throws Exception {
    653         // Test for method java.net.URL(java.lang.String, java.lang.String, int,
    654         // java.lang.String, java.net.URLStreamHandler)
    655         u = new URL("http", "www.yahoo.com", 8080, "test.html#foo", null);
    656         assertEquals("SSISH1 returns a wrong protocol", "http", u.getProtocol());
    657         assertEquals("SSISH1 returns a wrong host", "www.yahoo.com", u
    658                 .getHost());
    659         assertEquals("SSISH1 returns a wrong port", 8080, u.getPort());
    660         assertEquals("SSISH1 returns a wrong file", "test.html", u.getFile());
    661         assertTrue("SSISH1 returns a wrong anchor: " + u.getRef(), u.getRef()
    662                 .equals("foo"));
    663 
    664         u = new URL("http", "www.yahoo.com", 8080, "test.html#foo",
    665                 new MyHandler());
    666         assertEquals("SSISH2 returns a wrong protocol", "http", u.getProtocol());
    667         assertEquals("SSISH2 returns a wrong host", "www.yahoo.com", u
    668                 .getHost());
    669         assertEquals("SSISH2 returns a wrong port", 8080, u.getPort());
    670         assertEquals("SSISH2 returns a wrong file", "test.html", u.getFile());
    671         assertTrue("SSISH2 returns a wrong anchor: " + u.getRef(), u.getRef()
    672                 .equals("foo"));
    673     }
    674 
    675     /**
    676      * @tests java.net.URL#equals(java.lang.Object)
    677      */
    678     public void test_equalsLjava_lang_Object() throws MalformedURLException {
    679         u = new URL("http://www.apache.org:8080/dir::23??????????test.html");
    680         u1 = new URL("http://www.apache.org:8080/dir::23??????????test.html");
    681         assertTrue("A) equals returns false for two identical URLs", u
    682                 .equals(u1));
    683         assertTrue("return true for null comparison", !u1.equals(null));
    684         u = new URL("ftp://www.apache.org:8080/dir::23??????????test.html");
    685         assertTrue("Returned true for non-equal URLs", !u.equals(u1));
    686 
    687         // Regression for HARMONY-6556
    688         u = new URL("file", null, 0, "/test.txt");
    689         u1 = new URL("file", null, 0, "/test.txt");
    690         assertEquals(u, u1);
    691 
    692         u = new URL("file", "first.invalid", 0, "/test.txt");
    693         u1 = new URL("file", "second.invalid", 0, "/test.txt");
    694         assertFalse(u.equals(u1));
    695 
    696         u = new URL("file", "harmony.apache.org", 0, "/test.txt");
    697         u1 = new URL("file", "www.apache.org", 0, "/test.txt");
    698         assertEquals(u, u1);
    699     }
    700 
    701     /**
    702      * @tests java.net.URL#sameFile(java.net.URL)
    703      */
    704     public void test_sameFileLjava_net_URL() throws Exception {
    705         // Test for method boolean java.net.URL.sameFile(java.net.URL)
    706         u = new URL("http://www.yahoo.com");
    707         u1 = new URL("http", "www.yahoo.com", "");
    708         assertTrue("Should be the same1", u.sameFile(u1));
    709         u = new URL("http://www.yahoo.com/dir1/dir2/test.html#anchor1");
    710         u1 = new URL("http://www.yahoo.com/dir1/dir2/test.html#anchor2");
    711         assertTrue("Should be the same ", u.sameFile(u1));
    712 
    713         // regression test for Harmony-1040
    714         u = new URL("file", null, -1, "/d:/somedir/");
    715         u1 = new URL("file:/d:/somedir/");
    716         assertFalse(u.sameFile(u1));
    717 
    718         // regression test for Harmony-2136
    719         URL url1 = new URL("file:///anyfile");
    720         URL url2 = new URL("file://localhost/anyfile");
    721         assertTrue(url1.sameFile(url2));
    722 
    723         url1 = new URL("http:///anyfile");
    724         url2 = new URL("http://localhost/anyfile");
    725         assertFalse(url1.sameFile(url2));
    726 
    727         url1 = new URL("ftp:///anyfile");
    728         url2 = new URL("ftp://localhost/anyfile");
    729         assertFalse(url1.sameFile(url2));
    730 
    731         url1 = new URL("jar:file:///anyfile.jar!/");
    732         url2 = new URL("jar:file://localhost/anyfile.jar!/");
    733         assertFalse(url1.sameFile(url2));
    734     }
    735 
    736     /**
    737      * @tests java.net.URL#getContent()
    738      */
    739     public void test_getContent() {
    740         // Test for method java.lang.Object java.net.URL.getContent()
    741         byte[] ba;
    742         InputStream is;
    743         String s;
    744         File resources = Support_Resources.createTempFolder();
    745         try {
    746             Support_Resources.copyFile(resources, null, "hyts_htmltest.html");
    747             u = new URL("file", "", resources.getAbsolutePath()
    748                     + "/hyts_htmltest.html");
    749             u.openConnection();
    750             is = (InputStream) u.getContent();
    751             is.read(ba = new byte[4096]);
    752             s = new String(ba);
    753             assertTrue(
    754                     "Incorrect content "
    755                             + u
    756                             + " does not contain: \" A Seemingly Non Important String \"",
    757                     s.indexOf("A Seemingly Non Important String") >= 0);
    758         } catch (IOException e) {
    759             fail("IOException thrown : " + e.getMessage());
    760         } finally {
    761             // Support_Resources.deleteTempFolder(resources);
    762         }
    763     }
    764 
    765     /**
    766      * @tests java.net.URL#getContent(class[])
    767      */
    768     public void test_getContent_LJavaLangClass() throws Exception {
    769         byte[] ba;
    770         InputStream is;
    771         String s;
    772 
    773         File resources = Support_Resources.createTempFolder();
    774 
    775         Support_Resources.copyFile(resources, null, "hyts_htmltest.html");
    776         u = new URL("file", "", resources.getAbsolutePath()
    777                 + "/hyts_htmltest.html");
    778         u.openConnection();
    779 
    780         is = (InputStream) u.getContent(new Class[] { Object.class });
    781         is.read(ba = new byte[4096]);
    782         s = new String(ba);
    783         assertTrue("Incorrect content " + u
    784                 + " does not contain: \" A Seemingly Non Important String \"",
    785                 s.indexOf("A Seemingly Non Important String") >= 0);
    786 
    787     }
    788 
    789     /**
    790      * @tests java.net.URL#openStream()
    791      */
    792     public void test_openStream() throws Exception {
    793         // Regression test for Harmony-1700
    794         URL BASE = URLTest.class.getClassLoader().getResource(
    795                 URLTest.class.getPackage().getName().replace('.',
    796                         File.separatorChar)
    797                         + "/lf.jar");
    798         URL url = new URL("jar:" + BASE + "!/foo.jar!/Bugs/HelloWorld.class");
    799         try {
    800             url.openStream();
    801             fail("should throw FNFE.");
    802         } catch (java.io.FileNotFoundException e) {
    803             // Expected
    804         }
    805 
    806         // Test for method java.io.InputStream java.net.URL.openStream()
    807         File resources = Support_Resources.createTempFolder();
    808         Support_Resources.copyFile(resources, null, "hyts_htmltest.html");
    809         u = new URL("file", "", resources.getAbsolutePath()
    810                 + "/hyts_htmltest.html");
    811         // HTTP connection
    812         InputStream is1 = u.openStream();
    813         assertTrue("Unable to read from stream", is1.read() != 0);
    814         is1.close();
    815 
    816         boolean exception = false;
    817         try {
    818             u = new URL("file:///nonexistenttestdir/tstfile");
    819             u.openStream();
    820         } catch (IOException e) {
    821             // Correct behaviour
    822             exception = true;
    823         }
    824         assertTrue("openStream succeeded for non existent resource", exception);
    825     }
    826 
    827     /**
    828      * @tests java.net.URL#openConnection()
    829      */
    830     public void test_openConnection() {
    831         // Test for method java.net.URLConnection java.net.URL.openConnection()
    832         try {
    833             u = new URL("systemresource:/FILE4/+/types.properties");
    834             URLConnection uConn = u.openConnection();
    835             assertNotNull("u.openConnection() returns null", uConn);
    836         } catch (Exception e) {
    837         }
    838     }
    839 
    840     /**
    841      * @tests java.net.URL#toString()
    842      */
    843     public void test_toString() {
    844         // Test for method java.lang.String java.net.URL.toString()
    845         try {
    846             u1 = new URL("http://www.yahoo2.com:9999");
    847             u = new URL(
    848                     "http://www.yahoo1.com:8080/dir1/dir2/test.cgi?point1.html#anchor1");
    849             assertEquals(
    850                     "a) Does not return the right url string",
    851 
    852                     "http://www.yahoo1.com:8080/dir1/dir2/test.cgi?point1.html#anchor1",
    853                     u.toString());
    854             assertEquals("b) Does not return the right url string",
    855                     "http://www.yahoo2.com:9999", u1.toString());
    856             assertTrue("c) Does not return the right url string", u
    857                     .equals(new URL(u.toString())));
    858         } catch (Exception e) {
    859         }
    860     }
    861 
    862     /**
    863      * @tests java.net.URL#toExternalForm()
    864      */
    865     public void test_toExternalForm() {
    866         // Test for method java.lang.String java.net.URL.toExternalForm()
    867         try {
    868             u1 = new URL("http://www.yahoo2.com:9999");
    869             u = new URL(
    870                     "http://www.yahoo1.com:8080/dir1/dir2/test.cgi?point1.html#anchor1");
    871             assertEquals(
    872                     "a) Does not return the right url string",
    873 
    874                     "http://www.yahoo1.com:8080/dir1/dir2/test.cgi?point1.html#anchor1",
    875                     u.toString());
    876             assertEquals("b) Does not return the right url string",
    877                     "http://www.yahoo2.com:9999", u1.toString());
    878             assertTrue("c) Does not return the right url string", u
    879                     .equals(new URL(u.toString())));
    880 
    881             u = new URL("http:index");
    882             assertEquals("2 wrong external form", "http:index", u
    883                     .toExternalForm());
    884 
    885             u = new URL("http", null, "index");
    886             assertEquals("2 wrong external form", "http:index", u
    887                     .toExternalForm());
    888         } catch (Exception e) {
    889         }
    890     }
    891 
    892     /**
    893      * @tests java.net.URL#getFile()
    894      */
    895     public void test_getFile() throws Exception {
    896         // Test for method java.lang.String java.net.URL.getFile()
    897         u = new URL("http", "www.yahoo.com:8080", 1233,
    898                 "test/!@$%^&*/test.html#foo");
    899         assertEquals("returns a wrong file", "test/!@$%^&*/test.html", u
    900                 .getFile());
    901         u = new URL("http", "www.yahoo.com:8080", 1233, "");
    902         assertTrue("returns a wrong file", u.getFile().equals(""));
    903     }
    904 
    905     /**
    906      * @tests java.net.URL#getHost()
    907      */
    908     public void test_getHost() throws MalformedURLException {
    909         // Regression for HARMONY-60
    910         String ipv6Host = "FEDC:BA98:7654:3210:FEDC:BA98:7654:3210";
    911         URL url = new URL("http", ipv6Host, -1, "myfile");
    912         assertEquals(("[" + ipv6Host + "]"), url.getHost());
    913     }
    914 
    915     /**
    916      * @tests java.net.URL#getPort()
    917      */
    918     public void test_getPort() throws Exception {
    919         // Test for method int java.net.URL.getPort()
    920         u = new URL("http://member12.c++.com:9999");
    921         assertTrue("return wrong port number " + u.getPort(),
    922                 u.getPort() == 9999);
    923         u = new URL("http://member12.c++.com:9999/");
    924         assertEquals("return wrong port number", 9999, u.getPort());
    925     }
    926 
    927     /**
    928      * @throws MalformedURLException
    929      * @tests java.net.URL#getDefaultPort()
    930      */
    931     public void test_getDefaultPort() throws MalformedURLException {
    932         u = new URL("http://member12.c++.com:9999");
    933         assertEquals(80, u.getDefaultPort());
    934         u = new URL("ftp://member12.c++.com:9999/");
    935         assertEquals(21, u.getDefaultPort());
    936     }
    937 
    938     /**
    939      * @tests java.net.URL#getProtocol()
    940      */
    941     public void test_getProtocol() throws Exception {
    942         // Test for method java.lang.String java.net.URL.getProtocol()
    943         u = new URL("http://www.yahoo2.com:9999");
    944         assertTrue("u returns a wrong protocol: " + u.getProtocol(), u
    945                 .getProtocol().equals("http"));
    946     }
    947 
    948     /**
    949      * @tests java.net.URL#getRef()
    950      */
    951     public void test_getRef() {
    952         // Test for method java.lang.String java.net.URL.getRef()
    953         try {
    954             u1 = new URL("http://www.yahoo2.com:9999");
    955             u = new URL(
    956                     "http://www.yahoo1.com:8080/dir1/dir2/test.cgi?point1.html#anchor1");
    957             assertEquals("returns a wrong anchor1", "anchor1", u.getRef());
    958             assertNull("returns a wrong anchor2", u1.getRef());
    959             u1 = new URL("http://www.yahoo2.com#ref");
    960             assertEquals("returns a wrong anchor3", "ref", u1.getRef());
    961             u1 = new URL("http://www.yahoo2.com/file#ref1#ref2");
    962             assertEquals("returns a wrong anchor4", "ref1#ref2", u1.getRef());
    963         } catch (MalformedURLException e) {
    964             fail("Incorrect URL format : " + e.getMessage());
    965         }
    966     }
    967 
    968     /**
    969      * @tests java.net.URL#getAuthority()
    970      */
    971     public void test_getAuthority() throws MalformedURLException {
    972         URL testURL = new URL("http", "hostname", 80, "/java?q1#ref");
    973         assertEquals("hostname:80", testURL.getAuthority());
    974         assertEquals("hostname", testURL.getHost());
    975         assertNull(testURL.getUserInfo());
    976         assertEquals("/java?q1", testURL.getFile());
    977         assertEquals("/java", testURL.getPath());
    978         assertEquals("q1", testURL.getQuery());
    979         assertEquals("ref", testURL.getRef());
    980 
    981         testURL = new URL("http", "u:p@home", 80, "/java?q1#ref");
    982         assertEquals("[u:p@home]:80", testURL.getAuthority());
    983         assertEquals("[u:p@home]", testURL.getHost());
    984         assertNull(testURL.getUserInfo());
    985         assertEquals("/java?q1", testURL.getFile());
    986         assertEquals("/java", testURL.getPath());
    987         assertEquals("q1", testURL.getQuery());
    988         assertEquals("ref", testURL.getRef());
    989 
    990         testURL = new URL("http", "home", -1, "/java");
    991         assertEquals("wrong authority2", "home", testURL.getAuthority());
    992         assertNull("wrong userInfo2", testURL.getUserInfo());
    993         assertEquals("wrong host2", "home", testURL.getHost());
    994         assertEquals("wrong file2", "/java", testURL.getFile());
    995         assertEquals("wrong path2", "/java", testURL.getPath());
    996         assertNull("wrong query2", testURL.getQuery());
    997         assertNull("wrong ref2", testURL.getRef());
    998     }
    999 
   1000     /**
   1001      * @tests java.net.URL#toURL()
   1002      */
   1003     public void test_toURI() throws Exception {
   1004         u = new URL("http://www.apache.org");
   1005         URI uri = u.toURI();
   1006         assertTrue(u.equals(uri.toURL()));
   1007     }
   1008 
   1009     /**
   1010      * @tests java.net.URL#openConnection()
   1011      */
   1012     public void test_openConnection_SelectorCalled()
   1013             throws MalformedURLException {
   1014         URL httpUrl = new URL("http://"
   1015                 + Support_Configuration.ProxyServerTestHost
   1016                 + "/cgi-bin/test.pl");
   1017         URL ftpUrl = new URL("ftp://" + Support_Configuration.FTPTestAddress
   1018                 + "/nettest.txt");
   1019         URL[] urlList = { httpUrl, ftpUrl };
   1020         ProxySelector originalSelector = ProxySelector.getDefault();
   1021         ProxySelector.setDefault(new MockProxySelector());
   1022         try {
   1023             for (int i = 0; i < urlList.length; ++i) {
   1024                 try {
   1025                     isSelectCalled = false;
   1026                     URLConnection conn = urlList[i].openConnection();
   1027                     conn.getInputStream();
   1028                 } catch (Exception e) {
   1029                     // ignore
   1030                 }
   1031                 assertTrue(
   1032                         "openConnection should call ProxySelector.select(), url = "
   1033                                 + urlList[i], isSelectCalled);
   1034             }
   1035         } finally {
   1036             ProxySelector.setDefault(originalSelector);
   1037         }
   1038     }
   1039 
   1040     /**
   1041      * @throws IOException
   1042      * @tests java.net.URL#openConnection(Proxy)
   1043      */
   1044     public void test_openConnection_proxy_SelectorCalled() throws IOException {
   1045         URL httpUrl = new URL("http://"
   1046                 + Support_Configuration.ProxyServerTestHost
   1047                 + "/cgi-bin/test.pl");
   1048 
   1049         try {
   1050             httpUrl.openConnection(null);
   1051             fail("should throw IllegalArgumentException");
   1052         } catch (IllegalArgumentException e) {
   1053             // expected
   1054         }
   1055 
   1056         URLConnection uc = httpUrl.openConnection(new Proxy(Type.SOCKS,
   1057                 new InetSocketAddress(InetAddress.getLocalHost(), 80)));
   1058         assertEquals(uc.getURL(), httpUrl);
   1059     }
   1060 
   1061     /**
   1062      * @tests java.net.URL#openConnection()
   1063      */
   1064     public void test_openConnection_FileProtocal() throws Exception {
   1065         // Regression test for Harmony-5779
   1066         String basedir = new File("temp.java").getAbsolutePath();
   1067         String fileUrlString = "file://localhost/" + basedir;
   1068         URLConnection conn  = new URL(fileUrlString).openConnection();
   1069         assertEquals("file",conn.getURL().getProtocol());
   1070         assertEquals(new File(basedir),new File(conn.getURL().getFile()));
   1071 
   1072         String nonLocalUrlString = "file://anything/" + basedir;
   1073         conn  = new URL(nonLocalUrlString).openConnection();
   1074         assertEquals("ftp",conn.getURL().getProtocol());
   1075         assertEquals(new File(basedir),new File(conn.getURL().getFile()));
   1076     }
   1077 
   1078     /**
   1079      * URLStreamHandler implementation class necessary for tests.
   1080      */
   1081     private class TestURLStreamHandler extends URLStreamHandler {
   1082         public URLConnection openConnection(URL arg0) throws IOException {
   1083             try {
   1084                 return arg0.openConnection();
   1085             } catch (Throwable e) {
   1086                 return null;
   1087             }
   1088         }
   1089 
   1090         public URLConnection openConnection(URL arg0, Proxy proxy)
   1091                 throws IOException {
   1092             return super.openConnection(u, proxy);
   1093         }
   1094     }
   1095 
   1096     /**
   1097      * Check UnsupportedOperationException in openConnection(URL arg0, Proxy
   1098      * proxy)
   1099      */
   1100     public void test_openConnection_URL_Proxy() throws Exception {
   1101         // Regression for HARMONY-1131
   1102         TestURLStreamHandler lh = new TestURLStreamHandler();
   1103         URL httpUrl = new URL("http://"
   1104                 + Support_Configuration.ProxyServerTestHost
   1105                 + "/cgi-bin/test.pl");
   1106         Proxy proxy = new Proxy(Type.SOCKS, new InetSocketAddress(InetAddress
   1107                 .getLocalHost(), 80));
   1108 
   1109         try {
   1110             lh.openConnection(null, null);
   1111             fail("UnsupportedOperationException expected, but nothing was thrown!");
   1112         } catch (UnsupportedOperationException e) {
   1113             // Expected
   1114         }
   1115 
   1116         try {
   1117             lh.openConnection(httpUrl, proxy);
   1118             fail("UnsupportedOperationException expected, but nothing was thrown!");
   1119         } catch (UnsupportedOperationException e) {
   1120             // Expected
   1121         }
   1122     }
   1123 
   1124     /**
   1125      * Check NPE throwing in constructor when protocol argument is null and
   1126      * URLStreamHandler argument is initialized.
   1127      */
   1128     public void test_ConstructorLnullLjava_lang_StringILjava_lang_StringLjava_net_URLStreamHandler()
   1129             throws Exception {
   1130         // Regression for HARMONY-1131
   1131         TestURLStreamHandler lh = new TestURLStreamHandler();
   1132 
   1133         try {
   1134             new URL(null, "1", 0, "file", lh);
   1135             fail("NullPointerException expected, but nothing was thrown!");
   1136         } catch (NullPointerException e) {
   1137             // Expected NullPointerException
   1138         }
   1139 
   1140     }
   1141 
   1142     /**
   1143      * Check NPE throwing in constructor when protocol argument is null and
   1144      * URLStreamHandler argument is null.
   1145      */
   1146     public void test_ConstructorLnullLjava_lang_StringILjava_lang_StringLnull()
   1147             throws Exception {
   1148         // Regression for HARMONY-1131
   1149         try {
   1150             new URL(null, "1", 0, "file", null);
   1151             fail("NullPointerException expected, but nothing was thrown!");
   1152         } catch (NullPointerException e) {
   1153             // Expected NullPointerException
   1154         }
   1155     }
   1156 
   1157     /**
   1158      * Check NPE throwing in constructor with 4 params when protocol argument is
   1159      * null.
   1160      */
   1161     public void test_ConstructorLnullLjava_lang_StringILjava_lang_String()
   1162             throws Exception {
   1163         // Regression for HARMONY-1131
   1164         try {
   1165             new URL(null, "1", 0, "file");
   1166             fail("NullPointerException expected, but nothing was thrown!");
   1167         } catch (NullPointerException e) {
   1168             // Expected NullPointerException
   1169         }
   1170     }
   1171 
   1172     /**
   1173      * Check NPE throwing in constructor with 3 params when protocol argument is
   1174      * null.
   1175      */
   1176     public void test_ConstructorLnullLjava_lang_StringLjava_lang_String()
   1177             throws Exception {
   1178         // Regression for HARMONY-1131
   1179         try {
   1180             new URL(null, "1", "file");
   1181             fail("NullPointerException expected, but nothing was thrown!");
   1182         } catch (NullPointerException e) {
   1183             // Expected NullPointerException
   1184         }
   1185     }
   1186 
   1187     public void test_toExternalForm_Absolute() throws MalformedURLException {
   1188         String strURL = "http://localhost?name=value";
   1189         URL url = new URL(strURL);
   1190         assertEquals(strURL, url.toExternalForm());
   1191 
   1192         strURL = "http://localhost?name=value/age=12";
   1193         url = new URL(strURL);
   1194         assertEquals(strURL, url.toExternalForm());
   1195     }
   1196 
   1197     public void test_toExternalForm_Relative() throws MalformedURLException {
   1198         String strURL = "http://a/b/c/d;p?q";
   1199         String ref = "?y";
   1200         URL url = new URL(new URL(strURL), ref);
   1201         assertEquals("http://a/b/c/?y", url.toExternalForm());
   1202     }
   1203 
   1204     // Regression test for HARMONY-6254
   1205 
   1206     // Bogus handler forces file part of URL to be null
   1207     static class MyHandler2 extends URLStreamHandler {
   1208 
   1209         @Override
   1210         protected URLConnection openConnection(URL arg0) throws IOException {
   1211             return null;
   1212         }
   1213 
   1214         @Override
   1215         protected void setURL(URL u, String protocol, String host, int port,
   1216                 String authority, String userInfo, String file, String query,
   1217                 String ref) {
   1218             super.setURL(u, protocol, host, port, authority, userInfo,
   1219                     (String) null, query, ref);
   1220         }
   1221     }
   1222 
   1223     // Test special case of external form with null file part (HARMONY-6254)
   1224     public void test_toExternalForm_Null() throws IOException {
   1225         URLStreamHandler myHandler = new MyHandler2();
   1226         URL url = new URL(null, "foobar://example.com/foobar", myHandler);
   1227         String s = url.toExternalForm();
   1228         assertEquals("Got wrong URL external form", "foobar://example.com", s);
   1229     }
   1230 
   1231     static class MockProxySelector extends ProxySelector {
   1232 
   1233         public void connectFailed(URI uri, SocketAddress sa, IOException ioe) {
   1234             System.out.println("connection failed");
   1235         }
   1236 
   1237         public List<Proxy> select(URI uri) {
   1238             isSelectCalled = true;
   1239             ArrayList<Proxy> proxyList = new ArrayList<Proxy>(1);
   1240             proxyList.add(Proxy.NO_PROXY);
   1241             return proxyList;
   1242         }
   1243     }
   1244 
   1245     static class MyURLStreamHandler extends URLStreamHandler {
   1246 
   1247         @Override
   1248         protected URLConnection openConnection(URL arg0) throws IOException {
   1249             return null;
   1250         }
   1251 
   1252         public void parse(URL url, String spec, int start, int end) {
   1253             parseURL(url, spec, start, end);
   1254         }
   1255     }
   1256 
   1257     static class MyURLStreamHandlerFactory implements URLStreamHandlerFactory {
   1258 
   1259         public static MyURLStreamHandler handler = new MyURLStreamHandler();
   1260 
   1261         public URLStreamHandler createURLStreamHandler(String arg0) {
   1262             handler = new MyURLStreamHandler();
   1263             return handler;
   1264         }
   1265 
   1266     }
   1267 
   1268     // Regression test for harmony-2941
   1269     public void test_URLStreamHandler_parseURL() throws MalformedURLException {
   1270         URL url = new URL("http://localhost");
   1271         MyURLStreamHandler handler = MyURLStreamHandlerFactory.handler;
   1272         try {
   1273             handler.parse(url, "//", 0, Integer.MIN_VALUE);
   1274             fail("Should throw SIOOBE.");
   1275         } catch (StringIndexOutOfBoundsException e) {
   1276             // expected;
   1277         }
   1278         try {
   1279             handler.parse(url, "1234//", 4, Integer.MIN_VALUE);
   1280             fail("Should throw SIOOBE.");
   1281         } catch (StringIndexOutOfBoundsException e) {
   1282             // expected;
   1283         }
   1284         try {
   1285             handler.parse(url, "1", -1, 0);
   1286             fail("Should throw SIOOBE.");
   1287         } catch (StringIndexOutOfBoundsException e) {
   1288             // expected;
   1289         }
   1290         try {
   1291             handler.parse(url, "1", 3, 2);
   1292             fail("Should throw SecurityException.");
   1293         } catch (SecurityException e) {
   1294             // expected;
   1295         }
   1296 
   1297         try {
   1298             handler.parse(url, "11", 1, Integer.MIN_VALUE);
   1299             fail("Should throw SecurityException.");
   1300         } catch (SecurityException e) {
   1301             // expected;
   1302         }
   1303 
   1304         // Regression tests for HARMONY-6499
   1305         try {
   1306             handler.parse(url, "any", 10, Integer.MIN_VALUE);
   1307             fail("Should throw StringIndexOutOfBoundsException");
   1308         } catch (StringIndexOutOfBoundsException e) {
   1309             // expected;
   1310         }
   1311 
   1312         try {
   1313             handler.parse(url, "any", 10, Integer.MIN_VALUE+1);
   1314             fail("Should throw StringIndexOutOfBoundsException");
   1315         } catch (StringIndexOutOfBoundsException e) {
   1316             // expected;
   1317         }
   1318 
   1319         try {
   1320             handler.parse(url, "any", Integer.MIN_VALUE, Integer.MIN_VALUE);
   1321             fail("Should throw StringIndexOutOfBoundsException");
   1322         } catch (StringIndexOutOfBoundsException e) {
   1323             // expected;
   1324         }
   1325 
   1326         try {
   1327             handler.parse(url, "any", Integer.MIN_VALUE, 2);
   1328             fail("Should throw StringIndexOutOfBoundsException");
   1329         } catch (StringIndexOutOfBoundsException e) {
   1330             // expected;
   1331         }
   1332 
   1333         try {
   1334             handler.parse(url, "any", -1, 2);
   1335             fail("Should throw StringIndexOutOfBoundsException");
   1336         } catch (StringIndexOutOfBoundsException e) {
   1337             // expected;
   1338         }
   1339 
   1340         try {
   1341             handler.parse(url, "any", -1, -1);
   1342             fail("Should throw SecurityException");
   1343         } catch (SecurityException e) {
   1344             // expected;
   1345         }
   1346     }
   1347 
   1348     /**
   1349      * @tests java.net.URL#URL(String, String, String)
   1350      */
   1351     public void test_java_protocol_handler_pkgs_prop()
   1352             throws MalformedURLException {
   1353         // Regression test for Harmony-3094
   1354         final String HANDLER_PKGS = "java.protocol.handler.pkgs";
   1355         String pkgs = System.getProperty(HANDLER_PKGS);
   1356         System.setProperty(HANDLER_PKGS,
   1357                 "fake|org.apache.harmony.luni.tests.java.net");
   1358 
   1359         try {
   1360             new URL("test_protocol", "", "fake.jar");
   1361         } finally {
   1362             if (pkgs == null) {
   1363                 System.clearProperty(HANDLER_PKGS);
   1364             } else {
   1365                 System.setProperty(HANDLER_PKGS, pkgs);
   1366             }
   1367         }
   1368     }
   1369 }
   1370