source: release-kits/wirk3/ant-scripts/tasks/antelope/src/ise/antelope/tasks/SuiteOriginal.java@ 15023

Last change on this file since 15023 was 15023, checked in by oranfry, 16 years ago

did the bulk of the work on wirk3

File size: 5.3 KB
Line 
1package ise.antelope.tasks;
2
3import java.util.*;
4
5import org.apache.tools.ant.BuildException;
6import org.apache.tools.ant.Target;
7import org.apache.tools.ant.Task;
8
9/**
10 * Modeled after the TestSuite provided by jUnit, this class is an Ant task that
11 * looks through the build file that contains this task, calls a 'setUp' target
12 * (if it exists), then all targets whose names start with 'test', and last calls
13 * a target named 'tearDown' (if it exists). Both 'setUp' and 'tearDown' are
14 * optional targets in the build file. <p>
15 * Ant stores targets in a hashtable, so there is no guaranteed order in which
16 * the 'test*' classes will be called. If order is important, use the 'depends'
17 * attribue of a target to enforce order, and do not name dependent targets with
18 * a name starting with 'test'. <p>
19 * Test targets may also be imported with the import task. Imported files should
20 * not have a "suite" task in the implicit target as such a task would rerun
21 * all test targets in all files.
22 *
23 * @author Dale Anson
24 */
25public class SuiteOriginal extends Task {
26
27 private Target setUp = null;
28 private Target tearDown = null;
29 private Vector testTargets = new Vector();
30 private Vector failures = new Vector();
31 private boolean showSummary = true;
32 private boolean showOutput = true;
33
34 private int tests_passed = 0;
35 private int tests_failed = 0;
36
37 public int getTestCaseCount() {
38 return testTargets.size();
39 }
40
41 public int getRanCount() {
42 return tests_passed + tests_failed;
43 }
44
45 public int getFailedCount() {
46 return tests_failed;
47 }
48
49 public int getPassedCount() {
50 return tests_passed;
51 }
52
53 public Enumeration getFailures() {
54 return failures.elements();
55 }
56
57 public void setShowoutput( boolean b ) {
58 showOutput = b;
59 }
60
61 public void setShowsummary(boolean b ) {
62 showSummary = b;
63 }
64
65 /** Run tests. */
66 public void execute() {
67
68 // get the setUp, tearDown, and test targets
69 Hashtable targets = getProject().getTargets();
70 Enumeration en = targets.keys();
71 while ( en.hasMoreElements() ) {
72 String target = ( String ) en.nextElement();
73 if ( target.equals( "setUp" ) )
74 setUp = ( Target ) targets.get( target );
75 else if ( target.equals( "tearDown" ) )
76 tearDown = ( Target ) targets.get( target );
77 else if ( target.startsWith( "test" ) )
78 testTargets.addElement( targets.get( target ) );
79 // also check for imported targets. Imported targets are named like
80 // projectname.targetname, so check for whatever follows the last dot.
81 // This is somewhat naive, as there is no restriction using dots in
82 // target names, so a target named "build.testimonials" would be treated
83 // as a test target.
84 else if ( target.lastIndexOf( "." ) > 0 && target.substring( target.lastIndexOf( "." ) + 1 ).startsWith( "test" ) ) {
85 testTargets.addElement( targets.get( target ) );
86 }
87 }
88
89 // run the setUp target
90 if ( setUp != null )
91 setUp.execute();
92 en = testTargets.elements();
93
94 // run the test targets
95 StringBuffer messages = new StringBuffer();
96 while ( en.hasMoreElements() ) {
97 Target target = ( Target ) en.nextElement();
98 try {
99 executeDependencies( target );
100 target.performTasks();
101 if (showOutput)
102 log( target.getName() + " passed." );
103 ++tests_passed;
104 }
105 catch ( Exception e ) {
106 ++tests_failed;
107 if (showOutput)
108 log( target.getName() + " failed: " + e.getMessage() );
109 failures.addElement( target.getName() + " failed: " + e.getMessage() );
110 }
111 }
112
113 // run the tearDown target
114 if ( tearDown != null )
115 tearDown.execute();
116
117 // print any error messages
118 if ( showSummary ) {
119 // log the failures
120 if ( failures.size() > 0 ) {
121 log( "" );
122 log( "---- Errors ---------------------------------" );
123 en = failures.elements();
124 while(en.hasMoreElements()) {
125 String msg = (String)en.nextElement();
126 log(msg);
127 }
128 }
129
130 // log the test count info
131 log( "" );
132 log( "---- Results --------------------------------" );
133 log( "Ran " + getRanCount() + " out of " + getTestCaseCount() + " tests." );
134 log( "Passed: " + getPassedCount() );
135 log( "Failed: " + getFailedCount() );
136 }
137 }
138
139 /**
140 * Execute a target's dependencies followed by the target itself.
141 * @param target the target to execute
142 */
143 private void executeDependencies( Target target ) {
144 if ( target == null )
145 return ;
146 Enumeration en = target.getDependencies();
147 if ( en == null )
148 return ;
149 while ( en.hasMoreElements() ) {
150 String name = ( String ) en.nextElement();
151 Target t = ( Target ) getProject().getTargets().get( name );
152 executeDependencies( t );
153 t.performTasks();
154 }
155 }
156}
157
Note: See TracBrowser for help on using the repository browser.