12ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller/* 22ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller * Copyright (C) 2015 The Android Open Source Project 32ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller * 42ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller * Licensed under the Apache License, Version 2.0 (the "License"); 52ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller * you may not use this file except in compliance with the License. 62ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller * You may obtain a copy of the License at 72ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller * 82ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller * http://www.apache.org/licenses/LICENSE-2.0 92ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller * 102ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller * Unless required by applicable law or agreed to in writing, software 112ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller * distributed under the License is distributed on an "AS IS" BASIS, 122ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller * See the License for the specific language governing permissions and 142ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller * limitations under the License. 152ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller */ 162ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller 172ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fullerpackage libcore.io; 182ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller 192ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fullerimport junit.framework.TestCase; 202ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller 212ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fullerimport java.io.File; 222ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fullerimport java.io.FileNotFoundException; 232ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fullerimport java.io.IOException; 242ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fullerimport java.net.JarURLConnection; 252ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fullerimport java.net.MalformedURLException; 262ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fullerimport java.net.URL; 272ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fullerimport java.net.URLConnection; 282ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fullerimport java.net.URLStreamHandler; 292ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fullerimport java.net.UnknownServiceException; 302ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fullerimport java.util.Arrays; 312ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller 322ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fullerimport tests.support.resource.Support_Resources; 332ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller 342ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fullerpublic class ClassPathURLStreamHandlerTest extends TestCase { 352ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller 362ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller // A well formed jar file with 6 entries. 372ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller private static final String JAR = "ClassPathURLStreamHandlerTest.jar"; 382ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller private static final String ENTRY_IN_ROOT = "root.txt"; 397cd7527ab01b87fced3855e5ed91dbaab708b017Neil Fuller private static final String DIR_ENTRY_WITHOUT_SLASH = "foo"; 407cd7527ab01b87fced3855e5ed91dbaab708b017Neil Fuller private static final String DIR_ENTRY_WITH_SLASH = DIR_ENTRY_WITHOUT_SLASH + "/"; 412ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller private static final String ENTRY_IN_SUBDIR = "foo/bar/baz.txt"; 42384730cb57f41235f09829355d7ce67132625f7fDmitriy Ivanov private static final String ENTRY_STORED = "stored_file.txt"; 432ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller private static final String ENTRY_WITH_SPACES_ENCODED = "file%20with%20spaces.txt"; 442ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller private static final String ENTRY_WITH_SPACES_UNENCODED = "file with spaces.txt"; 452ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller private static final String ENTRY_THAT_NEEDS_ESCAPING = "file_with_percent20_%20.txt"; 46f3fbc0510838d010dd065cc4b19dfff72043eddaPaul Duffin private static final String ENTRY_THAT_NEEDS_ESCAPING_ENCODED = "file_with_percent20_%2520.txt"; 472ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller private static final String ENTRY_WITH_RELATIVE_PATH = "foo/../foo/bar/baz.txt"; 482ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller private static final String MISSING_ENTRY = "Wrong.resource"; 492ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller 502ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller private File jarFile; 512ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller 522ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller @Override 53bb6fd10cd951d0151e4b97c83cb4b8a884de616eNeil Fuller protected void setUp() throws Exception { 54bb6fd10cd951d0151e4b97c83cb4b8a884de616eNeil Fuller File resources = Support_Resources.createTempFolder().getCanonicalFile(); 552ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller Support_Resources.copyFile(resources, null, JAR); 562ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller jarFile = new File(resources, JAR); 572ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller } 582ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller 592ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller public void testConstructor() throws Exception { 602ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller try { 612ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller ClassPathURLStreamHandler streamHandler = new ClassPathURLStreamHandler("Missing.file"); 622ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller fail("Should throw IOException"); 632ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller } catch (IOException expected) { 642ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller } 652ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller 66bb6fd10cd951d0151e4b97c83cb4b8a884de616eNeil Fuller String fileName = jarFile.getPath(); 672ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller ClassPathURLStreamHandler streamHandler = new ClassPathURLStreamHandler(fileName); 682ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller streamHandler.close(); 692ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller } 702ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller 712ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller public void testGetEntryOrNull() throws Exception { 72bb6fd10cd951d0151e4b97c83cb4b8a884de616eNeil Fuller String fileName = jarFile.getPath(); 732ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller ClassPathURLStreamHandler streamHandler = new ClassPathURLStreamHandler(fileName); 742ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller 75f3fbc0510838d010dd065cc4b19dfff72043eddaPaul Duffin checkGetEntryUrlOrNull(streamHandler, ENTRY_IN_ROOT, ENTRY_IN_ROOT); 76f3fbc0510838d010dd065cc4b19dfff72043eddaPaul Duffin checkGetEntryUrlOrNull(streamHandler, ENTRY_IN_SUBDIR, ENTRY_IN_SUBDIR); 77f3fbc0510838d010dd065cc4b19dfff72043eddaPaul Duffin checkGetEntryUrlOrNull(streamHandler, ENTRY_WITH_SPACES_UNENCODED, 78f3fbc0510838d010dd065cc4b19dfff72043eddaPaul Duffin ENTRY_WITH_SPACES_ENCODED); 79f3fbc0510838d010dd065cc4b19dfff72043eddaPaul Duffin checkGetEntryUrlOrNull(streamHandler, ENTRY_THAT_NEEDS_ESCAPING, 80f3fbc0510838d010dd065cc4b19dfff72043eddaPaul Duffin ENTRY_THAT_NEEDS_ESCAPING_ENCODED); 812ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller 827cd7527ab01b87fced3855e5ed91dbaab708b017Neil Fuller // getEntryOrNull() performs a lookup with and without trailing slash to handle directories. 837cd7527ab01b87fced3855e5ed91dbaab708b017Neil Fuller // http://b/22527772 84f3fbc0510838d010dd065cc4b19dfff72043eddaPaul Duffin checkGetEntryUrlOrNull(streamHandler, DIR_ENTRY_WITHOUT_SLASH, 85f3fbc0510838d010dd065cc4b19dfff72043eddaPaul Duffin DIR_ENTRY_WITHOUT_SLASH); 86f3fbc0510838d010dd065cc4b19dfff72043eddaPaul Duffin checkGetEntryUrlOrNull(streamHandler, DIR_ENTRY_WITH_SLASH, DIR_ENTRY_WITH_SLASH); 877cd7527ab01b87fced3855e5ed91dbaab708b017Neil Fuller 882ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller assertNull(streamHandler.getEntryUrlOrNull(MISSING_ENTRY)); 892ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller assertNull(streamHandler.getEntryUrlOrNull("/" + ENTRY_IN_ROOT)); 902ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller assertNull(streamHandler.getEntryUrlOrNull("/" + ENTRY_IN_SUBDIR)); 912ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller assertNull(streamHandler.getEntryUrlOrNull(ENTRY_WITH_SPACES_ENCODED)); 922ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller assertNull(streamHandler.getEntryUrlOrNull(ENTRY_WITH_RELATIVE_PATH)); 937cd7527ab01b87fced3855e5ed91dbaab708b017Neil Fuller assertNull(streamHandler.getEntryUrlOrNull("/" + DIR_ENTRY_WITHOUT_SLASH)); 947cd7527ab01b87fced3855e5ed91dbaab708b017Neil Fuller assertNull(streamHandler.getEntryUrlOrNull("/" + DIR_ENTRY_WITH_SLASH)); 952ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller streamHandler.close(); 962ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller } 972ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller 98f3fbc0510838d010dd065cc4b19dfff72043eddaPaul Duffin /** 99f3fbc0510838d010dd065cc4b19dfff72043eddaPaul Duffin * Check that the call to {@link ClassPathURLStreamHandler#getEntryUrlOrNull(String)} works as 100f3fbc0510838d010dd065cc4b19dfff72043eddaPaul Duffin * expected. 101f3fbc0510838d010dd065cc4b19dfff72043eddaPaul Duffin */ 102f3fbc0510838d010dd065cc4b19dfff72043eddaPaul Duffin private void checkGetEntryUrlOrNull(ClassPathURLStreamHandler streamHandler, 103f3fbc0510838d010dd065cc4b19dfff72043eddaPaul Duffin String entryName, String expectedJarRelativeURI) throws IOException { 104f3fbc0510838d010dd065cc4b19dfff72043eddaPaul Duffin 105f3fbc0510838d010dd065cc4b19dfff72043eddaPaul Duffin String fileName = jarFile.getPath(); 106f3fbc0510838d010dd065cc4b19dfff72043eddaPaul Duffin URL urlOrNull = streamHandler.getEntryUrlOrNull(entryName); 107f3fbc0510838d010dd065cc4b19dfff72043eddaPaul Duffin assertNotNull("URL was unexpectedly null for " + entryName, urlOrNull); 108f3fbc0510838d010dd065cc4b19dfff72043eddaPaul Duffin assertEquals("jar:file:" + fileName + "!/" + expectedJarRelativeURI, 109f3fbc0510838d010dd065cc4b19dfff72043eddaPaul Duffin urlOrNull.toExternalForm()); 110f3fbc0510838d010dd065cc4b19dfff72043eddaPaul Duffin 111f3fbc0510838d010dd065cc4b19dfff72043eddaPaul Duffin // Make sure that the resource could be opened and the correct contents returned, i.e. the 112f3fbc0510838d010dd065cc4b19dfff72043eddaPaul Duffin // same as those read from the jar file directly. 113f3fbc0510838d010dd065cc4b19dfff72043eddaPaul Duffin assertOpenConnectionOk(jarFile, expectedJarRelativeURI, streamHandler); 114f3fbc0510838d010dd065cc4b19dfff72043eddaPaul Duffin } 115f3fbc0510838d010dd065cc4b19dfff72043eddaPaul Duffin 116384730cb57f41235f09829355d7ce67132625f7fDmitriy Ivanov public void testIsEntryStored() throws IOException { 117bb6fd10cd951d0151e4b97c83cb4b8a884de616eNeil Fuller String fileName = jarFile.getPath(); 118384730cb57f41235f09829355d7ce67132625f7fDmitriy Ivanov ClassPathURLStreamHandler streamHandler = new ClassPathURLStreamHandler(fileName); 119384730cb57f41235f09829355d7ce67132625f7fDmitriy Ivanov 120384730cb57f41235f09829355d7ce67132625f7fDmitriy Ivanov assertFalse(streamHandler.isEntryStored("this/file/does/not/exist.txt")); 121384730cb57f41235f09829355d7ce67132625f7fDmitriy Ivanov // This one is compressed 122384730cb57f41235f09829355d7ce67132625f7fDmitriy Ivanov assertFalse(streamHandler.isEntryStored(ENTRY_IN_SUBDIR)); 123384730cb57f41235f09829355d7ce67132625f7fDmitriy Ivanov assertTrue(streamHandler.isEntryStored(ENTRY_STORED)); 1247cd7527ab01b87fced3855e5ed91dbaab708b017Neil Fuller 125e8e4da2f84da30bbc11a63b7a87a153f62b1ce65Przemyslaw Szczepaniak assertTrue(streamHandler.isEntryStored(DIR_ENTRY_WITHOUT_SLASH)); 126e8e4da2f84da30bbc11a63b7a87a153f62b1ce65Przemyslaw Szczepaniak 1277cd7527ab01b87fced3855e5ed91dbaab708b017Neil Fuller // Directory entries are just stored, empty entries with "/" on the end of the name, so 1287cd7527ab01b87fced3855e5ed91dbaab708b017Neil Fuller // "true". 1297cd7527ab01b87fced3855e5ed91dbaab708b017Neil Fuller assertTrue(streamHandler.isEntryStored(DIR_ENTRY_WITH_SLASH)); 130384730cb57f41235f09829355d7ce67132625f7fDmitriy Ivanov } 131384730cb57f41235f09829355d7ce67132625f7fDmitriy Ivanov 1322ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller public void testOpenConnection() throws Exception { 133bb6fd10cd951d0151e4b97c83cb4b8a884de616eNeil Fuller String fileName = jarFile.getPath(); 1342ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller ClassPathURLStreamHandler streamHandler = new ClassPathURLStreamHandler(fileName); 1352ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller 1362ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller assertOpenConnectionOk(jarFile, ENTRY_IN_ROOT, streamHandler); 1372ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller assertOpenConnectionOk(jarFile, ENTRY_IN_SUBDIR, streamHandler); 1382ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller assertOpenConnectionOk(jarFile, ENTRY_WITH_SPACES_ENCODED, streamHandler); 1392ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller assertOpenConnectionOk(jarFile, ENTRY_WITH_SPACES_UNENCODED, streamHandler); 1407cd7527ab01b87fced3855e5ed91dbaab708b017Neil Fuller assertOpenConnectionOk(jarFile, DIR_ENTRY_WITH_SLASH, streamHandler); 1417cd7527ab01b87fced3855e5ed91dbaab708b017Neil Fuller assertOpenConnectionOk(jarFile, DIR_ENTRY_WITHOUT_SLASH, streamHandler); 1422ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller 1432ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller assertOpenConnectionConnectFails(jarFile, ENTRY_WITH_RELATIVE_PATH, streamHandler); 1442ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller assertOpenConnectionConnectFails(jarFile, MISSING_ENTRY, streamHandler); 1452ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller assertOpenConnectionConnectFails(jarFile, ENTRY_THAT_NEEDS_ESCAPING, streamHandler); 1462ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller 1472ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller streamHandler.close(); 1482ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller } 1492ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller 1502ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller private void assertOpenConnectionConnectFails( 1512ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller File jarFile, String entryName, URLStreamHandler streamHandler) throws IOException { 1522ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller 1532ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller URL standardUrl = createJarUrl(jarFile, entryName, null /* use default stream handler */); 1542ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller try { 1552ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller standardUrl.openConnection().connect(); 1562ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller fail(); 1572ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller } catch (FileNotFoundException expected) { 1582ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller } 1592ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller 1602ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller URL actualUrl = createJarUrl(jarFile, entryName, streamHandler); 1612ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller try { 1622ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller actualUrl.openConnection().connect(); 1632ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller fail(); 1642ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller } catch (FileNotFoundException expected) { 1652ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller } 1662ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller } 1672ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller 1682ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller private static void assertOpenConnectionOk(File jarFile, String entryName, 1692ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller ClassPathURLStreamHandler streamHandler) throws IOException { 1702ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller URL standardUrl = createJarUrl(jarFile, entryName, null /* use default stream handler */); 1712ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller URLConnection standardUrlConnection = standardUrl.openConnection(); 1722ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller assertNotNull(standardUrlConnection); 1732ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller 1742ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller URL actualUrl = createJarUrl(jarFile, entryName, streamHandler); 1752ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller URLConnection actualUrlConnection = actualUrl.openConnection(); 1762ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller assertNotNull(actualUrlConnection); 1772ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller assertBehaviorSame(standardUrlConnection, actualUrlConnection); 1782ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller } 1792ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller 1802ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller private static void assertBehaviorSame(URLConnection standardURLConnection, 1812ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller URLConnection actualUrlConnection) throws IOException { 1822ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller 1832ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller JarURLConnection standardJarUrlConnection = (JarURLConnection) standardURLConnection; 1842ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller JarURLConnection actualJarUrlConnection = (JarURLConnection) actualUrlConnection; 1852ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller 1862ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller byte[] actualBytes = Streams.readFully(actualJarUrlConnection.getInputStream()); 1872ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller byte[] standardBytes = Streams.readFully(standardJarUrlConnection.getInputStream()); 1882ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller assertEquals(Arrays.toString(standardBytes), Arrays.toString(actualBytes)); 1892ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller 1902ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller try { 1912ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller actualJarUrlConnection.getOutputStream(); 1922ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller fail(); 1932ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller } catch (UnknownServiceException expected) { 1942ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller } 1952ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller 1962ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller assertEquals( 1972ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller standardJarUrlConnection.getJarFile().getName(), 1982ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller actualJarUrlConnection.getJarFile().getName()); 1992ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller 2002ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller assertEquals( 2012ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller standardJarUrlConnection.getJarEntry().getName(), 2022ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller actualJarUrlConnection.getJarEntry().getName()); 2032ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller 2042ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller assertEquals( 2052ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller standardJarUrlConnection.getJarFileURL(), 2062ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller actualJarUrlConnection.getJarFileURL()); 2072ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller 2082ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller assertEquals( 2092ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller standardJarUrlConnection.getContentType(), 2102ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller actualJarUrlConnection.getContentType()); 2112ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller 2122ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller assertEquals( 2132ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller standardJarUrlConnection.getContentLength(), 2142ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller actualJarUrlConnection.getContentLength()); 2152ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller } 2162ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller 2172ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller private static URL createJarUrl(File jarFile, String entryName, URLStreamHandler streamHandler) 2182ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller throws MalformedURLException { 2192ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller return new URL("jar", null, -1, jarFile.toURI() + "!/" + entryName, streamHandler); 2202ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller } 2212ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller 2222ce899fcb81707dd5447a15c29c2c137697f2f5eNeil Fuller} 223