// Copyright 2014, Yahoo! Inc.
// Copyrights licensed under the Mit License. See the accompanying LICENSE file for terms.
var AbstractReporter = require('../abstractReporter');
/**
* @class EventReporter
* @extends AbstractReporter
* @constructor
*
* @event message Includes all messages
* @event admin Includes all administrative messages
* @event item Includes all item data messages
* @event suite Includes all suite messages
* @event test Includes all test messages
*
* @event start Start of recording
* @event stop Stopping the recording
* @event complete Completion
*
* @event itemData Data assigned to item
* @event itemMessage Message assigned to item
*
* @event suiteStart Start of a suite
* @event suiteEnd End of a suite
*
* @event testStart Start of a test
* @event testFailed Marks test as failed
* @event testError Marks test as having errors
* @event testPassed Marks test as passed
* @event testUndefined Marks test as undefined
* @event testSkipped Marks test as skipped
* @event testIncomplete Marks test as incomplete
*/
var EventReporter = AbstractReporter.extend(
{
/**
* Initializes the instance
*
* @method initialize
*/
initialize: function () {
this.__super();
this.on('message', function (areaType, messageType, params) {
this.emit(areaType, messageType, params);
this.emit(messageType, params);
}.bind(this));
},
/**
* Called when reporting starts
*
* @method start
*/
start: function () {
this.emit('message', 'admin', 'start');
},
/**
* Called when reporting stops
*
* @method stop
*/
stop: function () {
this.emit('message', 'admin', 'stop');
},
/**
* Reporting is completed
*
* @method complete
*/
complete: function () {
this.emit('message', 'admin', 'complete');
},
/**
* Called when any item has custom data
*
* @method itemData
* @param {string} id
* @param {string} json JSON-data
*/
itemData: function (id, json) {
var args = [id, json];
this.emit('message', 'item', 'itemData', args);
},
/**
* Called when any item has a custom message
*
* @method itemMessage
* @param {string} id
* @param {string} message
*/
itemMessage: function (id, message) {
var args = [id, message];
this.emit('message', 'item', 'itemMessage', args);
},
/**
* Called when suite starts
*
* @method suiteStart
* @param {string} id
* @param {string} parentId
* @param {string} suiteName
*/
suiteStart: function (id, parentId, suiteName) {
var args = [id, parentId, suiteName];
this.emit('message', 'suite', 'suiteStart', args);
},
/**
* Called when suite ends
*
* @method suiteEnd
* @param {string} id
*/
suiteEnd: function (id) {
var args = [id];
this.emit('message', 'suite', 'suiteEnd', args);
},
/**
* Called when test starts
*
* @method testStart
* @param {string} id
* @param {string} parentId
* @param {string} testName
*/
testStart: function (id, parentId, testName) {
var args = [id, parentId, testName];
this.emit('message', 'test', 'testStart', args);
},
/**
* Called when test fails
*
* @method testFailed
* @param {string} id
* @param {string} [message]
* @param {string} [reason]
*/
testFailed: function (id, message, reason) {
var args = [id, message, reason];
this.emit('message', 'test', 'testFailed', args);
},
/**
* Called when test has an error
*
* @method testError
* @param {string} id
* @param {string} [message]
* @param {string} [reason]
*/
testError: function (id, message, reason) {
var args = [id, message, reason];
this.emit('message', 'test', 'testError', args);
},
/**
* Called when test has passed
*
* @method testPassed
* @param {string} id
*/
testPassed: function (id) {
var args = [id];
this.emit('message', 'test', 'testPassed', args);
},
/**
* Called when test is undefined
*
* @method testUndefined
* @param {string} id
*/
testUndefined: function (id) {
var args = [id];
this.emit('message', 'test', 'testUndefined', args);
},
/**
* Called when test is skipped
*
* @method testSkipped
* @param {string} id
* @param {string} [reason]
*/
testSkipped: function (id, reason) {
var args = [id, reason];
this.emit('message', 'test', 'testSkipped', args);
},
/**
* Called when test is incomplete
*
* @method testIncomplete
* @param {string} id
*/
testIncomplete: function (id) {
var args = [id];
this.emit('message', 'test', 'testIncomplete', args);
}
});
module.exports = EventReporter;