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

📄 baseselectortest.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.types.selectors;import java.io.File;import junit.framework.TestCase;import org.apache.tools.ant.BuildException;import org.apache.tools.ant.BuildFileTest;import org.apache.tools.ant.Project;/** * Base test case for Selectors. Provides a shared test as well as * a test bed for selecting on, and a helper method for determining * whether selections are correct. * */public abstract class BaseSelectorTest extends TestCase {    private Project project;    private TaskdefForMakingBed tbed = null;    protected String basedirname = "src/etc/testcases/types";    protected String beddirname = basedirname + "/selectortest";    protected String mirrordirname = basedirname + "/selectortest2";    protected File basedir = new File(System.getProperty("root"), basedirname);    protected File beddir = new File(System.getProperty("root"), beddirname);    protected File mirrordir = new File(System.getProperty("root"), mirrordirname);    protected String[] filenames = {".","asf-logo.gif.md5","asf-logo.gif.bz2",            "asf-logo.gif.gz","copy.filterset.filtered","zip/asf-logo.gif.zip",            "tar/asf-logo.gif.tar","tar/asf-logo-huge.tar.gz",            "tar/gz/asf-logo.gif.tar.gz","tar/bz2/asf-logo.gif.tar.bz2",            "tar/bz2/asf-logo-huge.tar.bz2","tar/bz2"};    protected File[] files = new File[filenames.length];    protected File[] mirrorfiles = new File[filenames.length];    public BaseSelectorTest(String name) {        super(name);    }    public void setUp() {        project = new Project();        project.init();        project.setBaseDir(basedir);        for (int x = 0; x < files.length; x++) {            files[x] = new File(beddir,filenames[x]);            mirrorfiles[x] = new File(mirrordir,filenames[x]);        }    }    /**     * Override this in child classes to return a specific Selector     */    public abstract BaseSelector getInstance();    /**     * Return a preconfigured selector (with a set reference to     * project instance).     * @return the selector     */    public BaseSelector getSelector() {        BaseSelector selector = getInstance();        selector.setProject( getProject() );        return selector;    }    public Project getProject() {        return project;    }    /**     * This is a test that all Selectors derived from BaseSelector can     * use. It calls the setError() method and checks to ensure that a     * BuildException is thrown as a result.     */    public void testRespondsToError() {        BaseSelector s = getInstance();        if (s == null) {            return;        }        s.setError("test error");        try {            s.isSelected(beddir,filenames[0],files[0]);            fail("Cannot cause BuildException when setError() is called");        } catch (BuildException be) {            assertEquals("test error",                         be.getMessage());        }    }    /**     * This is a helper method that takes a selector and calls its     * isSelected() method on each file in the testbed. It returns     * a string of "T"s amd "F"s     */    public String selectionString(FileSelector selector) {        return selectionString(beddir,files,selector);    }    /**     * This is a helper method that takes a selector and calls its     * isSelected() method on each file in the mirror testbed. This     * variation is used for dependency checks and to get around the     * limitations in the touch task when running JDK 1.1. It returns     * a string of "T"s amd "F"s.     */    public String mirrorSelectionString(FileSelector selector) {        return selectionString(mirrordir,mirrorfiles,selector);    }    /**     * Worker method for the two convenience methods above. Applies a     * selector on a set of files passed in and returns a string of     * "T"s amd "F"s from applying the selector to each file.     */    public String selectionString(File basedir, File[] files, FileSelector selector) {        StringBuffer buf = new StringBuffer();        for (int x = 0; x < files.length; x++) {            if (selector.isSelected(basedir,filenames[x],files[x])) {                buf.append('T');            }            else {                buf.append('F');            }        }        return buf.toString();    }    /**     * Does the selection test for a given selector and prints the     * filenames of the differing files (selected but shouldn't,     * not selected but should).     * @param selector  The selector to test     * @param expected  The expected result     */    public void performTests(FileSelector selector, String expected) {        String result = selectionString(selector);        String diff = diff(expected, result);        String resolved = resolve(diff);        assertEquals("Differing files: " + resolved, result, expected);    }    /**     *  Checks which files are selected and shouldn't be or which     *  are not selected but should.     *  @param expected    String containing 'F's and 'T's     *  @param result      String containing 'F's and 'T's     *  @return Difference as String containing '-' (equal) and     *          'X' (difference).     */    public String diff(String expected, String result) {        int length1 = expected.length();        int length2 = result.length();        int min = (length1 > length2) ? length2 : length1;        StringBuffer sb = new StringBuffer();        for (int i=0; i<min; i++) {            sb.append(                  (expected.charAt(i) == result.charAt(i))                ? "-"                : "X"            );        }        return sb.toString();    }    /**     * Resolves a diff-String (@see diff()) against the (inherited) filenames-     * and files arrays.     * @param filelist    Diff-String     * @return String containing the filenames for all differing files,     *         separated with semicolons ';'     */    public String resolve(String filelist) {        StringBuffer sb = new StringBuffer();        int min = (filenames.length > filelist.length())                ? filelist.length()                : filenames.length;        for (int i=0; i<min; i++) {            if ('X'==filelist.charAt(i)) {                sb.append(filenames[i]);                sb.append(";");            }        }        return sb.toString();    }    /**     * <p>Creates a testbed. We avoid the dreaded "test" word so that we     * don't falsely identify this as a test to be run. The actual     * setting up of the testbed is done in the     * <code>src/etc/testcases/types/selectors.xml</code> build file.</p>     *     * <p>Note that the right way to call this is within a try block,     * with a finally clause that calls cleanupBed(). You place tests of     * the isSelected() method within the try block.</p>     */    protected void makeBed() {        tbed = new TaskdefForMakingBed("setupfiles");        tbed.setUp();        tbed.makeTestbed();    }    /**     * Cleans up the testbed by calling a target in the     * <code>src/etc/testcases/types/selectors.xml</code> file.     */    protected void cleanupBed() {        if (tbed != null) {            tbed.tearDown();            tbed = null;        }    }    /**     * <p>Creates a mirror of the testbed for use in dependency checks.</p>     *     * <p>Note that the right way to call this is within a try block,     * with a finally clause that calls cleanupMirror(). You place tests of     * the isSelected() method within the try block.</p>     */    protected void makeMirror() {        tbed = new TaskdefForMakingBed("mirrorfiles");        tbed.setUp();        tbed.makeMirror();    }    /**     * Cleans up the mirror testbed by calling a target in the     * <code>src/etc/testcases/types/selectors.xml</code> file.     */    protected void cleanupMirror() {        if (tbed != null) {            tbed.deleteMirror();            tbed = null;        }    }    private class TaskdefForMakingBed extends BuildFileTest {        TaskdefForMakingBed(String name) {            super(name);        }        public void setUp() {            configureProject("src/etc/testcases/types/selectors.xml");        }        public void tearDown() {            executeTarget("cleanup");        }        public void makeTestbed() {            executeTarget("setupfiles");        }        public void makeMirror() {            executeTarget("mirrorfiles");        }        public void deleteMirror() {            executeTarget("cleanup.mirrorfiles");        }    }}

⌨️ 快捷键说明

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