// Copyright 2014, Yahoo! Inc.
// Copyrights licensed under the Mit License. See the accompanying LICENSE file for terms.
var AbstractReporter = require('../abstractReporter');
/**
* @class SpecReporter
* @extends AbstractReporter
* @constructor
*
* @property {int} _commentCounter
*/
var SpecReporter = AbstractReporter.extend(
{
/**
* Initializes the instance
*
* @method initialize
*/
initialize: function () {
this.__super();
if (this.getOptions().progress === undefined) {
this.getOptions().progress = true;
}
if (this.getOptions().output === undefined) {
this.getOptions().output = true;
}
},
/**
* Spacing for object
*
* @method _spacing
* @param {object} obj
* @return {string}
* @private
*/
_spacing: function (obj) {
return new Array(obj.level + 1).join(' ');
},
/**
* Called when reporting starts
*
* @method start
*/
start: function () {
this.__super();
this._commentCounter = 0;
},
/**
* Called when reporting stops
*
* @method stop
*/
stop: function () {
this.__super();
this.console(undefined, 'stop', "\n");
},
/**
* Called when suite starts
*
* @method suiteStart
* @param {string} id
* @param {string} parentId
* @param {string} suiteName
*/
suiteStart: function (id, parentId, suiteName) {
this.__super(id, parentId, suiteName);
this.console(id, 'start', "\n" + this._spacing(this.getContainer().getAction(id)) + suiteName + "\n");
},
/**
* Called when suite ends
*
* @method suiteEnd
* @param {string} id
*/
suiteEnd: function (id) {
this.__super(id);
},
/**
* Called when test fails
*
* @method testFailed
* @param {string} id
* @param {string} [message]
* @param {string} [reason]
*/
testFailed: function (id, message, reason) {
var action = this.getContainer().getAction(id),
start = '', end = '';
this.__super(id, message, reason);
if (this.useColor()) {
start = '\x1B[31m';
end = '\x1B[0m';
}
this._commentCounter++;
this.console(id, 'end', this._spacing(action) + start + this._commentCounter + ') ' + action.name + end + "\n");
},
/**
* Called when test has an error
*
* @method testError
* @param {string} id
* @param {string} [message]
* @param {string} [reason]
*/
testError: function (id, message, reason) {
var action = this.getContainer().getAction(id),
start = '', end = '';
this.__super(id, message, reason);
if (this.useColor()) {
start = '\x1B[31m';
end = '\x1B[0m';
}
this._commentCounter++;
this.console(id, 'end', this._spacing(action) + start + this._commentCounter + ') ' + action.name + end + "\n");
},
/**
* Called when test has passed
*
* @method testPassed
* @param {string} id
*/
testPassed: function (id) {
var action = this.getContainer().getAction(id),
checkMark = '✓',
start = '', end = '';
this.__super(id);
if (this.useColor()) {
checkMark = '\x1B[32m' + checkMark + '\x1B[0m';
start = '\x1B[37m';
end = '\x1B[0m';
}
this.console(id, 'end', this._spacing(action) + checkMark + ' ' + start + action.name + end + "\n");
},
/**
* Called when test is undefined
*
* @method testUndefined
* @param {string} id
*/
testUndefined: function (id) {
var action = this.getContainer().getAction(id),
start = '', end = '';
this.__super(id);
if (this.useColor()) {
start = '\x1B[33m';
end = '\x1B[0m';
}
this._commentCounter++;
this.console(id, 'end', this._spacing(action) + start + this._commentCounter + ') ' + action.name + end + "\n");
},
/**
* Called when test is skipped
*
* @method testSkipped
* @param {string} id
* @param {string} [reason]
*/
testSkipped: function (id, reason) {
var action = this.getContainer().getAction(id),
start = '', end = '';
this.__super(id, reason);
if (this.useColor()) {
start = '\x1B[35m';
end = '\x1B[0m';
}
this._commentCounter++;
this.console(id, 'end', this._spacing(action) + start + this._commentCounter + ') ' + action.name + end + "\n");
},
/**
* Called when test is incomplete
*
* @method testIncomplete
* @param {string} id
*/
testIncomplete: function (id) {
var action = this.getContainer().getAction(id),
dash = '-',
start = '', end = '';
this.__super(id);
if (this.useColor()) {
start = '\x1B[34m';
end = '\x1B[0m';
}
this.console(id, 'end', this._spacing(action) + start + dash + ' ' + action.name + end + "\n");
}
});
module.exports = SpecReporter;