Lines 59-68
Link Here
|
59 |
import java.util.Properties; |
59 |
import java.util.Properties; |
60 |
import java.util.Set; |
60 |
import java.util.Set; |
61 |
import java.util.TreeSet; |
61 |
import java.util.TreeSet; |
|
|
62 |
import java.util.logging.Handler; |
63 |
import java.util.logging.Level; |
64 |
import java.util.logging.Level; |
65 |
import java.util.logging.LogRecord; |
66 |
import java.util.logging.Logger; |
62 |
import java.util.regex.Matcher; |
67 |
import java.util.regex.Matcher; |
63 |
import java.util.regex.Pattern; |
68 |
import java.util.regex.Pattern; |
64 |
import javax.swing.SwingUtilities; |
69 |
import javax.swing.SwingUtilities; |
65 |
import junit.framework.Assert; |
70 |
import junit.framework.Assert; |
|
|
71 |
import junit.framework.AssertionFailedError; |
66 |
import junit.framework.Test; |
72 |
import junit.framework.Test; |
67 |
import junit.framework.TestCase; |
73 |
import junit.framework.TestCase; |
68 |
import junit.framework.TestResult; |
74 |
import junit.framework.TestResult; |
Lines 114-119
Link Here
|
114 |
final boolean gui; |
120 |
final boolean gui; |
115 |
final boolean enableClasspathModules; |
121 |
final boolean enableClasspathModules; |
116 |
final boolean honorAutoEager; |
122 |
final boolean honorAutoEager; |
|
|
123 |
final Level failOnMessage; |
124 |
final Level failOnException; |
117 |
|
125 |
|
118 |
private Configuration( |
126 |
private Configuration( |
119 |
List<String> clusterRegExp, |
127 |
List<String> clusterRegExp, |
Lines 124-130
Link Here
|
124 |
boolean reuseUserDir, |
132 |
boolean reuseUserDir, |
125 |
boolean gui, |
133 |
boolean gui, |
126 |
boolean enableCPModules, |
134 |
boolean enableCPModules, |
127 |
boolean honorAutoEager |
135 |
boolean honorAutoEager, |
|
|
136 |
Level failOnMessage, |
137 |
Level failOnException |
128 |
) { |
138 |
) { |
129 |
this.clusterRegExp = clusterRegExp; |
139 |
this.clusterRegExp = clusterRegExp; |
130 |
this.moduleRegExp = moduleRegExp; |
140 |
this.moduleRegExp = moduleRegExp; |
Lines 135-147
Link Here
|
135 |
this.gui = gui; |
145 |
this.gui = gui; |
136 |
this.enableClasspathModules = enableCPModules; |
146 |
this.enableClasspathModules = enableCPModules; |
137 |
this.honorAutoEager = honorAutoEager; |
147 |
this.honorAutoEager = honorAutoEager; |
|
|
148 |
this.failOnException = failOnException; |
149 |
this.failOnMessage = failOnMessage; |
138 |
} |
150 |
} |
139 |
|
151 |
|
140 |
static Configuration create(Class<? extends TestCase> clazz) { |
152 |
static Configuration create(Class<? extends TestCase> clazz) { |
141 |
return new Configuration( |
153 |
return new Configuration( |
142 |
null, null, ClassLoader.getSystemClassLoader().getParent(), |
154 |
null, null, ClassLoader.getSystemClassLoader().getParent(), |
143 |
Collections.<Item>emptyList(), clazz, false, true, true, false |
155 |
Collections.<Item>emptyList(), clazz, false, true, true, false |
144 |
); |
156 |
, null, null); |
145 |
} |
157 |
} |
146 |
|
158 |
|
147 |
/** Regular expression to match clusters that shall be enabled. |
159 |
/** Regular expression to match clusters that shall be enabled. |
Lines 170-176
Link Here
|
170 |
list, moduleRegExp, parentClassLoader, tests, |
182 |
list, moduleRegExp, parentClassLoader, tests, |
171 |
latestTestCaseClass, reuseUserDir, gui, enableClasspathModules, |
183 |
latestTestCaseClass, reuseUserDir, gui, enableClasspathModules, |
172 |
honorAutoEager |
184 |
honorAutoEager |
173 |
); |
185 |
, failOnMessage, failOnException); |
174 |
} |
186 |
} |
175 |
|
187 |
|
176 |
/** By default only modules on classpath of the test are enabled, |
188 |
/** By default only modules on classpath of the test are enabled, |
Lines 210-216
Link Here
|
210 |
return new Configuration( |
222 |
return new Configuration( |
211 |
this.clusterRegExp, arr, parentClassLoader, |
223 |
this.clusterRegExp, arr, parentClassLoader, |
212 |
tests, latestTestCaseClass, reuseUserDir, gui, |
224 |
tests, latestTestCaseClass, reuseUserDir, gui, |
213 |
enableClasspathModules, honorAutoEager); |
225 |
enableClasspathModules, honorAutoEager, failOnMessage, failOnException); |
214 |
} |
226 |
} |
215 |
|
227 |
|
216 |
Configuration classLoader(ClassLoader parent) { |
228 |
Configuration classLoader(ClassLoader parent) { |
Lines 218-224
Link Here
|
218 |
clusterRegExp, moduleRegExp, parent, tests, |
230 |
clusterRegExp, moduleRegExp, parent, tests, |
219 |
latestTestCaseClass, reuseUserDir, gui, enableClasspathModules, |
231 |
latestTestCaseClass, reuseUserDir, gui, enableClasspathModules, |
220 |
honorAutoEager |
232 |
honorAutoEager |
221 |
); |
233 |
, failOnMessage, failOnException); |
222 |
} |
234 |
} |
223 |
|
235 |
|
224 |
/** Adds new test name, or array of names into the configuration. By |
236 |
/** Adds new test name, or array of names into the configuration. By |
Lines 241-247
Link Here
|
241 |
return new Configuration( |
253 |
return new Configuration( |
242 |
clusterRegExp, moduleRegExp, parentClassLoader, |
254 |
clusterRegExp, moduleRegExp, parentClassLoader, |
243 |
newTests, latestTestCaseClass, reuseUserDir, gui, |
255 |
newTests, latestTestCaseClass, reuseUserDir, gui, |
244 |
enableClasspathModules, honorAutoEager); |
256 |
enableClasspathModules, honorAutoEager, failOnMessage, failOnException); |
245 |
} |
257 |
} |
246 |
|
258 |
|
247 |
/** Adds new test class to run, together with a list of its methods |
259 |
/** Adds new test class to run, together with a list of its methods |
Lines 268-274
Link Here
|
268 |
clusterRegExp, moduleRegExp, parentClassLoader, |
280 |
clusterRegExp, moduleRegExp, parentClassLoader, |
269 |
newTests, test, reuseUserDir, gui, enableClasspathModules, |
281 |
newTests, test, reuseUserDir, gui, enableClasspathModules, |
270 |
honorAutoEager |
282 |
honorAutoEager |
271 |
); |
283 |
, failOnMessage, failOnException); |
272 |
} |
284 |
} |
273 |
|
285 |
|
274 |
/** |
286 |
/** |
Lines 293-299
Link Here
|
293 |
clusterRegExp, moduleRegExp, parentClassLoader, |
305 |
clusterRegExp, moduleRegExp, parentClassLoader, |
294 |
newTests, latestTestCaseClass, reuseUserDir, |
306 |
newTests, latestTestCaseClass, reuseUserDir, |
295 |
gui, enableClasspathModules, honorAutoEager |
307 |
gui, enableClasspathModules, honorAutoEager |
296 |
); |
308 |
, failOnMessage, failOnException); |
297 |
} |
309 |
} |
298 |
|
310 |
|
299 |
/** By default all modules on classpath are enabled (so you can link |
311 |
/** By default all modules on classpath are enabled (so you can link |
Lines 309-315
Link Here
|
309 |
return new Configuration( |
321 |
return new Configuration( |
310 |
clusterRegExp, moduleRegExp, parentClassLoader, |
322 |
clusterRegExp, moduleRegExp, parentClassLoader, |
311 |
tests, latestTestCaseClass, reuseUserDir, |
323 |
tests, latestTestCaseClass, reuseUserDir, |
312 |
gui, enable, honorAutoEager); |
324 |
gui, enable, honorAutoEager, failOnMessage, failOnException); |
313 |
} |
325 |
} |
314 |
|
326 |
|
315 |
/** By default the {@link #enableModules(java.lang.String)} method |
327 |
/** By default the {@link #enableModules(java.lang.String)} method |
Lines 328-334
Link Here
|
328 |
clusterRegExp, moduleRegExp, parentClassLoader, |
340 |
clusterRegExp, moduleRegExp, parentClassLoader, |
329 |
tests, latestTestCaseClass, reuseUserDir, |
341 |
tests, latestTestCaseClass, reuseUserDir, |
330 |
gui, enableClasspathModules, honor |
342 |
gui, enableClasspathModules, honor |
331 |
); |
343 |
, failOnMessage, failOnException); |
|
|
344 |
} |
345 |
|
346 |
/** Fails if there is a message sent to {@link Logger} with appropriate |
347 |
* level or higher during the test run execution. |
348 |
* |
349 |
* @param level the minimal level of the message |
350 |
* @return new configuration filled with this data |
351 |
* @since 1.58 |
352 |
*/ |
353 |
public Configuration failOnMessage(Level level) { |
354 |
return new Configuration( |
355 |
clusterRegExp, moduleRegExp, parentClassLoader, |
356 |
tests, latestTestCaseClass, reuseUserDir, |
357 |
gui, enableClasspathModules, honorAutoEager |
358 |
, level, failOnException); |
359 |
} |
360 |
|
361 |
/** Fails if there is an exception reported to {@link Logger} with appropriate |
362 |
* level or higher during the test run execution. |
363 |
* |
364 |
* @param level the minimal level of the message |
365 |
* @return new configuration filled with this data |
366 |
* @since 1.58 |
367 |
*/ |
368 |
public Configuration failOnException(Level level) { |
369 |
return new Configuration( |
370 |
clusterRegExp, moduleRegExp, parentClassLoader, |
371 |
tests, latestTestCaseClass, reuseUserDir, |
372 |
gui, enableClasspathModules, honorAutoEager |
373 |
, failOnMessage, level); |
332 |
} |
374 |
} |
333 |
|
375 |
|
334 |
private void addLatest(List<Item> newTests) { |
376 |
private void addLatest(List<Item> newTests) { |
Lines 350-356
Link Here
|
350 |
clusterRegExp, moduleRegExp, parentClassLoader, |
392 |
clusterRegExp, moduleRegExp, parentClassLoader, |
351 |
newTests, latestTestCaseClass, reuseUserDir, gui, |
393 |
newTests, latestTestCaseClass, reuseUserDir, gui, |
352 |
enableClasspathModules |
394 |
enableClasspathModules |
353 |
,honorAutoEager); |
395 |
,honorAutoEager, failOnMessage, failOnException); |
354 |
} |
396 |
} |
355 |
|
397 |
|
356 |
/** Should the system run with GUI or without? The default behaviour |
398 |
/** Should the system run with GUI or without? The default behaviour |
Lines 367-373
Link Here
|
367 |
clusterRegExp, moduleRegExp, parentClassLoader, |
409 |
clusterRegExp, moduleRegExp, parentClassLoader, |
368 |
tests, latestTestCaseClass, reuseUserDir, gui, |
410 |
tests, latestTestCaseClass, reuseUserDir, gui, |
369 |
enableClasspathModules |
411 |
enableClasspathModules |
370 |
,honorAutoEager); |
412 |
,honorAutoEager, failOnMessage, failOnException); |
371 |
} |
413 |
} |
372 |
|
414 |
|
373 |
/** |
415 |
/** |
Lines 380-386
Link Here
|
380 |
return new Configuration( |
422 |
return new Configuration( |
381 |
clusterRegExp, moduleRegExp, parentClassLoader, tests, |
423 |
clusterRegExp, moduleRegExp, parentClassLoader, tests, |
382 |
latestTestCaseClass, reuse, gui, enableClasspathModules |
424 |
latestTestCaseClass, reuse, gui, enableClasspathModules |
383 |
,honorAutoEager); |
425 |
,honorAutoEager, failOnMessage, failOnException); |
384 |
} |
426 |
} |
385 |
} |
427 |
} |
386 |
|
428 |
|
Lines 618-623
Link Here
|
618 |
if (!config.gui) { |
660 |
if (!config.gui) { |
619 |
args.add("--nogui"); |
661 |
args.add("--nogui"); |
620 |
} |
662 |
} |
|
|
663 |
|
664 |
Test handler = NbModuleLogHandler.registerBuffer(config.failOnMessage, config.failOnException); |
621 |
m.invoke(null, (Object)args.toArray(new String[0])); |
665 |
m.invoke(null, (Object)args.toArray(new String[0])); |
622 |
|
666 |
|
623 |
ClassLoader global = Thread.currentThread().getContextClassLoader(); |
667 |
ClassLoader global = Thread.currentThread().getContextClassLoader(); |
Lines 645-656
Link Here
|
645 |
toRun.addTest(sndClazz.newInstance()); |
689 |
toRun.addTest(sndClazz.newInstance()); |
646 |
} |
690 |
} |
647 |
} |
691 |
} |
|
|
692 |
|
693 |
if (handler != null) { |
694 |
toRun.addTest(handler); |
695 |
} |
696 |
|
648 |
testCount = toRun.countTestCases(); |
697 |
testCount = toRun.countTestCases(); |
649 |
toRun.run(result); |
698 |
toRun.run(result); |
650 |
} catch (ClassNotFoundException ex) { |
699 |
} catch (ClassNotFoundException ex) { |
651 |
result.addError(this, ex); |
700 |
result.addError(this, ex); |
652 |
} catch (NoClassDefFoundError ex) { |
701 |
} catch (NoClassDefFoundError ex) { |
653 |
result.addError(this, ex); |
702 |
result.addError(this, ex); |
|
|
703 |
} |
704 |
if (handler != null) { |
705 |
NbModuleLogHandler.finish(); |
654 |
} |
706 |
} |
655 |
|
707 |
|
656 |
Class<?> lifeClazz = global.loadClass("org.openide.LifecycleManager"); // NOI18N |
708 |
Class<?> lifeClazz = global.loadClass("org.openide.LifecycleManager"); // NOI18N |