Submitted by: Erik Meade <emeade@geekfarm.org> git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@268151 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -4,7 +4,7 @@ Changes from Ant 1.2 to the current sources | |||
| Other changes: | |||
| -------------- | |||
| * New tasks: propertyfile, depend | |||
| * New tasks: propertyfile, depend, antlr | |||
| * Added output attribute to <java>. | |||
| @@ -70,6 +70,7 @@ | |||
| <available property="junit.present" classname="junit.framework.TestCase" /> | |||
| <available property="ftp.present" classname="com.oroinc.net.ftp.FTPClient" /> | |||
| <available property="starteam.present" classname="com.starbase.util.Platform" /> | |||
| <available property="antlr.present" classname="antlr.Tool" /> | |||
| </target> | |||
| <!-- =================================================================== --> | |||
| @@ -106,6 +107,7 @@ | |||
| <exclude name="**/junit/*" unless="junit.present" /> | |||
| <exclude name="**/FTP*.java" unless="ftp.present" /> | |||
| <exclude name="**/AntStarTeam*.java" unless="starteam.present" /> | |||
| <exclude name="**/ANTLR.java" unless="antlr.present" /> | |||
| </javac> | |||
| <copy todir="${build.classes}"> | |||
| @@ -324,6 +326,7 @@ | |||
| <pathelement location="${lib.dir}/${name}.jar" /> | |||
| <path refid="classpath" /> | |||
| </classpath> | |||
| <exclude name="org/apache/tools/ant/taskdefs/optional/ANTLRTest.java" unless="antlr.present" /> | |||
| </javac> | |||
| </target> | |||
| @@ -332,6 +335,7 @@ | |||
| <!-- =================================================================== --> | |||
| <target name="runtests" depends="compiletests" if="junit.present"> | |||
| <junit printsummary="no" haltonfailure="yes" fork="${junit.fork}"> | |||
| <jvmarg value="-classic"/> | |||
| <classpath> | |||
| <pathelement location="${lib.dir}/${name}.jar" /> | |||
| <pathelement location="${build.tests}" /> | |||
| @@ -350,6 +354,9 @@ | |||
| <!-- these depend on order --> | |||
| <exclude name="org/apache/tools/ant/taskdefs/GUnzipTest.java" /> | |||
| <exclude name="org/apache/tools/ant/taskdefs/GzipTest.java" /> | |||
| <!-- only run this test if ANTLR is installed --> | |||
| <exclude name="org/apache/tools/ant/taskdefs/optional/ANTLRTest.java" unless="antlr.present" /> | |||
| </fileset> | |||
| </batchtest> | |||
| @@ -358,12 +365,14 @@ | |||
| </junit> | |||
| <!-- clean up again --> | |||
| <delete dir="src/etc/testcases/taskdefs/optional/antlr/antlr.tmp" /> | |||
| <delete dir="src/etc/testcases/taskdefs/taskdefs.tmp" /> | |||
| <delete dir="src/etc/testcases/taskdefs.tmp" /> | |||
| </target> | |||
| <target name="run.single.test" if="testcase" depends="compiletests"> | |||
| <junit printsummary="no" haltonfailure="yes" fork="${junit.fork}"> | |||
| <jvmarg value="-classic"/> | |||
| <classpath> | |||
| <pathelement location="${lib.dir}/${name}.jar" /> | |||
| <pathelement location="${build.tests}" /> | |||
| @@ -0,0 +1,60 @@ | |||
| class CalcParser extends Parser; | |||
| options { | |||
| buildAST = true; // uses CommonAST by default | |||
| } | |||
| expr | |||
| : mexpr (PLUS^ mexpr)* SEMI! | |||
| ; | |||
| mexpr | |||
| : atom (STAR^ atom)* | |||
| ; | |||
| atom: INT | |||
| ; | |||
| class CalcLexer extends Lexer; | |||
| WS : (' ' | |||
| | '\t' | |||
| | '\n' | |||
| | '\r') | |||
| { _ttype = Token.SKIP; } | |||
| ; | |||
| LPAREN: '(' | |||
| ; | |||
| RPAREN: ')' | |||
| ; | |||
| STAR: '*' | |||
| ; | |||
| PLUS: '+' | |||
| ; | |||
| SEMI: ';' | |||
| ; | |||
| protected | |||
| DIGIT | |||
| : '0'..'9' | |||
| ; | |||
| INT : (DIGIT)+ | |||
| ; | |||
| class CalcTreeWalker extends TreeParser; | |||
| expr returns [float r] | |||
| { | |||
| float a,b; | |||
| r=0; | |||
| } | |||
| : #(PLUS a=expr b=expr) {r = a+b;} | |||
| | #(STAR a=expr b=expr) {r = a*b;} | |||
| | i:INT {r = (float)Integer.parseInt(i.getText());} | |||
| ; | |||
| @@ -0,0 +1,51 @@ | |||
| <?xml version="1.0"?> | |||
| <project name="antlr-test" basedir="."> | |||
| <property name="tmp.dir" value="antlr.tmp"/> | |||
| <target name="test1"> | |||
| <antlr/> | |||
| </target> | |||
| <target name="test2"> | |||
| <!-- delete the tmp directory, it may exists if a previous ANTLR test | |||
| failed. This in turn will cause this test to fail, as it tests | |||
| the build exception when the outputdirectory is invalid. --> | |||
| <deltree dir="${tmp.dir}"/> | |||
| <antlr target="antlr.g" outputdirectory="${tmp.dir}"/> | |||
| </target> | |||
| <target name="test3"> | |||
| <mkdir dir="${tmp.dir}"/> | |||
| <antlr target="antlr.g" outputdirectory="${tmp.dir}"/> | |||
| </target> | |||
| <target name="test4"> | |||
| <deltree dir="${tmp.dir}"/> | |||
| <mkdir dir="${tmp.dir}"/> | |||
| <antlr target="java.g" outputdirectory="${tmp.dir}"/> | |||
| <antlr target="java.tree.g" outputdirectory="${tmp.dir}"/> | |||
| </target> | |||
| <target name="test5"> | |||
| <antlr target="java.tree.g" outputdirectory="${tmp.dir}" fork="yes"/> | |||
| </target> | |||
| <target name="test6"> | |||
| <deltree dir="${tmp.dir}"/> | |||
| <!-- This tmp.dir needs to be deleted by the build file which executes this test. --> | |||
| <mkdir dir="${tmp.dir}"/> | |||
| <antlr target="java.g" outputdirectory="${tmp.dir}" /> | |||
| <antlr dir="${tmp.dir}" | |||
| target="java.tree.g" | |||
| outputdirectory="${tmp.dir}" | |||
| fork="yes"/> | |||
| </target> | |||
| <target name="test7"> | |||
| <antlr target="antlr.xml"/> | |||
| </target> | |||
| </project> | |||
| @@ -0,0 +1,314 @@ | |||
| /** Java 1.2 AST Recognizer Grammar | |||
| * | |||
| * Author: | |||
| * Terence Parr parrt@jguru.com | |||
| * | |||
| * Version tracking now done with following ID: | |||
| * | |||
| * $Id$ | |||
| * | |||
| * This grammar is in the PUBLIC DOMAIN | |||
| * | |||
| * BUGS | |||
| */ | |||
| class JavaTreeParser extends TreeParser; | |||
| options { | |||
| importVocab = Java; | |||
| } | |||
| compilationUnit | |||
| : (packageDefinition)? | |||
| (importDefinition)* | |||
| (typeDefinition)* | |||
| ; | |||
| packageDefinition | |||
| : #( PACKAGE_DEF identifier ) | |||
| ; | |||
| importDefinition | |||
| : #( IMPORT identifierStar ) | |||
| ; | |||
| typeDefinition | |||
| : #(CLASS_DEF modifiers IDENT extendsClause implementsClause objBlock ) | |||
| | #(INTERFACE_DEF modifiers IDENT extendsClause interfaceBlock ) | |||
| ; | |||
| typeSpec | |||
| : #(TYPE typeSpecArray) | |||
| ; | |||
| typeSpecArray | |||
| : #( ARRAY_DECLARATOR typeSpecArray ) | |||
| | type | |||
| ; | |||
| type: identifier | |||
| | builtInType | |||
| ; | |||
| builtInType | |||
| : "void" | |||
| | "boolean" | |||
| | "byte" | |||
| | "char" | |||
| | "short" | |||
| | "int" | |||
| | "float" | |||
| | "long" | |||
| | "double" | |||
| ; | |||
| modifiers | |||
| : #( MODIFIERS (modifier)* ) | |||
| ; | |||
| modifier | |||
| : "private" | |||
| | "public" | |||
| | "protected" | |||
| | "static" | |||
| | "transient" | |||
| | "final" | |||
| | "abstract" | |||
| | "native" | |||
| | "threadsafe" | |||
| | "synchronized" | |||
| | "const" | |||
| | "volatile" | |||
| ; | |||
| extendsClause | |||
| : #(EXTENDS_CLAUSE (identifier)* ) | |||
| ; | |||
| implementsClause | |||
| : #(IMPLEMENTS_CLAUSE (identifier)* ) | |||
| ; | |||
| interfaceBlock | |||
| : #( OBJBLOCK | |||
| ( methodDecl | |||
| | variableDef | |||
| )* | |||
| ) | |||
| ; | |||
| objBlock | |||
| : #( OBJBLOCK | |||
| ( ctorDef | |||
| | methodDef | |||
| | variableDef | |||
| | typeDefinition | |||
| | #(STATIC_INIT slist) | |||
| | #(INSTANCE_INIT slist) | |||
| )* | |||
| ) | |||
| ; | |||
| ctorDef | |||
| : #(CTOR_DEF modifiers methodHead slist) | |||
| ; | |||
| methodDecl | |||
| : #(METHOD_DEF modifiers typeSpec methodHead) | |||
| ; | |||
| methodDef | |||
| : #(METHOD_DEF modifiers typeSpec methodHead (slist)?) | |||
| ; | |||
| variableDef | |||
| : #(VARIABLE_DEF modifiers typeSpec variableDeclarator varInitializer) | |||
| ; | |||
| parameterDef | |||
| : #(PARAMETER_DEF modifiers typeSpec IDENT ) | |||
| ; | |||
| objectinitializer | |||
| : #(INSTANCE_INIT slist) | |||
| ; | |||
| variableDeclarator | |||
| : IDENT | |||
| | LBRACK variableDeclarator | |||
| ; | |||
| varInitializer | |||
| : #(ASSIGN initializer) | |||
| | | |||
| ; | |||
| initializer | |||
| : expression | |||
| | arrayInitializer | |||
| ; | |||
| arrayInitializer | |||
| : #(ARRAY_INIT (initializer)*) | |||
| ; | |||
| methodHead | |||
| : IDENT #( PARAMETERS (parameterDef)* ) (throwsClause)? | |||
| ; | |||
| throwsClause | |||
| : #( "throws" (identifier)* ) | |||
| ; | |||
| identifier | |||
| : IDENT | |||
| | #( DOT identifier IDENT ) | |||
| ; | |||
| identifierStar | |||
| : IDENT | |||
| | #( DOT identifier (STAR|IDENT) ) | |||
| ; | |||
| slist | |||
| : #( SLIST (stat)* ) | |||
| ; | |||
| stat: typeDefinition | |||
| | variableDef | |||
| | expression | |||
| | #(LABELED_STAT IDENT stat) | |||
| | #("if" expression stat (stat)? ) | |||
| | #( "for" | |||
| #(FOR_INIT (variableDef | elist)?) | |||
| #(FOR_CONDITION (expression)?) | |||
| #(FOR_ITERATOR (elist)?) | |||
| stat | |||
| ) | |||
| | #("while" expression stat) | |||
| | #("do" stat expression) | |||
| | #("break" (IDENT)? ) | |||
| | #("continue" (IDENT)? ) | |||
| | #("return" (expression)? ) | |||
| | #("switch" expression (caseGroup)*) | |||
| | #("throw" expression) | |||
| | #("synchronized" expression stat) | |||
| | tryBlock | |||
| | slist // nested SLIST | |||
| | EMPTY_STAT | |||
| ; | |||
| caseGroup | |||
| : #(CASE_GROUP (#("case" expression) | "default")+ slist) | |||
| ; | |||
| tryBlock | |||
| : #( "try" slist (handler)* (#("finally" slist))? ) | |||
| ; | |||
| handler | |||
| : #( "catch" parameterDef slist ) | |||
| ; | |||
| elist | |||
| : #( ELIST (expression)* ) | |||
| ; | |||
| expression | |||
| : #(EXPR expr) | |||
| ; | |||
| expr: #(QUESTION expr expr expr) // trinary operator | |||
| | #(ASSIGN expr expr) // binary operators... | |||
| | #(PLUS_ASSIGN expr expr) | |||
| | #(MINUS_ASSIGN expr expr) | |||
| | #(STAR_ASSIGN expr expr) | |||
| | #(DIV_ASSIGN expr expr) | |||
| | #(MOD_ASSIGN expr expr) | |||
| | #(SR_ASSIGN expr expr) | |||
| | #(BSR_ASSIGN expr expr) | |||
| | #(SL_ASSIGN expr expr) | |||
| | #(BAND_ASSIGN expr expr) | |||
| | #(BXOR_ASSIGN expr expr) | |||
| | #(BOR_ASSIGN expr expr) | |||
| | #(LOR expr expr) | |||
| | #(LAND expr expr) | |||
| | #(BOR expr expr) | |||
| | #(BXOR expr expr) | |||
| | #(BAND expr expr) | |||
| | #(NOT_EQUAL expr expr) | |||
| | #(EQUAL expr expr) | |||
| | #(LT expr expr) | |||
| | #(GT expr expr) | |||
| | #(LE expr expr) | |||
| | #(GE expr expr) | |||
| | #(SL expr expr) | |||
| | #(SR expr expr) | |||
| | #(BSR expr expr) | |||
| | #(PLUS expr expr) | |||
| | #(MINUS expr expr) | |||
| | #(DIV expr expr) | |||
| | #(MOD expr expr) | |||
| | #(STAR expr expr) | |||
| | #(INC expr) | |||
| | #(DEC expr) | |||
| | #(POST_INC expr) | |||
| | #(POST_DEC expr) | |||
| | #(BNOT expr) | |||
| | #(LNOT expr) | |||
| | #("instanceof" expr expr) | |||
| | #(UNARY_MINUS expr) | |||
| | #(UNARY_PLUS expr) | |||
| | primaryExpression | |||
| ; | |||
| primaryExpression | |||
| : IDENT | |||
| | #( DOT | |||
| ( expr | |||
| ( IDENT | |||
| | arrayIndex | |||
| | "this" | |||
| | "class" | |||
| | #( "new" IDENT elist ) | |||
| ) | |||
| | #(ARRAY_DECLARATOR type) | |||
| | builtInType ("class")? | |||
| ) | |||
| ) | |||
| | arrayIndex | |||
| | #(METHOD_CALL primaryExpression elist) | |||
| | #(TYPECAST typeSpec expr) | |||
| | newExpression | |||
| | constant | |||
| | "super" | |||
| | "true" | |||
| | "false" | |||
| | "this" | |||
| | "null" | |||
| | typeSpec // type name used with instanceof | |||
| ; | |||
| arrayIndex | |||
| : #(INDEX_OP primaryExpression expression) | |||
| ; | |||
| constant | |||
| : NUM_INT | |||
| | CHAR_LITERAL | |||
| | STRING_LITERAL | |||
| | NUM_FLOAT | |||
| ; | |||
| newExpression | |||
| : #( "new" type | |||
| ( newArrayDeclarator (arrayInitializer)? | |||
| | elist | |||
| ) | |||
| ) | |||
| ; | |||
| newArrayDeclarator | |||
| : #( ARRAY_DECLARATOR (newArrayDeclarator)? (expression)? ) | |||
| ; | |||
| @@ -66,6 +66,7 @@ native2ascii=org.apache.tools.ant.taskdefs.optional.Native2Ascii | |||
| perforce=org.apache.tools.ant.taskdefs.optional.perforce.P4sync | |||
| propertyfile=org.apache.tools.ant.taskdefs.optional.PropertyFile | |||
| depend=org.apache.tools.ant.taskdefs.optional.depend.Depend | |||
| antlr=org.apache.tools.ant.taskdefs.optional.ANTLR | |||
| # deprecated ant tasks (kept for back compatibility) | |||
| javadoc2=org.apache.tools.ant.taskdefs.Javadoc | |||
| @@ -0,0 +1,173 @@ | |||
| /* | |||
| * The Apache Software License, Version 1.1 | |||
| * | |||
| * Copyright (c) 2000 The Apache Software Foundation. All rights | |||
| * reserved. | |||
| * | |||
| * Redistribution and use in source and binary forms, with or without | |||
| * modification, are permitted provided that the following conditions | |||
| * are met: | |||
| * | |||
| * 1. Redistributions of source code must retain the above copyright | |||
| * notice, this list of conditions and the following disclaimer. | |||
| * | |||
| * 2. Redistributions in binary form must reproduce the above copyright | |||
| * notice, this list of conditions and the following disclaimer in | |||
| * the documentation and/or other materials provided with the | |||
| * distribution. | |||
| * | |||
| * 3. The end-user documentation included with the redistribution, if | |||
| * any, must include the following acknowlegement: | |||
| * "This product includes software developed by the | |||
| * Apache Software Foundation (http://www.apache.org/)." | |||
| * Alternately, this acknowlegement may appear in the software itself, | |||
| * if and wherever such third-party acknowlegements normally appear. | |||
| * | |||
| * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software | |||
| * Foundation" must not be used to endorse or promote products derived | |||
| * from this software without prior written permission. For written | |||
| * permission, please contact apache@apache.org. | |||
| * | |||
| * 5. Products derived from this software may not be called "Apache" | |||
| * nor may "Apache" appear in their names without prior written | |||
| * permission of the Apache Group. | |||
| * | |||
| * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||
| * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
| * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
| * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||
| * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
| * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||
| * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||
| * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||
| * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
| * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||
| * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||
| * SUCH DAMAGE. | |||
| * ==================================================================== | |||
| * | |||
| * This software consists of voluntary contributions made by many | |||
| * individuals on behalf of the Apache Software Foundation. For more | |||
| * information on the Apache Software Foundation, please see | |||
| * <http://www.apache.org/>. | |||
| */ | |||
| package org.apache.tools.ant.taskdefs.optional; | |||
| import java.io.*; | |||
| import org.apache.tools.ant.*; | |||
| import org.apache.tools.ant.taskdefs.*; | |||
| import org.apache.tools.ant.types.*; | |||
| /** | |||
| * @author Erik Meade, emeade@geekfarm.org | |||
| */ | |||
| public class ANTLR extends Task { | |||
| private CommandlineJava commandline = new CommandlineJava(); | |||
| private File target; | |||
| private File outputDirectory; | |||
| private boolean fork = false; | |||
| private File dir; | |||
| public ANTLR() { | |||
| commandline.setVm("java"); | |||
| commandline.setClassname("antlr.Tool"); | |||
| } | |||
| public void setTarget(File target) { | |||
| log("Setting target to: " + target.toString(), Project.MSG_VERBOSE); | |||
| this.target = target; | |||
| } | |||
| public void setOutputdirectory(File outputDirectory) { | |||
| log("Setting output directory to: " + outputDirectory.toString(), Project.MSG_VERBOSE); | |||
| this.outputDirectory = outputDirectory; | |||
| } | |||
| public void setFork(boolean s) { | |||
| this.fork = s; | |||
| } | |||
| /** | |||
| * The working directory of the process | |||
| */ | |||
| public void setDir(File d) { | |||
| this.dir = d; | |||
| } | |||
| public void execute() throws BuildException { | |||
| validateAttributes(); | |||
| //TODO: use ANTLR to parse the grammer file to do this. | |||
| if (target.lastModified() > getGeneratedFile().lastModified()) { | |||
| commandline.createArgument().setValue("-o"); | |||
| commandline.createArgument().setValue(outputDirectory.toString()); | |||
| commandline.createArgument().setValue(target.toString()); | |||
| if (fork) { | |||
| log("Forking " + commandline.toString(), Project.MSG_VERBOSE); | |||
| int err = run(commandline.getCommandline()); | |||
| if (err == 1) { | |||
| throw new BuildException("ANTLR returned: "+err, location); | |||
| } | |||
| } | |||
| else { | |||
| Execute.runCommand(this, commandline.getCommandline()); | |||
| } | |||
| } | |||
| } | |||
| private void validateAttributes() throws BuildException{ | |||
| if (target == null || !target.isFile()) { | |||
| throw new BuildException("Invalid target: " + target); | |||
| } | |||
| // if no output directory is specified, used the target's directory | |||
| if (outputDirectory == null) { | |||
| String fileName = target.toString(); | |||
| setOutputdirectory(new File(target.getParent())); | |||
| } | |||
| if (!outputDirectory.isDirectory()) { | |||
| throw new BuildException("Invalid output directory: " + outputDirectory); | |||
| } | |||
| if (fork && (dir == null || !dir.isDirectory())) { | |||
| throw new BuildException("Invalid working directory: " + dir); | |||
| } | |||
| } | |||
| private File getGeneratedFile() throws BuildException { | |||
| String generatedFileName = null; | |||
| try { | |||
| BufferedReader in = new BufferedReader(new FileReader(target)); | |||
| String line; | |||
| while ((line = in.readLine()) != null) { | |||
| int extendsIndex = line.indexOf(" extends "); | |||
| if (line.startsWith("class ") && extendsIndex > -1) { | |||
| generatedFileName = line.substring(6, extendsIndex).trim(); | |||
| break; | |||
| } | |||
| } | |||
| in.close(); | |||
| } catch (Exception e) { | |||
| throw new BuildException("Unable to determine generated class"); | |||
| } | |||
| if (generatedFileName == null) { | |||
| throw new BuildException("Unable to determine generated class"); | |||
| } | |||
| return new File(outputDirectory, generatedFileName + ".java"); | |||
| } | |||
| private int run(String[] command) throws BuildException { | |||
| Execute exe = new Execute(new LogStreamHandler(this, Project.MSG_INFO, | |||
| Project.MSG_WARN), null); | |||
| exe.setAntRun(project); | |||
| exe.setWorkingDirectory(dir); | |||
| exe.setCommandline(command); | |||
| try { | |||
| return exe.execute(); | |||
| } catch (IOException e) { | |||
| throw new BuildException(e, location); | |||
| } | |||
| } | |||
| } | |||
| @@ -0,0 +1,110 @@ | |||
| /* | |||
| * The Apache Software License, Version 1.1 | |||
| * | |||
| * Copyright (c) 2000 The Apache Software Foundation. All rights | |||
| * reserved. | |||
| * | |||
| * Redistribution and use in source and binary forms, with or without | |||
| * modification, are permitted provided that the following conditions | |||
| * are met: | |||
| * | |||
| * 1. Redistributions of source code must retain the above copyright | |||
| * notice, this list of conditions and the following disclaimer. | |||
| * | |||
| * 2. Redistributions in binary form must reproduce the above copyright | |||
| * notice, this list of conditions and the following disclaimer in | |||
| * the documentation and/or other materials provided with the | |||
| * distribution. | |||
| * | |||
| * 3. The end-user documentation included with the redistribution, if | |||
| * any, must include the following acknowlegement: | |||
| * "This product includes software developed by the | |||
| * Apache Software Foundation (http://www.apache.org/)." | |||
| * Alternately, this acknowlegement may appear in the software itself, | |||
| * if and wherever such third-party acknowlegements normally appear. | |||
| * | |||
| * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software | |||
| * Foundation" must not be used to endorse or promote products derived | |||
| * from this software without prior written permission. For written | |||
| * permission, please contact apache@apache.org. | |||
| * | |||
| * 5. Products derived from this software may not be called "Apache" | |||
| * nor may "Apache" appear in their names without prior written | |||
| * permission of the Apache Group. | |||
| * | |||
| * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||
| * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
| * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
| * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||
| * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
| * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||
| * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||
| * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||
| * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
| * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||
| * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||
| * SUCH DAMAGE. | |||
| * ==================================================================== | |||
| * | |||
| * This software consists of voluntary contributions made by many | |||
| * individuals on behalf of the Apache Software Foundation. For more | |||
| * information on the Apache Software Foundation, please see | |||
| * <http://www.apache.org/>. | |||
| */ | |||
| package org.apache.tools.ant.taskdefs.optional; | |||
| import java.io.*; | |||
| import org.apache.tools.ant.taskdefs.TaskdefsTest; | |||
| /** | |||
| * @author Erik Meade <emeade@geekfarm.org> | |||
| */ | |||
| public class ANTLRTest extends TaskdefsTest { | |||
| private final static String TASKDEFS_DIR = "src/etc/testcases/taskdefs/optional/antlr/"; | |||
| public ANTLRTest(String name) { | |||
| super(name); | |||
| } | |||
| public void setUp() { | |||
| configureProject(TASKDEFS_DIR + "antlr.xml"); | |||
| } | |||
| public void test1() { | |||
| expectBuildException("test1", "required argument, target, missing"); | |||
| } | |||
| public void test2() { | |||
| expectBuildException("test2", "Invalid output directory"); | |||
| } | |||
| public void test3() { | |||
| executeTarget("test3"); | |||
| File outputDirectory = new File(TASKDEFS_DIR + "antlr.tmp"); | |||
| String[] calcFiles = outputDirectory.list(new CalcFileFilter()); | |||
| assert(5 == calcFiles.length); | |||
| } | |||
| public void test4() { | |||
| expectBuildException("test4", "ANTLR exited with an error code of 1 ( try forking )"); | |||
| } | |||
| public void test5() { | |||
| expectBuildException("test5", "Invalid working directory"); | |||
| } | |||
| public void test6() { | |||
| executeTarget("test6"); | |||
| } | |||
| public void test7() { | |||
| expectBuildException("test7", "Unable to determine generated class"); | |||
| } | |||
| } | |||
| class CalcFileFilter implements FilenameFilter { | |||
| public boolean accept(File dir, String name) { | |||
| return name.startsWith("Calc"); | |||
| } | |||
| } | |||