# Yahoo! UI Library

### yuitest 2.5.0

Yahoo! UI Library > yuitest > TestLogger.js (source view)

Show Private Show Protected

    YAHOO.namespace("tool");

    //-----------------------------------------------------------------------------
    // TestLogger object
    //-----------------------------------------------------------------------------

    /**
     * Displays test execution progress and results, providing filters based on
     * different key events.
     * @namespace YAHOO.tool
     * @class TestLogger
     * @constructor
     * @param {HTMLElement} element (Optional) The element to create the logger in.
     * @param {Object} config (Optional) Configuration options for the logger.
     */
    YAHOO.tool.TestLogger = function (element, config) {
        YAHOO.tool.TestLogger.superclass.constructor.call(this, element, config);
        this.init();
    };

    YAHOO.lang.extend(YAHOO.tool.TestLogger, YAHOO.widget.LogReader, {

        footerEnabled : true,
        newestOnTop : false,

        /**
         * Formats message string to HTML for output to console.
         * @private
         * @method formatMsg
         * @param oLogMsg {Object} Log message object.
         * @return {String} HTML-formatted message for output to console.
         */
        formatMsg : function(message /*:Object*/) {

            var category /*:String*/ = message.category;
            var text /*:String*/ = this.html2Text(message.msg);

            return "<pre><p><span class=\"" + category + "\">" + category.toUpperCase() + "</span> " + text + "</p></pre>";

        },

        //-------------------------------------------------------------------------
        // Private Methods
        //-------------------------------------------------------------------------

        /*
         * Initializes the logger.
         * @private
         */
        init : function () {

            //attach to any available TestRunner
            if (YAHOO.tool.TestRunner){
                this.setTestRunner(YAHOO.tool.TestRunner);
            }

            //hide useless sources
            this.hideSource("global");
            this.hideSource("LogReader");

            //hide useless message categories
            this.hideCategory("warn");
            this.hideCategory("window");
            this.hideCategory("time");

            //reset the logger
            this.clearConsole();
        },

        /**
         * Clears the reference to the TestRunner from previous operations. This
         * unsubscribes all events and removes the object reference.
         * @return {Void}
         * @static
         */
        clearTestRunner : function () /*:Void*/ {
            if (this._runner){
                this._runner.unsubscribeAll();
                this._runner = null;
            }
        },

        /**
         * Sets the source test runner that the logger should monitor.
         * @param {YAHOO.tool.TestRunner} testRunner The TestRunner to observe.
         * @return {Void}
         * @static
         */
        setTestRunner : function (testRunner /*:YAHOO.tool.TestRunner*/) /*:Void*/ {

            if (this._runner){
                this.clearTestRunner();
            }

            this._runner = testRunner;

            //setup event _handlers
            testRunner.subscribe(testRunner.TEST_PASS_EVENT, this._handleTestRunnerEvent, this, true);
            testRunner.subscribe(testRunner.TEST_FAIL_EVENT, this._handleTestRunnerEvent, this, true);
            testRunner.subscribe(testRunner.TEST_IGNORE_EVENT, this._handleTestRunnerEvent, this, true);
            testRunner.subscribe(testRunner.BEGIN_EVENT, this._handleTestRunnerEvent, this, true);
            testRunner.subscribe(testRunner.COMPLETE_EVENT, this._handleTestRunnerEvent, this, true);
            testRunner.subscribe(testRunner.TEST_SUITE_BEGIN_EVENT, this._handleTestRunnerEvent, this, true);
            testRunner.subscribe(testRunner.TEST_SUITE_COMPLETE_EVENT, this._handleTestRunnerEvent, this, true);
            testRunner.subscribe(testRunner.TEST_CASE_BEGIN_EVENT, this._handleTestRunnerEvent, this, true);
            testRunner.subscribe(testRunner.TEST_CASE_COMPLETE_EVENT, this._handleTestRunnerEvent, this, true);
        },

        //-------------------------------------------------------------------------
        // Event Handlers
        //-------------------------------------------------------------------------

        /**
         * Handles all TestRunner events, outputting appropriate data into the console.
         * @param {Object} data The event data object.
         * @return {Void}
         * @private
         */
        _handleTestRunnerEvent : function (data /*:Object*/) /*:Void*/ {

            //shortcut variables
            var TestRunner /*:Object*/ = YAHOO.tool.TestRunner;

            //data variables
            var message /*:String*/ = "";
            var messageType /*:String*/ = "";

            switch(data.type){
                case TestRunner.BEGIN_EVENT:
                    message = "Testing began at " + (new Date()).toString() + ".";
                    messageType = "info";
                    break;

                case TestRunner.COMPLETE_EVENT:
                    message = "Testing completed at " + (new Date()).toString() + ".\nPassed:" +
                        data.results.passed + " Failed:" + data.results.failed + " Total:" + data.results.total;
                    messageType = "info";
                    break;

                case TestRunner.TEST_FAIL_EVENT:
                    message = data.testName + ": " + data.error.getMessage();
                    messageType = "fail";
                    break;

                case TestRunner.TEST_IGNORE_EVENT:
                    message = data.testName + ": ignored.";
                    messageType = "ignore";
                    break;

                case TestRunner.TEST_PASS_EVENT:
                    message = data.testName + ": passed.";
                    messageType = "pass";
                    break;

                case TestRunner.TEST_SUITE_BEGIN_EVENT:
                    message = "Test suite \"" + data.testSuite.name + "\" started.";
                    messageType = "info";
                    break;

                case TestRunner.TEST_SUITE_COMPLETE_EVENT:
                    message = "Test suite \"" + data.testSuite.name + "\" completed.\nPassed:" +
                        data.results.passed + " Failed:" + data.results.failed + " Total:" + data.results.total;
                    messageType = "info";
                    break;

                case TestRunner.TEST_CASE_BEGIN_EVENT:
                    message = "Test case \"" + data.testCase.name + "\" started.";
                    messageType = "info";
                    break;

                case TestRunner.TEST_CASE_COMPLETE_EVENT:
                    message = "Test case \"" + data.testCase.name + "\" completed.\nPassed:" +
                        data.results.passed + " Failed:" + data.results.failed + " Total:" + data.results.total;
                    messageType = "info";
                    break;
                default:
                    message = "Unexpected event " + data.type;
                    message = "info";
            }

            YAHOO.log(message, messageType, "TestRunner");
        }

    });

Copyright © 2007 Yahoo! Inc. All rights reserved.