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