1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage tests.api.java.net;
2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.IOException;
4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.lang.reflect.Field;
5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.net.MalformedURLException;
6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.net.URL;
7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.net.URLConnection;
8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.net.URLStreamHandler;
9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.net.URLStreamHandlerFactory;
10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
11ef7122278207e33b724c6360945f9eae1f9a5a58Jorg Pleumannimport junit.framework.TestCase;
12ef7122278207e33b724c6360945f9eae1f9a5a58Jorg Pleumannimport tests.support.Support_Configuration;
13ef7122278207e33b724c6360945f9eae1f9a5a58Jorg Pleumannimport dalvik.annotation.SideEffect;
14ef7122278207e33b724c6360945f9eae1f9a5a58Jorg Pleumannimport dalvik.annotation.TestLevel;
15ef7122278207e33b724c6360945f9eae1f9a5a58Jorg Pleumannimport dalvik.annotation.TestTargetClass;
16ef7122278207e33b724c6360945f9eae1f9a5a58Jorg Pleumannimport dalvik.annotation.TestTargetNew;
17ef7122278207e33b724c6360945f9eae1f9a5a58Jorg Pleumann
18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@TestTargetClass(URLStreamHandlerFactory.class)
19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class URLStreamHandlerFactoryTest extends TestCase {
20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    URLStreamHandlerFactory oldFactory = null;
22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    Field factoryField = null;
23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    boolean isTestable = false;
25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    boolean isOpenConnectionCalled = false;
27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    boolean isCreateURLStreamHandlerCalled = false;
28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "createURLStreamHandler",
33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.lang.String.class}
34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
35ef7122278207e33b724c6360945f9eae1f9a5a58Jorg Pleumann    @SideEffect("Leaves wrong StreamHandlerFactory behind, affects other tests")
36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_createURLStreamHandler() throws MalformedURLException {
37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if(isTestable) {
39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            TestURLStreamHandlerFactory shf = new TestURLStreamHandlerFactory();
41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertFalse(isCreateURLStreamHandlerCalled);
42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            URL.setURLStreamHandlerFactory(shf);
43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            URL url = new URL("http://" +
44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    Support_Configuration.SpecialInetTestAddress);
45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                url.openConnection();
48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                assertTrue(isCreateURLStreamHandlerCalled);
49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                assertTrue(isOpenConnectionCalled);
50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch (Exception e) {
51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                fail("Exception during test : " + e.getMessage());
52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                URL.setURLStreamHandlerFactory(shf);
57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                fail("java.lang.Error was not thrown.");
58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch(java.lang.Error e) {
59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                //expected
60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                URL.setURLStreamHandlerFactory(null);
64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                fail("java.lang.Error was not thrown.");
65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch(java.lang.Error e) {
66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                //expected
67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } else {
70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            TestURLStreamHandlerFactory shf = new TestURLStreamHandlerFactory();
71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            URLStreamHandler sh = shf.createURLStreamHandler("");
72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertNotNull(sh.toString());
73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void setUp() {
77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Field [] fields = URL.class.getDeclaredFields();
78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int counter = 0;
79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (Field field : fields) {
80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (URLStreamHandlerFactory.class.equals(field.getType())) {
81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                counter++;
82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                factoryField = field;
83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if(counter == 1) {
87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            isTestable = true;
89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            factoryField.setAccessible(true);
91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                oldFactory = (URLStreamHandlerFactory) factoryField.get(null);
93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch (IllegalArgumentException e) {
94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                fail("IllegalArgumentException was thrown during setUp: "
95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        + e.getMessage());
96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch (IllegalAccessException e) {
97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                fail("IllegalAccessException was thrown during setUp: "
98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        + e.getMessage());
99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void tearDown() {
104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if(isTestable) {
105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            try {
106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                factoryField.set(null, oldFactory);
107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch (IllegalArgumentException e) {
108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                fail("IllegalArgumentException was thrown during tearDown: "
109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        + e.getMessage());
110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            } catch (IllegalAccessException e) {
111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                fail("IllegalAccessException was thrown during tearDown: "
112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        + e.getMessage());
113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    class TestURLStreamHandlerFactory implements URLStreamHandlerFactory {
118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public URLStreamHandler createURLStreamHandler(String protocol) {
120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            isCreateURLStreamHandlerCalled = true;
121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return new TestURLStreamHandler();
122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    class TestURLStreamHandler extends URLStreamHandler {
126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @Override
127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        protected URLConnection openConnection(URL u) throws IOException {
128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            isOpenConnectionCalled = true;
129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return null;
130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project}
133