⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 projecttest.java

📁 Use the links below to download a source distribution of Ant from one of our mirrors. It is good pra
💻 JAVA
字号:
/* *  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;import org.apache.tools.ant.input.DefaultInputHandler;import org.apache.tools.ant.input.InputHandler;import org.apache.tools.ant.input.PropertyFileInputHandler;import org.apache.tools.ant.taskdefs.condition.Os;import org.apache.tools.ant.types.*;import java.io.File;import junit.framework.TestCase;/** * Very limited test class for Project. Waiting to be extended. * */public class ProjectTest extends TestCase {    private Project p;    private String root;    private MockBuildListener mbl;    public ProjectTest(String name) {        super(name);    }    public void setUp() {        p = new Project();        p.init();        root = new File(File.separator).getAbsolutePath().toUpperCase();        mbl = new MockBuildListener(p);    }    public void testDataTypes() throws BuildException {        assertNull("dummy is not a known data type",                   p.createDataType("dummy"));        Object o = p.createDataType("fileset");        assertNotNull("fileset is a known type", o);        assertTrue("fileset creates FileSet", o instanceof FileSet);        assertTrue("PatternSet",               p.createDataType("patternset") instanceof PatternSet);        assertTrue("Path", p.createDataType("path") instanceof Path);    }    /**     * This test has been a starting point for moving the code to FileUtils.     */    public void testResolveFile() {        if (Os.isFamily("netware") || Os.isFamily("dos")) {            assertEqualsIgnoreDriveCase(localize(File.separator),                p.resolveFile("/", null).getPath());            assertEqualsIgnoreDriveCase(localize(File.separator),                p.resolveFile("\\", null).getPath());            /*             * throw in drive letters             */            String driveSpec = "C:";            String driveSpecLower = "c:";                        assertEqualsIgnoreDriveCase(driveSpecLower + "\\",                         p.resolveFile(driveSpec + "/", null).getPath());            assertEqualsIgnoreDriveCase(driveSpecLower + "\\",                         p.resolveFile(driveSpec + "\\", null).getPath());            assertEqualsIgnoreDriveCase(driveSpecLower + "\\",                         p.resolveFile(driveSpecLower + "/", null).getPath());            assertEqualsIgnoreDriveCase(driveSpecLower + "\\",                         p.resolveFile(driveSpecLower + "\\", null).getPath());            /*             * promised to eliminate consecutive slashes after drive letter.             */            assertEqualsIgnoreDriveCase(driveSpec + "\\",                         p.resolveFile(driveSpec + "/////", null).getPath());            assertEqualsIgnoreDriveCase(driveSpec + "\\",                         p.resolveFile(driveSpec + "\\\\\\\\\\\\", null).getPath());        } else {            /*             * Start with simple absolute file names.             */            assertEquals(File.separator,                         p.resolveFile("/", null).getPath());            assertEquals(File.separator,                         p.resolveFile("\\", null).getPath());            /*             * drive letters are not used, just to be considered as normal             * part of a name             */            String driveSpec = "C:";            String udir = System.getProperty("user.dir") + File.separatorChar;            assertEquals(udir + driveSpec,                         p.resolveFile(driveSpec + "/", null).getPath());            assertEquals(udir + driveSpec,                         p.resolveFile(driveSpec + "\\", null).getPath());            String driveSpecLower = "c:";            assertEquals(udir + driveSpecLower,                         p.resolveFile(driveSpecLower + "/", null).getPath());            assertEquals(udir + driveSpecLower,                         p.resolveFile(driveSpecLower + "\\", null).getPath());        }        /*         * Now test some relative file name magic.         */        assertEquals(localize("/1/2/3/4"),                     p.resolveFile("4", new File(localize("/1/2/3"))).getPath());        assertEquals(localize("/1/2/3/4"),                     p.resolveFile("./4", new File(localize("/1/2/3"))).getPath());        assertEquals(localize("/1/2/3/4"),                     p.resolveFile(".\\4", new File(localize("/1/2/3"))).getPath());        assertEquals(localize("/1/2/3/4"),                     p.resolveFile("./.\\4", new File(localize("/1/2/3"))).getPath());        assertEquals(localize("/1/2/3/4"),                     p.resolveFile("../3/4", new File(localize("/1/2/3"))).getPath());        assertEquals(localize("/1/2/3/4"),                     p.resolveFile("..\\3\\4", new File(localize("/1/2/3"))).getPath());        assertEquals(localize("/1/2/3/4"),                     p.resolveFile("../../5/.././2/./3/6/../4", new File(localize("/1/2/3"))).getPath());        assertEquals(localize("/1/2/3/4"),                     p.resolveFile("..\\../5/..\\./2/./3/6\\../4", new File(localize("/1/2/3"))).getPath());    }    /**     * adapt file separators to local conventions     */    private String localize(String path) {        path = root + path.substring(1);        return path.replace('\\', File.separatorChar).replace('/', File.separatorChar);    }    /**     * convenience method     * the drive letter is in lower case under cygwin     * calling this method allows tests where FileUtils.normalize     * is called via resolveFile to pass under cygwin     */    private void assertEqualsIgnoreDriveCase(String s1, String s2) {        if ((Os.isFamily("dos") || Os.isFamily("netware"))            && s1.length() >= 1 && s2.length() >= 1) {            StringBuffer sb1 = new StringBuffer(s1);            StringBuffer sb2 = new StringBuffer(s2);            sb1.setCharAt(0, Character.toUpperCase(s1.charAt(0)));            sb2.setCharAt(0, Character.toUpperCase(s2.charAt(0)));            assertEquals(sb1.toString(), sb2.toString());        } else {            assertEquals(s1, s2);        }    }    private void assertTaskDefFails(final Class taskClass,                                       final String message) {        final String dummyName = "testTaskDefinitionDummy";        try {            mbl.addBuildEvent(message, Project.MSG_ERR);            p.addTaskDefinition(dummyName, taskClass);            fail("expected BuildException(\""+message+"\", Project.MSG_ERR) when adding task " + taskClass);        }        catch(BuildException e) {            assertEquals(message, e.getMessage());            mbl.assertEmpty();            assertTrue(!p.getTaskDefinitions().containsKey(dummyName));        }    }    public void testAddTaskDefinition() {        p.addBuildListener(mbl);        p.addTaskDefinition("Ok", DummyTaskOk.class);        assertEquals(DummyTaskOk.class, p.getTaskDefinitions().get("Ok"));        p.addTaskDefinition("OkNonTask", DummyTaskOkNonTask.class);        assertEquals(DummyTaskOkNonTask.class, p.getTaskDefinitions().get("OkNonTask"));        mbl.assertEmpty();        assertTaskDefFails(DummyTaskPrivate.class,   DummyTaskPrivate.class   + " is not public");        assertTaskDefFails(DummyTaskProtected.class,                           DummyTaskProtected.class + " is not public");        assertTaskDefFails(DummyTaskPackage.class,   DummyTaskPackage.class   + " is not public");        assertTaskDefFails(DummyTaskAbstract.class,  DummyTaskAbstract.class  + " is abstract");        assertTaskDefFails(DummyTaskInterface.class, DummyTaskInterface.class + " is abstract");        assertTaskDefFails(DummyTaskWithoutDefaultConstructor.class, "No public no-arg constructor in " + DummyTaskWithoutDefaultConstructor.class);        assertTaskDefFails(DummyTaskWithoutPublicConstructor.class,  "No public no-arg constructor in " + DummyTaskWithoutPublicConstructor.class);        assertTaskDefFails(DummyTaskWithoutExecute.class,       "No public execute() in " + DummyTaskWithoutExecute.class);        assertTaskDefFails(DummyTaskWithNonPublicExecute.class, "No public execute() in " + DummyTaskWithNonPublicExecute.class);        mbl.addBuildEvent("return type of execute() should be void but was \"int\" in " + DummyTaskWithNonVoidExecute.class, Project.MSG_WARN);        p.addTaskDefinition("NonVoidExecute", DummyTaskWithNonVoidExecute.class);        mbl.assertEmpty();        assertEquals(DummyTaskWithNonVoidExecute.class, p.getTaskDefinitions().get("NonVoidExecute"));    }    public void testInputHandler() {        InputHandler ih = p.getInputHandler();        assertNotNull(ih);        assertTrue(ih instanceof DefaultInputHandler);        InputHandler pfih = new PropertyFileInputHandler();        p.setInputHandler(pfih);        assertSame(pfih, p.getInputHandler());    }    public void testTaskDefinitionContainsKey() {        assertTrue(p.getTaskDefinitions().containsKey("echo"));    }    public void testTaskDefinitionContains() {        assertTrue(p.getTaskDefinitions().contains(org.apache.tools.ant.taskdefs.Echo.class));    }    public void testDuplicateTargets() {        // fail, because buildfile contains two targets with the same name        try {            BFT bft = new BFT("", "core/duplicate-target.xml");        } catch (BuildException ex) {            assertEquals("specific message",                         "Duplicate target 'twice'",                         ex.getMessage());            return;        }        fail("Should throw BuildException about duplicate target");    }    public void testDuplicateTargetsImport() {        // overriding target from imported buildfile is allowed        BFT bft = new BFT("", "core/duplicate-target2.xml");        bft.expectLog("once", "once from buildfile");    }    private class DummyTaskPrivate extends Task {        public DummyTaskPrivate() {}        public void execute() {}    }    protected class DummyTaskProtected extends Task {        public DummyTaskProtected() {}        public void execute() {}    }    private class BFT extends org.apache.tools.ant.BuildFileTest {        BFT(String name, String buildfile) {            super(name);            this.buildfile = buildfile;            setUp();        }        // avoid multiple configurations        boolean isConfigured = false;        // the buildfile to use        String buildfile = "";        public void setUp() {            if (!isConfigured) {                configureProject("src/etc/testcases/"+buildfile);                isConfigured = true;            }        }        public void tearDown() { }        // call a target        public void doTarget(String target) {            if (!isConfigured) setUp();            executeTarget(target);        }        public org.apache.tools.ant.Project getProject() {            return super.getProject();        }    }//class-BFT}class DummyTaskPackage extends Task {    public DummyTaskPackage() {}    public void execute() {}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -