API Docs for: 0.0.7
Show:

File: index.js

/*!
 *
 * Copyright (c) 2013 Sebastian Golasch
 *
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the "Software"),
 * to deal in the Software without restriction, including without limitation
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 * and/or sell copies of the Software, and to permit persons to whom the
 * Software is furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included
 * in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 * DEALINGS IN THE SOFTWARE.
 *
 */

'use strict';

// int. globals
var reporter = null;

/**
 * Daleks basic reporter, all the lovely colors & symbols you see when running dalek.
 * The reporter will be installed by default.
 *
 * If you would like to use the reporter in addition to another one,
 * you can start dalek with a special command line argument
 *
 * ```bash
 * $ dalek your_test.js -r console,junit
 * ```
 *
 * or you can add it to your Dalekfile
 *
 * ```javascript
 * "reporter": ["console", "junit"]
 * ```
 *
 * @class Reporter
 * @constructor
 * @part Console
 * @api
 */

var Reporter = function (opts) {
  var loglevel = opts && opts.logLevel ? parseInt(opts.logLevel, 10) : 1;
  this.level = (loglevel >= -1 && loglevel <= 5) ? loglevel : 1;
  this.events = opts.events;

  // set color & symbols flags
  this.noColor = opts.config.config.noColors;
  this.noSymbols = opts.config.config.noSymbols;

  this.importLogModule();
  this.startListening();
};

/**
 * @module Reporter
 */

module.exports = function (opts) {
  if (reporter === null) {
    reporter = new Reporter(opts);
  }

  return reporter;
};

Reporter.prototype = {

  /**
   * Imports an output module with the correct log state
   *
   * @method importLogModule
   * @param {object} data
   * @chainable
   */

  importLogModule: function () {
    var logModule = require('./lib/levelbase');
    if (this.level !== -1) {
      logModule = require('./lib/loglevel/level' + this.level);
    }

    var methods = Object.keys(logModule.prototype);

    methods.forEach(function (method) {
      this[method] = logModule.prototype[method];
    }.bind(this));
    return this;
  },

  /**
   * Connects to all the event listeners
   *
   * @method startListening
   * @param {object} data
   * @chainable
   */

  startListening: function () {
    // assertion & action status
    this.events.on('report:assertion', this.outputAssertionResult.bind(this));
    this.events.on('report:assertion:status', this.outputAssertionExpectation.bind(this));
    this.events.on('report:action', this.outputAction.bind(this));

    // test status
    this.events.on('report:test:finished', this.outputTestFinished.bind(this));
    this.events.on('report:test:started', this.outputTestStarted.bind(this));

    // runner status
    this.events.on('report:runner:started', this.outputRunnerStarted.bind(this));
    this.events.on('report:runner:finished', this.outputRunnerFinished.bind(this));

    // session & browser status
    this.events.on('report:run:browser', this.outputRunBrowser.bind(this));
    this.events.on('report:driver:status', this.outputOSVersion.bind(this));
    this.events.on('report:driver:session', this.outputBrowserVersion.bind(this));

    // remote connections
    this.events.on('report:remote:ready', this.remoteConnectionReady.bind(this));
    this.events.on('report:remote:established', this.remoteConnectionEstablished.bind(this));
    this.events.on('report:remote:closed', this.remoteConnectionClosed.bind(this));

    // logs
    this.events.on('report:log:system', this.outputLogUser.bind(this, 'system'));
    this.events.on('report:log:driver', this.outputLogUser.bind(this, 'driver'));
    this.events.on('report:log:browser', this.outputLogUser.bind(this, 'browser'));
    this.events.on('report:log:user', this.outputLogUser.bind(this, 'user'));
    this.events.on('report:log:system:webdriver', this.outputLogUser.bind(this, 'webdriver'));

    // errors & warnings
    this.events.on('error', this.outputError.bind(this));
    this.events.on('warning', this.outputWarning.bind(this));

    // reports
    this.events.on('report:written', this.outputReportWritten.bind(this));

    return this;
  }
};