1 jls.loader.provide('jls.jsunit.TestRunner');
  2 
  3 jls.loader.require('jls.lang.AssertionError');
  4 jls.loader.require('jls.jsunit.TestCase');
  5 jls.loader.require('jls.jsunit.TestResult');
  6 jls.loader.require('jls.jsunit.TestSuite');
  7 
  8 jls.jsunit.TestRunner = jls.lang.Class.create({});
  9 
 10 Object.extend(jls.jsunit.TestRunner,
 11 {
 12     isTest : function(name) {
 13         var found = name.match(/([A-Z][^\/]+Test)\.js$/);
 14         return found && found.length > 0;
 15     },
 16     getClassname : function(name) {
 17         return name.substr(0, name.length - 3).replace(/\//g, '.');
 18     },
 19     printUsage : function() {
 20         jls.lang.System.err.println('Usage: jls jls.jsunit.TestRunner [-help|-all|-list|-gc|-verbose] classnames...');
 21     },
 22     main : function(args) {
 23         /*
 24          * use jls.loader.visitPaths to find test classes
 25          * test with jls.test.Struct
 26          */
 27         if (args <= 0) {
 28             jls.jsunit.TestRunner.printUsage();
 29             jls.lang.Runtime.exit(22);
 30         }
 31         var tr = new jls.jsunit.TestRunner.TestResultDeco();
 32         var ts = new jls.jsunit.TestSuite();
 33         
 34         for (var i = 0; i < args.length; i++) {
 35             switch (args[i]) {
 36             case '-all':
 37                 // Add all tests
 38                 //jls.lang.System.out.println('Running all tests...');
 39                 jls.loader.visitPaths(function(name) {
 40                     if (jls.jsunit.TestRunner.isTest(name)) {
 41                         ts.addTestSuite(jls.jsunit.TestRunner.getClassname(name));
 42                     }
 43                     return true;
 44                 });
 45                 break;
 46             case '-list':
 47                 jls.lang.System.out.println('Available tests:');
 48                 jls.loader.visitPaths(function(name) {
 49                     if (jls.jsunit.TestRunner.isTest(name)) {
 50                         jls.lang.System.out.println('\t' + jls.jsunit.TestRunner.getClassname(name));
 51                     }
 52                     return true;
 53                 });
 54                 jls.lang.System.exit(0);
 55                 break;
 56             case '-help':
 57                 jls.jsunit.TestRunner.printUsage();
 58                 jls.lang.Runtime.exit(0);
 59                 break;
 60             case '-gc':
 61                 tr.setGC(true);
 62                 break;
 63             case '-verbose':
 64                 tr.setVerbose(true);
 65                 break;
 66             default:
 67                 ts.addTestSuite(args[i]);
 68                 break;
 69             }
 70         }
 71         if (ts.testCount() == 0) {
 72             jls.jsunit.TestRunner.printUsage();
 73             jls.lang.Runtime.exit(22);
 74         }
 75         ts.run(tr);
 76         //jls.lang.System.out.println(tr.toString());
 77         tr.print();
 78     }
 79 });
 80 
 81 jls.jsunit.TestRunner.TestResultDeco = jls.lang.Class.create(jls.jsunit.TestResult,
 82 {
 83     initialize : function($super) {
 84         $super();
 85 		this._verbose = false;
 86 		this._gc = false;
 87     },
 88     setVerbose : function(value) {
 89 		this._verbose = value;
 90     },
 91     setGC : function(value) {
 92 		this._gc = value;
 93     },
 94     startTest : function($super, test) {
 95         $super(test);
 96         if (this._verbose) {
 97             jls.lang.System.out.println('Running: ' + jls.loader.getClassname(test) + '.' + test.getName() + '()');
 98         }
 99     },
100     endTest : function($super, test) {
101         $super(test);
102         if (this._gc) {
103             jls.lang.Runtime.gc();
104         }
105     },
106     addFailure : function($super, test, e) {
107         $super(test, e);
108         if (this._verbose) {
109             jls.lang.System.out.println('Test: ' + jls.loader.getClassname(test) + '.' + test.getName() + '() failed due to "' + e.getMessage() + '"');
110         }
111     },
112     addError : function($super, test, e) {
113         $super(test, e);
114         if (this._verbose) {
115             jls.lang.System.out.println('Test: ' + jls.loader.getClassname(test) + '.' + test.getName() + '() in error due to:');
116             jls.lang.Exception.wrap(e).printStackTrace(jls.lang.System.out);
117         }
118     },
119     print : function(ps) {
120         ps = ps || jls.lang.System.out;
121         ps.println(this.toString());
122         for (var i = 0; i < this.getErrors().length; i++) {
123             var tf = this.getErrors()[i];
124             var tfe = tf.thrownException();
125             ps.println('Test "' + tf.failedTest().getName() + '" in error due to:');
126 			jls.lang.Exception.wrap(tfe).printStackTrace(ps);
127         }
128         for (var i = 0; i < this.getFailures().length; i++) {
129             var tf = this.getFailures()[i];
130             ps.println('Test "' + tf.failedTest().getName() + '" failed due to "' + tf.thrownException().getMessage() + '"');
131         }
132     }
133 });
134 
135