KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > quilt > textui > Textui


1 /* Textui.java */
2
3 package org.quilt.textui;
4
5 import java.io.File JavaDoc;
6 import java.io.FileInputStream JavaDoc;
7 import java.io.IOException JavaDoc;
8 import java.util.Enumeration JavaDoc;
9 import java.util.Hashtable JavaDoc;
10 import java.util.Properties JavaDoc;
11 import java.util.Vector JavaDoc;
12
13 // XXX remove me
14
import org.apache.tools.ant.BuildException;
15 import org.apache.tools.ant.Project;
16
17 import org.quilt.cl.QuiltClassLoader;
18 import org.quilt.cover.stmt.StmtRegistry;
19 import org.quilt.framework.QuiltTest;
20 import org.quilt.reports.*;
21 import org.quilt.runner.*;
22
23 /**
24  * Template textui test runner. Need to add main() and runWithIt().
25  *
26  * @todo Modify to permit types (brief, plain, summary, xml) on the
27  * command line.
28  */

29
30 public abstract class Textui implements RunnerConst {
31
32     protected QuiltClassLoader quiltLoader = null;
33
34     protected StmtRegistry stmtReg = null;
35
36     // //////////////////////////////////////////////////////////////
37
// NEEDS WORK
38
// //////////////////////////////////////////////////////////////
39

40     /**
41      * Command line usage message.
42      *
43      * XXX This must be fleshed out.
44      */

45     public void usage () {
46         System.out.println ("usage:\n"
47             + "java [javaOptions] testName [testOptions]\n"
48             + "where the test options (all optional) are\n"
49             + " checkCoverage={true|false}\n"
50             + " checkIncludes={comma-separated list of class names}\n"
51             + " checkExcludes={comma-separated list of class names}\n"
52             + " haltOnError={true|false}\n"
53             + " haltOnFailure={true|false}\n"
54             + " filtertrace={true|false}\n"
55             + " formatter={className[,outputName]}\n"
56             + " propsfile={pathname}\n"
57             + " showOutput={true|false}\n"
58     + "Parameter values are not quoted. Anything in square brackets []\n"
59             + "is optional. Anything in curly braces {} is required.\n"
60             + "\n");
61         System.exit(ERRORS);
62     }
63
64     // YOU MUST IMPLEMENT A main() LIKE THIS:
65
// public static void main(String[] args) throws IOException {
66
// System.exit( new MockTestRunner().handleArgs(args) );
67
// }
68

69     /**
70      * Called by main - pulls arguments off a command line to build a
71      * QuiltTest structure and formatter vector.
72      *
73      * @see QuiltTest
74      * @see RunnerConst
75      * @param args Usual command line argument vector
76      * @return RunnerConst status codes
77      */

78     protected int handleArgs (String JavaDoc[] args) {
79         int retCode = ERRORS;
80         try {
81             Vector JavaDoc myFormatters = new Vector JavaDoc();
82             if (args.length == 0) {
83                 usage();
84             }
85             // our goal here is to populate this structure
86
QuiltTest qt = new QuiltTest(args[0]);
87             qt.setFork(true); // always true if textui
88

89             Properties JavaDoc p = new Properties JavaDoc();
90             for (int i = 1; i < args.length; i++) {
91                 if (args[i].startsWith("checkCoverage=")) {
92                     qt.setCheckCoverage (
93                                 Project.toBoolean(args[i].substring(14)));
94                 } else if (args[i].startsWith("checkExcludes=")) {
95                     qt.setCheckExcludes (args[i].substring(14));
96                 } else if (args[i].startsWith("checkIncludes=")) {
97                     qt.setCheckIncludes (args[i].substring(14));
98                 } else if (args[i].startsWith("haltOnError=")) {
99                     qt.setHaltOnError (
100                                 Project.toBoolean(args[i].substring(12)));
101                 } else if (args[i].startsWith("haltOnFailure=")) {
102                     qt.setHaltOnFailure (
103                                 Project.toBoolean(args[i].substring(14)));
104                 } else if (args[i].startsWith("filtertrace=")) {
105                     qt.setFiltertrace (
106                                 Project.toBoolean(args[i].substring(12)));
107                 } else if (args[i].startsWith("formatter=")) {
108                     // looks like: "formatter=CLASSNAME{.OUTFILENAME}"
109

110                     // //////////////////////////////////////////////
111
// MODIFY TO PERMIT TYPES (brief, plain, summary, xml)
112
// AS WELL AS CLASS NAMES
113
// //////////////////////////////////////////////
114
try {
115                         String JavaDoc selector = args[i].substring(10);
116                         int commaAt = selector.indexOf(',');
117                         FmtSelector fs = new FmtSelector();
118                         if ( commaAt < 0) {
119                             fs.setClassname (selector);
120                         } else {
121                             fs.setClassname (selector.substring(0, commaAt));
122                             fs.setOutfile (new File JavaDoc(
123                                         selector.substring(commaAt + 1)));
124                         }
125                         myFormatters.addElement ( fs );
126                     } catch (BuildException be) {
127                         System.err.println(be.getMessage());
128                         System.exit(ERRORS);
129                     }
130                 } else if (args[i].startsWith("propsfile=")) {
131                     FileInputStream JavaDoc in = new FileInputStream JavaDoc(args[i]
132                                                              .substring(10));
133                     p.load(in);
134                     in.close();
135                 } else if (args[i].startsWith("showoutput=")) {
136                     qt.setShowOutput (Project.toBoolean(args[i].substring(11)));
137                 }
138             }
139             Hashtable JavaDoc sysP = System.getProperties();
140             Enumeration JavaDoc e = sysP.keys();
141             while ( e.hasMoreElements()) {
142                 String JavaDoc key = (String JavaDoc)e.nextElement();
143                 p.put(key, (String JavaDoc)sysP.get(key));
144             }
145             qt.setProperties(p);
146             // set up QuiltClassLoader if appropriate
147
// // DEBUG
148
// StringBuffer sb = new StringBuffer().append("Textui.handleArgs\n");
149
// String [] inc = qt.getCheckIncludesArray();
150
// sb.append(" includes\n");
151
// for (int j = 0; j < inc.length; j++)
152
// sb.append(" ").append(inc[j]).append("\n");
153

154 // String [] exc = qt.getCheckExcludesArray();
155
// sb.append(" excludes\n");
156
// for (int j = 0; j < exc.length; j++)
157
// sb.append(" ").append(exc[j]).append("\n");
158
// System.out.println(sb.toString());
159
// // END
160

161             if (qt.getCheckCoverage() && (qt.getCheckIncludes() != null)) {
162                 String JavaDoc myClasspath = System.getProperty("java.class.path");
163 // // DEBUG
164
// System.out.println(
165
// "Textui.handleArgs: setting up QCL with classpath:\n"
166
// + myClasspath);
167
// // END
168
quiltLoader = new QuiltClassLoader (
169                         QuiltClassLoader.cpToURLs(myClasspath),
170                         (ClassLoader JavaDoc)null, // classloader we delegate to
171
(String JavaDoc [])null, // delegated classes
172
qt.getCheckIncludesArray(), // needs to be String[]
173
qt.getCheckExcludesArray()); // ditto
174

175                 stmtReg = (StmtRegistry) quiltLoader.addQuiltRegistry(
176                                         "org.quilt.cover.stmt.StmtRegistry");
177             }
178 // // DEBUG
179
// else {
180
// System.out.println("Textui.handleArgs: NOT USING QCL"
181
// + "\n getCheckCoverage() => " + qt.getCheckCoverage());
182
// }
183
// // END
184

185             retCode = runWithIt (qt, myFormatters);
186         } catch (Exception JavaDoc e) {
187             System.out.println("EXCEPTION " + e);
188             e.printStackTrace();
189             retCode = ERRORS;
190         }
191         return retCode;
192     }
193     /**
194      * Override this method. Runs the individual test.
195      * @param qt Quilt test descriptor
196      * @param myFormatters Vector of formatters
197      */

198     int runWithIt (QuiltTest qt, Vector JavaDoc myFormatters) {
199         // override this; MockTestRunner should be talkative
200
System.out.println (
201                 "Textui.runWithIt: you should never see this message");
202         return ERRORS;
203     }
204 }
205
Popular Tags