001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: *
017: */
018:
019: package org.apache.tools.ant.taskdefs.optional;
020:
021: import java.io.*;
022: import org.apache.tools.ant.BuildFileTest;
023:
024: /**
025: * If you want to run tests, it is highly recommended
026: * to download ANTLR (www.antlr.org), build the 'antlrall.jar' jar
027: * with <code>make antlr-all.jar</code> and drop the jar (about 300KB) into
028: * Ant lib.
029: * - Running w/ the default antlr.jar (70KB) does not work (missing class)
030: *
031: * Unless of course you specify the ANTLR classpath in your
032: * system classpath. (see ANTLR install.html)
033: *
034: */
035: public class ANTLRTest extends BuildFileTest {
036:
037: private final static String TASKDEFS_DIR = "src/etc/testcases/taskdefs/optional/antlr/";
038:
039: public ANTLRTest(String name) {
040: super (name);
041: }
042:
043: public void setUp() {
044: configureProject(TASKDEFS_DIR + "antlr.xml");
045: }
046:
047: public void tearDown() {
048: executeTarget("cleanup");
049: }
050:
051: public void test1() {
052: expectBuildException("test1",
053: "required argument, target, missing");
054: }
055:
056: public void test2() {
057: expectBuildException("test2", "Invalid output directory");
058: }
059:
060: public void test3() {
061: executeTarget("test3");
062: }
063:
064: public void test4() {
065: executeTarget("test4");
066: }
067:
068: public void test5() {
069: // should print "panic: Cannot find importVocab file 'JavaTokenTypes.txt'"
070: // since it needs to run java.g first before java.tree.g
071: expectBuildException("test5", "ANTLR returned: 1");
072: }
073:
074: public void test6() {
075: executeTarget("test6");
076: }
077:
078: public void test7() {
079: expectBuildException("test7",
080: "Unable to determine generated class");
081: }
082:
083: /**
084: * This is a negative test for the super grammar (glib) option.
085: */
086: public void test8() {
087: expectBuildException("test8", "Invalid super grammar file");
088: }
089:
090: /**
091: * This is a positive test for the super grammar (glib) option. ANTLR
092: * will throw an error if everything is not correct.
093: */
094: public void test9() {
095: executeTarget("test9");
096: }
097:
098: /**
099: * This test creates an html-ized version of the calculator grammar.
100: * The sanity check is simply whether or not an html file was generated.
101: */
102: public void test10() {
103: executeTarget("test10");
104: File outputDirectory = new File(System.getProperty("root"),
105: TASKDEFS_DIR + "antlr.tmp");
106: String[] calcFiles = outputDirectory.list(new HTMLFilter());
107: assertTrue(calcFiles.length > 0);
108: }
109:
110: /**
111: * This is just a quick sanity check to run the diagnostic option and
112: * make sure that it doesn't throw any funny exceptions.
113: */
114: public void test11() {
115: executeTarget("test11");
116: }
117:
118: /**
119: * This is just a quick sanity check to run the trace option and
120: * make sure that it doesn't throw any funny exceptions.
121: */
122: public void test12() {
123: executeTarget("test12");
124: }
125:
126: /**
127: * This is just a quick sanity check to run all the rest of the
128: * trace options (traceLexer, traceParser, and traceTreeWalker) to
129: * make sure that they don't throw any funny exceptions.
130: */
131: public void test13() {
132: executeTarget("test13");
133: }
134:
135: public void testNoRecompile() {
136: executeTarget("test9");
137: assertEquals(-1, getFullLog().indexOf("Skipped grammar file."));
138: executeTarget("noRecompile");
139: assertTrue(-1 != getFullLog().indexOf("Skipped grammar file."));
140: }
141:
142: public void testNormalRecompile() {
143: executeTarget("test9");
144: assertEquals(-1, getFullLog().indexOf("Skipped grammar file."));
145: executeTarget("normalRecompile");
146: assertEquals(-1, getFullLog().indexOf("Skipped grammar file."));
147: }
148:
149: // Bugzilla Report 12961
150: public void testSupergrammarChangeRecompile() {
151: executeTarget("test9");
152: assertEquals(-1, getFullLog().indexOf("Skipped grammar file."));
153: executeTarget("supergrammarChangeRecompile");
154: assertEquals(-1, getFullLog().indexOf("Skipped grammar file."));
155: }
156: }
157:
158: class CalcFileFilter implements FilenameFilter {
159: public boolean accept(File dir, String name) {
160: return name.startsWith("Calc");
161: }
162: }
163:
164: class HTMLFilter implements FilenameFilter {
165: public boolean accept(File dir, String name) {
166: return name.endsWith("html");
167: }
168: }
|