git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@482069 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -64,4 +64,4 @@ public class ExitStatusException extends BuildException { | |||
| public int getStatus() { | |||
| return status; | |||
| } | |||
| } | |||
| } | |||
| @@ -46,4 +46,4 @@ public class StringInputStream extends ReaderInputStream { | |||
| super(new StringReader(source), encoding); | |||
| } | |||
| } | |||
| } | |||
| @@ -214,4 +214,4 @@ public class Exit extends Task { | |||
| return (nestedCondition != null); | |||
| } | |||
| } | |||
| } | |||
| @@ -230,4 +230,4 @@ public class LoadProperties extends Task { | |||
| throw new BuildException("expected a java resource as source"); | |||
| } | |||
| } | |||
| } | |||
| } | |||
| @@ -121,4 +121,4 @@ public class ResourceCount extends Task implements Condition { | |||
| property = p; | |||
| } | |||
| } | |||
| } | |||
| @@ -27,4 +27,4 @@ package org.apache.tools.ant.taskdefs; | |||
| * @ant.task ignore="true" | |||
| */ | |||
| public class Transform extends ExecuteOn { | |||
| } | |||
| } | |||
| @@ -1,35 +1,35 @@ | |||
| /* | |||
| * 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.taskdefs; | |||
| import org.apache.tools.ant.types.Resource; | |||
| /** | |||
| * Extends Proxy interface for XSLT processors. | |||
| * | |||
| * @see XSLTProcess | |||
| * @since Ant 1.7 | |||
| */ | |||
| public interface XSLTLiaison3 extends XSLTLiaison2 { | |||
| /** | |||
| * sets the stylesheet to use as a resource | |||
| * @param stylesheet the stylesheet to use as a resource | |||
| * @throws Exception if the stylesheet cannot be loaded | |||
| */ | |||
| void setStylesheet(Resource stylesheet) throws Exception; | |||
| } | |||
| /* | |||
| * 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.taskdefs; | |||
| import org.apache.tools.ant.types.Resource; | |||
| /** | |||
| * Extends Proxy interface for XSLT processors. | |||
| * | |||
| * @see XSLTProcess | |||
| * @since Ant 1.7 | |||
| */ | |||
| public interface XSLTLiaison3 extends XSLTLiaison2 { | |||
| /** | |||
| * sets the stylesheet to use as a resource | |||
| * @param stylesheet the stylesheet to use as a resource | |||
| * @throws Exception if the stylesheet cannot be loaded | |||
| */ | |||
| void setStylesheet(Resource stylesheet) throws Exception; | |||
| } | |||
| @@ -1,183 +1,183 @@ | |||
| /* | |||
| * 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.taskdefs.condition; | |||
| import org.apache.tools.ant.types.Path; | |||
| import org.apache.tools.ant.types.Reference; | |||
| import org.apache.tools.ant.AntClassLoader; | |||
| import org.apache.tools.ant.BuildException; | |||
| import org.apache.tools.ant.ProjectComponent; | |||
| import java.lang.reflect.Method; | |||
| import java.lang.reflect.Field; | |||
| /** | |||
| * test for a method | |||
| */ | |||
| public class HasMethod extends ProjectComponent implements Condition { | |||
| private String classname; | |||
| private String method; | |||
| private String field; | |||
| private Path classpath; | |||
| private AntClassLoader loader; | |||
| private boolean ignoreSystemClasses = false; | |||
| /** | |||
| * Set the classpath to be used when searching for classes and resources. | |||
| * | |||
| * @param classpath an Ant Path object containing the search path. | |||
| */ | |||
| public void setClasspath(Path classpath) { | |||
| createClasspath().append(classpath); | |||
| } | |||
| /** | |||
| * Classpath to be used when searching for classes and resources. | |||
| * | |||
| * @return an empty Path instance to be configured by Ant. | |||
| */ | |||
| public Path createClasspath() { | |||
| if (this.classpath == null) { | |||
| this.classpath = new Path(getProject()); | |||
| } | |||
| return this.classpath.createPath(); | |||
| } | |||
| /** | |||
| * Set the classpath by reference. | |||
| * | |||
| * @param r a Reference to a Path instance to be used as the classpath | |||
| * value. | |||
| */ | |||
| public void setClasspathRef(Reference r) { | |||
| createClasspath().setRefid(r); | |||
| } | |||
| /** | |||
| * Set the classname attribute. | |||
| * @param classname the name of the class to check. | |||
| */ | |||
| public void setClassname(String classname) { | |||
| this.classname = classname; | |||
| } | |||
| /** | |||
| * Set the name of the method. | |||
| * @param method the name of the method to check. | |||
| */ | |||
| public void setMethod(String method) { | |||
| this.method = method; | |||
| } | |||
| /** | |||
| * Set the name of the field. | |||
| * @param field the name of the field to check. | |||
| */ | |||
| public void setField(String field) { | |||
| this.field = field; | |||
| } | |||
| /** | |||
| * Set whether to ignore system classes when looking for the class. | |||
| * @param ignoreSystemClasses a <code>boolean</code> value. | |||
| */ | |||
| public void setIgnoreSystemClasses(boolean ignoreSystemClasses) { | |||
| this.ignoreSystemClasses = ignoreSystemClasses; | |||
| } | |||
| /** | |||
| * Check if a given class can be loaded. | |||
| */ | |||
| private Class loadClass(String classname) { | |||
| try { | |||
| if (ignoreSystemClasses) { | |||
| loader = getProject().createClassLoader(classpath); | |||
| loader.setParentFirst(false); | |||
| loader.addJavaLibraries(); | |||
| if (loader != null) { | |||
| try { | |||
| return loader.findClass(classname); | |||
| } catch (SecurityException se) { | |||
| // class found but restricted name; this is | |||
| // actually the case we're looking for in JDK 1.3+, | |||
| // so catch the exception and return | |||
| return null; | |||
| } | |||
| } else { | |||
| return null; | |||
| } | |||
| } else if (loader != null) { | |||
| return loader.loadClass(classname); | |||
| } else { | |||
| ClassLoader l = this.getClass().getClassLoader(); | |||
| // Can return null to represent the bootstrap class loader. | |||
| // see API docs of Class.getClassLoader. | |||
| if (l != null) { | |||
| return Class.forName(classname, true, l); | |||
| } else { | |||
| return Class.forName(classname); | |||
| } | |||
| } | |||
| } catch (ClassNotFoundException e) { | |||
| throw new BuildException("class \"" + classname + "\" was not found"); | |||
| } catch (NoClassDefFoundError e) { | |||
| throw new BuildException("Could not load dependent class \"" + e.getMessage() | |||
| + "\" for class \"" + classname + "\""); | |||
| } | |||
| } | |||
| /** {@inheritDoc}. */ | |||
| public boolean eval() throws BuildException { | |||
| if (classname == null) { | |||
| throw new BuildException("No classname defined"); | |||
| } | |||
| Class clazz = loadClass(classname); | |||
| if (method != null) { | |||
| return isMethodFound(clazz); | |||
| } | |||
| if (field != null) { | |||
| return isFieldFound(clazz); | |||
| } | |||
| throw new BuildException("Neither method nor field defined"); | |||
| } | |||
| private boolean isFieldFound(Class clazz) { | |||
| Field[] fields = clazz.getDeclaredFields(); | |||
| for (int i = 0; i < fields.length; i++) { | |||
| Field fieldEntry = fields[i]; | |||
| if (fieldEntry.getName().equals(field)) { | |||
| return true; | |||
| } | |||
| } | |||
| return false; | |||
| } | |||
| private boolean isMethodFound(Class clazz) { | |||
| Method[] methods = clazz.getDeclaredMethods(); | |||
| for (int i = 0; i < methods.length; i++) { | |||
| Method methodEntry = methods[i]; | |||
| if (methodEntry.getName().equals(method)) { | |||
| return true; | |||
| } | |||
| } | |||
| return false; | |||
| } | |||
| } | |||
| /* | |||
| * 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.taskdefs.condition; | |||
| import org.apache.tools.ant.types.Path; | |||
| import org.apache.tools.ant.types.Reference; | |||
| import org.apache.tools.ant.AntClassLoader; | |||
| import org.apache.tools.ant.BuildException; | |||
| import org.apache.tools.ant.ProjectComponent; | |||
| import java.lang.reflect.Method; | |||
| import java.lang.reflect.Field; | |||
| /** | |||
| * test for a method | |||
| */ | |||
| public class HasMethod extends ProjectComponent implements Condition { | |||
| private String classname; | |||
| private String method; | |||
| private String field; | |||
| private Path classpath; | |||
| private AntClassLoader loader; | |||
| private boolean ignoreSystemClasses = false; | |||
| /** | |||
| * Set the classpath to be used when searching for classes and resources. | |||
| * | |||
| * @param classpath an Ant Path object containing the search path. | |||
| */ | |||
| public void setClasspath(Path classpath) { | |||
| createClasspath().append(classpath); | |||
| } | |||
| /** | |||
| * Classpath to be used when searching for classes and resources. | |||
| * | |||
| * @return an empty Path instance to be configured by Ant. | |||
| */ | |||
| public Path createClasspath() { | |||
| if (this.classpath == null) { | |||
| this.classpath = new Path(getProject()); | |||
| } | |||
| return this.classpath.createPath(); | |||
| } | |||
| /** | |||
| * Set the classpath by reference. | |||
| * | |||
| * @param r a Reference to a Path instance to be used as the classpath | |||
| * value. | |||
| */ | |||
| public void setClasspathRef(Reference r) { | |||
| createClasspath().setRefid(r); | |||
| } | |||
| /** | |||
| * Set the classname attribute. | |||
| * @param classname the name of the class to check. | |||
| */ | |||
| public void setClassname(String classname) { | |||
| this.classname = classname; | |||
| } | |||
| /** | |||
| * Set the name of the method. | |||
| * @param method the name of the method to check. | |||
| */ | |||
| public void setMethod(String method) { | |||
| this.method = method; | |||
| } | |||
| /** | |||
| * Set the name of the field. | |||
| * @param field the name of the field to check. | |||
| */ | |||
| public void setField(String field) { | |||
| this.field = field; | |||
| } | |||
| /** | |||
| * Set whether to ignore system classes when looking for the class. | |||
| * @param ignoreSystemClasses a <code>boolean</code> value. | |||
| */ | |||
| public void setIgnoreSystemClasses(boolean ignoreSystemClasses) { | |||
| this.ignoreSystemClasses = ignoreSystemClasses; | |||
| } | |||
| /** | |||
| * Check if a given class can be loaded. | |||
| */ | |||
| private Class loadClass(String classname) { | |||
| try { | |||
| if (ignoreSystemClasses) { | |||
| loader = getProject().createClassLoader(classpath); | |||
| loader.setParentFirst(false); | |||
| loader.addJavaLibraries(); | |||
| if (loader != null) { | |||
| try { | |||
| return loader.findClass(classname); | |||
| } catch (SecurityException se) { | |||
| // class found but restricted name; this is | |||
| // actually the case we're looking for in JDK 1.3+, | |||
| // so catch the exception and return | |||
| return null; | |||
| } | |||
| } else { | |||
| return null; | |||
| } | |||
| } else if (loader != null) { | |||
| return loader.loadClass(classname); | |||
| } else { | |||
| ClassLoader l = this.getClass().getClassLoader(); | |||
| // Can return null to represent the bootstrap class loader. | |||
| // see API docs of Class.getClassLoader. | |||
| if (l != null) { | |||
| return Class.forName(classname, true, l); | |||
| } else { | |||
| return Class.forName(classname); | |||
| } | |||
| } | |||
| } catch (ClassNotFoundException e) { | |||
| throw new BuildException("class \"" + classname + "\" was not found"); | |||
| } catch (NoClassDefFoundError e) { | |||
| throw new BuildException("Could not load dependent class \"" + e.getMessage() | |||
| + "\" for class \"" + classname + "\""); | |||
| } | |||
| } | |||
| /** {@inheritDoc}. */ | |||
| public boolean eval() throws BuildException { | |||
| if (classname == null) { | |||
| throw new BuildException("No classname defined"); | |||
| } | |||
| Class clazz = loadClass(classname); | |||
| if (method != null) { | |||
| return isMethodFound(clazz); | |||
| } | |||
| if (field != null) { | |||
| return isFieldFound(clazz); | |||
| } | |||
| throw new BuildException("Neither method nor field defined"); | |||
| } | |||
| private boolean isFieldFound(Class clazz) { | |||
| Field[] fields = clazz.getDeclaredFields(); | |||
| for (int i = 0; i < fields.length; i++) { | |||
| Field fieldEntry = fields[i]; | |||
| if (fieldEntry.getName().equals(field)) { | |||
| return true; | |||
| } | |||
| } | |||
| return false; | |||
| } | |||
| private boolean isMethodFound(Class clazz) { | |||
| Method[] methods = clazz.getDeclaredMethods(); | |||
| for (int i = 0; i < methods.length; i++) { | |||
| Method methodEntry = methods[i]; | |||
| if (methodEntry.getName().equals(method)) { | |||
| return true; | |||
| } | |||
| } | |||
| return false; | |||
| } | |||
| } | |||
| @@ -311,4 +311,4 @@ public final class JarLibManifestTask extends Task { | |||
| return results; | |||
| } | |||
| } | |||
| } | |||
| @@ -212,4 +212,4 @@ public class JJDoc extends Task { | |||
| return (getProject().getBaseDir() + "/" + optionalOutputFile) | |||
| .replace('\\', '/'); | |||
| } | |||
| } | |||
| } | |||
| @@ -402,4 +402,4 @@ public class JJTree extends Task { | |||
| return root; | |||
| } | |||
| } | |||
| } | |||
| @@ -1,38 +1,38 @@ | |||
| /* | |||
| * 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.taskdefs.optional.junit; | |||
| /** | |||
| * Constants, like filenames shared between various classes in this package. | |||
| */ | |||
| public class Constants { | |||
| static final String HALT_ON_ERROR = "haltOnError="; | |||
| static final String HALT_ON_FAILURE = "haltOnFailure="; | |||
| static final String FILTERTRACE = "filtertrace="; | |||
| static final String CRASHFILE = "crashfile="; | |||
| static final String BEFORE_FIRST_TEST = "BeforeFirstTest"; | |||
| static final String PROPSFILE = "propsfile="; | |||
| static final String SHOWOUTPUT = "showoutput="; | |||
| static final String OUTPUT_TO_FORMATTERS = "outputtoformatters="; | |||
| static final String FORMATTER = "formatter="; | |||
| static final String LOGTESTLISTENEREVENTS = "logtestlistenerevents="; | |||
| static final String TESTSFILE = "testsfile="; | |||
| static final String TERMINATED_SUCCESSFULLY = "terminated successfully"; | |||
| } | |||
| /* | |||
| * 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.taskdefs.optional.junit; | |||
| /** | |||
| * Constants, like filenames shared between various classes in this package. | |||
| */ | |||
| public class Constants { | |||
| static final String HALT_ON_ERROR = "haltOnError="; | |||
| static final String HALT_ON_FAILURE = "haltOnFailure="; | |||
| static final String FILTERTRACE = "filtertrace="; | |||
| static final String CRASHFILE = "crashfile="; | |||
| static final String BEFORE_FIRST_TEST = "BeforeFirstTest"; | |||
| static final String PROPSFILE = "propsfile="; | |||
| static final String SHOWOUTPUT = "showoutput="; | |||
| static final String OUTPUT_TO_FORMATTERS = "outputtoformatters="; | |||
| static final String FORMATTER = "formatter="; | |||
| static final String LOGTESTLISTENEREVENTS = "logtestlistenerevents="; | |||
| static final String TESTSFILE = "testsfile="; | |||
| static final String TERMINATED_SUCCESSFULLY = "terminated successfully"; | |||
| } | |||
| @@ -1,52 +1,52 @@ | |||
| /* | |||
| * 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.taskdefs.rmic; | |||
| import org.apache.tools.ant.types.Commandline; | |||
| /** | |||
| * Run rmic in a new process with -Xnew set. | |||
| * This switches rmic to use a new compiler, one that doesnt work in-process | |||
| * on ant on java1.6. | |||
| * see: <a href="http://issues.apache.org/bugzilla/show_bug.cgi?id=38732"> | |||
| * http://issues.apache.org/bugzilla/show_bug.cgi?id=38732</a> | |||
| */ | |||
| public class XNewRmic extends ForkingSunRmic { | |||
| /** | |||
| * the name of this adapter for users to select | |||
| */ | |||
| public static final String COMPILER_NAME = "xnew"; | |||
| /** No-arg constructor. */ | |||
| public XNewRmic() { | |||
| } | |||
| /** | |||
| * Create a normal command line, then with -Xnew at the front | |||
| * @return a command line that hands off to thw | |||
| */ | |||
| protected Commandline setupRmicCommand() { | |||
| String[] options = new String[] { | |||
| "-Xnew" | |||
| }; | |||
| Commandline commandline = super.setupRmicCommand(options); | |||
| return commandline; | |||
| } | |||
| } | |||
| /* | |||
| * 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.taskdefs.rmic; | |||
| import org.apache.tools.ant.types.Commandline; | |||
| /** | |||
| * Run rmic in a new process with -Xnew set. | |||
| * This switches rmic to use a new compiler, one that doesnt work in-process | |||
| * on ant on java1.6. | |||
| * see: <a href="http://issues.apache.org/bugzilla/show_bug.cgi?id=38732"> | |||
| * http://issues.apache.org/bugzilla/show_bug.cgi?id=38732</a> | |||
| */ | |||
| public class XNewRmic extends ForkingSunRmic { | |||
| /** | |||
| * the name of this adapter for users to select | |||
| */ | |||
| public static final String COMPILER_NAME = "xnew"; | |||
| /** No-arg constructor. */ | |||
| public XNewRmic() { | |||
| } | |||
| /** | |||
| * Create a normal command line, then with -Xnew at the front | |||
| * @return a command line that hands off to thw | |||
| */ | |||
| protected Commandline setupRmicCommand() { | |||
| String[] options = new String[] { | |||
| "-Xnew" | |||
| }; | |||
| Commandline commandline = super.setupRmicCommand(options); | |||
| return commandline; | |||
| } | |||
| } | |||
| @@ -104,4 +104,4 @@ public class FileResourceIterator implements Iterator { | |||
| return new FileResource(basedir, files[pos++]); | |||
| } | |||
| } | |||
| } | |||
| @@ -146,4 +146,4 @@ public class ChecksumAlgorithm implements Algorithm { | |||
| buf.append(">"); | |||
| return buf.toString(); | |||
| } | |||
| } | |||
| } | |||
| @@ -199,4 +199,4 @@ public class DigestAlgorithm implements Algorithm { | |||
| buf.append(">"); | |||
| return buf.toString(); | |||
| } | |||
| } | |||
| } | |||
| @@ -233,4 +233,4 @@ public class PropertiesfileCache implements Cache { | |||
| buf.append(">"); | |||
| return buf.toString(); | |||
| } | |||
| } | |||
| } | |||
| @@ -1,306 +1,306 @@ | |||
| /* | |||
| * 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.util; | |||
| import java.io.BufferedReader; | |||
| import java.io.File; | |||
| import java.io.FileReader; | |||
| import java.io.IOException; | |||
| import org.apache.tools.ant.BuildException; | |||
| import org.apache.tools.ant.ProjectComponent; | |||
| import org.apache.tools.ant.Project; | |||
| import java.util.Map; | |||
| import java.util.HashMap; | |||
| import java.util.Iterator; | |||
| /** | |||
| * This is a common abstract base case for script runners. | |||
| * These classes need to implement executeScript, evalulateScript | |||
| * and supportsLanguage. | |||
| */ | |||
| public abstract class ScriptRunnerBase { | |||
| /** Whether to keep the engine between calls to execute/eval */ | |||
| private boolean keepEngine = false; | |||
| /** Script language */ | |||
| private String language; | |||
| /** Script content */ | |||
| private String script = ""; | |||
| /** Project this runner is used in */ | |||
| private Project project; | |||
| /** Classloader to be used when running the script. */ | |||
| private ClassLoader scriptLoader; | |||
| /** Beans to be provided to the script */ | |||
| private Map beans = new HashMap(); | |||
| /** | |||
| * Add a list of named objects to the list to be exported to the script | |||
| * | |||
| * @param dictionary a map of objects to be placed into the script context | |||
| * indexed by String names. | |||
| */ | |||
| public void addBeans(Map dictionary) { | |||
| for (Iterator i = dictionary.keySet().iterator(); i.hasNext();) { | |||
| String key = (String) i.next(); | |||
| try { | |||
| Object val = dictionary.get(key); | |||
| addBean(key, val); | |||
| } catch (BuildException ex) { | |||
| // The key is in the dictionary but cannot be retrieved | |||
| // This is usually due references that refer to tasks | |||
| // that have not been taskdefed in the current run. | |||
| // Ignore | |||
| } | |||
| } | |||
| } | |||
| /** | |||
| * Add a single object into the script context. | |||
| * | |||
| * @param key the name in the context this object is to stored under. | |||
| * @param bean the object to be stored in the script context. | |||
| */ | |||
| public void addBean(String key, Object bean) { | |||
| boolean isValid = key.length() > 0 | |||
| && Character.isJavaIdentifierStart(key.charAt(0)); | |||
| for (int i = 1; isValid && i < key.length(); i++) { | |||
| isValid = Character.isJavaIdentifierPart(key.charAt(i)); | |||
| } | |||
| if (isValid) { | |||
| beans.put(key, bean); | |||
| } | |||
| } | |||
| /** | |||
| * Get the beans used for the script. | |||
| * @return the map of beans. | |||
| */ | |||
| protected Map getBeans() { | |||
| return beans; | |||
| } | |||
| /** | |||
| * Do the work. | |||
| * @param execName the name that will be passed to BSF for this script | |||
| * execution. | |||
| */ | |||
| public abstract void executeScript(String execName); | |||
| /** | |||
| * Evalulate the script. | |||
| * @param execName the name that will be passed to BSF for this script | |||
| * execution. | |||
| * @return the result of evalulating the script. | |||
| */ | |||
| public abstract Object evalulateScript(String execName); | |||
| /** | |||
| * Check if a script engine can be created for | |||
| * this language. | |||
| * @return true if a script engine can be created, false | |||
| * otherwise. | |||
| */ | |||
| public abstract boolean supportsLanguage(); | |||
| /** | |||
| * Get the name of the manager prefix used for this | |||
| * scriptrunner. | |||
| * @return the prefix string. | |||
| */ | |||
| public abstract String getManagerName(); | |||
| /** | |||
| * Defines the language (required). | |||
| * @param language the scripting language name for the script. | |||
| */ | |||
| public void setLanguage(String language) { | |||
| this.language = language; | |||
| } | |||
| /** | |||
| * Get the script language | |||
| * @return the script language | |||
| */ | |||
| public String getLanguage() { | |||
| return language; | |||
| } | |||
| /** | |||
| * Set the script classloader. | |||
| * @param classLoader the classloader to use. | |||
| */ | |||
| public void setScriptClassLoader(ClassLoader classLoader) { | |||
| this.scriptLoader = classLoader; | |||
| } | |||
| /** | |||
| * Get the classloader used to load the script engine. | |||
| * @return the classloader. | |||
| */ | |||
| protected ClassLoader getScriptClassLoader() { | |||
| return scriptLoader; | |||
| } | |||
| /** | |||
| * Whether to keep the script engine between calls. | |||
| * @param keepEngine if true, keep the engine. | |||
| */ | |||
| public void setKeepEngine(boolean keepEngine) { | |||
| this.keepEngine = keepEngine; | |||
| } | |||
| /** | |||
| * Get the keep engine attribute. | |||
| * @return the attribute. | |||
| */ | |||
| public boolean getKeepEngine() { | |||
| return keepEngine; | |||
| } | |||
| /** | |||
| * Load the script from an external file; optional. | |||
| * @param file the file containing the script source. | |||
| */ | |||
| public void setSrc(File file) { | |||
| if (!file.exists()) { | |||
| throw new BuildException("file " + file.getPath() + " not found."); | |||
| } | |||
| BufferedReader in = null; | |||
| try { | |||
| in = new BufferedReader(new FileReader(file)); | |||
| script += FileUtils.readFully(in); | |||
| } catch (IOException ex) { | |||
| throw new BuildException(ex); | |||
| } finally { | |||
| FileUtils.close(in); | |||
| } | |||
| } | |||
| /** | |||
| * Set the script text. | |||
| * | |||
| * @param text a component of the script text to be added. | |||
| */ | |||
| public void addText(String text) { | |||
| this.script += text; | |||
| } | |||
| /** | |||
| * Get the current script text content. | |||
| * @return the script text. | |||
| */ | |||
| public String getScript() { | |||
| return script; | |||
| } | |||
| /** | |||
| * Clear the current script text content. | |||
| */ | |||
| public void clearScript() { | |||
| this.script = ""; | |||
| } | |||
| /** | |||
| * Set the project for this runner. | |||
| * @param project the project. | |||
| */ | |||
| public void setProject(Project project) { | |||
| this.project = project; | |||
| } | |||
| /** | |||
| * Get the project for this runner. | |||
| * @return the project. | |||
| */ | |||
| public Project getProject() { | |||
| return project; | |||
| } | |||
| /** | |||
| * Bind the runner to a project component. | |||
| * Properties, targets and references are all added as beans; | |||
| * project is bound to project, and self to the component. | |||
| * @param component to become <code>self</code> | |||
| */ | |||
| public void bindToComponent(ProjectComponent component) { | |||
| project = component.getProject(); | |||
| addBeans(project.getProperties()); | |||
| addBeans(project.getUserProperties()); | |||
| addBeans(project.getTargets()); | |||
| addBeans(project.getReferences()); | |||
| addBean("project", project); | |||
| addBean("self", component); | |||
| } | |||
| /** | |||
| * Bind the runner to a project component. | |||
| * The project and self are the only beans set. | |||
| * @param component to become <code>self</code> | |||
| */ | |||
| public void bindToComponentMinimum(ProjectComponent component) { | |||
| project = component.getProject(); | |||
| addBean("project", project); | |||
| addBean("self", component); | |||
| } | |||
| /** | |||
| * Check if the language attribute is set. | |||
| * @throws BuildException if it is not. | |||
| */ | |||
| protected void checkLanguage() { | |||
| if (language == null) { | |||
| throw new BuildException( | |||
| "script language must be specified"); | |||
| } | |||
| } | |||
| /** | |||
| * Replace the current context classloader with the | |||
| * script context classloader. | |||
| * @return the current context classloader. | |||
| */ | |||
| protected ClassLoader replaceContextLoader() { | |||
| ClassLoader origContextClassLoader = | |||
| Thread.currentThread().getContextClassLoader(); | |||
| if (getScriptClassLoader() == null) { | |||
| setScriptClassLoader(getClass().getClassLoader()); | |||
| } | |||
| Thread.currentThread().setContextClassLoader(getScriptClassLoader()); | |||
| return origContextClassLoader; | |||
| } | |||
| /** | |||
| * Restore the context loader with the original context classloader. | |||
| * | |||
| * script context loader. | |||
| * @param origLoader the original context classloader. | |||
| */ | |||
| protected void restoreContextLoader(ClassLoader origLoader) { | |||
| Thread.currentThread().setContextClassLoader( | |||
| origLoader); | |||
| } | |||
| } | |||
| /* | |||
| * 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.util; | |||
| import java.io.BufferedReader; | |||
| import java.io.File; | |||
| import java.io.FileReader; | |||
| import java.io.IOException; | |||
| import org.apache.tools.ant.BuildException; | |||
| import org.apache.tools.ant.ProjectComponent; | |||
| import org.apache.tools.ant.Project; | |||
| import java.util.Map; | |||
| import java.util.HashMap; | |||
| import java.util.Iterator; | |||
| /** | |||
| * This is a common abstract base case for script runners. | |||
| * These classes need to implement executeScript, evalulateScript | |||
| * and supportsLanguage. | |||
| */ | |||
| public abstract class ScriptRunnerBase { | |||
| /** Whether to keep the engine between calls to execute/eval */ | |||
| private boolean keepEngine = false; | |||
| /** Script language */ | |||
| private String language; | |||
| /** Script content */ | |||
| private String script = ""; | |||
| /** Project this runner is used in */ | |||
| private Project project; | |||
| /** Classloader to be used when running the script. */ | |||
| private ClassLoader scriptLoader; | |||
| /** Beans to be provided to the script */ | |||
| private Map beans = new HashMap(); | |||
| /** | |||
| * Add a list of named objects to the list to be exported to the script | |||
| * | |||
| * @param dictionary a map of objects to be placed into the script context | |||
| * indexed by String names. | |||
| */ | |||
| public void addBeans(Map dictionary) { | |||
| for (Iterator i = dictionary.keySet().iterator(); i.hasNext();) { | |||
| String key = (String) i.next(); | |||
| try { | |||
| Object val = dictionary.get(key); | |||
| addBean(key, val); | |||
| } catch (BuildException ex) { | |||
| // The key is in the dictionary but cannot be retrieved | |||
| // This is usually due references that refer to tasks | |||
| // that have not been taskdefed in the current run. | |||
| // Ignore | |||
| } | |||
| } | |||
| } | |||
| /** | |||
| * Add a single object into the script context. | |||
| * | |||
| * @param key the name in the context this object is to stored under. | |||
| * @param bean the object to be stored in the script context. | |||
| */ | |||
| public void addBean(String key, Object bean) { | |||
| boolean isValid = key.length() > 0 | |||
| && Character.isJavaIdentifierStart(key.charAt(0)); | |||
| for (int i = 1; isValid && i < key.length(); i++) { | |||
| isValid = Character.isJavaIdentifierPart(key.charAt(i)); | |||
| } | |||
| if (isValid) { | |||
| beans.put(key, bean); | |||
| } | |||
| } | |||
| /** | |||
| * Get the beans used for the script. | |||
| * @return the map of beans. | |||
| */ | |||
| protected Map getBeans() { | |||
| return beans; | |||
| } | |||
| /** | |||
| * Do the work. | |||
| * @param execName the name that will be passed to BSF for this script | |||
| * execution. | |||
| */ | |||
| public abstract void executeScript(String execName); | |||
| /** | |||
| * Evalulate the script. | |||
| * @param execName the name that will be passed to BSF for this script | |||
| * execution. | |||
| * @return the result of evalulating the script. | |||
| */ | |||
| public abstract Object evalulateScript(String execName); | |||
| /** | |||
| * Check if a script engine can be created for | |||
| * this language. | |||
| * @return true if a script engine can be created, false | |||
| * otherwise. | |||
| */ | |||
| public abstract boolean supportsLanguage(); | |||
| /** | |||
| * Get the name of the manager prefix used for this | |||
| * scriptrunner. | |||
| * @return the prefix string. | |||
| */ | |||
| public abstract String getManagerName(); | |||
| /** | |||
| * Defines the language (required). | |||
| * @param language the scripting language name for the script. | |||
| */ | |||
| public void setLanguage(String language) { | |||
| this.language = language; | |||
| } | |||
| /** | |||
| * Get the script language | |||
| * @return the script language | |||
| */ | |||
| public String getLanguage() { | |||
| return language; | |||
| } | |||
| /** | |||
| * Set the script classloader. | |||
| * @param classLoader the classloader to use. | |||
| */ | |||
| public void setScriptClassLoader(ClassLoader classLoader) { | |||
| this.scriptLoader = classLoader; | |||
| } | |||
| /** | |||
| * Get the classloader used to load the script engine. | |||
| * @return the classloader. | |||
| */ | |||
| protected ClassLoader getScriptClassLoader() { | |||
| return scriptLoader; | |||
| } | |||
| /** | |||
| * Whether to keep the script engine between calls. | |||
| * @param keepEngine if true, keep the engine. | |||
| */ | |||
| public void setKeepEngine(boolean keepEngine) { | |||
| this.keepEngine = keepEngine; | |||
| } | |||
| /** | |||
| * Get the keep engine attribute. | |||
| * @return the attribute. | |||
| */ | |||
| public boolean getKeepEngine() { | |||
| return keepEngine; | |||
| } | |||
| /** | |||
| * Load the script from an external file; optional. | |||
| * @param file the file containing the script source. | |||
| */ | |||
| public void setSrc(File file) { | |||
| if (!file.exists()) { | |||
| throw new BuildException("file " + file.getPath() + " not found."); | |||
| } | |||
| BufferedReader in = null; | |||
| try { | |||
| in = new BufferedReader(new FileReader(file)); | |||
| script += FileUtils.readFully(in); | |||
| } catch (IOException ex) { | |||
| throw new BuildException(ex); | |||
| } finally { | |||
| FileUtils.close(in); | |||
| } | |||
| } | |||
| /** | |||
| * Set the script text. | |||
| * | |||
| * @param text a component of the script text to be added. | |||
| */ | |||
| public void addText(String text) { | |||
| this.script += text; | |||
| } | |||
| /** | |||
| * Get the current script text content. | |||
| * @return the script text. | |||
| */ | |||
| public String getScript() { | |||
| return script; | |||
| } | |||
| /** | |||
| * Clear the current script text content. | |||
| */ | |||
| public void clearScript() { | |||
| this.script = ""; | |||
| } | |||
| /** | |||
| * Set the project for this runner. | |||
| * @param project the project. | |||
| */ | |||
| public void setProject(Project project) { | |||
| this.project = project; | |||
| } | |||
| /** | |||
| * Get the project for this runner. | |||
| * @return the project. | |||
| */ | |||
| public Project getProject() { | |||
| return project; | |||
| } | |||
| /** | |||
| * Bind the runner to a project component. | |||
| * Properties, targets and references are all added as beans; | |||
| * project is bound to project, and self to the component. | |||
| * @param component to become <code>self</code> | |||
| */ | |||
| public void bindToComponent(ProjectComponent component) { | |||
| project = component.getProject(); | |||
| addBeans(project.getProperties()); | |||
| addBeans(project.getUserProperties()); | |||
| addBeans(project.getTargets()); | |||
| addBeans(project.getReferences()); | |||
| addBean("project", project); | |||
| addBean("self", component); | |||
| } | |||
| /** | |||
| * Bind the runner to a project component. | |||
| * The project and self are the only beans set. | |||
| * @param component to become <code>self</code> | |||
| */ | |||
| public void bindToComponentMinimum(ProjectComponent component) { | |||
| project = component.getProject(); | |||
| addBean("project", project); | |||
| addBean("self", component); | |||
| } | |||
| /** | |||
| * Check if the language attribute is set. | |||
| * @throws BuildException if it is not. | |||
| */ | |||
| protected void checkLanguage() { | |||
| if (language == null) { | |||
| throw new BuildException( | |||
| "script language must be specified"); | |||
| } | |||
| } | |||
| /** | |||
| * Replace the current context classloader with the | |||
| * script context classloader. | |||
| * @return the current context classloader. | |||
| */ | |||
| protected ClassLoader replaceContextLoader() { | |||
| ClassLoader origContextClassLoader = | |||
| Thread.currentThread().getContextClassLoader(); | |||
| if (getScriptClassLoader() == null) { | |||
| setScriptClassLoader(getClass().getClassLoader()); | |||
| } | |||
| Thread.currentThread().setContextClassLoader(getScriptClassLoader()); | |||
| return origContextClassLoader; | |||
| } | |||
| /** | |||
| * Restore the context loader with the original context classloader. | |||
| * | |||
| * script context loader. | |||
| * @param origLoader the original context classloader. | |||
| */ | |||
| protected void restoreContextLoader(ClassLoader origLoader) { | |||
| Thread.currentThread().setContextClassLoader( | |||
| origLoader); | |||
| } | |||
| } | |||
| @@ -1,139 +1,139 @@ | |||
| /* | |||
| * 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.util; | |||
| import org.apache.tools.ant.BuildException; | |||
| import org.apache.tools.ant.Project; | |||
| /** | |||
| * This is a helper class used by ScriptRunnerHelper to | |||
| * create a ScriptRunner based on a classloader and | |||
| * on a language. | |||
| */ | |||
| public class ScriptRunnerCreator { | |||
| private static final String AUTO = "auto"; | |||
| private static final String OATAU = "org.apache.tools.ant.util"; | |||
| private static final String UTIL_OPT = OATAU + ".optional"; | |||
| private static final String BSF = "bsf"; | |||
| private static final String BSF_PACK = "org.apache.bsf"; | |||
| private static final String BSF_MANAGER = BSF_PACK + ".BSFManager"; | |||
| private static final String BSF_RUNNER = UTIL_OPT + ".ScriptRunner"; | |||
| private static final String JAVAX = "javax"; | |||
| private static final String JAVAX_MANAGER = "javax.script.ScriptEngineManager"; | |||
| private static final String JAVAX_RUNNER = UTIL_OPT + ".JavaxScriptRunner"; | |||
| private Project project; | |||
| private String manager; | |||
| private String language; | |||
| private ClassLoader scriptLoader = null; | |||
| /** | |||
| * Constructor for creator. | |||
| * @param project the current project. | |||
| */ | |||
| public ScriptRunnerCreator(Project project) { | |||
| this.project = project; | |||
| } | |||
| /** | |||
| * Create a ScriptRunner. | |||
| * @param manager the script manager ("auto" | "bsf" | "javax") | |||
| * @param language the language. | |||
| * @param classLoader the classloader to use | |||
| * @return the created script runner. | |||
| * @throws BuildException if unable to create the ScriptRunner. | |||
| */ | |||
| public ScriptRunnerBase createRunner( | |||
| String manager, String language, ClassLoader classLoader) { | |||
| this.manager = manager; | |||
| this.language = language; | |||
| this.scriptLoader = classLoader; | |||
| if (language == null) { | |||
| throw new BuildException("script language must be specified"); | |||
| } | |||
| if (!manager.equals(AUTO) && !manager.equals(JAVAX) && !manager.equals(BSF)) { | |||
| throw new BuildException( | |||
| "Unsupported language prefix " + manager); | |||
| } | |||
| // Check for bsf first then javax | |||
| // This version does not check if the scriptManager | |||
| // supports the language. | |||
| ScriptRunnerBase ret = null; | |||
| ret = createRunner(BSF, BSF_MANAGER, BSF_RUNNER); | |||
| if (ret == null) { | |||
| ret = createRunner(JAVAX, JAVAX_MANAGER, JAVAX_RUNNER); | |||
| } | |||
| if (ret != null) { | |||
| return ret; | |||
| } | |||
| if (JAVAX.equals(manager)) { | |||
| throw new BuildException( | |||
| "Unable to load the script engine manager " | |||
| + "(" + JAVAX_MANAGER + ")"); | |||
| } else if (BSF.equals(manager)) { | |||
| throw new BuildException( | |||
| "Unable to load the BSF script engine manager " | |||
| + "(" + BSF_MANAGER + ")"); | |||
| } else { | |||
| throw new BuildException( | |||
| "Unable to load a script engine manager " | |||
| + "(" + BSF_MANAGER + " or " + JAVAX_MANAGER + ")"); | |||
| } | |||
| } | |||
| /** | |||
| * Create a script runner if the scriptManager matches the passed | |||
| * in manager. | |||
| * This checks if the script manager exists in the scriptLoader | |||
| * classloader and if so it creates and returns the script runner. | |||
| * @param checkManager check if the manager matchs this value. | |||
| * @param mangagerClass the name of the script manager class. | |||
| * @param runnerClass the name of ant's script runner for this manager. | |||
| * @return the script runner class. | |||
| * @throws BuildException if there is a problem creating the runner class. | |||
| */ | |||
| private ScriptRunnerBase createRunner( | |||
| String checkManager, String managerClass, String runnerClass) { | |||
| ScriptRunnerBase runner = null; | |||
| if (!manager.equals(AUTO) && !manager.equals(checkManager)) { | |||
| return null; | |||
| } | |||
| if (scriptLoader.getResource( | |||
| LoaderUtils.classNameToResource(managerClass)) == null) { | |||
| return null; | |||
| } | |||
| try { | |||
| runner = (ScriptRunnerBase) Class.forName( | |||
| runnerClass, true, scriptLoader).newInstance(); | |||
| runner.setProject(project); | |||
| return runner; | |||
| } catch (Exception ex) { | |||
| ReflectUtil.throwBuildException(ex); | |||
| // NotReached | |||
| } | |||
| runner.setLanguage(language); | |||
| runner.setScriptClassLoader(scriptLoader); | |||
| return runner; | |||
| } | |||
| } | |||
| /* | |||
| * 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.util; | |||
| import org.apache.tools.ant.BuildException; | |||
| import org.apache.tools.ant.Project; | |||
| /** | |||
| * This is a helper class used by ScriptRunnerHelper to | |||
| * create a ScriptRunner based on a classloader and | |||
| * on a language. | |||
| */ | |||
| public class ScriptRunnerCreator { | |||
| private static final String AUTO = "auto"; | |||
| private static final String OATAU = "org.apache.tools.ant.util"; | |||
| private static final String UTIL_OPT = OATAU + ".optional"; | |||
| private static final String BSF = "bsf"; | |||
| private static final String BSF_PACK = "org.apache.bsf"; | |||
| private static final String BSF_MANAGER = BSF_PACK + ".BSFManager"; | |||
| private static final String BSF_RUNNER = UTIL_OPT + ".ScriptRunner"; | |||
| private static final String JAVAX = "javax"; | |||
| private static final String JAVAX_MANAGER = "javax.script.ScriptEngineManager"; | |||
| private static final String JAVAX_RUNNER = UTIL_OPT + ".JavaxScriptRunner"; | |||
| private Project project; | |||
| private String manager; | |||
| private String language; | |||
| private ClassLoader scriptLoader = null; | |||
| /** | |||
| * Constructor for creator. | |||
| * @param project the current project. | |||
| */ | |||
| public ScriptRunnerCreator(Project project) { | |||
| this.project = project; | |||
| } | |||
| /** | |||
| * Create a ScriptRunner. | |||
| * @param manager the script manager ("auto" | "bsf" | "javax") | |||
| * @param language the language. | |||
| * @param classLoader the classloader to use | |||
| * @return the created script runner. | |||
| * @throws BuildException if unable to create the ScriptRunner. | |||
| */ | |||
| public ScriptRunnerBase createRunner( | |||
| String manager, String language, ClassLoader classLoader) { | |||
| this.manager = manager; | |||
| this.language = language; | |||
| this.scriptLoader = classLoader; | |||
| if (language == null) { | |||
| throw new BuildException("script language must be specified"); | |||
| } | |||
| if (!manager.equals(AUTO) && !manager.equals(JAVAX) && !manager.equals(BSF)) { | |||
| throw new BuildException( | |||
| "Unsupported language prefix " + manager); | |||
| } | |||
| // Check for bsf first then javax | |||
| // This version does not check if the scriptManager | |||
| // supports the language. | |||
| ScriptRunnerBase ret = null; | |||
| ret = createRunner(BSF, BSF_MANAGER, BSF_RUNNER); | |||
| if (ret == null) { | |||
| ret = createRunner(JAVAX, JAVAX_MANAGER, JAVAX_RUNNER); | |||
| } | |||
| if (ret != null) { | |||
| return ret; | |||
| } | |||
| if (JAVAX.equals(manager)) { | |||
| throw new BuildException( | |||
| "Unable to load the script engine manager " | |||
| + "(" + JAVAX_MANAGER + ")"); | |||
| } else if (BSF.equals(manager)) { | |||
| throw new BuildException( | |||
| "Unable to load the BSF script engine manager " | |||
| + "(" + BSF_MANAGER + ")"); | |||
| } else { | |||
| throw new BuildException( | |||
| "Unable to load a script engine manager " | |||
| + "(" + BSF_MANAGER + " or " + JAVAX_MANAGER + ")"); | |||
| } | |||
| } | |||
| /** | |||
| * Create a script runner if the scriptManager matches the passed | |||
| * in manager. | |||
| * This checks if the script manager exists in the scriptLoader | |||
| * classloader and if so it creates and returns the script runner. | |||
| * @param checkManager check if the manager matchs this value. | |||
| * @param mangagerClass the name of the script manager class. | |||
| * @param runnerClass the name of ant's script runner for this manager. | |||
| * @return the script runner class. | |||
| * @throws BuildException if there is a problem creating the runner class. | |||
| */ | |||
| private ScriptRunnerBase createRunner( | |||
| String checkManager, String managerClass, String runnerClass) { | |||
| ScriptRunnerBase runner = null; | |||
| if (!manager.equals(AUTO) && !manager.equals(checkManager)) { | |||
| return null; | |||
| } | |||
| if (scriptLoader.getResource( | |||
| LoaderUtils.classNameToResource(managerClass)) == null) { | |||
| return null; | |||
| } | |||
| try { | |||
| runner = (ScriptRunnerBase) Class.forName( | |||
| runnerClass, true, scriptLoader).newInstance(); | |||
| runner.setProject(project); | |||
| return runner; | |||
| } catch (Exception ex) { | |||
| ReflectUtil.throwBuildException(ex); | |||
| // NotReached | |||
| } | |||
| runner.setLanguage(language); | |||
| runner.setScriptClassLoader(scriptLoader); | |||
| return runner; | |||
| } | |||
| } | |||
| @@ -1,191 +1,191 @@ | |||
| /* | |||
| * 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.util; | |||
| import org.apache.tools.ant.ProjectComponent; | |||
| import org.apache.tools.ant.types.Path; | |||
| import java.io.File; | |||
| import org.apache.tools.ant.types.Reference; | |||
| /** | |||
| * A class to help in creating, setting and getting | |||
| * script runners. | |||
| */ | |||
| public class ScriptRunnerHelper { | |||
| private ClasspathUtils.Delegate cpDelegate = null; | |||
| private File srcFile; | |||
| private String manager = "auto"; | |||
| private String language; | |||
| private String text; | |||
| private boolean setBeans = true; | |||
| private ProjectComponent projectComponent; | |||
| private ClassLoader scriptLoader = null; | |||
| /** | |||
| * Set the project component associated with this helper. | |||
| * @param component the project component that owns this helper. | |||
| */ | |||
| public void setProjectComponent(ProjectComponent component) { | |||
| this.projectComponent = component; | |||
| } | |||
| /** | |||
| * Create and set text on a script. | |||
| * @return the created or reused script runner. | |||
| */ | |||
| public ScriptRunnerBase getScriptRunner() { | |||
| ScriptRunnerBase runner = getRunner(); | |||
| if (srcFile != null) { | |||
| runner.setSrc(srcFile); | |||
| } | |||
| if (text != null) { | |||
| runner.addText(text); | |||
| } | |||
| if (setBeans) { | |||
| runner.bindToComponent(projectComponent); | |||
| } else { | |||
| runner.bindToComponentMinimum(projectComponent); | |||
| } | |||
| return runner; | |||
| } | |||
| /** | |||
| * Classpath to be used when searching for classes and resources. | |||
| * | |||
| * @return an empty Path instance to be configured by Ant. | |||
| */ | |||
| public Path createClasspath() { | |||
| return getClassPathDelegate().createClasspath(); | |||
| } | |||
| /** | |||
| * Set the classpath to be used when searching for classes and resources. | |||
| * | |||
| * @param classpath an Ant Path object containing the search path. | |||
| */ | |||
| public void setClasspath(Path classpath) { | |||
| getClassPathDelegate().setClasspath(classpath); | |||
| } | |||
| /** | |||
| * Set the classpath by reference. | |||
| * | |||
| * @param r a Reference to a Path instance to be used as the classpath | |||
| * value. | |||
| */ | |||
| public void setClasspathRef(Reference r) { | |||
| getClassPathDelegate().setClasspathref(r); | |||
| } | |||
| /** | |||
| * Load the script from an external file ; optional. | |||
| * | |||
| * @param file the file containing the script source. | |||
| */ | |||
| public void setSrc(File file) { | |||
| this.srcFile = file; | |||
| } | |||
| /** | |||
| * The script text. | |||
| * | |||
| * @param text a component of the script text to be added. | |||
| */ | |||
| public void addText(String text) { | |||
| this.text = text; | |||
| } | |||
| /** | |||
| * Defines the script manager - defaults to "auto". | |||
| * | |||
| * @param manager the scripting manager - "bsf" or "javax" or "auto" | |||
| */ | |||
| public void setManager(String manager) { | |||
| this.manager = manager; | |||
| } | |||
| /** | |||
| * Defines the language (required). | |||
| * | |||
| * @param language the scripting language name for the script. | |||
| */ | |||
| public void setLanguage(String language) { | |||
| this.language = language; | |||
| } | |||
| /** | |||
| * Get the language. | |||
| * @return the scripting language. | |||
| */ | |||
| public String getLanguage() { | |||
| return language; | |||
| } | |||
| /** | |||
| * Set the setbeans attribute. | |||
| * If this is true, <script> will create variables in the | |||
| * script instance for all | |||
| * properties, targets and references of the current project. | |||
| * It this is false, only the project and self variables will | |||
| * be set. | |||
| * The default is true. | |||
| * @param setBeans the value to set. | |||
| */ | |||
| public void setSetBeans(boolean setBeans) { | |||
| this.setBeans = setBeans; | |||
| } | |||
| /** | |||
| * Used when called by scriptdef. | |||
| * @param loader the loader used by scriptdef. | |||
| */ | |||
| public void setClassLoader(ClassLoader loader) { | |||
| scriptLoader = loader; | |||
| } | |||
| private ClassLoader generateClassLoader() { | |||
| if (scriptLoader != null) { | |||
| return scriptLoader; | |||
| } | |||
| if (cpDelegate == null) { | |||
| scriptLoader = getClass().getClassLoader(); | |||
| return scriptLoader; | |||
| } | |||
| scriptLoader = cpDelegate.getClassLoader(); | |||
| return scriptLoader; | |||
| } | |||
| private ClasspathUtils.Delegate getClassPathDelegate() { | |||
| if (cpDelegate == null) { | |||
| cpDelegate = ClasspathUtils.getDelegate(projectComponent); | |||
| } | |||
| return cpDelegate; | |||
| } | |||
| /** | |||
| * Get a script runner. | |||
| */ | |||
| private ScriptRunnerBase getRunner() { | |||
| return new ScriptRunnerCreator( | |||
| projectComponent.getProject()).createRunner( | |||
| manager, language, generateClassLoader()); | |||
| } | |||
| } | |||
| /* | |||
| * 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.util; | |||
| import org.apache.tools.ant.ProjectComponent; | |||
| import org.apache.tools.ant.types.Path; | |||
| import java.io.File; | |||
| import org.apache.tools.ant.types.Reference; | |||
| /** | |||
| * A class to help in creating, setting and getting | |||
| * script runners. | |||
| */ | |||
| public class ScriptRunnerHelper { | |||
| private ClasspathUtils.Delegate cpDelegate = null; | |||
| private File srcFile; | |||
| private String manager = "auto"; | |||
| private String language; | |||
| private String text; | |||
| private boolean setBeans = true; | |||
| private ProjectComponent projectComponent; | |||
| private ClassLoader scriptLoader = null; | |||
| /** | |||
| * Set the project component associated with this helper. | |||
| * @param component the project component that owns this helper. | |||
| */ | |||
| public void setProjectComponent(ProjectComponent component) { | |||
| this.projectComponent = component; | |||
| } | |||
| /** | |||
| * Create and set text on a script. | |||
| * @return the created or reused script runner. | |||
| */ | |||
| public ScriptRunnerBase getScriptRunner() { | |||
| ScriptRunnerBase runner = getRunner(); | |||
| if (srcFile != null) { | |||
| runner.setSrc(srcFile); | |||
| } | |||
| if (text != null) { | |||
| runner.addText(text); | |||
| } | |||
| if (setBeans) { | |||
| runner.bindToComponent(projectComponent); | |||
| } else { | |||
| runner.bindToComponentMinimum(projectComponent); | |||
| } | |||
| return runner; | |||
| } | |||
| /** | |||
| * Classpath to be used when searching for classes and resources. | |||
| * | |||
| * @return an empty Path instance to be configured by Ant. | |||
| */ | |||
| public Path createClasspath() { | |||
| return getClassPathDelegate().createClasspath(); | |||
| } | |||
| /** | |||
| * Set the classpath to be used when searching for classes and resources. | |||
| * | |||
| * @param classpath an Ant Path object containing the search path. | |||
| */ | |||
| public void setClasspath(Path classpath) { | |||
| getClassPathDelegate().setClasspath(classpath); | |||
| } | |||
| /** | |||
| * Set the classpath by reference. | |||
| * | |||
| * @param r a Reference to a Path instance to be used as the classpath | |||
| * value. | |||
| */ | |||
| public void setClasspathRef(Reference r) { | |||
| getClassPathDelegate().setClasspathref(r); | |||
| } | |||
| /** | |||
| * Load the script from an external file ; optional. | |||
| * | |||
| * @param file the file containing the script source. | |||
| */ | |||
| public void setSrc(File file) { | |||
| this.srcFile = file; | |||
| } | |||
| /** | |||
| * The script text. | |||
| * | |||
| * @param text a component of the script text to be added. | |||
| */ | |||
| public void addText(String text) { | |||
| this.text = text; | |||
| } | |||
| /** | |||
| * Defines the script manager - defaults to "auto". | |||
| * | |||
| * @param manager the scripting manager - "bsf" or "javax" or "auto" | |||
| */ | |||
| public void setManager(String manager) { | |||
| this.manager = manager; | |||
| } | |||
| /** | |||
| * Defines the language (required). | |||
| * | |||
| * @param language the scripting language name for the script. | |||
| */ | |||
| public void setLanguage(String language) { | |||
| this.language = language; | |||
| } | |||
| /** | |||
| * Get the language. | |||
| * @return the scripting language. | |||
| */ | |||
| public String getLanguage() { | |||
| return language; | |||
| } | |||
| /** | |||
| * Set the setbeans attribute. | |||
| * If this is true, <script> will create variables in the | |||
| * script instance for all | |||
| * properties, targets and references of the current project. | |||
| * It this is false, only the project and self variables will | |||
| * be set. | |||
| * The default is true. | |||
| * @param setBeans the value to set. | |||
| */ | |||
| public void setSetBeans(boolean setBeans) { | |||
| this.setBeans = setBeans; | |||
| } | |||
| /** | |||
| * Used when called by scriptdef. | |||
| * @param loader the loader used by scriptdef. | |||
| */ | |||
| public void setClassLoader(ClassLoader loader) { | |||
| scriptLoader = loader; | |||
| } | |||
| private ClassLoader generateClassLoader() { | |||
| if (scriptLoader != null) { | |||
| return scriptLoader; | |||
| } | |||
| if (cpDelegate == null) { | |||
| scriptLoader = getClass().getClassLoader(); | |||
| return scriptLoader; | |||
| } | |||
| scriptLoader = cpDelegate.getClassLoader(); | |||
| return scriptLoader; | |||
| } | |||
| private ClasspathUtils.Delegate getClassPathDelegate() { | |||
| if (cpDelegate == null) { | |||
| cpDelegate = ClasspathUtils.getDelegate(projectComponent); | |||
| } | |||
| return cpDelegate; | |||
| } | |||
| /** | |||
| * Get a script runner. | |||
| */ | |||
| private ScriptRunnerBase getRunner() { | |||
| return new ScriptRunnerCreator( | |||
| projectComponent.getProject()).createRunner( | |||
| manager, language, generateClassLoader()); | |||
| } | |||
| } | |||
| @@ -58,4 +58,4 @@ public class ImplementationSpecificArgument extends Commandline.Argument { | |||
| return new String[0]; | |||
| } | |||
| } | |||
| } | |||
| } | |||
| @@ -1,64 +1,64 @@ | |||
| <?xml version="1.0"?> | |||
| <project name="delete-test" basedir="." default="all" | |||
| xmlns:au="antlib:org.apache.ant.antunit"> | |||
| <property name="working.dir" value="working"/> | |||
| <property name="existing.dir" value="working/exists"/> | |||
| <property name="nonexistent.dir" value="working/nonexists"/> | |||
| <target name="all"> | |||
| <au:antunit> | |||
| <fileset file="${ant.file}"/> | |||
| <au:plainlistener/> | |||
| </au:antunit> | |||
| </target> | |||
| <target name="init"> | |||
| <delete dir="${working.dir}"/> | |||
| <mkdir dir="${working.dir}"/> | |||
| <mkdir dir="${existing.dir}"/> | |||
| </target> | |||
| <target name="tearDown"> | |||
| <delete dir="${working.dir}"/> | |||
| </target> | |||
| <!--test that you can delete a fileset with a nonexistent dir without failure--> | |||
| <target name="testdelfileset" depends="init"> | |||
| <delete quiet="true" includeEmptyDirs="true"> | |||
| <fileset dir="${nonexistent.dir}"/> | |||
| </delete> | |||
| <au:assertFileExists file="${existing.dir}" /> | |||
| <delete quiet="true" includeEmptyDirs="true"> | |||
| <fileset dir="${existing.dir}"/> | |||
| </delete> | |||
| <au:assertFileDoesntExist file="${existing.dir}" /> | |||
| <mkdir dir="${existing.dir}"/> | |||
| <delete quiet="true" includeEmptyDirs="true"> | |||
| <fileset dir="${nonexistent.dir}"/> | |||
| <fileset dir="${existing.dir}"/> | |||
| </delete> | |||
| <au:assertFileDoesntExist file="${existing.dir}" /> | |||
| <mkdir dir="${existing.dir}"/> | |||
| <delete quiet="true" includeEmptyDirs="true"> | |||
| <fileset dir="${existing.dir}"/> | |||
| <fileset dir="${nonexistent.dir}"/> | |||
| </delete> | |||
| <au:assertFileDoesntExist file="${existing.dir}" /> | |||
| </target> | |||
| </project> | |||
| <?xml version="1.0"?> | |||
| <project name="delete-test" basedir="." default="all" | |||
| xmlns:au="antlib:org.apache.ant.antunit"> | |||
| <property name="working.dir" value="working"/> | |||
| <property name="existing.dir" value="working/exists"/> | |||
| <property name="nonexistent.dir" value="working/nonexists"/> | |||
| <target name="all"> | |||
| <au:antunit> | |||
| <fileset file="${ant.file}"/> | |||
| <au:plainlistener/> | |||
| </au:antunit> | |||
| </target> | |||
| <target name="init"> | |||
| <delete dir="${working.dir}"/> | |||
| <mkdir dir="${working.dir}"/> | |||
| <mkdir dir="${existing.dir}"/> | |||
| </target> | |||
| <target name="tearDown"> | |||
| <delete dir="${working.dir}"/> | |||
| </target> | |||
| <!--test that you can delete a fileset with a nonexistent dir without failure--> | |||
| <target name="testdelfileset" depends="init"> | |||
| <delete quiet="true" includeEmptyDirs="true"> | |||
| <fileset dir="${nonexistent.dir}"/> | |||
| </delete> | |||
| <au:assertFileExists file="${existing.dir}" /> | |||
| <delete quiet="true" includeEmptyDirs="true"> | |||
| <fileset dir="${existing.dir}"/> | |||
| </delete> | |||
| <au:assertFileDoesntExist file="${existing.dir}" /> | |||
| <mkdir dir="${existing.dir}"/> | |||
| <delete quiet="true" includeEmptyDirs="true"> | |||
| <fileset dir="${nonexistent.dir}"/> | |||
| <fileset dir="${existing.dir}"/> | |||
| </delete> | |||
| <au:assertFileDoesntExist file="${existing.dir}" /> | |||
| <mkdir dir="${existing.dir}"/> | |||
| <delete quiet="true" includeEmptyDirs="true"> | |||
| <fileset dir="${existing.dir}"/> | |||
| <fileset dir="${nonexistent.dir}"/> | |||
| </delete> | |||
| <au:assertFileDoesntExist file="${existing.dir}" /> | |||
| </target> | |||
| </project> | |||
| @@ -1,161 +1,161 @@ | |||
| <?xml version="1.0"?> | |||
| <project name="war-test" basedir="." default="all" | |||
| xmlns:au="antlib:org.apache.ant.antunit"> | |||
| <property name="working.dir" value="working"/> | |||
| <target name="all"> | |||
| <au:antunit> | |||
| <fileset file="${ant.file}"/> | |||
| <au:plainlistener/> | |||
| </au:antunit> | |||
| </target> | |||
| <target name="init"> | |||
| <delete dir="${working.dir}"/> | |||
| <mkdir dir="${working.dir}"/> | |||
| <property name="warfile" location="${working.dir}/test.war"/> | |||
| <property name="web.xml" location="web.xml"/> | |||
| <property name="webxml.generated" location="${working.dir}/WEB-INF/web.xml"/> | |||
| <!--failing on duplicates is half our testing--> | |||
| <presetdef name="mkwar"> | |||
| <war destfile="${warfile}" duplicate="fail"/> | |||
| </presetdef> | |||
| <presetdef name="expandwar"> | |||
| <unzip src="${working.dir}/test.war" dest="${working.dir}"/> | |||
| </presetdef> | |||
| </target> | |||
| <target name="tearDown"> | |||
| <delete dir="${working.dir}"/> | |||
| </target> | |||
| <!--test that you can patch a fileset reference into a lib element--> | |||
| <target name="testlibrefs" depends="init"> | |||
| <mkwar webxml="${web.xml}"> | |||
| <fileset id="test" dir="." includes="web.xml"/> | |||
| <lib refid="test"/> | |||
| </mkwar> | |||
| <expandwar/> | |||
| <au:assertFileExists file="${webxml.generated}" /> | |||
| </target> | |||
| <!-- | |||
| This checks that as of Java EE 5, the web.xml attr is optional. | |||
| Here there is a web.xml, in the webinf fileset, rather than a fileset | |||
| --> | |||
| <target name="testWebXmlInWebinf" depends="init"> | |||
| <mkwar> | |||
| <webinf dir="." includes="web.xml"/> | |||
| </mkwar> | |||
| <expandwar/> | |||
| <au:assertFileExists file="${webxml.generated}" /> | |||
| </target> | |||
| <target name="testWebXmlMissingFromUpdate" depends="init"> | |||
| <mkwar webxml="${web.xml}" /> | |||
| <!-- there is no web.xml file, but that is ok, as | |||
| we are updating --> | |||
| <mkwar update="true"> | |||
| <classes dir="." includes="web.xml"/> | |||
| </mkwar> | |||
| <expandwar/> | |||
| <au:assertFileExists file="${webxml.generated}" /> | |||
| </target> | |||
| <target name="testWebXmlInImplicitUpdate" depends="init"> | |||
| <mkwar webxml="${web.xml}" /> | |||
| <!-- when we are implicitly updating, the web.xml file does not get | |||
| pulled in, but the command still succeeds.--> | |||
| <mkwar webxml="${web.xml}" > | |||
| <classes dir="." includes="web.xml"/> | |||
| </mkwar> | |||
| <expandwar/> | |||
| <au:assertFileExists file="${webxml.generated}" /> | |||
| </target> | |||
| <target name="NotestWebXmlFilesetInImplicitUpdate" depends="init"> | |||
| <mkwar webxml="${web.xml}" /> | |||
| <!-- when we are implicitly updating, the web.xml file does not get | |||
| pulled in, but the command still succeeds.--> | |||
| <mkwar > | |||
| <webinf dir="." includes="web.xml"/> | |||
| </mkwar> | |||
| <expandwar/> | |||
| <au:assertFileExists file="${webxml.generated}" /> | |||
| </target> | |||
| <target name="testDuplicateWebXml" depends="init"> | |||
| <mkwar webxml="${web.xml}" > | |||
| <webinf dir="." includes="web.xml"/> | |||
| <webinf file="${web.xml}"/> | |||
| <zipfileset file="${web.xml}" prefix="WEB-INF"/> | |||
| </mkwar> | |||
| <expandwar/> | |||
| <au:assertFileExists file="${webxml.generated}" /> | |||
| </target> | |||
| <target name="testDifferentDuplicateWebXml" depends="init"> | |||
| <copy file="${web.xml}" todir="${working.dir}" /> | |||
| <mkwar webxml="${web.xml}" > | |||
| <webinf dir="${working.dir}" includes="web.xml"/> | |||
| <webinf file="${web.xml}"/> | |||
| <zipfileset file="${web.xml}" prefix="WEB-INF"/> | |||
| </mkwar> | |||
| <expandwar/> | |||
| <au:assertFileExists file="${webxml.generated}" /> | |||
| <au:assertLogContains text="The duplicate entry is"/> | |||
| </target> | |||
| <!-- | |||
| this target does not have a web.xml file. | |||
| Instead it pulls in | |||
| --> | |||
| <target name="testWebXmlOptional" depends="init"> | |||
| <mkwar needxmlfile="false"> | |||
| <classes dir="." includes="web.xml"/> | |||
| </mkwar> | |||
| <expandwar/> | |||
| <au:assertFileExists file="${working.dir}/WEB-INF/classes/web.xml" /> | |||
| <au:assertFalse> | |||
| <available file="${webxml.generated}" /> | |||
| </au:assertFalse> | |||
| </target> | |||
| <target name="testWebXmlOptionalFailure" depends="init"> | |||
| <au:expectfailure> | |||
| <mkwar > | |||
| <classes dir="." includes="web.xml"/> | |||
| </mkwar> | |||
| </au:expectfailure> | |||
| </target> | |||
| <target name="testWebXmlOptionalFailure2" depends="init"> | |||
| <au:expectfailure> | |||
| <mkwar needxmlfile="true"> | |||
| <classes dir="." includes="web.xml"/> | |||
| </mkwar> | |||
| </au:expectfailure> | |||
| </target> | |||
| <target name="testClassesElement" depends="init"> | |||
| <mkwar needxmlfile="false"> | |||
| <classes dir="." includes="web.xml"/> | |||
| </mkwar> | |||
| <expandwar/> | |||
| <au:assertFileExists file="${working.dir}/WEB-INF/classes/web.xml" /> | |||
| </target> | |||
| <target name="testLibElement" depends="init"> | |||
| <mkwar needxmlfile="false"> | |||
| <lib dir="." includes="web.xml"/> | |||
| </mkwar> | |||
| <expandwar/> | |||
| <au:assertFileExists file="${working.dir}/WEB-INF/lib/web.xml" /> | |||
| </target> | |||
| </project> | |||
| <?xml version="1.0"?> | |||
| <project name="war-test" basedir="." default="all" | |||
| xmlns:au="antlib:org.apache.ant.antunit"> | |||
| <property name="working.dir" value="working"/> | |||
| <target name="all"> | |||
| <au:antunit> | |||
| <fileset file="${ant.file}"/> | |||
| <au:plainlistener/> | |||
| </au:antunit> | |||
| </target> | |||
| <target name="init"> | |||
| <delete dir="${working.dir}"/> | |||
| <mkdir dir="${working.dir}"/> | |||
| <property name="warfile" location="${working.dir}/test.war"/> | |||
| <property name="web.xml" location="web.xml"/> | |||
| <property name="webxml.generated" location="${working.dir}/WEB-INF/web.xml"/> | |||
| <!--failing on duplicates is half our testing--> | |||
| <presetdef name="mkwar"> | |||
| <war destfile="${warfile}" duplicate="fail"/> | |||
| </presetdef> | |||
| <presetdef name="expandwar"> | |||
| <unzip src="${working.dir}/test.war" dest="${working.dir}"/> | |||
| </presetdef> | |||
| </target> | |||
| <target name="tearDown"> | |||
| <delete dir="${working.dir}"/> | |||
| </target> | |||
| <!--test that you can patch a fileset reference into a lib element--> | |||
| <target name="testlibrefs" depends="init"> | |||
| <mkwar webxml="${web.xml}"> | |||
| <fileset id="test" dir="." includes="web.xml"/> | |||
| <lib refid="test"/> | |||
| </mkwar> | |||
| <expandwar/> | |||
| <au:assertFileExists file="${webxml.generated}" /> | |||
| </target> | |||
| <!-- | |||
| This checks that as of Java EE 5, the web.xml attr is optional. | |||
| Here there is a web.xml, in the webinf fileset, rather than a fileset | |||
| --> | |||
| <target name="testWebXmlInWebinf" depends="init"> | |||
| <mkwar> | |||
| <webinf dir="." includes="web.xml"/> | |||
| </mkwar> | |||
| <expandwar/> | |||
| <au:assertFileExists file="${webxml.generated}" /> | |||
| </target> | |||
| <target name="testWebXmlMissingFromUpdate" depends="init"> | |||
| <mkwar webxml="${web.xml}" /> | |||
| <!-- there is no web.xml file, but that is ok, as | |||
| we are updating --> | |||
| <mkwar update="true"> | |||
| <classes dir="." includes="web.xml"/> | |||
| </mkwar> | |||
| <expandwar/> | |||
| <au:assertFileExists file="${webxml.generated}" /> | |||
| </target> | |||
| <target name="testWebXmlInImplicitUpdate" depends="init"> | |||
| <mkwar webxml="${web.xml}" /> | |||
| <!-- when we are implicitly updating, the web.xml file does not get | |||
| pulled in, but the command still succeeds.--> | |||
| <mkwar webxml="${web.xml}" > | |||
| <classes dir="." includes="web.xml"/> | |||
| </mkwar> | |||
| <expandwar/> | |||
| <au:assertFileExists file="${webxml.generated}" /> | |||
| </target> | |||
| <target name="NotestWebXmlFilesetInImplicitUpdate" depends="init"> | |||
| <mkwar webxml="${web.xml}" /> | |||
| <!-- when we are implicitly updating, the web.xml file does not get | |||
| pulled in, but the command still succeeds.--> | |||
| <mkwar > | |||
| <webinf dir="." includes="web.xml"/> | |||
| </mkwar> | |||
| <expandwar/> | |||
| <au:assertFileExists file="${webxml.generated}" /> | |||
| </target> | |||
| <target name="testDuplicateWebXml" depends="init"> | |||
| <mkwar webxml="${web.xml}" > | |||
| <webinf dir="." includes="web.xml"/> | |||
| <webinf file="${web.xml}"/> | |||
| <zipfileset file="${web.xml}" prefix="WEB-INF"/> | |||
| </mkwar> | |||
| <expandwar/> | |||
| <au:assertFileExists file="${webxml.generated}" /> | |||
| </target> | |||
| <target name="testDifferentDuplicateWebXml" depends="init"> | |||
| <copy file="${web.xml}" todir="${working.dir}" /> | |||
| <mkwar webxml="${web.xml}" > | |||
| <webinf dir="${working.dir}" includes="web.xml"/> | |||
| <webinf file="${web.xml}"/> | |||
| <zipfileset file="${web.xml}" prefix="WEB-INF"/> | |||
| </mkwar> | |||
| <expandwar/> | |||
| <au:assertFileExists file="${webxml.generated}" /> | |||
| <au:assertLogContains text="The duplicate entry is"/> | |||
| </target> | |||
| <!-- | |||
| this target does not have a web.xml file. | |||
| Instead it pulls in | |||
| --> | |||
| <target name="testWebXmlOptional" depends="init"> | |||
| <mkwar needxmlfile="false"> | |||
| <classes dir="." includes="web.xml"/> | |||
| </mkwar> | |||
| <expandwar/> | |||
| <au:assertFileExists file="${working.dir}/WEB-INF/classes/web.xml" /> | |||
| <au:assertFalse> | |||
| <available file="${webxml.generated}" /> | |||
| </au:assertFalse> | |||
| </target> | |||
| <target name="testWebXmlOptionalFailure" depends="init"> | |||
| <au:expectfailure> | |||
| <mkwar > | |||
| <classes dir="." includes="web.xml"/> | |||
| </mkwar> | |||
| </au:expectfailure> | |||
| </target> | |||
| <target name="testWebXmlOptionalFailure2" depends="init"> | |||
| <au:expectfailure> | |||
| <mkwar needxmlfile="true"> | |||
| <classes dir="." includes="web.xml"/> | |||
| </mkwar> | |||
| </au:expectfailure> | |||
| </target> | |||
| <target name="testClassesElement" depends="init"> | |||
| <mkwar needxmlfile="false"> | |||
| <classes dir="." includes="web.xml"/> | |||
| </mkwar> | |||
| <expandwar/> | |||
| <au:assertFileExists file="${working.dir}/WEB-INF/classes/web.xml" /> | |||
| </target> | |||
| <target name="testLibElement" depends="init"> | |||
| <mkwar needxmlfile="false"> | |||
| <lib dir="." includes="web.xml"/> | |||
| </mkwar> | |||
| <expandwar/> | |||
| <au:assertFileExists file="${working.dir}/WEB-INF/lib/web.xml" /> | |||
| </target> | |||
| </project> | |||
| @@ -1,5 +1,5 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | |||
| <web-app xmlns="http://java.sun.com/xml/ns/javaee" | |||
| version="2.5" metadata-complete="true"> | |||
| </web-app> | |||
| <?xml version="1.0" encoding="UTF-8"?> | |||
| <web-app xmlns="http://java.sun.com/xml/ns/javaee" | |||
| version="2.5" metadata-complete="true"> | |||
| </web-app> | |||
| @@ -1,32 +1,32 @@ | |||
| <project xmlns:au="antlib:org.apache.ant.antunit" default="all"> | |||
| <target name="test-fileset-with-if"> | |||
| <fileset id="this.xml" dir="."> | |||
| <include if="trigger.include" name="fileset-test.xml"/> | |||
| </fileset> | |||
| <pathconvert refid="this.xml" property="this.xml.prop" pathsep="${line.separator}" setonempty="false"/> | |||
| <au:assertTrue message="fileset this.xml should not contain anything but contains ${this.xml.prop}"> | |||
| <not> | |||
| <isset property="this.xml.prop"/> | |||
| </not> | |||
| </au:assertTrue> | |||
| </target> | |||
| <target name="test-fileset-with-if-property-set"> | |||
| <property name="trigger.include" value="true"/> | |||
| <fileset id="this.xml" dir="."> | |||
| <include if="trigger.include" name="fileset-test.xml"/> | |||
| </fileset> | |||
| <pathconvert refid="this.xml" property="this.xml.prop" pathsep="${line.separator}" setonempty="false"/> | |||
| <au:assertPropertySet name="this.xml.prop" message="fileset should contain one file"/> | |||
| <echo>${this.xml.prop}</echo> | |||
| <au:assertLogContains text="fileset-test.xml"/> | |||
| </target> | |||
| <target name="all"> | |||
| <au:antunit> | |||
| <fileset dir="${basedir}" includes="fileset-test.xml"/> | |||
| <au:plainlistener/> | |||
| </au:antunit> | |||
| </target> | |||
| </project> | |||
| <project xmlns:au="antlib:org.apache.ant.antunit" default="all"> | |||
| <target name="test-fileset-with-if"> | |||
| <fileset id="this.xml" dir="."> | |||
| <include if="trigger.include" name="fileset-test.xml"/> | |||
| </fileset> | |||
| <pathconvert refid="this.xml" property="this.xml.prop" pathsep="${line.separator}" setonempty="false"/> | |||
| <au:assertTrue message="fileset this.xml should not contain anything but contains ${this.xml.prop}"> | |||
| <not> | |||
| <isset property="this.xml.prop"/> | |||
| </not> | |||
| </au:assertTrue> | |||
| </target> | |||
| <target name="test-fileset-with-if-property-set"> | |||
| <property name="trigger.include" value="true"/> | |||
| <fileset id="this.xml" dir="."> | |||
| <include if="trigger.include" name="fileset-test.xml"/> | |||
| </fileset> | |||
| <pathconvert refid="this.xml" property="this.xml.prop" pathsep="${line.separator}" setonempty="false"/> | |||
| <au:assertPropertySet name="this.xml.prop" message="fileset should contain one file"/> | |||
| <echo>${this.xml.prop}</echo> | |||
| <au:assertLogContains text="fileset-test.xml"/> | |||
| </target> | |||
| <target name="all"> | |||
| <au:antunit> | |||
| <fileset dir="${basedir}" includes="fileset-test.xml"/> | |||
| <au:plainlistener/> | |||
| </au:antunit> | |||
| </target> | |||
| </project> | |||
| @@ -1,161 +1,161 @@ | |||
| /* | |||
| * 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.taskdefs; | |||
| import org.apache.tools.ant.taskdefs.condition.Os; | |||
| import org.apache.tools.ant.util.JavaEnvUtils; | |||
| import org.apache.tools.ant.BuildFileTest; | |||
| /** | |||
| * Tests <bm:manifestclasspath>. | |||
| */ | |||
| public class ManifestClassPathTest | |||
| extends BuildFileTest { | |||
| public void setUp() { | |||
| configureProject("src/etc/testcases/taskdefs/manifestclasspath.xml"); | |||
| } | |||
| public void testBadDirectory() { | |||
| expectBuildExceptionContaining("test-bad-directory", "bad-jar-dir", | |||
| "Jar's directory not found:"); | |||
| assertPropertyUnset("jar.classpath"); | |||
| } | |||
| public void testBadNoProperty() { | |||
| expectBuildExceptionContaining("test-bad-no-property", "no-property", | |||
| "Missing 'property' attribute!"); | |||
| assertPropertyUnset("jar.classpath"); | |||
| } | |||
| public void testBadPropertyExists() { | |||
| expectBuildExceptionContaining("test-bad-property-exists", | |||
| "property-exits", "Property 'jar.classpath' already set!"); | |||
| assertPropertyEquals("jar.classpath", "exists"); | |||
| } | |||
| public void testBadNoJarfile() { | |||
| expectBuildExceptionContaining("test-bad-no-jarfile", "no-jarfile", | |||
| "Missing 'jarfile' attribute!"); | |||
| assertPropertyUnset("jar.classpath"); | |||
| } | |||
| public void testBadNoClassPath() { | |||
| expectBuildExceptionContaining("test-bad-no-classpath", "no-classpath", | |||
| "Missing nested <classpath>!"); | |||
| assertPropertyUnset("jar.classpath"); | |||
| } | |||
| public void testParentLevel1() { | |||
| executeTarget("test-parent-level1"); | |||
| assertPropertyEquals("jar.classpath", "dsp-core/ " + | |||
| "dsp-pres/ " + | |||
| "dsp-void/ " + | |||
| "../generated/dsp-core/ " + | |||
| "../generated/dsp-pres/ " + | |||
| "../generated/dsp-void/ " + | |||
| "../resources/dsp-core/ " + | |||
| "../resources/dsp-pres/ " + | |||
| "../resources/dsp-void/"); | |||
| } | |||
| public void testParentLevel2() { | |||
| executeTarget("test-parent-level2"); | |||
| assertPropertyEquals("jar.classpath", "../dsp-core/ " + | |||
| "../dsp-pres/ " + | |||
| "../dsp-void/ " + | |||
| "../../generated/dsp-core/ " + | |||
| "../../generated/dsp-pres/ " + | |||
| "../../generated/dsp-void/ " + | |||
| "../../resources/dsp-core/ " + | |||
| "../../resources/dsp-pres/ " + | |||
| "../../resources/dsp-void/"); | |||
| } | |||
| public void testParentLevel2TooDeep() { | |||
| expectBuildExceptionContaining("test-parent-level2-too-deep", "nopath", | |||
| "No suitable relative path from "); | |||
| assertPropertyUnset("jar.classpath"); | |||
| } | |||
| public void testPseudoTahoeRefid() { | |||
| executeTarget("test-pseudo-tahoe-refid"); | |||
| assertPropertyEquals("jar.classpath", "classes/dsp-core/ " + | |||
| "classes/dsp-pres/ " + | |||
| "classes/dsp-void/ " + | |||
| "generated/dsp-core/ " + | |||
| "resources/dsp-core/ " + | |||
| "resources/dsp-pres/"); | |||
| } | |||
| public void testPseudoTahoeNested() { | |||
| executeTarget("test-pseudo-tahoe-nested"); | |||
| assertPropertyEquals("jar.classpath", "classes/dsp-core/ " + | |||
| "classes/dsp-pres/ " + | |||
| "classes/dsp-void/ " + | |||
| "generated/dsp-core/ " + | |||
| "resources/dsp-core/ " + | |||
| "resources/dsp-pres/"); | |||
| } | |||
| public void testParentLevel2WithJars() { | |||
| executeTarget("test-parent-level2-with-jars"); | |||
| assertPropertyEquals("jar.classpath", "../../lib/acme-core.jar " + | |||
| "../../lib/acme-pres.jar " + | |||
| "../dsp-core/ " + | |||
| "../dsp-pres/ " + | |||
| "../dsp-void/ " + | |||
| "../../generated/dsp-core/ " + | |||
| "../../generated/dsp-pres/ " + | |||
| "../../generated/dsp-void/ " + | |||
| "../../resources/dsp-core/ " + | |||
| "../../resources/dsp-pres/ " + | |||
| "../../resources/dsp-void/"); | |||
| } | |||
| public void testInternationalGerman() { | |||
| if (!JavaEnvUtils.isAtLeastJavaVersion(JavaEnvUtils.JAVA_1_4)) | |||
| { | |||
| System.out.println("Test with international characters skipped under pre 1.4 jvm."); | |||
| return; | |||
| } | |||
| executeTarget("international-german"); | |||
| expectLogContaining("run-two-jars", "beta alpha"); | |||
| } | |||
| public void testInternationalHebrew() { | |||
| if (!JavaEnvUtils.isAtLeastJavaVersion(JavaEnvUtils.JAVA_1_4)) { | |||
| System.out.println("Test with international characters skipped under pre 1.4 jvm."); | |||
| return; | |||
| } | |||
| if (!Os.isFamily("windows")) { | |||
| executeTarget("international-hebrew"); | |||
| expectLogContaining("run-two-jars", "beta alpha"); | |||
| } else { | |||
| System.out.println("Test with hebrew path not attempted under Windows"); | |||
| } | |||
| } | |||
| } // END class ManifestClassPathTest | |||
| /* | |||
| * 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.taskdefs; | |||
| import org.apache.tools.ant.taskdefs.condition.Os; | |||
| import org.apache.tools.ant.util.JavaEnvUtils; | |||
| import org.apache.tools.ant.BuildFileTest; | |||
| /** | |||
| * Tests <bm:manifestclasspath>. | |||
| */ | |||
| public class ManifestClassPathTest | |||
| extends BuildFileTest { | |||
| public void setUp() { | |||
| configureProject("src/etc/testcases/taskdefs/manifestclasspath.xml"); | |||
| } | |||
| public void testBadDirectory() { | |||
| expectBuildExceptionContaining("test-bad-directory", "bad-jar-dir", | |||
| "Jar's directory not found:"); | |||
| assertPropertyUnset("jar.classpath"); | |||
| } | |||
| public void testBadNoProperty() { | |||
| expectBuildExceptionContaining("test-bad-no-property", "no-property", | |||
| "Missing 'property' attribute!"); | |||
| assertPropertyUnset("jar.classpath"); | |||
| } | |||
| public void testBadPropertyExists() { | |||
| expectBuildExceptionContaining("test-bad-property-exists", | |||
| "property-exits", "Property 'jar.classpath' already set!"); | |||
| assertPropertyEquals("jar.classpath", "exists"); | |||
| } | |||
| public void testBadNoJarfile() { | |||
| expectBuildExceptionContaining("test-bad-no-jarfile", "no-jarfile", | |||
| "Missing 'jarfile' attribute!"); | |||
| assertPropertyUnset("jar.classpath"); | |||
| } | |||
| public void testBadNoClassPath() { | |||
| expectBuildExceptionContaining("test-bad-no-classpath", "no-classpath", | |||
| "Missing nested <classpath>!"); | |||
| assertPropertyUnset("jar.classpath"); | |||
| } | |||
| public void testParentLevel1() { | |||
| executeTarget("test-parent-level1"); | |||
| assertPropertyEquals("jar.classpath", "dsp-core/ " + | |||
| "dsp-pres/ " + | |||
| "dsp-void/ " + | |||
| "../generated/dsp-core/ " + | |||
| "../generated/dsp-pres/ " + | |||
| "../generated/dsp-void/ " + | |||
| "../resources/dsp-core/ " + | |||
| "../resources/dsp-pres/ " + | |||
| "../resources/dsp-void/"); | |||
| } | |||
| public void testParentLevel2() { | |||
| executeTarget("test-parent-level2"); | |||
| assertPropertyEquals("jar.classpath", "../dsp-core/ " + | |||
| "../dsp-pres/ " + | |||
| "../dsp-void/ " + | |||
| "../../generated/dsp-core/ " + | |||
| "../../generated/dsp-pres/ " + | |||
| "../../generated/dsp-void/ " + | |||
| "../../resources/dsp-core/ " + | |||
| "../../resources/dsp-pres/ " + | |||
| "../../resources/dsp-void/"); | |||
| } | |||
| public void testParentLevel2TooDeep() { | |||
| expectBuildExceptionContaining("test-parent-level2-too-deep", "nopath", | |||
| "No suitable relative path from "); | |||
| assertPropertyUnset("jar.classpath"); | |||
| } | |||
| public void testPseudoTahoeRefid() { | |||
| executeTarget("test-pseudo-tahoe-refid"); | |||
| assertPropertyEquals("jar.classpath", "classes/dsp-core/ " + | |||
| "classes/dsp-pres/ " + | |||
| "classes/dsp-void/ " + | |||
| "generated/dsp-core/ " + | |||
| "resources/dsp-core/ " + | |||
| "resources/dsp-pres/"); | |||
| } | |||
| public void testPseudoTahoeNested() { | |||
| executeTarget("test-pseudo-tahoe-nested"); | |||
| assertPropertyEquals("jar.classpath", "classes/dsp-core/ " + | |||
| "classes/dsp-pres/ " + | |||
| "classes/dsp-void/ " + | |||
| "generated/dsp-core/ " + | |||
| "resources/dsp-core/ " + | |||
| "resources/dsp-pres/"); | |||
| } | |||
| public void testParentLevel2WithJars() { | |||
| executeTarget("test-parent-level2-with-jars"); | |||
| assertPropertyEquals("jar.classpath", "../../lib/acme-core.jar " + | |||
| "../../lib/acme-pres.jar " + | |||
| "../dsp-core/ " + | |||
| "../dsp-pres/ " + | |||
| "../dsp-void/ " + | |||
| "../../generated/dsp-core/ " + | |||
| "../../generated/dsp-pres/ " + | |||
| "../../generated/dsp-void/ " + | |||
| "../../resources/dsp-core/ " + | |||
| "../../resources/dsp-pres/ " + | |||
| "../../resources/dsp-void/"); | |||
| } | |||
| public void testInternationalGerman() { | |||
| if (!JavaEnvUtils.isAtLeastJavaVersion(JavaEnvUtils.JAVA_1_4)) | |||
| { | |||
| System.out.println("Test with international characters skipped under pre 1.4 jvm."); | |||
| return; | |||
| } | |||
| executeTarget("international-german"); | |||
| expectLogContaining("run-two-jars", "beta alpha"); | |||
| } | |||
| public void testInternationalHebrew() { | |||
| if (!JavaEnvUtils.isAtLeastJavaVersion(JavaEnvUtils.JAVA_1_4)) { | |||
| System.out.println("Test with international characters skipped under pre 1.4 jvm."); | |||
| return; | |||
| } | |||
| if (!Os.isFamily("windows")) { | |||
| executeTarget("international-hebrew"); | |||
| expectLogContaining("run-two-jars", "beta alpha"); | |||
| } else { | |||
| System.out.println("Test with hebrew path not attempted under Windows"); | |||
| } | |||
| } | |||
| } // END class ManifestClassPathTest | |||
| @@ -211,4 +211,4 @@ public class StyleTest extends BuildFileTest { | |||
| content.indexOf(contains) > -1); | |||
| } | |||
| } | |||
| } | |||
| @@ -141,4 +141,4 @@ public class SubAntTest extends BuildFileTest { | |||
| } | |||
| } | |||
| } | |||
| @@ -133,4 +133,4 @@ public class SyncTest extends BuildFileTest { | |||
| assertTrue("Didn't expect file " + f, | |||
| !getProject().resolveFile(f).exists()); | |||
| } | |||
| } | |||
| } | |||
| @@ -1,43 +1,43 @@ | |||
| /* | |||
| * 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.taskdefs.condition; | |||
| import org.apache.tools.ant.BuildFileTest; | |||
| /** | |||
| * Testcases for the <antversion> condition. | |||
| * | |||
| */ | |||
| public class AntVersionTest extends BuildFileTest { | |||
| public AntVersionTest(String name) { | |||
| super(name); | |||
| } | |||
| public void setUp() throws Exception { | |||
| configureProject("src/etc/testcases/taskdefs/conditions/antversion.xml"); | |||
| } | |||
| public void testAtLeast() { | |||
| executeTarget("testatleast"); | |||
| } | |||
| public void testExactly() { | |||
| executeTarget("testexactly"); | |||
| } | |||
| } | |||
| /* | |||
| * 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.taskdefs.condition; | |||
| import org.apache.tools.ant.BuildFileTest; | |||
| /** | |||
| * Testcases for the <antversion> condition. | |||
| * | |||
| */ | |||
| public class AntVersionTest extends BuildFileTest { | |||
| public AntVersionTest(String name) { | |||
| super(name); | |||
| } | |||
| public void setUp() throws Exception { | |||
| configureProject("src/etc/testcases/taskdefs/conditions/antversion.xml"); | |||
| } | |||
| public void testAtLeast() { | |||
| executeTarget("testatleast"); | |||
| } | |||
| public void testExactly() { | |||
| executeTarget("testexactly"); | |||
| } | |||
| } | |||
| @@ -42,4 +42,4 @@ public class JavahTest extends BuildFileTest { | |||
| .exists()); | |||
| } | |||
| } | |||
| } | |||
| @@ -63,4 +63,4 @@ public class RpmTest extends TestCase { | |||
| } | |||
| } | |||
| } | |||
| } | |||
| @@ -1,49 +1,49 @@ | |||
| /* | |||
| * 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.taskdefs.optional.junit; | |||
| import junit.framework.TestCase; | |||
| import javax.xml.parsers.DocumentBuilder; | |||
| import org.apache.tools.ant.util.JAXPUtils; | |||
| import org.w3c.dom.Document; | |||
| import org.w3c.dom.NodeList; | |||
| import org.w3c.dom.Node; | |||
| import org.xml.sax.SAXException; | |||
| import java.io.InputStream; | |||
| import java.io.IOException; | |||
| public class DOMUtilTest extends TestCase { | |||
| public void testListChildNodes() throws SAXException, IOException { | |||
| DocumentBuilder db = JAXPUtils.getDocumentBuilder(); | |||
| InputStream is = this.getClass().getClassLoader().getResourceAsStream("taskdefs/optional/junit/matches.xml"); | |||
| Document doc = db.parse(is); | |||
| NodeList nl = DOMUtil.listChildNodes(doc.getFirstChild(), new FooNodeFilter(), true); | |||
| assertEquals(nl.getLength(), 3); | |||
| } | |||
| public class FooNodeFilter implements DOMUtil.NodeFilter { | |||
| public boolean accept(Node node) { | |||
| if (node.getNodeName().equals("foo")) { | |||
| return true; | |||
| } | |||
| return false; //To change body of implemented methods use File | Settings | File Templates. | |||
| } | |||
| } | |||
| } | |||
| /* | |||
| * 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.taskdefs.optional.junit; | |||
| import junit.framework.TestCase; | |||
| import javax.xml.parsers.DocumentBuilder; | |||
| import org.apache.tools.ant.util.JAXPUtils; | |||
| import org.w3c.dom.Document; | |||
| import org.w3c.dom.NodeList; | |||
| import org.w3c.dom.Node; | |||
| import org.xml.sax.SAXException; | |||
| import java.io.InputStream; | |||
| import java.io.IOException; | |||
| public class DOMUtilTest extends TestCase { | |||
| public void testListChildNodes() throws SAXException, IOException { | |||
| DocumentBuilder db = JAXPUtils.getDocumentBuilder(); | |||
| InputStream is = this.getClass().getClassLoader().getResourceAsStream("taskdefs/optional/junit/matches.xml"); | |||
| Document doc = db.parse(is); | |||
| NodeList nl = DOMUtil.listChildNodes(doc.getFirstChild(), new FooNodeFilter(), true); | |||
| assertEquals(nl.getLength(), 3); | |||
| } | |||
| public class FooNodeFilter implements DOMUtil.NodeFilter { | |||
| public boolean accept(Node node) { | |||
| if (node.getNodeName().equals("foo")) { | |||
| return true; | |||
| } | |||
| return false; //To change body of implemented methods use File | Settings | File Templates. | |||
| } | |||
| } | |||
| } | |||
| @@ -39,4 +39,4 @@ public class SuiteMethodTest { | |||
| assertTrue(true); | |||
| } | |||
| } | |||
| } | |||
| } | |||
| @@ -38,4 +38,4 @@ public class JavaResourceTest extends BuildFileTest { | |||
| assertTrue(getProject().getProperty("manifest") | |||
| .startsWith("Manifest-Version:")); | |||
| } | |||
| } | |||
| } | |||
| @@ -41,4 +41,4 @@ public class TarResourceTest extends BuildFileTest { | |||
| assertTrue(FU.contentEquals(project.resolveFile("../../asf-logo.gif"), | |||
| project.resolveFile("testout/asf-logo.gif"))); | |||
| } | |||
| } | |||
| } | |||
| @@ -34,4 +34,4 @@ public class MockAlgorithm implements Algorithm { | |||
| public String toString() { | |||
| return "MockAlgorithm@" + hashCode(); | |||
| } | |||
| } | |||
| } | |||
| @@ -65,4 +65,4 @@ public class MockCache implements Cache { | |||
| private void log(String msg) { | |||
| if (debug) System.out.println(this+msg); | |||
| } | |||
| }//class-MockCache | |||
| }//class-MockCache | |||
| @@ -29,4 +29,4 @@ public class MockComparator implements Comparator { | |||
| public String toString() { | |||
| return "MockComparator"; | |||
| } | |||
| }//class-MockCache | |||
| }//class-MockCache | |||
| @@ -1014,4 +1014,4 @@ public class ModifiedSelectorTest extends BaseSelectorTest { | |||
| }//class-MockProject | |||
| }//class-ModifiedSelectorTest | |||
| }//class-ModifiedSelectorTest | |||
| @@ -1,96 +1,96 @@ | |||
| /* | |||
| * 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.util; | |||
| import java.io.*; | |||
| import junit.framework.TestCase; | |||
| /** | |||
| * Test for ReaderInputStream | |||
| */ | |||
| public class ReaderInputStreamTest extends TestCase { | |||
| public ReaderInputStreamTest(String s) { | |||
| super(s); | |||
| } | |||
| public void testSimple() throws Exception { | |||
| compareBytes("abc", "utf-8"); | |||
| } | |||
| public void testSimple16() throws Exception { | |||
| compareBytes("a", "utf-16"); | |||
| } | |||
| public void testSimpleAbc16() throws Exception { | |||
| // THIS WILL FAIL. | |||
| //compareBytes("abc", "utf-16"); | |||
| byte[] bytes = new byte[40]; | |||
| int pos = 0; | |||
| ReaderInputStream r = new ReaderInputStream( | |||
| new StringReader("abc"), "utf-16"); | |||
| for (int i = 0; true; ++i) { | |||
| int res = r.read(); | |||
| if (res == -1) { | |||
| break; | |||
| } | |||
| bytes[pos++] = (byte) res; | |||
| } | |||
| bytes = "abc".getBytes("utf-16"); | |||
| // String n = new String(bytes, 0, pos, "utf-16"); | |||
| String n = new String(bytes, 0, bytes.length, "utf-16"); | |||
| System.out.println(n); | |||
| } | |||
| public void testReadZero() throws Exception { | |||
| ReaderInputStream r = new ReaderInputStream( | |||
| new StringReader("abc")); | |||
| byte[] bytes = new byte[30]; | |||
| // First read in zero bytes | |||
| r.read(bytes, 0, 0); | |||
| // Now read in the string | |||
| int readin = r.read(bytes, 0, 10); | |||
| // Make sure that the counts are the same | |||
| assertEquals("abc".getBytes().length, readin); | |||
| } | |||
| public void testPreample() throws Exception { | |||
| byte[] bytes = "".getBytes("utf-16"); | |||
| System.out.println("Preample len is " + bytes.length); | |||
| } | |||
| private void compareBytes(String s, String encoding) throws Exception { | |||
| byte[] expected = s.getBytes(encoding); | |||
| ReaderInputStream r = new ReaderInputStream( | |||
| new StringReader(s), encoding); | |||
| for (int i = 0; i < expected.length; ++i) { | |||
| int expect = expected[i] & 0xFF; | |||
| int read = r.read(); | |||
| if (expect != read) { | |||
| fail("Mismatch in ReaderInputStream at index " + i | |||
| + " expecting " + expect + " got " + read + " for string " | |||
| + s + " with encoding " + encoding); | |||
| } | |||
| } | |||
| if (r.read() != -1) { | |||
| fail("Mismatch in ReaderInputStream - EOF not seen for string " | |||
| + s + " with encoding " + encoding); | |||
| } | |||
| } | |||
| } | |||
| /* | |||
| * 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.util; | |||
| import java.io.*; | |||
| import junit.framework.TestCase; | |||
| /** | |||
| * Test for ReaderInputStream | |||
| */ | |||
| public class ReaderInputStreamTest extends TestCase { | |||
| public ReaderInputStreamTest(String s) { | |||
| super(s); | |||
| } | |||
| public void testSimple() throws Exception { | |||
| compareBytes("abc", "utf-8"); | |||
| } | |||
| public void testSimple16() throws Exception { | |||
| compareBytes("a", "utf-16"); | |||
| } | |||
| public void testSimpleAbc16() throws Exception { | |||
| // THIS WILL FAIL. | |||
| //compareBytes("abc", "utf-16"); | |||
| byte[] bytes = new byte[40]; | |||
| int pos = 0; | |||
| ReaderInputStream r = new ReaderInputStream( | |||
| new StringReader("abc"), "utf-16"); | |||
| for (int i = 0; true; ++i) { | |||
| int res = r.read(); | |||
| if (res == -1) { | |||
| break; | |||
| } | |||
| bytes[pos++] = (byte) res; | |||
| } | |||
| bytes = "abc".getBytes("utf-16"); | |||
| // String n = new String(bytes, 0, pos, "utf-16"); | |||
| String n = new String(bytes, 0, bytes.length, "utf-16"); | |||
| System.out.println(n); | |||
| } | |||
| public void testReadZero() throws Exception { | |||
| ReaderInputStream r = new ReaderInputStream( | |||
| new StringReader("abc")); | |||
| byte[] bytes = new byte[30]; | |||
| // First read in zero bytes | |||
| r.read(bytes, 0, 0); | |||
| // Now read in the string | |||
| int readin = r.read(bytes, 0, 10); | |||
| // Make sure that the counts are the same | |||
| assertEquals("abc".getBytes().length, readin); | |||
| } | |||
| public void testPreample() throws Exception { | |||
| byte[] bytes = "".getBytes("utf-16"); | |||
| System.out.println("Preample len is " + bytes.length); | |||
| } | |||
| private void compareBytes(String s, String encoding) throws Exception { | |||
| byte[] expected = s.getBytes(encoding); | |||
| ReaderInputStream r = new ReaderInputStream( | |||
| new StringReader(s), encoding); | |||
| for (int i = 0; i < expected.length; ++i) { | |||
| int expect = expected[i] & 0xFF; | |||
| int read = r.read(); | |||
| if (expect != read) { | |||
| fail("Mismatch in ReaderInputStream at index " + i | |||
| + " expecting " + expect + " got " + read + " for string " | |||
| + s + " with encoding " + encoding); | |||
| } | |||
| } | |||
| if (r.read() != -1) { | |||
| fail("Mismatch in ReaderInputStream - EOF not seen for string " | |||
| + s + " with encoding " + encoding); | |||
| } | |||
| } | |||
| } | |||
| @@ -1,10 +1,10 @@ | |||
| <?xml version="1.0"?> | |||
| <antlib> | |||
| <macrodef name="simple"> | |||
| <element name="some-tasks" optional="yes" implicit="yes"/> | |||
| <sequential> | |||
| <some-tasks/> | |||
| </sequential> | |||
| </macrodef> | |||
| </antlib> | |||
| <?xml version="1.0"?> | |||
| <antlib> | |||
| <macrodef name="simple"> | |||
| <element name="some-tasks" optional="yes" implicit="yes"/> | |||
| <sequential> | |||
| <some-tasks/> | |||
| </sequential> | |||
| </macrodef> | |||
| </antlib> | |||
| @@ -1,10 +1,10 @@ | |||
| <?xml version="1.0"?> | |||
| <antlib> | |||
| <macrodef name="simple"> | |||
| <element name="some-tasks" optional="yes" implicit="yes"/> | |||
| <sequential> | |||
| <some-tasks/> | |||
| </sequential> | |||
| </macrodef> | |||
| </antlib> | |||
| <?xml version="1.0"?> | |||
| <antlib> | |||
| <macrodef name="simple"> | |||
| <element name="some-tasks" optional="yes" implicit="yes"/> | |||
| <sequential> | |||
| <some-tasks/> | |||
| </sequential> | |||
| </macrodef> | |||
| </antlib> | |||