1
2
3 package org.virtualmock.test.suite;
4
5 import java.lang.reflect.InvocationTargetException;
6 import java.lang.reflect.Method;
7 import java.util.ArrayList;
8 import java.util.Iterator;
9 import junit.framework.Test;
10 import junit.framework.TestCase;
11 import junit.framework.TestSuite;
12 import org.virtualmock.VMFactoryTest;
13 import org.virtualmock.VMTest;
14 import org.virtualmock.aspect.AspectUtilsTest;
15 import org.virtualmock.aspect.aspectwerkz.AspectwerkzAspectUtilsTest;
16 import org.virtualmock.call.CallManagerTest;
17 import org.virtualmock.call.CallQueueTest;
18 import org.virtualmock.call.CallTest;
19 import org.virtualmock.call.InvokedCallQueueTest;
20 import org.virtualmock.call.InvokedCallTest;
21 import org.virtualmock.call.RecordedCallQueueTest;
22 import org.virtualmock.call.RecordedCallTest;
23 import org.virtualmock.call.SignatureTest;
24 import org.virtualmock.resource.ResourceManagerTest;
25 import org.virtualmock.configuration.ConfigDigesterTest;
26 import org.virtualmock.configuration.VMConfigTest;
27 import org.virtualmock.matcher.AlwaysMatcherTest;
28 import org.virtualmock.matcher.EqualsMatcherTest;
29 import org.virtualmock.rule.AllRecordedCallsMustBeInvokedRuleTest;
30 import org.virtualmock.rule.RuleManagerTest;
31 import org.virtualmock.util.PrimitiveUtilsTest;
32 import org.virtualmock.util.ToolboxTest;
33 import org.virtualmock.verify.VerificationManagerTest;
34
35
36 /***
37 * Runs all tests
38 *
39 * @author Chad Woolley
40 * @version $Revision: 1.5 $
41 */
42 public class UnitTests extends TestCase {
43 private static boolean addTestSuite = false;
44
45 /***
46 * Creates a new AllTests object.
47 *
48 * @param testName the TestName
49 */
50 public UnitTests(String testName) {
51 super(testName);
52 }
53
54 /***
55 * "true" causes <code>suite.addTest(MyTest.suite());</code> to be invoked,
56 * false causes <code>suite.addTestSuite(MyTest.class);</code> to be
57 * invoked.
58 *
59 * @param newAddTestSuite determines whether or not to add a test as a
60 * suite.
61 */
62 public static void setAddTestSuite(boolean newAddTestSuite) {
63 addTestSuite = newAddTestSuite;
64 }
65
66 /***
67 * Accessor
68 *
69 * @return addTestSuite
70 */
71 public static boolean isAddTestSuite() {
72 return addTestSuite;
73 }
74
75 /***
76 * Add a test to the suite
77 *
78 * @param suite DOCUMENT ME! (Constructor Parameter)
79 * @param testCaseClass DOCUMENT ME! (Constructor Parameter)
80 *
81 * @throws RuntimeException DOCUMENT ME! (Constructor Exception)
82 */
83 public static void addTestToSuite(TestSuite suite, Class testCaseClass) {
84 if (isAddTestSuite()) {
85 Method method = null;
86
87 try {
88 method = testCaseClass.getMethod("suite", new Class[0]);
89 } catch (NoSuchMethodException e) {
90 throw new RuntimeException(e.getMessage());
91 }
92
93 Test test = null;
94
95 try {
96 test = (Test) method.invoke(method, new Object[0]);
97 } catch (InvocationTargetException e) {
98 throw new RuntimeException(e.getMessage());
99 } catch (IllegalAccessException e) {
100 throw new RuntimeException(e.getMessage());
101 }
102
103 suite.addTest(test);
104 } else {
105 suite.addTestSuite(testCaseClass);
106 }
107 }
108
109 /***
110 * Main method
111 *
112 * @param args command line args
113 */
114 public static void main(String[] args) {
115 junit.textui.TestRunner.run(suite());
116 }
117
118 /***
119 * Performs the logic of the suite
120 *
121 * @return the test suite
122 *
123 * @todo Make this use reflection to dynamically find all tests. Tried
124 * directory tree util from JUnit-addons, but couldn't get it to
125 * work...
126 * @todo Add suite() method for AspectwerkzAspectUtils class
127 */
128 public static Test performSuite() {
129 TestSuite suite = new TestSuite("All tests");
130
131 suite.addTestSuite(AspectwerkzAspectUtilsTest.class);
132
133
134
135
136 ArrayList testCaseClasses = new ArrayList();
137
138 testCaseClasses.add(AllRecordedCallsMustBeInvokedRuleTest.class);
139 testCaseClasses.add(AlwaysMatcherTest.class);
140 testCaseClasses.add(AspectUtilsTest.class);
141 testCaseClasses.add(CallManagerTest.class);
142 testCaseClasses.add(CallQueueTest.class);
143 testCaseClasses.add(CallTest.class);
144
145 testCaseClasses.add(PrimitiveUtilsTest.class);
146 testCaseClasses.add(EqualsMatcherTest.class);
147 testCaseClasses.add(InvokedCallQueueTest.class);
148 testCaseClasses.add(InvokedCallTest.class);
149 testCaseClasses.add(RecordedCallQueueTest.class);
150 testCaseClasses.add(RecordedCallTest.class);
151 testCaseClasses.add(ResourceManagerTest.class);
152 testCaseClasses.add(RuleManagerTest.class);
153 testCaseClasses.add(SignatureTest.class);
154 testCaseClasses.add(ToolboxTest.class);
155 testCaseClasses.add(VerificationManagerTest.class);
156 testCaseClasses.add(VMConfigTest.class);
157 testCaseClasses.add(VMFactoryTest.class);
158 testCaseClasses.add(VMTest.class);
159
160 Iterator iterator = testCaseClasses.iterator();
161
162 while (iterator.hasNext()) {
163 Class testCaseClass = (Class) iterator.next();
164 addTestToSuite(suite, testCaseClass);
165 }
166
167 return suite;
168 }
169
170 /***
171 * Suite method
172 *
173 * @return the test suite
174 */
175 public static Test suite() {
176 return performSuite();
177 }
178 }