This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.

View | Details | Raw Unified | Return to bug 155444
Collapse All | Expand All

(-)a/nbjunit/apichanges.xml (+20 lines)
Lines 55-60 Link Here
55
    <!-- ACTUAL CHANGES BEGIN HERE: -->
55
    <!-- ACTUAL CHANGES BEGIN HERE: -->
56
56
57
<changes>
57
<changes>
58
    <change id="NbModuleSuite.failOn">
59
        <api name="nbjunit"/>
60
        <summary>Easy way to fail the test on error or warning</summary>
61
        <version major="1" minor="58"/>
62
        <date day="15" month="3" year="2009"/>
63
        <author login="jtulach"/>
64
        <compatibility addition="yes" semantic="compatible" binary="compatible" source="compatible" modification="no"/>
65
        <description>
66
            <p>
67
            Do you need to fail the test when some wrong message or
68
            exception is logged? Easy now with
69
            <a href="@TOP@/org/netbeans/junit/NbModuleSuite.Configuration.html#failOnMessage(java.util.logging.Level)">
70
                Configuration.failOnMessage(Level.WARNING)</a> and
71
            <a href="@TOP@/org/netbeans/junit/NbModuleSuite.Configuration.html#failOnException(java.util.logging.Level)">
72
                Configuration.failOnException(Level.INFO)</a>.
73
            </p>
74
        </description>
75
        <class package="org.netbeans.junit" name="NbModuleSuite"/>
76
        <issue number="155444"/>
77
    </change>
58
    <change id="NbModuleSuite.honorAutoloadEager">
78
    <change id="NbModuleSuite.honorAutoloadEager">
59
        <api name="nbjunit"/>
79
        <api name="nbjunit"/>
60
        <summary>Leave autoloads as autoloads and eagers as eager</summary>
80
        <summary>Leave autoloads as autoloads and eagers as eager</summary>
(-)a/nbjunit/manifest.mf (-1 / +1 lines)
Lines 1-5 Link Here
1
Manifest-Version: 1.0
1
Manifest-Version: 1.0
2
OpenIDE-Module: org.netbeans.modules.nbjunit/1
2
OpenIDE-Module: org.netbeans.modules.nbjunit/1
3
OpenIDE-Module-Localizing-Bundle: org/netbeans/junit/Bundle.properties
3
OpenIDE-Module-Localizing-Bundle: org/netbeans/junit/Bundle.properties
4
OpenIDE-Module-Specification-Version: 1.57
4
OpenIDE-Module-Specification-Version: 1.58
5
5
(-)a/nbjunit/src/org/netbeans/junit/Log.java (-29 / +30 lines)
Lines 281-320 Link Here
281
        if (record.getLevel().intValue() < getLevel().intValue()) {
281
        if (record.getLevel().intValue() < getLevel().intValue()) {
282
            return;
282
            return;
283
        }
283
        }
284
284
        StringBuffer sb = toString(record);
285
        StringBuffer sb = new StringBuffer();
286
        sb.append('[');
287
        sb.append(record.getLoggerName());
288
        sb.append("] THREAD: ");
289
        sb.append(Thread.currentThread().getName());
290
        sb.append(" MSG: ");
291
        String msg = record.getMessage();
292
        ResourceBundle b = record.getResourceBundle();
293
        if (b != null) {
294
            try {
295
                msg = b.getString(msg);
296
            } catch (MissingResourceException ex) {
297
                // ignore
298
            }
299
        }
300
        
301
        if (msg != null && record.getParameters() != null) {
302
            msg = MessageFormat.format(msg, record.getParameters());
303
        }
304
        sb.append(msg);
305
        
306
        Throwable t = record.getThrown();
307
        if (t != null) {
308
            for (StackTraceElement s : t.getStackTrace()) {
309
                sb.append("\n  ").append(s.toString());
310
            }
311
        }
312
        try {
285
        try {
313
            getLog(record).println(sb.toString());
286
            getLog(record).println(sb.toString());
314
        } catch (LinkageError err) {
287
        } catch (LinkageError err) {
315
            // prevent circular references
288
            // prevent circular references
316
        }
289
        }
317
318
290
319
        messages.append(sb.toString());
291
        messages.append(sb.toString());
320
        messages.append ('\n');
292
        messages.append ('\n');
Lines 448-451 Link Here
448
        }
420
        }
449
        
421
        
450
    } // end of InstancesHandler
422
    } // end of InstancesHandler
423
424
    static StringBuffer toString(LogRecord record) {
425
        StringBuffer sb = new StringBuffer();
426
        sb.append('[');
427
        sb.append(record.getLoggerName());
428
        sb.append("] THREAD: ");
429
        sb.append(Thread.currentThread().getName());
430
        sb.append(" MSG: ");
431
        String msg = record.getMessage();
432
        ResourceBundle b = record.getResourceBundle();
433
        if (b != null) {
434
            try {
435
                msg = b.getString(msg);
436
            } catch (MissingResourceException ex) {
437
                // ignore
438
            }
439
        }
440
        if (msg != null && record.getParameters() != null) {
441
            msg = MessageFormat.format(msg, record.getParameters());
442
        }
443
        sb.append(msg);
444
        Throwable t = record.getThrown();
445
        if (t != null) {
446
            for (StackTraceElement s : t.getStackTrace()) {
447
                sb.append("\n  ").append(s.toString());
448
            }
449
        }
450
        return sb;
451
    }
451
}
452
}
(-)a/nbjunit/src/org/netbeans/junit/NbModuleSuite.java (-13 / +65 lines)
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

Return to bug 155444