diff options
Diffstat (limited to 'framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/launch/LocatorTest.java')
-rw-r--r-- | framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/launch/LocatorTest.java | 180 |
1 files changed, 180 insertions, 0 deletions
diff --git a/framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/launch/LocatorTest.java b/framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/launch/LocatorTest.java new file mode 100644 index 00000000..0c3c24fd --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/launch/LocatorTest.java @@ -0,0 +1,180 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant.launch; + +import java.io.File; + +import org.apache.tools.ant.taskdefs.condition.Os; +import org.junit.Before; +import org.junit.Ignore; +import org.junit.Test; + +import static junit.framework.Assert.assertEquals; +import static org.apache.tools.ant.AntAssert.assertContains; +import static org.junit.Assert.fail; + +/** Test the locator in the ant-launch JAR */ +public class LocatorTest { + private boolean windows; + private boolean unix; + private static final String LAUNCHER_JAR = "//morzine/slo/Java/Apache/ant/lib/ant-launcher.jar"; + private static final String SHARED_JAR_URI = "jar:file:"+ LAUNCHER_JAR +"!/org/apache/tools/ant/launch/Launcher.class"; + + + @Before + public void setUp() throws Exception { + windows = Os.isFamily(Os.FAMILY_DOS); + unix = Os.isFamily(Os.FAMILY_UNIX); + } + + /** + * expect a uri to resolve to strings on different platforms + * @param uri uri to parse + * @param expectedUnix unix string (or null to skip that test) + * @param expectedDos DOS string (or null to skip that test) + * @return the resolved string + */ + private String resolveTo(String uri, String expectedUnix, String expectedDos) { + String result = Locator.fromURI(uri); + assertResolved(uri, expectedUnix, result, unix); + assertResolved(uri, expectedDos, result, windows); + return result; + } + + /** + * Assert something resolved + * @param uri original URI + * @param expectedResult what we expected + * @param result what we got + * @param enabled is the test enabled? + */ + private void assertResolved(String uri, String expectedResult, String result, boolean enabled) { + if (enabled && expectedResult != null && expectedResult.length() > 0) { + assertEquals("Expected " + uri + " to resolve to \n" + expectedResult + "\n but got\n" + + result + "\n", expectedResult, result); + } + } + + /** + * This asserts that we can round trip the path to a URI and back again + * @param path filename with no directory separators + * @return the trailing filename + */ + private String assertResolves(String path) { + String asuri = new File(path).toURI().toASCIIString(); + String fullpath = System.getProperty("user.dir") + File.separator + path; + String result = resolveTo(asuri, fullpath, fullpath); + return result.substring(result.lastIndexOf(File.separatorChar) + 1); + } + + + /** + * this isnt really a valid URI, except maybe in IE + * @throws Exception + */ + public void testNetworkURI() throws Exception { + resolveTo("file:\\\\PC03\\jclasses\\lib\\ant-1.7.0.jar", "" + + "\\\\PC03\\jclasses\\lib\\ant-1.7.0.jar", + "\\\\PC03\\jclasses\\lib\\ant-1.7.0.jar"); + } + + @Ignore("We don't appear to generate paths like this in the launcher") + @Test + public void testTripleForwardSlashNetworkURI() throws Exception { + resolveTo("file:///PC03/jclasses/lib/ant-1.7.0.jar", + "///PC03/jclasses/lib/ant-1.7.0.jar", + "\\\\PC03\\jclasses\\lib\\ant-1.7.0.jar"); + } + + @Test + public void testUnixNetworkPath() throws Exception { + resolveTo("file://cluster/home/ant/lib", + "//cluster/home/ant/lib", + "\\\\cluster\\home\\ant\\lib"); + } + + @Test + public void testUnixPath() throws Exception { + resolveTo("file:/home/ant/lib", "/home/ant/lib", null); + } + + @Test + public void testSpacedURI() throws Exception { + resolveTo("file:C:\\Program Files\\Ant\\lib", + "C:\\Program Files\\Ant\\lib", + "C:\\Program Files\\Ant\\lib"); + } + + /** + * Bug 42275; Ant failing to run off a remote share + * @throws Throwable if desired + */ + @Test + public void testAntOnRemoteShare() throws Throwable { + String resolved=Locator.fromJarURI(SHARED_JAR_URI); + assertResolved(SHARED_JAR_URI, LAUNCHER_JAR, resolved, unix); + assertResolved(SHARED_JAR_URI, LAUNCHER_JAR.replace('/', '\\'), + resolved, windows); + } + + /** + * Bug 42275; Ant failing to run off a remote share + * + * @throws Throwable if desired + */ + @Test + public void testFileFromRemoteShare() throws Throwable { + String resolved = Locator.fromJarURI(SHARED_JAR_URI); + File f = new File(resolved); + String path = f.getAbsolutePath(); + if (windows) { + assertEquals(0, path.indexOf("\\\\")); + } + } + + @Test + public void testHttpURI() throws Exception { + String url = "http://ant.apache.org"; + try { + Locator.fromURI(url); + fail("Exception should have been thrown"); + } catch (IllegalArgumentException e) { + String message = e.getMessage(); + assertContains(Locator.ERROR_NOT_FILE_URI, message); + assertContains(url, message); + } + } + + @Test + public void testInternationalURI() throws Exception { + String result = assertResolves("L\u00f6wenbrau.aus.M\u00fcnchen"); + char umlauted = result.charAt(1); + assertEquals("expected 0xf6 (\u00f6), but got " + Integer.toHexString(umlauted) + " '" + + umlauted + "'", 0xf6, umlauted); + assertEquals("file:/tmp/a%C3%A7a%C3%AD%20berry", Locator.encodeURI("file:/tmp/a\u00E7a\u00ED berry")); + assertEquals("file:/tmp/a\u00E7a\u00ED berry", Locator.decodeUri("file:/tmp/a%C3%A7a%C3%AD%20berry")); + assertEquals("file:/tmp/a\u00E7a\u00ED berry", Locator.decodeUri("file:/tmp/a\u00E7a\u00ED%20berry")); // #50543 + assertEquals("file:/tmp/hezky \u010Desky", Locator.decodeUri("file:/tmp/hezky%20\u010Desky")); // non-ISO-8859-1 variant + } + + @Test + public void testOddLowAsciiURI() throws Exception { + assertResolves("hash# and percent%"); + } + +} |