KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > groovy > util > GroovyTestSuite


1 /*
2  * $Id: GroovyTestSuite.java,v 1.9 2004/12/14 00:08:26 spullara Exp $
3  *
4  * Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
5  *
6  * Redistribution and use of this software and associated documentation
7  * ("Software"), with or without modification, are permitted provided that the
8  * following conditions are met:
9  * 1. Redistributions of source code must retain copyright statements and
10  * notices. Redistributions must also contain a copy of this document.
11  * 2. Redistributions in binary form must reproduce the above copyright
12  * notice, this list of conditions and the following disclaimer in the
13  * documentation and/or other materials provided with the distribution.
14  * 3. The name "groovy" must not be used to endorse or promote products
15  * derived from this Software without prior written permission of The Codehaus.
16  * For written permission, please contact info@codehaus.org.
17  * 4. Products derived from this Software may not be called "groovy" nor may
18  * "groovy" appear in their names without prior written permission of The
19  * Codehaus. "groovy" is a registered trademark of The Codehaus.
20  * 5. Due credit should be given to The Codehaus - http://groovy.codehaus.org/
21  *
22  * THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS ``AS IS'' AND ANY
23  * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
24  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
25  * DISCLAIMED. IN NO EVENT SHALL THE CODEHAUS OR ITS CONTRIBUTORS BE LIABLE FOR
26  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
28  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
32  * DAMAGE.
33  *
34  */

35 package groovy.util;
36
37 import groovy.lang.GroovyClassLoader;
38 import groovy.lang.Script;
39 import junit.framework.Test;
40 import junit.framework.TestSuite;
41 import junit.textui.TestRunner;
42 import org.codehaus.groovy.runtime.ScriptTestAdapter;
43
44 import java.io.File JavaDoc;
45
46
47 /**
48  * A TestSuite which will run a Groovy unit test case inside any Java IDE
49  * either as a unit test case or as an application.
50  * <p/>
51  * You can specify the GroovyUnitTest to run by running this class as an appplication
52  * and specifying the script to run on the command line.
53  * <p/>
54  * <code>
55  * java groovy.util.GroovyTestSuite src/test/Foo.groovy
56  * </code>
57  * <p/>
58  * Or to run the test suite as a unit test suite in an IDE you can use
59  * the 'test' system property to define the test script to run.
60  * e.g. pass this into the JVM when the unit test plugin runs...
61  * <p/>
62  * <code>
63  * -Dtest=src/test/Foo.groovy
64  * </code>
65  *
66  * @author <a HREF="mailto:james@coredevelopers.net">James Strachan</a>
67  * @version $Revision: 1.9 $
68  */

69 public class GroovyTestSuite extends TestSuite {
70
71     protected static String JavaDoc file = null;
72
73     protected GroovyClassLoader loader = new GroovyClassLoader(GroovyTestSuite.class.getClassLoader());
74
75     public static void main(String JavaDoc[] args) {
76         if (args.length > 0) {
77             file = args[0];
78         }
79         TestRunner.run(suite());
80     }
81
82     public static Test suite() {
83         GroovyTestSuite suite = new GroovyTestSuite();
84         try {
85             suite.loadTestSuite();
86         } catch (Exception JavaDoc e) {
87             throw new RuntimeException JavaDoc("Could not create the test suite: " + e, e);
88         }
89         return suite;
90     }
91
92     public void loadTestSuite() throws Exception JavaDoc {
93         String JavaDoc fileName = System.getProperty("test", file);
94         if (fileName == null) {
95             throw new RuntimeException JavaDoc("No filename given in the 'test' system property so cannot run a Groovy unit test");
96         }
97         System.out.println("Compiling: " + fileName);
98         Class JavaDoc type = compile(fileName);
99         String JavaDoc[] args = {};
100         if (!Test.class.isAssignableFrom(type) && Script.class.isAssignableFrom(type)) {
101             // lets treat the script as a Test
102
addTest(new ScriptTestAdapter(type, args));
103         } else {
104             addTestSuite(type);
105         }
106     }
107
108     public Class JavaDoc compile(String JavaDoc fileName) throws Exception JavaDoc {
109         return loader.parseClass(new File JavaDoc(fileName));
110     }
111 }
112
Popular Tags