blob: 25a455361e3c8b817484067c6f6eb10409aa51e6 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
(function() {
if (! jasmine) {
throw new Exception("jasmine library does not exist in global namespace!");
}
/**
* Usage:
*
* jasmine.getEnv().addReporter(new jasmine.NetbeansReporter());
* jasmine.getEnv().execute();
*/
var NetbeansReporter = function() {
this.started = false;
this.finished = false;
this.REPORTER_MESSAGE = 'jasmine-netbeans-reporter ';
};
NetbeansReporter.prototype = {
reportRunnerStarting: function(runner) {
this.started = true;
this.start_time = (new Date()).getTime();
this.n = 0;
this.passes = 0;
this.failures = 0;
this.skipped = 0;
// should have at least 1 spec, otherwise it's considered a failure
this.log(this.REPORTER_MESSAGE + '1..'+ Math.max(runner.specs().length, 1));
},
reportSpecStarting: function(spec) {
this.start_time_spec = (new Date()).getTime();
this.n++;
},
reportSpecResults: function(spec) {
var dur = (new Date()).getTime() - this.start_time_spec;
var results = spec.results();
if (results.passed()) {
this.passes++;
this.log(this.REPORTER_MESSAGE + "ok " + this.n + " " + spec.suite.description + " " + spec.description + ", suite=" + spec.suite.description + ", testcase=" + spec.description + ", duration=" + dur);
} else if (results.skipped) {
this.skipped++;
this.log(this.REPORTER_MESSAGE + "ok " + this.n + " " + spec.suite.description + " " + spec.description + " # SKIP -, suite=" + spec.suite.description + ", testcase=" + spec.description);
} else {
this.failures++;
this.log(this.REPORTER_MESSAGE + "not ok " + this.n + " " + spec.suite.description + " " + spec.description + ", suite=" + spec.suite.description + ", testcase=" + spec.description + ", duration=" + dur);
var items = results.getItems();
var i = 0;
var errorMessage = '';
var expectationResult, stackMessage;
while (expectationResult = items[i++]) {
if (expectationResult.trace) {
stackMessage = expectationResult.trace.stack ? expectationResult.trace.stack : expectationResult.message;
errorMessage += '\n '+ stackMessage;
}
}
// add REPORTER_MESSAGE in the beginning of each stacktrace line
// so that they can be filtered out in TestRunnerReporter
errorMessage = errorMessage.replace(/\n/g, '\n' + this.REPORTER_MESSAGE);
this.log(errorMessage);
}
},
reportRunnerResults: function(runner) {
this.log(this.REPORTER_MESSAGE + 'tests ' + (this.passes + this.failures)+ ', pass ' + this.passes + ', fail ' + this.failures + ', skip ' + this.skipped);
this.finished = true;
},
log: function(str) {
var console = jasmine.getGlobal().console;
if (console && console.log) {
console.log(str);
}
}
};
// export public
jasmine.NetbeansReporter = NetbeansReporter;
})();