src/cm/media/js/lib/yui/yui3-3.15.0/build/test/test.js
author ymh <ymh.work@gmail.com>
Fri, 14 Mar 2014 13:16:10 +0100
changeset 611 fa66f4bb1563
parent 602 e16a97fb364a
permissions -rw-r--r--
add some more custom config and put every thing in comment in the custom.yaml template
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
602
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     1
YUI.add('test', function (Y, NAME) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     2
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     3
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     4
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     5
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     6
 * YUI Test Framework
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     7
 * @module test
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     8
 * @main test
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     9
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    10
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    11
/*
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    12
 * The root namespace for YUI Test.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    13
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    14
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    15
//So we only ever have one YUITest object that's shared
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    16
if (YUI.YUITest) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    17
    Y.Test = YUI.YUITest;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    18
} else { //Ends after the YUITest definitions
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    19
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    20
    //Make this global for back compat
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    21
    YUITest = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    22
        version: "@VERSION@",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    23
        guid: function(pre) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    24
            return Y.guid(pre);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    25
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    26
    };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    27
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    28
Y.namespace('Test');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    29
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    30
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    31
//Using internal YUI methods here
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    32
YUITest.Object = Y.Object;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    33
YUITest.Array = Y.Array;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    34
YUITest.Util = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    35
    mix: Y.mix,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    36
    JSON: Y.JSON
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    37
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    38
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    39
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    40
 * Simple custom event implementation.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    41
 * @namespace Test
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    42
 * @module test
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    43
 * @class EventTarget
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    44
 * @constructor
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    45
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    46
YUITest.EventTarget = function(){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    47
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    48
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    49
     * Event handlers for the various events.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    50
     * @type Object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    51
     * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    52
     * @property _handlers
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    53
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    54
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    55
    this._handlers = {};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    56
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    57
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    58
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    59
YUITest.EventTarget.prototype = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    60
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    61
    //restore prototype
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    62
    constructor: YUITest.EventTarget,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    63
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    64
    //-------------------------------------------------------------------------
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    65
    // Event Handling
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    66
    //-------------------------------------------------------------------------
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    67
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    68
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    69
     * Adds a listener for a given event type.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    70
     * @param {String} type The type of event to add a listener for.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    71
     * @param {Function} listener The function to call when the event occurs.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    72
     * @method attach
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    73
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    74
    attach: function(type, listener){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    75
        if (typeof this._handlers[type] == "undefined"){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    76
            this._handlers[type] = [];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    77
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    78
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    79
        this._handlers[type].push(listener);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    80
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    81
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    82
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    83
     * Adds a listener for a given event type.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    84
     * @param {String} type The type of event to add a listener for.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    85
     * @param {Function} listener The function to call when the event occurs.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    86
     * @method subscribe
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    87
     * @deprecated
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    88
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    89
    subscribe: function(type, listener){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    90
        this.attach.apply(this, arguments);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    91
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    92
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    93
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    94
     * Fires an event based on the passed-in object.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    95
     * @param {Object|String} event An object with at least a 'type' attribute
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    96
     *      or a string indicating the event name.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    97
     * @method fire
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    98
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    99
    fire: function(event){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   100
        if (typeof event == "string"){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   101
            event = { type: event };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   102
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   103
        if (!event.target){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   104
            event.target = this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   105
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   106
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   107
        if (!event.type){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   108
            throw new Error("Event object missing 'type' property.");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   109
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   110
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   111
        if (this._handlers[event.type] instanceof Array){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   112
            var handlers = this._handlers[event.type];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   113
            for (var i=0, len=handlers.length; i < len; i++){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   114
                handlers[i].call(this, event);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   115
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   116
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   117
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   118
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   119
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   120
     * Removes a listener for a given event type.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   121
     * @param {String} type The type of event to remove a listener from.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   122
     * @param {Function} listener The function to remove from the event.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   123
     * @method detach
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   124
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   125
    detach: function(type, listener){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   126
        if (this._handlers[type] instanceof Array){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   127
            var handlers = this._handlers[type];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   128
            for (var i=0, len=handlers.length; i < len; i++){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   129
                if (handlers[i] === listener){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   130
                    handlers.splice(i, 1);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   131
                    break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   132
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   133
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   134
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   135
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   136
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   137
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   138
     * Removes a listener for a given event type.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   139
     * @param {String} type The type of event to remove a listener from.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   140
     * @param {Function} listener The function to remove from the event.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   141
     * @method unsubscribe
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   142
     * @deprecated
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   143
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   144
    unsubscribe: function(type, listener){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   145
        this.detach.apply(this, arguments);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   146
    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   147
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   148
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   149
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   150
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   151
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   152
 * A test suite that can contain a collection of TestCase and TestSuite objects.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   153
 * @param {String||Object} data The name of the test suite or an object containing
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   154
 *      a name property as well as setUp and tearDown methods.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   155
 * @namespace Test
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   156
 * @module test
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   157
 * @class TestSuite
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   158
 * @constructor
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   159
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   160
YUITest.TestSuite = function (data) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   161
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   162
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   163
     * The name of the test suite.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   164
     * @type String
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   165
     * @property name
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   166
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   167
    this.name = "";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   168
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   169
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   170
     * Array of test suites and test cases.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   171
     * @type Array
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   172
     * @property items
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   173
     * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   174
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   175
    this.items = [];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   176
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   177
    //initialize the properties
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   178
    if (typeof data == "string"){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   179
        this.name = data;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   180
    } else if (data instanceof Object){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   181
        for (var prop in data){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   182
            if (data.hasOwnProperty(prop)){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   183
                this[prop] = data[prop];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   184
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   185
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   186
    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   187
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   188
    //double-check name
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   189
    if (this.name === "" || !this.name) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   190
        this.name = YUITest.guid("testSuite_");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   191
    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   192
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   193
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   194
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   195
YUITest.TestSuite.prototype = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   196
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   197
    //restore constructor
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   198
    constructor: YUITest.TestSuite,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   199
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   200
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   201
     * Adds a test suite or test case to the test suite.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   202
     * @param {Test.TestSuite||YUITest.TestCase} testObject The test suite or test case to add.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   203
     * @method add
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   204
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   205
    add : function (testObject) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   206
        if (testObject instanceof YUITest.TestSuite || testObject instanceof YUITest.TestCase) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   207
            this.items.push(testObject);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   208
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   209
        return this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   210
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   211
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   212
    //-------------------------------------------------------------------------
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   213
    // Stub Methods
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   214
    //-------------------------------------------------------------------------
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   215
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   216
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   217
     * Function to run before each test is executed.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   218
     * @method setUp
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   219
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   220
    setUp : function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   221
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   222
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   223
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   224
     * Function to run after each test is executed.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   225
     * @method tearDown
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   226
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   227
    tearDown: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   228
    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   229
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   230
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   231
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   232
 * Test case containing various tests to run.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   233
 * @param template An object containing any number of test methods, other methods,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   234
 *                 an optional name, and anything else the test case needs.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   235
 * @module test
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   236
 * @class TestCase
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   237
 * @namespace Test
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   238
 * @constructor
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   239
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   240
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   241
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   242
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   243
YUITest.TestCase = function (template) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   244
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   245
    /*
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   246
     * Special rules for the test case. Possible subobjects
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   247
     * are fail, for tests that should fail, and error, for
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   248
     * tests that should throw an error.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   249
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   250
    this._should = {};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   251
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   252
    //copy over all properties from the template to this object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   253
    for (var prop in template) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   254
        this[prop] = template[prop];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   255
    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   256
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   257
    //check for a valid name
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   258
    if (typeof this.name != "string") {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   259
        this.name = YUITest.guid("testCase_");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   260
    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   261
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   262
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   263
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   264
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   265
Default delay for a test failure when `wait()` is called without a _delay_.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   266
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   267
@property DEFAULT_WAIT
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   268
@type {Number}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   269
@default 10000
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   270
@static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   271
**/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   272
YUITest.TestCase.DEFAULT_WAIT = 10000;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   273
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   274
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   275
Calls `YUITest.Assert.fail()` with a message indicating `wait()` was called,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   276
but `resume()` was never called.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   277
 
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   278
@method _waitTimeout
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   279
@static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   280
@protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   281
**/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   282
YUITest.TestCase._waitTimeout = function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   283
     YUITest.Assert.fail("Timeout: wait() called but resume() never called.");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   284
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   285
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   286
YUITest.TestCase.prototype = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   287
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   288
    //restore constructor
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   289
    constructor: YUITest.TestCase,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   290
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   291
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   292
     * Method to call from an async init method to
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   293
     * restart the test case. When called, returns a function
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   294
     * that should be called when tests are ready to continue.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   295
     * @method callback
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   296
     * @return {Function} The function to call as a callback.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   297
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   298
    callback: function(){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   299
        return YUITest.TestRunner.callback.apply(YUITest.TestRunner,arguments);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   300
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   301
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   302
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   303
     * Resumes a paused test and runs the given function.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   304
     * @param {Function} segment (Optional) The function to run.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   305
     *      If omitted, the test automatically passes.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   306
     * @method resume
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   307
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   308
    resume : function (segment) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   309
        YUITest.TestRunner.resume(segment);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   310
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   311
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   312
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   313
     * Causes the test case to wait a specified amount of time and then
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   314
     * continue executing the given code.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   315
     * @param {Function} segment (Optional) The function to run after the delay.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   316
     *      If omitted, the TestRunner will wait until resume() is called.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   317
     * @param {Number} delay (Optional) The number of milliseconds to wait before running
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   318
     *      the function. If omitted, defaults to `DEFAULT_WAIT` ms (10s).
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   319
     * @method wait
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   320
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   321
    wait : function (segment, delay){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   322
        delay = (typeof segment === 'number') ? segment :
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   323
                (typeof delay   === 'number') ? delay :
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   324
                YUITest.TestCase.DEFAULT_WAIT;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   325
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   326
        if (typeof segment !== 'function') {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   327
            segment = YUITest.TestCase._waitTimeout;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   328
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   329
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   330
        throw new YUITest.Wait(segment, delay);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   331
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   332
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   333
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   334
    Creates a callback that automatically resumes the test. Parameters as passed
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   335
    on to the callback.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   336
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   337
    @method next
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   338
    @param {Function} callback Callback to call after resuming the test.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   339
    @return {Function} wrapped callback that resumes the test.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   340
    @example
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   341
    ```
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   342
    // using test.resume()
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   343
    Y.jsonp(uri, function (response) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   344
        test.resume(function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   345
            Y.Assert.isObject(response);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   346
        });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   347
    });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   348
    test.wait();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   349
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   350
    // using test.next()
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   351
    Y.jsonp(uri, test.next(function (response) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   352
        Y.Assert.isObject(response);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   353
    }));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   354
    test.wait();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   355
    ```
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   356
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   357
    next: function (callback) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   358
        var self = this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   359
        return function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   360
            var args = arguments;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   361
            self.resume(function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   362
                callback.apply(this, args);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   363
            });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   364
        };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   365
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   366
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   367
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   368
    Delays the current test until _condition_ returns a truthy value. If
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   369
    _condition_ fails to return a truthy value before _timeout_ milliseconds
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   370
    have passed, the test fails. Default _timeout_ is 10s.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   371
    
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   372
    _condition_ will be executed every _increment_ milliseconds (default 100).
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   373
    
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   374
    @method waitFor
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   375
    @param {Function} condition Function executed to indicate whether to
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   376
                        execute _segment_
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   377
    @param {Function} segment Function to check the success or failure of this
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   378
                        test
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   379
    @param {Number} [timeout=10000] Maximum number of milliseconds to wait for
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   380
                        _condition_ to return true
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   381
    @param {Number} [increment=100] Milliseconds to wait before checking
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   382
                        _condition_
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   383
    **/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   384
    waitFor: function (condition, segment, timeout, increment) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   385
        var self = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   386
            endTime;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   387
 
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   388
        if ((typeof condition !== 'function') ||
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   389
            (typeof segment !== 'function')) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   390
            self.fail('waitFor() called with invalid parameters.');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   391
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   392
        
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   393
        if (typeof timeout !== 'number') {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   394
            timeout = YUITest.TestCase.DEFAULT_WAIT;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   395
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   396
        
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   397
        endTime = (+new Date()) + timeout;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   398
        
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   399
        if (typeof increment !== 'number') {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   400
            increment = 100;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   401
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   402
        
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   403
        self.wait(function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   404
            var now;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   405
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   406
            if (condition.call(self)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   407
                segment.call(self);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   408
            } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   409
                now = (+new Date());
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   410
                
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   411
                if (now > endTime) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   412
                    YUITest.TestCase._waitTimeout();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   413
                } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   414
                    self.waitFor(condition, segment, endTime - now, increment);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   415
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   416
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   417
        }, increment);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   418
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   419
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   420
    //-------------------------------------------------------------------------
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   421
    // Assertion Methods
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   422
    //-------------------------------------------------------------------------
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   423
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   424
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   425
     * Asserts that a given condition is true. If not, then a YUITest.AssertionError object is thrown
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   426
     * and the test fails.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   427
     * @method assert
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   428
     * @param {Boolean} condition The condition to test.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   429
     * @param {String} message The message to display if the assertion fails.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   430
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   431
    assert : function (condition, message){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   432
        YUITest.Assert._increment();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   433
        if (!condition){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   434
            throw new YUITest.AssertionError(YUITest.Assert._formatMessage(message, "Assertion failed."));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   435
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   436
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   437
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   438
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   439
     * Forces an assertion error to occur. Shortcut for YUITest.Assert.fail().
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   440
     * @method fail
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   441
     * @param {String} message (Optional) The message to display with the failure.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   442
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   443
    fail: function (message) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   444
        YUITest.Assert.fail(message);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   445
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   446
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   447
    //-------------------------------------------------------------------------
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   448
    // Stub Methods
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   449
    //-------------------------------------------------------------------------
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   450
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   451
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   452
     * Function to run once before tests start to run.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   453
     * This executes before the first call to setUp().
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   454
     * @method init
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   455
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   456
    init: function(){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   457
        //noop
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   458
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   459
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   460
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   461
     * Function to run once after tests finish running.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   462
     * This executes after the last call to tearDown().
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   463
     * @method destroy
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   464
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   465
    destroy: function(){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   466
        //noop
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   467
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   468
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   469
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   470
     * Function to run before each test is executed.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   471
     * @method setUp
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   472
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   473
    setUp : function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   474
        //noop
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   475
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   476
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   477
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   478
     * Function to run after each test is executed.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   479
     * @method tearDown
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   480
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   481
    tearDown: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   482
        //noop
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   483
    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   484
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   485
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   486
 * An object object containing test result formatting methods.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   487
 * @namespace Test
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   488
 * @module test
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   489
 * @class TestFormat
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   490
 * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   491
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   492
YUITest.TestFormat = function(){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   493
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   494
    /* (intentionally not documented)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   495
     * Basic XML escaping method. Replaces quotes, less-than, greater-than,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   496
     * apostrophe, and ampersand characters with their corresponding entities.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   497
     * @param {String} text The text to encode.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   498
     * @return {String} The XML-escaped text.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   499
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   500
    function xmlEscape(text){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   501
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   502
        return text.replace(/[<>"'&]/g, function(value){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   503
            switch(value){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   504
                case "<":   return "&lt;";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   505
                case ">":   return "&gt;";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   506
                case "\"":  return "&quot;";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   507
                case "'":   return "&apos;";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   508
                case "&":   return "&amp;";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   509
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   510
        });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   511
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   512
    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   513
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   514
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   515
    return {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   516
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   517
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   518
         * Returns test results formatted as a JSON string. Requires JSON utility.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   519
         * @param {Object} result The results object created by TestRunner.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   520
         * @return {String} A JSON-formatted string of results.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   521
         * @method JSON
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   522
         * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   523
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   524
        JSON: function(results) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   525
            return YUITest.Util.JSON.stringify(results);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   526
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   527
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   528
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   529
         * Returns test results formatted as an XML string.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   530
         * @param {Object} result The results object created by TestRunner.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   531
         * @return {String} An XML-formatted string of results.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   532
         * @method XML
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   533
         * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   534
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   535
        XML: function(results) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   536
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   537
            function serializeToXML(results){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   538
                var xml = "<" + results.type + " name=\"" + xmlEscape(results.name) + "\"";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   539
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   540
                if (typeof(results.duration)=="number"){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   541
                    xml += " duration=\"" + results.duration + "\"";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   542
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   543
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   544
                if (results.type == "test"){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   545
                    xml += " result=\"" + results.result + "\" message=\"" + xmlEscape(results.message) + "\">";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   546
                } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   547
                    xml += " passed=\"" + results.passed + "\" failed=\"" + results.failed + "\" ignored=\"" + results.ignored + "\" total=\"" + results.total + "\">";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   548
                    for (var prop in results){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   549
                        if (results.hasOwnProperty(prop)){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   550
                            if (results[prop] && typeof results[prop] == "object" && !(results[prop] instanceof Array)){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   551
                                xml += serializeToXML(results[prop]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   552
                            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   553
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   554
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   555
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   556
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   557
                xml += "</" + results.type + ">";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   558
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   559
                return xml;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   560
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   561
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   562
            return "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + serializeToXML(results);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   563
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   564
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   565
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   566
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   567
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   568
         * Returns test results formatted in JUnit XML format.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   569
         * @param {Object} result The results object created by TestRunner.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   570
         * @return {String} An XML-formatted string of results.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   571
         * @method JUnitXML
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   572
         * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   573
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   574
        JUnitXML: function(results) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   575
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   576
            function serializeToJUnitXML(results){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   577
                var xml = "";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   578
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   579
                switch (results.type){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   580
                    //equivalent to testcase in JUnit
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   581
                    case "test":
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   582
                        if (results.result != "ignore"){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   583
                            xml = "<testcase name=\"" + xmlEscape(results.name) + "\" time=\"" + (results.duration/1000) + "\">";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   584
                            if (results.result == "fail"){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   585
                                xml += "<failure message=\"" + xmlEscape(results.message) + "\"><![CDATA[" + results.message + "]]></failure>";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   586
                            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   587
                            xml+= "</testcase>";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   588
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   589
                        break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   590
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   591
                    //equivalent to testsuite in JUnit
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   592
                    case "testcase":
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   593
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   594
                        xml = "<testsuite name=\"" + xmlEscape(results.name) + "\" tests=\"" + results.total + "\" failures=\"" + results.failed + "\" time=\"" + (results.duration/1000) + "\">";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   595
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   596
                        for (var prop in results){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   597
                            if (results.hasOwnProperty(prop)){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   598
                                if (results[prop] && typeof results[prop] == "object" && !(results[prop] instanceof Array)){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   599
                                    xml += serializeToJUnitXML(results[prop]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   600
                                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   601
                            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   602
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   603
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   604
                        xml += "</testsuite>";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   605
                        break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   606
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   607
                    //no JUnit equivalent, don't output anything
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   608
                    case "testsuite":
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   609
                        for (var prop in results){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   610
                            if (results.hasOwnProperty(prop)){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   611
                                if (results[prop] && typeof results[prop] == "object" && !(results[prop] instanceof Array)){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   612
                                    xml += serializeToJUnitXML(results[prop]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   613
                                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   614
                            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   615
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   616
                        break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   617
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   618
                    //top-level, equivalent to testsuites in JUnit
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   619
                    case "report":
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   620
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   621
                        xml = "<testsuites>";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   622
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   623
                        for (var prop in results){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   624
                            if (results.hasOwnProperty(prop)){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   625
                                if (results[prop] && typeof results[prop] == "object" && !(results[prop] instanceof Array)){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   626
                                    xml += serializeToJUnitXML(results[prop]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   627
                                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   628
                            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   629
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   630
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   631
                        xml += "</testsuites>";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   632
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   633
                    //no default
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   634
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   635
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   636
                return xml;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   637
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   638
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   639
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   640
            return "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + serializeToJUnitXML(results);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   641
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   642
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   643
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   644
         * Returns test results formatted in TAP format.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   645
         * For more information, see <a href="http://testanything.org/">Test Anything Protocol</a>.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   646
         * @param {Object} result The results object created by TestRunner.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   647
         * @return {String} A TAP-formatted string of results.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   648
         * @method TAP
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   649
         * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   650
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   651
        TAP: function(results) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   652
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   653
            var currentTestNum = 1;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   654
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   655
            function serializeToTAP(results){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   656
                var text = "";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   657
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   658
                switch (results.type){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   659
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   660
                    case "test":
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   661
                        if (results.result != "ignore"){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   662
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   663
                            text = "ok " + (currentTestNum++) + " - " + results.name;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   664
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   665
                            if (results.result == "fail"){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   666
                                text = "not " + text + " - " + results.message;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   667
                            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   668
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   669
                            text += "\n";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   670
                        } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   671
                            text = "#Ignored test " + results.name + "\n";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   672
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   673
                        break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   674
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   675
                    case "testcase":
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   676
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   677
                        text = "#Begin testcase " + results.name + "(" + results.failed + " failed of " + results.total + ")\n";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   678
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   679
                        for (var prop in results){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   680
                            if (results.hasOwnProperty(prop)){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   681
                                if (results[prop] && typeof results[prop] == "object" && !(results[prop] instanceof Array)){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   682
                                    text += serializeToTAP(results[prop]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   683
                                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   684
                            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   685
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   686
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   687
                        text += "#End testcase " + results.name + "\n";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   688
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   689
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   690
                        break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   691
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   692
                    case "testsuite":
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   693
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   694
                        text = "#Begin testsuite " + results.name + "(" + results.failed + " failed of " + results.total + ")\n";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   695
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   696
                        for (var prop in results){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   697
                            if (results.hasOwnProperty(prop)){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   698
                                if (results[prop] && typeof results[prop] == "object" && !(results[prop] instanceof Array)){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   699
                                    text += serializeToTAP(results[prop]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   700
                                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   701
                            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   702
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   703
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   704
                        text += "#End testsuite " + results.name + "\n";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   705
                        break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   706
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   707
                    case "report":
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   708
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   709
                        for (var prop in results){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   710
                            if (results.hasOwnProperty(prop)){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   711
                                if (results[prop] && typeof results[prop] == "object" && !(results[prop] instanceof Array)){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   712
                                    text += serializeToTAP(results[prop]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   713
                                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   714
                            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   715
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   716
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   717
                    //no default
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   718
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   719
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   720
                return text;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   721
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   722
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   723
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   724
            return "1.." + results.total + "\n" + serializeToTAP(results);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   725
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   726
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   727
    };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   728
}();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   729
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   730
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   731
     * An object capable of sending test results to a server.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   732
     * @param {String} url The URL to submit the results to.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   733
     * @param {Function} format (Optiona) A function that outputs the results in a specific format.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   734
     *      Default is YUITest.TestFormat.XML.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   735
     * @constructor
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   736
     * @namespace Test
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   737
     * @module test
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   738
 * @class Reporter
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   739
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   740
    YUITest.Reporter = function(url, format) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   741
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   742
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   743
         * The URL to submit the data to.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   744
         * @type String
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   745
         * @property url
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   746
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   747
        this.url = url;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   748
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   749
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   750
         * The formatting function to call when submitting the data.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   751
         * @type Function
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   752
         * @property format
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   753
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   754
        this.format = format || YUITest.TestFormat.XML;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   755
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   756
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   757
         * Extra fields to submit with the request.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   758
         * @type Object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   759
         * @property _fields
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   760
         * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   761
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   762
        this._fields = new Object();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   763
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   764
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   765
         * The form element used to submit the results.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   766
         * @type HTMLFormElement
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   767
         * @property _form
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   768
         * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   769
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   770
        this._form = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   771
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   772
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   773
         * Iframe used as a target for form submission.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   774
         * @type HTMLIFrameElement
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   775
         * @property _iframe
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   776
         * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   777
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   778
        this._iframe = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   779
    };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   780
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   781
    YUITest.Reporter.prototype = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   782
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   783
        //restore missing constructor
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   784
        constructor: YUITest.Reporter,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   785
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   786
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   787
         * Adds a field to the form that submits the results.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   788
         * @param {String} name The name of the field.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   789
         * @param {Any} value The value of the field.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   790
         * @method addField
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   791
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   792
        addField : function (name, value){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   793
            this._fields[name] = value;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   794
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   795
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   796
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   797
         * Removes all previous defined fields.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   798
         * @method clearFields
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   799
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   800
        clearFields : function(){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   801
            this._fields = new Object();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   802
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   803
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   804
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   805
         * Cleans up the memory associated with the TestReporter, removing DOM elements
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   806
         * that were created.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   807
         * @method destroy
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   808
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   809
        destroy : function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   810
            if (this._form){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   811
                this._form.parentNode.removeChild(this._form);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   812
                this._form = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   813
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   814
            if (this._iframe){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   815
                this._iframe.parentNode.removeChild(this._iframe);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   816
                this._iframe = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   817
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   818
            this._fields = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   819
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   820
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   821
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   822
         * Sends the report to the server.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   823
         * @param {Object} results The results object created by TestRunner.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   824
         * @method report
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   825
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   826
        report : function(results){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   827
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   828
            //if the form hasn't been created yet, create it
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   829
            if (!this._form){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   830
                this._form = document.createElement("form");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   831
                this._form.method = "post";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   832
                this._form.style.visibility = "hidden";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   833
                this._form.style.position = "absolute";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   834
                this._form.style.top = 0;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   835
                document.body.appendChild(this._form);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   836
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   837
                //IE won't let you assign a name using the DOM, must do it the hacky way
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   838
                try {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   839
                    this._iframe = document.createElement("<iframe name=\"yuiTestTarget\" />");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   840
                } catch (ex){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   841
                    this._iframe = document.createElement("iframe");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   842
                    this._iframe.name = "yuiTestTarget";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   843
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   844
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   845
                this._iframe.src = "javascript:false";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   846
                this._iframe.style.visibility = "hidden";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   847
                this._iframe.style.position = "absolute";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   848
                this._iframe.style.top = 0;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   849
                document.body.appendChild(this._iframe);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   850
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   851
                this._form.target = "yuiTestTarget";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   852
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   853
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   854
            //set the form's action
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   855
            this._form.action = this.url;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   856
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   857
            //remove any existing fields
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   858
            while(this._form.hasChildNodes()){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   859
                this._form.removeChild(this._form.lastChild);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   860
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   861
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   862
            //create default fields
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   863
            this._fields.results = this.format(results);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   864
            this._fields.useragent = navigator.userAgent;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   865
            this._fields.timestamp = (new Date()).toLocaleString();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   866
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   867
            //add fields to the form
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   868
            for (var prop in this._fields){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   869
                var value = this._fields[prop];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   870
                if (this._fields.hasOwnProperty(prop) && (typeof value != "function")){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   871
                    var input = document.createElement("input");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   872
                    input.type = "hidden";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   873
                    input.name = prop;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   874
                    input.value = value;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   875
                    this._form.appendChild(input);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   876
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   877
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   878
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   879
            //remove default fields
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   880
            delete this._fields.results;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   881
            delete this._fields.useragent;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   882
            delete this._fields.timestamp;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   883
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   884
            if (arguments[1] !== false){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   885
                this._form.submit();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   886
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   887
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   888
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   889
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   890
    };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   891
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   892
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   893
     * Runs test suites and test cases, providing events to allowing for the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   894
     * interpretation of test results.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   895
     * @namespace Test
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   896
     * @module test
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   897
 * @class TestRunner
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   898
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   899
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   900
    YUITest.TestRunner = function(){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   901
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   902
        /*(intentionally not documented)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   903
         * Determines if any of the array of test groups appears
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   904
         * in the given TestRunner filter.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   905
         * @param {Array} testGroups The array of test groups to
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   906
         *      search for.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   907
         * @param {String} filter The TestRunner groups filter.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   908
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   909
        function inGroups(testGroups, filter){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   910
            if (!filter.length){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   911
                return true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   912
            } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   913
                if (testGroups){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   914
                    for (var i=0, len=testGroups.length; i < len; i++){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   915
                        if (filter.indexOf("," + testGroups[i] + ",") > -1){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   916
                            return true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   917
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   918
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   919
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   920
                return false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   921
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   922
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   923
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   924
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   925
         * A node in the test tree structure. May represent a TestSuite, TestCase, or
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   926
         * test function.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   927
         * @param {Any} testObject A TestSuite, TestCase, or the name of a test function.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   928
         * @module test
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   929
 * @class TestNode
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   930
         * @constructor
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   931
         * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   932
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   933
        function TestNode(testObject){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   934
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   935
            /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   936
             * The TestSuite, TestCase, or test function represented by this node.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   937
             * @type {Any}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   938
             * @property testObject
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   939
             */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   940
            this.testObject = testObject;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   941
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   942
            /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   943
             * Pointer to this node's first child.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   944
             * @type TestNode
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   945
             * @property firstChild
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   946
             */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   947
            this.firstChild = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   948
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   949
            /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   950
             * Pointer to this node's last child.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   951
             * @type TestNode
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   952
             * @property lastChild
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   953
             */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   954
            this.lastChild = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   955
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   956
            /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   957
             * Pointer to this node's parent.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   958
             * @type TestNode
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   959
             * @property parent
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   960
             */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   961
            this.parent = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   962
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   963
            /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   964
             * Pointer to this node's next sibling.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   965
             * @type TestNode
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   966
             * @property next
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   967
             */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   968
            this.next = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   969
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   970
            /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   971
             * Test results for this test object.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   972
             * @type object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   973
             * @property results
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   974
             */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   975
            this.results = new YUITest.Results();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   976
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   977
            //initialize results
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   978
            if (testObject instanceof YUITest.TestSuite){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   979
                this.results.type = "testsuite";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   980
                this.results.name = testObject.name;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   981
            } else if (testObject instanceof YUITest.TestCase){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   982
                this.results.type = "testcase";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   983
                this.results.name = testObject.name;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   984
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   985
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   986
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   987
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   988
        TestNode.prototype = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   989
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   990
            /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   991
             * Appends a new test object (TestSuite, TestCase, or test function name) as a child
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   992
             * of this node.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   993
             * @param {Any} testObject A TestSuite, TestCase, or the name of a test function.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   994
             * @method appendChild
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   995
             */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   996
            appendChild : function (testObject){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   997
                var node = new TestNode(testObject);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   998
                if (this.firstChild === null){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   999
                    this.firstChild = this.lastChild = node;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1000
                } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1001
                    this.lastChild.next = node;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1002
                    this.lastChild = node;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1003
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1004
                node.parent = this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1005
                return node;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1006
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1007
        };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1008
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1009
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1010
         * Runs test suites and test cases, providing events to allowing for the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1011
         * interpretation of test results.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1012
         * @namespace Test
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1013
         * @module test
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1014
 * @class Runner
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1015
         * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1016
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1017
        function TestRunner(){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1018
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1019
            //inherit from EventTarget
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1020
            YUITest.EventTarget.call(this);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1021
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1022
            /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1023
             * Suite on which to attach all TestSuites and TestCases to be run.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1024
             * @type YUITest.TestSuite
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1025
             * @property masterSuite
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1026
             * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1027
             * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1028
             */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1029
            this.masterSuite = new YUITest.TestSuite(YUITest.guid('testSuite_'));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1030
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1031
            /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1032
             * Pointer to the current node in the test tree.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1033
             * @type TestNode
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1034
             * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1035
             * @property _cur
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1036
             * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1037
             */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1038
            this._cur = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1039
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1040
            /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1041
             * Pointer to the root node in the test tree.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1042
             * @type TestNode
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1043
             * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1044
             * @property _root
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1045
             * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1046
             */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1047
            this._root = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1048
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1049
            /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1050
             * Indicates if the TestRunner will log events or not.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1051
             * @type Boolean
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1052
             * @property _log
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1053
             * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1054
             * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1055
             */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1056
            this._log = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1057
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1058
            /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1059
             * Indicates if the TestRunner is waiting as a result of
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1060
             * wait() being called.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1061
             * @type Boolean
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1062
             * @property _waiting
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1063
             * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1064
             * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1065
             */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1066
            this._waiting = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1067
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1068
            /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1069
             * Indicates if the TestRunner is currently running tests.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1070
             * @type Boolean
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1071
             * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1072
             * @property _running
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1073
             * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1074
             */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1075
            this._running = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1076
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1077
            /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1078
             * Holds copy of the results object generated when all tests are
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1079
             * complete.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1080
             * @type Object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1081
             * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1082
             * @property _lastResults
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1083
             * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1084
             */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1085
            this._lastResults = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1086
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1087
            /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1088
             * Data object that is passed around from method to method.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1089
             * @type Object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1090
             * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1091
             * @property _data
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1092
             * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1093
             */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1094
            this._context = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1095
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1096
            /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1097
             * The list of test groups to run. The list is represented
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1098
             * by a comma delimited string with commas at the start and
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1099
             * end.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1100
             * @type String
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1101
             * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1102
             * @property _groups
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1103
             * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1104
             */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1105
            this._groups = "";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1106
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1107
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1108
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1109
        TestRunner.prototype = YUITest.Util.mix(new YUITest.EventTarget(), {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1110
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1111
            /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1112
            * If true, YUITest will not fire an error for tests with no Asserts.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1113
            * @property _ignoreEmpty
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1114
            * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1115
            * @type Boolean
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1116
            * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1117
            */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1118
            _ignoreEmpty: false,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1119
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1120
            //restore prototype
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1121
            constructor: YUITest.TestRunner,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1122
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1123
            //-------------------------------------------------------------------------
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1124
            // Constants
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1125
            //-------------------------------------------------------------------------
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1126
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1127
            /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1128
             * Fires when a test case is opened but before the first
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1129
             * test is executed.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1130
             * @event testcasebegin
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1131
             * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1132
             */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1133
            TEST_CASE_BEGIN_EVENT : "testcasebegin",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1134
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1135
            /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1136
             * Fires when all tests in a test case have been executed.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1137
             * @event testcasecomplete
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1138
             * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1139
             */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1140
            TEST_CASE_COMPLETE_EVENT : "testcasecomplete",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1141
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1142
            /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1143
             * Fires when a test suite is opened but before the first
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1144
             * test is executed.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1145
             * @event testsuitebegin
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1146
             * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1147
             */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1148
            TEST_SUITE_BEGIN_EVENT : "testsuitebegin",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1149
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1150
            /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1151
             * Fires when all test cases in a test suite have been
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1152
             * completed.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1153
             * @event testsuitecomplete
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1154
             * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1155
             */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1156
            TEST_SUITE_COMPLETE_EVENT : "testsuitecomplete",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1157
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1158
            /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1159
             * Fires when a test has passed.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1160
             * @event pass
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1161
             * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1162
             */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1163
            TEST_PASS_EVENT : "pass",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1164
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1165
            /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1166
             * Fires when a test has failed.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1167
             * @event fail
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1168
             * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1169
             */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1170
            TEST_FAIL_EVENT : "fail",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1171
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1172
            /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1173
             * Fires when a non-test method has an error.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1174
             * @event error
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1175
             * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1176
             */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1177
            ERROR_EVENT : "error",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1178
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1179
            /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1180
             * Fires when a test has been ignored.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1181
             * @event ignore
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1182
             * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1183
             */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1184
            TEST_IGNORE_EVENT : "ignore",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1185
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1186
            /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1187
             * Fires when all test suites and test cases have been completed.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1188
             * @event complete
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1189
             * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1190
             */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1191
            COMPLETE_EVENT : "complete",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1192
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1193
            /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1194
             * Fires when the run() method is called.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1195
             * @event begin
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1196
             * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1197
             */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1198
            BEGIN_EVENT : "begin",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1199
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1200
            //-------------------------------------------------------------------------
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1201
            // Test Tree-Related Methods
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1202
            //-------------------------------------------------------------------------
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1203
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1204
            /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1205
             * Adds a test case to the test tree as a child of the specified node.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1206
             * @param {TestNode} parentNode The node to add the test case to as a child.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1207
             * @param {Test.TestCase} testCase The test case to add.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1208
             * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1209
             * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1210
             * @method _addTestCaseToTestTree
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1211
             */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1212
           _addTestCaseToTestTree : function (parentNode, testCase){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1213
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1214
                //add the test suite
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1215
                var node = parentNode.appendChild(testCase),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1216
                    prop,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1217
                    testName;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1218
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1219
                //iterate over the items in the test case
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1220
                for (prop in testCase){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1221
                    if ((prop.indexOf("test") === 0 || prop.indexOf(" ") > -1) && typeof testCase[prop] == "function"){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1222
                        node.appendChild(prop);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1223
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1224
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1225
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1226
            },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1227
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1228
            /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1229
             * Adds a test suite to the test tree as a child of the specified node.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1230
             * @param {TestNode} parentNode The node to add the test suite to as a child.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1231
             * @param {Test.TestSuite} testSuite The test suite to add.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1232
             * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1233
             * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1234
             * @method _addTestSuiteToTestTree
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1235
             */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1236
            _addTestSuiteToTestTree : function (parentNode, testSuite) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1237
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1238
                //add the test suite
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1239
                var node = parentNode.appendChild(testSuite);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1240
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1241
                //iterate over the items in the master suite
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1242
                for (var i=0; i < testSuite.items.length; i++){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1243
                    if (testSuite.items[i] instanceof YUITest.TestSuite) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1244
                        this._addTestSuiteToTestTree(node, testSuite.items[i]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1245
                    } else if (testSuite.items[i] instanceof YUITest.TestCase) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1246
                        this._addTestCaseToTestTree(node, testSuite.items[i]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1247
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1248
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1249
            },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1250
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1251
            /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1252
             * Builds the test tree based on items in the master suite. The tree is a hierarchical
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1253
             * representation of the test suites, test cases, and test functions. The resulting tree
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1254
             * is stored in _root and the pointer _cur is set to the root initially.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1255
             * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1256
             * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1257
             * @method _buildTestTree
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1258
             */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1259
            _buildTestTree : function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1260
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1261
                this._root = new TestNode(this.masterSuite);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1262
                //this._cur = this._root;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1263
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1264
                //iterate over the items in the master suite
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1265
                for (var i=0; i < this.masterSuite.items.length; i++){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1266
                    if (this.masterSuite.items[i] instanceof YUITest.TestSuite) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1267
                        this._addTestSuiteToTestTree(this._root, this.masterSuite.items[i]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1268
                    } else if (this.masterSuite.items[i] instanceof YUITest.TestCase) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1269
                        this._addTestCaseToTestTree(this._root, this.masterSuite.items[i]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1270
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1271
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1272
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1273
            },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1274
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1275
            //-------------------------------------------------------------------------
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1276
            // Private Methods
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1277
            //-------------------------------------------------------------------------
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1278
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1279
            /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1280
             * Handles the completion of a test object's tests. Tallies test results
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1281
             * from one level up to the next.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1282
             * @param {TestNode} node The TestNode representing the test object.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1283
             * @method _handleTestObjectComplete
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1284
             * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1285
             */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1286
            _handleTestObjectComplete : function (node) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1287
                var parentNode;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1288
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1289
                if (node && (typeof node.testObject == "object")) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1290
                    parentNode = node.parent;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1291
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1292
                    if (parentNode){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1293
                        parentNode.results.include(node.results);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1294
                        parentNode.results[node.testObject.name] = node.results;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1295
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1296
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1297
                    if (node.testObject instanceof YUITest.TestSuite){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1298
                        this._execNonTestMethod(node, "tearDown", false);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1299
                        node.results.duration = (new Date()) - node._start;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1300
                        this.fire({ type: this.TEST_SUITE_COMPLETE_EVENT, testSuite: node.testObject, results: node.results});
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1301
                    } else if (node.testObject instanceof YUITest.TestCase){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1302
                        this._execNonTestMethod(node, "destroy", false);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1303
                        node.results.duration = (new Date()) - node._start;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1304
                        this.fire({ type: this.TEST_CASE_COMPLETE_EVENT, testCase: node.testObject, results: node.results});
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1305
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1306
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1307
            },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1308
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1309
            //-------------------------------------------------------------------------
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1310
            // Navigation Methods
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1311
            //-------------------------------------------------------------------------
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1312
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1313
            /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1314
             * Retrieves the next node in the test tree.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1315
             * @return {TestNode} The next node in the test tree or null if the end is reached.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1316
             * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1317
             * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1318
             * @method _next
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1319
             */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1320
            _next : function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1321
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1322
                if (this._cur === null){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1323
                    this._cur = this._root;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1324
                } else if (this._cur.firstChild) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1325
                    this._cur = this._cur.firstChild;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1326
                } else if (this._cur.next) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1327
                    this._cur = this._cur.next;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1328
                } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1329
                    while (this._cur && !this._cur.next && this._cur !== this._root){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1330
                        this._handleTestObjectComplete(this._cur);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1331
                        this._cur = this._cur.parent;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1332
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1333
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1334
                    this._handleTestObjectComplete(this._cur);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1335
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1336
                    if (this._cur == this._root){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1337
                        this._cur.results.type = "report";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1338
                        this._cur.results.timestamp = (new Date()).toLocaleString();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1339
                        this._cur.results.duration = (new Date()) - this._cur._start;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1340
                        this._lastResults = this._cur.results;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1341
                        this._running = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1342
                        this.fire({ type: this.COMPLETE_EVENT, results: this._lastResults});
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1343
                        this._cur = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1344
                    } else if (this._cur) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1345
                        this._cur = this._cur.next;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1346
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1347
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1348
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1349
                return this._cur;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1350
            },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1351
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1352
            /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1353
             * Executes a non-test method (init, setUp, tearDown, destroy)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1354
             * and traps an errors. If an error occurs, an error event is
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1355
             * fired.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1356
             * @param {Object} node The test node in the testing tree.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1357
             * @param {String} methodName The name of the method to execute.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1358
             * @param {Boolean} allowAsync Determines if the method can be called asynchronously.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1359
             * @return {Boolean} True if an async method was called, false if not.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1360
             * @method _execNonTestMethod
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1361
             * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1362
             */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1363
            _execNonTestMethod: function(node, methodName, allowAsync){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1364
                var testObject = node.testObject,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1365
                    event = { type: this.ERROR_EVENT };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1366
                try {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1367
                    if (allowAsync && testObject["async:" + methodName]){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1368
                        testObject["async:" + methodName](this._context);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1369
                        return true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1370
                    } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1371
                        testObject[methodName](this._context);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1372
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1373
                } catch (ex){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1374
                    node.results.errors++;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1375
                    event.error = ex;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1376
                    event.methodName = methodName;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1377
                    if (testObject instanceof YUITest.TestCase){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1378
                        event.testCase = testObject;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1379
                    } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1380
                        event.testSuite = testSuite;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1381
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1382
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1383
                    this.fire(event);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1384
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1385
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1386
                return false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1387
            },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1388
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1389
            /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1390
             * Runs a test case or test suite, returning the results.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1391
             * @param {Test.TestCase|YUITest.TestSuite} testObject The test case or test suite to run.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1392
             * @return {Object} Results of the execution with properties passed, failed, and total.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1393
             * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1394
             * @method _run
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1395
             * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1396
             */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1397
            _run : function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1398
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1399
                //flag to indicate if the TestRunner should wait before continuing
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1400
                var shouldWait = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1401
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1402
                //get the next test node
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1403
                var node = this._next();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1404
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1405
                if (node !== null) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1406
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1407
                    //set flag to say the testrunner is running
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1408
                    this._running = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1409
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1410
                    //eliminate last results
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1411
                    this._lastResult = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1412
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1413
                    var testObject = node.testObject;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1414
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1415
                    //figure out what to do
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1416
                    if (typeof testObject == "object" && testObject !== null){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1417
                        if (testObject instanceof YUITest.TestSuite){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1418
                            this.fire({ type: this.TEST_SUITE_BEGIN_EVENT, testSuite: testObject });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1419
                            node._start = new Date();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1420
                            this._execNonTestMethod(node, "setUp" ,false);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1421
                        } else if (testObject instanceof YUITest.TestCase){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1422
                            this.fire({ type: this.TEST_CASE_BEGIN_EVENT, testCase: testObject });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1423
                            node._start = new Date();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1424
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1425
                            //regular or async init
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1426
                            /*try {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1427
                                if (testObject["async:init"]){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1428
                                    testObject["async:init"](this._context);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1429
                                    return;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1430
                                } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1431
                                    testObject.init(this._context);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1432
                                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1433
                            } catch (ex){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1434
                                node.results.errors++;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1435
                                this.fire({ type: this.ERROR_EVENT, error: ex, testCase: testObject, methodName: "init" });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1436
                            }*/
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1437
                            if(this._execNonTestMethod(node, "init", true)){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1438
                                return;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1439
                            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1440
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1441
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1442
                        //some environments don't support setTimeout
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1443
                        if (typeof setTimeout != "undefined"){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1444
                            setTimeout(function(){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1445
                                YUITest.TestRunner._run();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1446
                            }, 0);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1447
                        } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1448
                            this._run();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1449
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1450
                    } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1451
                        this._runTest(node);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1452
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1453
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1454
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1455
            },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1456
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1457
            _resumeTest : function (segment) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1458
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1459
                //get relevant information
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1460
                var node = this._cur;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1461
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1462
                //we know there's no more waiting now
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1463
                this._waiting = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1464
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1465
                //if there's no node, it probably means a wait() was called after resume()
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1466
                if (!node){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1467
                    //TODO: Handle in some way?
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1468
                    //console.log("wait() called after resume()");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1469
                    //this.fire("error", { testCase: "(unknown)", test: "(unknown)", error: new Error("wait() called after resume()")} );
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1470
                    return;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1471
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1472
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1473
                var testName = node.testObject;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1474
                var testCase = node.parent.testObject;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1475
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1476
                //cancel other waits if available
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1477
                if (testCase.__yui_wait){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1478
                    clearTimeout(testCase.__yui_wait);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1479
                    delete testCase.__yui_wait;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1480
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1481
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1482
                //get the "should" test cases
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1483
                var shouldFail = testName.indexOf("fail:") === 0 ||
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1484
                                    (testCase._should.fail || {})[testName];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1485
                var shouldError = (testCase._should.error || {})[testName];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1486
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1487
                //variable to hold whether or not the test failed
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1488
                var failed = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1489
                var error = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1490
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1491
                //try the test
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1492
                try {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1493
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1494
                    //run the test
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1495
                    segment.call(testCase, this._context);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1496
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1497
                    //if the test hasn't already failed and doesn't have any asserts...
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1498
                    if(YUITest.Assert._getCount() == 0 && !this._ignoreEmpty){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1499
                        throw new YUITest.AssertionError("Test has no asserts.");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1500
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1501
                    //if it should fail, and it got here, then it's a fail because it didn't
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1502
                     else if (shouldFail){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1503
                        error = new YUITest.ShouldFail();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1504
                        failed = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1505
                    } else if (shouldError){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1506
                        error = new YUITest.ShouldError();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1507
                        failed = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1508
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1509
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1510
                } catch (thrown){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1511
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1512
                    //cancel any pending waits, the test already failed
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1513
                    if (testCase.__yui_wait){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1514
                        clearTimeout(testCase.__yui_wait);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1515
                        delete testCase.__yui_wait;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1516
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1517
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1518
                    //figure out what type of error it was
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1519
                    if (thrown instanceof YUITest.AssertionError) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1520
                        if (!shouldFail){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1521
                            error = thrown;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1522
                            failed = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1523
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1524
                    } else if (thrown instanceof YUITest.Wait){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1525
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1526
                        if (typeof thrown.segment == "function"){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1527
                            if (typeof thrown.delay == "number"){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1528
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1529
                                //some environments don't support setTimeout
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1530
                                if (typeof setTimeout != "undefined"){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1531
                                    testCase.__yui_wait = setTimeout(function(){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1532
                                        YUITest.TestRunner._resumeTest(thrown.segment);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1533
                                    }, thrown.delay);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1534
                                    this._waiting = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1535
                                } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1536
                                    throw new Error("Asynchronous tests not supported in this environment.");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1537
                                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1538
                            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1539
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1540
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1541
                        return;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1542
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1543
                    } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1544
                        //first check to see if it should error
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1545
                        if (!shouldError) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1546
                            error = new YUITest.UnexpectedError(thrown);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1547
                            failed = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1548
                        } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1549
                            //check to see what type of data we have
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1550
                            if (typeof shouldError == "string"){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1551
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1552
                                //if it's a string, check the error message
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1553
                                if (thrown.message != shouldError){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1554
                                    error = new YUITest.UnexpectedError(thrown);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1555
                                    failed = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1556
                                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1557
                            } else if (typeof shouldError == "function"){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1558
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1559
                                //if it's a function, see if the error is an instance of it
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1560
                                if (!(thrown instanceof shouldError)){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1561
                                    error = new YUITest.UnexpectedError(thrown);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1562
                                    failed = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1563
                                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1564
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1565
                            } else if (typeof shouldError == "object" && shouldError !== null){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1566
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1567
                                //if it's an object, check the instance and message
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1568
                                if (!(thrown instanceof shouldError.constructor) ||
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1569
                                        thrown.message != shouldError.message){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1570
                                    error = new YUITest.UnexpectedError(thrown);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1571
                                    failed = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1572
                                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1573
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1574
                            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1575
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1576
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1577
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1578
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1579
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1580
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1581
                //fire appropriate event
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1582
                if (failed) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1583
                    this.fire({ type: this.TEST_FAIL_EVENT, testCase: testCase, testName: testName, error: error });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1584
                } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1585
                    this.fire({ type: this.TEST_PASS_EVENT, testCase: testCase, testName: testName });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1586
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1587
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1588
                //run the tear down
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1589
                this._execNonTestMethod(node.parent, "tearDown", false);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1590
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1591
                //reset the assert count
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1592
                YUITest.Assert._reset();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1593
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1594
                //calculate duration
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1595
                var duration = (new Date()) - node._start;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1596
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1597
                //update results
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1598
                node.parent.results[testName] = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1599
                    result: failed ? "fail" : "pass",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1600
                    message: error ? error.getMessage() : "Test passed",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1601
                    type: "test",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1602
                    name: testName,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1603
                    duration: duration
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1604
                };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1605
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1606
                if (failed){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1607
                    node.parent.results.failed++;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1608
                } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1609
                    node.parent.results.passed++;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1610
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1611
                node.parent.results.total++;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1612
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1613
                //set timeout not supported in all environments
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1614
                if (typeof setTimeout != "undefined"){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1615
                    setTimeout(function(){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1616
                        YUITest.TestRunner._run();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1617
                    }, 0);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1618
                } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1619
                    this._run();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1620
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1621
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1622
            },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1623
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1624
            /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1625
             * Handles an error as if it occurred within the currently executing
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1626
             * test. This is for mock methods that may be called asynchronously
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1627
             * and therefore out of the scope of the TestRunner. Previously, this
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1628
             * error would bubble up to the browser. Now, this method is used
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1629
             * to tell TestRunner about the error. This should never be called
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1630
             * by anyplace other than the Mock object.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1631
             * @param {Error} error The error object.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1632
             * @method _handleError
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1633
             * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1634
             * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1635
             */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1636
            _handleError: function(error){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1637
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1638
                if (this._waiting){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1639
                    this._resumeTest(function(){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1640
                        throw error;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1641
                    });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1642
                } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1643
                    throw error;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1644
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1645
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1646
            },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1647
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1648
            /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1649
             * Runs a single test based on the data provided in the node.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1650
             * @method _runTest
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1651
             * @param {TestNode} node The TestNode representing the test to run.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1652
             * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1653
             * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1654
             */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1655
            _runTest : function (node) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1656
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1657
                //get relevant information
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1658
                var testName = node.testObject,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1659
                    testCase = node.parent.testObject,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1660
                    test = testCase[testName],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1661
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1662
                    //get the "should" test cases
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1663
                    shouldIgnore = testName.indexOf("ignore:") === 0 ||
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1664
                                    !inGroups(testCase.groups, this._groups) ||
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1665
                                    (testCase._should.ignore || {})[testName];   //deprecated
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1666
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1667
                //figure out if the test should be ignored or not
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1668
                if (shouldIgnore){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1669
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1670
                    //update results
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1671
                    node.parent.results[testName] = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1672
                        result: "ignore",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1673
                        message: "Test ignored",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1674
                        type: "test",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1675
                        name: testName.indexOf("ignore:") === 0 ? testName.substring(7) : testName
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1676
                    };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1677
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1678
                    node.parent.results.ignored++;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1679
                    node.parent.results.total++;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1680
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1681
                    this.fire({ type: this.TEST_IGNORE_EVENT,  testCase: testCase, testName: testName });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1682
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1683
                    //some environments don't support setTimeout
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1684
                    if (typeof setTimeout != "undefined"){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1685
                        setTimeout(function(){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1686
                            YUITest.TestRunner._run();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1687
                        }, 0);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1688
                    } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1689
                        this._run();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1690
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1691
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1692
                } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1693
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1694
                    //mark the start time
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1695
                    node._start = new Date();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1696
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1697
                    //run the setup
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1698
                    this._execNonTestMethod(node.parent, "setUp", false);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1699
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1700
                    //now call the body of the test
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1701
                    this._resumeTest(test);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1702
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1703
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1704
            },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1705
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1706
            //-------------------------------------------------------------------------
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1707
            // Misc Methods
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1708
            //-------------------------------------------------------------------------
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1709
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1710
            /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1711
             * Retrieves the name of the current result set.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1712
             * @return {String} The name of the result set.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1713
             * @method getName
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1714
             */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1715
            getName: function(){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1716
                return this.masterSuite.name;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1717
            },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1718
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1719
            /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1720
             * The name assigned to the master suite of the TestRunner. This is the name
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1721
             * that is output as the root's name when results are retrieved.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1722
             * @param {String} name The name of the result set.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1723
             * @method setName
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1724
             */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1725
            setName: function(name){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1726
                this.masterSuite.name = name;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1727
            },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1728
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1729
            //-------------------------------------------------------------------------
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1730
            // Public Methods
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1731
            //-------------------------------------------------------------------------
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1732
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1733
            /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1734
             * Adds a test suite or test case to the list of test objects to run.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1735
             * @param testObject Either a TestCase or a TestSuite that should be run.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1736
             * @method add
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1737
             * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1738
             */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1739
            add : function (testObject) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1740
                this.masterSuite.add(testObject);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1741
                return this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1742
            },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1743
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1744
            /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1745
             * Removes all test objects from the runner.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1746
             * @method clear
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1747
             * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1748
             */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1749
            clear : function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1750
                this.masterSuite = new YUITest.TestSuite(YUITest.guid('testSuite_'));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1751
            },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1752
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1753
            /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1754
             * Indicates if the TestRunner is waiting for a test to resume
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1755
             * @return {Boolean} True if the TestRunner is waiting, false if not.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1756
             * @method isWaiting
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1757
             * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1758
             */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1759
            isWaiting: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1760
                return this._waiting;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1761
            },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1762
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1763
            /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1764
             * Indicates that the TestRunner is busy running tests and therefore can't
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1765
             * be stopped and results cannot be gathered.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1766
             * @return {Boolean} True if the TestRunner is running, false if not.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1767
             * @method isRunning
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1768
             */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1769
            isRunning: function(){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1770
                return this._running;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1771
            },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1772
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1773
            /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1774
             * Returns the last complete results set from the TestRunner. Null is returned
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1775
             * if the TestRunner is running or no tests have been run.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1776
             * @param {Function} format (Optional) A test format to return the results in.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1777
             * @return {Object|String} Either the results object or, if a test format is
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1778
             *      passed as the argument, a string representing the results in a specific
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1779
             *      format.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1780
             * @method getResults
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1781
             */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1782
            getResults: function(format){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1783
                if (!this._running && this._lastResults){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1784
                    if (typeof format == "function"){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1785
                        return format(this._lastResults);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1786
                    } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1787
                        return this._lastResults;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1788
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1789
                } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1790
                    return null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1791
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1792
            },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1793
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1794
            /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1795
             * Returns the coverage report for the files that have been executed.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1796
             * This returns only coverage information for files that have been
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1797
             * instrumented using YUI Test Coverage and only those that were run
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1798
             * in the same pass.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1799
             * @param {Function} format (Optional) A coverage format to return results in.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1800
             * @return {Object|String} Either the coverage object or, if a coverage
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1801
             *      format is specified, a string representing the results in that format.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1802
             * @method getCoverage
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1803
             */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1804
            getCoverage: function(format) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1805
                var covObject = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1806
                if (typeof _yuitest_coverage === "object") {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1807
                    covObject = _yuitest_coverage;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1808
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1809
                if (typeof __coverage__ === "object") {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1810
                    covObject = __coverage__;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1811
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1812
                if (!this._running && typeof covObject == "object"){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1813
                    if (typeof format == "function") {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1814
                        return format(covObject);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1815
                    } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1816
                        return covObject;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1817
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1818
                } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1819
                    return null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1820
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1821
            },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1822
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1823
            /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1824
             * Used to continue processing when a method marked with
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1825
             * "async:" is executed. This should not be used in test
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1826
             * methods, only in init(). Each argument is a string, and
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1827
             * when the returned function is executed, the arguments
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1828
             * are assigned to the context data object using the string
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1829
             * as the key name (value is the argument itself).
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1830
             * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1831
             * @return {Function} A callback function.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1832
             * @method callback
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1833
             */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1834
            callback: function(){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1835
                var names   = arguments,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1836
                    data    = this._context,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1837
                    that    = this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1838
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1839
                return function(){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1840
                    for (var i=0; i < arguments.length; i++){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1841
                        data[names[i]] = arguments[i];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1842
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1843
                    that._run();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1844
                };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1845
            },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1846
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1847
            /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1848
             * Resumes the TestRunner after wait() was called.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1849
             * @param {Function} segment The function to run as the rest
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1850
             *      of the haulted test.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1851
             * @method resume
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1852
             * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1853
             */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1854
            resume : function (segment) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1855
                if (this._waiting){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1856
                    this._resumeTest(segment || function(){});
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1857
                } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1858
                    throw new Error("resume() called without wait().");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1859
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1860
            },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1861
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1862
            /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1863
             * Runs the test suite.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1864
             * @param {Object|Boolean} options (Optional) Options for the runner:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1865
             *      <code>oldMode</code> indicates the TestRunner should work in the YUI <= 2.8 way
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1866
             *      of internally managing test suites. <code>groups</code> is an array
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1867
             *      of test groups indicating which tests to run.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1868
             * @method run
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1869
             * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1870
             */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1871
            run : function (options) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1872
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1873
                options = options || {};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1874
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1875
                //pointer to runner to avoid scope issues
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1876
                var runner  = YUITest.TestRunner,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1877
                    oldMode = options.oldMode;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1878
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1879
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1880
                //if there's only one suite on the masterSuite, move it up
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1881
                if (!oldMode && this.masterSuite.items.length == 1 && this.masterSuite.items[0] instanceof YUITest.TestSuite){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1882
                    this.masterSuite = this.masterSuite.items[0];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1883
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1884
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1885
                //determine if there are any groups to filter on
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1886
                runner._groups = (options.groups instanceof Array) ? "," + options.groups.join(",") + "," : "";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1887
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1888
                //initialize the runner
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1889
                runner._buildTestTree();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1890
                runner._context = {};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1891
                runner._root._start = new Date();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1892
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1893
                //fire the begin event
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1894
                runner.fire(runner.BEGIN_EVENT);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1895
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1896
                //begin the testing
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1897
                runner._run();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1898
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1899
        });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1900
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1901
        return new TestRunner();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1902
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1903
    }();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1904
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1905
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1906
 * The ArrayAssert object provides functions to test JavaScript array objects
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1907
 * for a variety of cases.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1908
 * @namespace Test
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1909
 * @module test
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1910
 * @class ArrayAssert
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1911
 * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1912
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1913
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1914
YUITest.ArrayAssert = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1915
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1916
    //=========================================================================
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1917
    // Private methods
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1918
    //=========================================================================
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1919
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1920
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1921
     * Simple indexOf() implementation for an array. Defers to native
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1922
     * if available.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1923
     * @param {Array} haystack The array to search.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1924
     * @param {Any} needle The value to locate.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1925
     * @return {Number} The index of the needle if found or -1 if not.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1926
     * @method _indexOf
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1927
     * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1928
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1929
    _indexOf: function(haystack, needle){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1930
        if (haystack.indexOf){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1931
            return haystack.indexOf(needle);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1932
        } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1933
            for (var i=0; i < haystack.length; i++){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1934
                if (haystack[i] === needle){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1935
                    return i;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1936
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1937
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1938
            return -1;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1939
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1940
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1941
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1942
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1943
     * Simple some() implementation for an array. Defers to native
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1944
     * if available.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1945
     * @param {Array} haystack The array to search.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1946
     * @param {Function} matcher The function to run on each value.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1947
     * @return {Boolean} True if any value, when run through the matcher,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1948
     *      returns true.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1949
     * @method _some
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1950
     * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1951
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1952
    _some: function(haystack, matcher){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1953
        if (haystack.some){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1954
            return haystack.some(matcher);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1955
        } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1956
            for (var i=0; i < haystack.length; i++){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1957
                if (matcher(haystack[i])){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1958
                    return true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1959
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1960
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1961
            return false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1962
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1963
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1964
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1965
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1966
     * Asserts that a value is present in an array. This uses the triple equals
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1967
     * sign so no type coercion may occur.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1968
     * @param {Object} needle The value that is expected in the array.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1969
     * @param {Array} haystack An array of values.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1970
     * @param {String} message (Optional) The message to display if the assertion fails.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1971
     * @method contains
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1972
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1973
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1974
    contains : function (needle, haystack,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1975
                           message) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1976
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1977
        YUITest.Assert._increment();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1978
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1979
        if (this._indexOf(haystack, needle) == -1){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1980
            YUITest.Assert.fail(YUITest.Assert._formatMessage(message, "Value " + needle + " (" + (typeof needle) + ") not found in array [" + haystack + "]."));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1981
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1982
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1983
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1984
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1985
     * Asserts that a set of values are present in an array. This uses the triple equals
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1986
     * sign so no type coercion may occur. For this assertion to pass, all values must
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1987
     * be found.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1988
     * @param {Object[]} needles An array of values that are expected in the array.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1989
     * @param {Array} haystack An array of values to check.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1990
     * @param {String} message (Optional) The message to display if the assertion fails.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1991
     * @method containsItems
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1992
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1993
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1994
    containsItems : function (needles, haystack,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1995
                           message) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1996
        YUITest.Assert._increment();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1997
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1998
        //begin checking values
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1999
        for (var i=0; i < needles.length; i++){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2000
            if (this._indexOf(haystack, needles[i]) == -1){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2001
                YUITest.Assert.fail(YUITest.Assert._formatMessage(message, "Value " + needles[i] + " (" + (typeof needles[i]) + ") not found in array [" + haystack + "]."));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2002
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2003
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2004
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2005
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2006
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2007
     * Asserts that a value matching some condition is present in an array. This uses
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2008
     * a function to determine a match.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2009
     * @param {Function} matcher A function that returns true if the items matches or false if not.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2010
     * @param {Array} haystack An array of values.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2011
     * @param {String} message (Optional) The message to display if the assertion fails.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2012
     * @method containsMatch
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2013
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2014
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2015
    containsMatch : function (matcher, haystack,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2016
                           message) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2017
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2018
        YUITest.Assert._increment();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2019
        //check for valid matcher
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2020
        if (typeof matcher != "function"){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2021
            throw new TypeError("ArrayAssert.containsMatch(): First argument must be a function.");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2022
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2023
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2024
        if (!this._some(haystack, matcher)){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2025
            YUITest.Assert.fail(YUITest.Assert._formatMessage(message, "No match found in array [" + haystack + "]."));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2026
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2027
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2028
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2029
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2030
     * Asserts that a value is not present in an array. This uses the triple equals
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2031
     * Asserts that a value is not present in an array. This uses the triple equals
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2032
     * sign so no type coercion may occur.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2033
     * @param {Object} needle The value that is expected in the array.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2034
     * @param {Array} haystack An array of values.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2035
     * @param {String} message (Optional) The message to display if the assertion fails.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2036
     * @method doesNotContain
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2037
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2038
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2039
    doesNotContain : function (needle, haystack,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2040
                           message) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2041
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2042
        YUITest.Assert._increment();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2043
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2044
        if (this._indexOf(haystack, needle) > -1){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2045
            YUITest.Assert.fail(YUITest.Assert._formatMessage(message, "Value found in array [" + haystack + "]."));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2046
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2047
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2048
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2049
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2050
     * Asserts that a set of values are not present in an array. This uses the triple equals
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2051
     * sign so no type coercion may occur. For this assertion to pass, all values must
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2052
     * not be found.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2053
     * @param {Object[]} needles An array of values that are not expected in the array.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2054
     * @param {Array} haystack An array of values to check.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2055
     * @param {String} message (Optional) The message to display if the assertion fails.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2056
     * @method doesNotContainItems
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2057
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2058
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2059
    doesNotContainItems : function (needles, haystack,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2060
                           message) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2061
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2062
        YUITest.Assert._increment();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2063
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2064
        for (var i=0; i < needles.length; i++){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2065
            if (this._indexOf(haystack, needles[i]) > -1){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2066
                YUITest.Assert.fail(YUITest.Assert._formatMessage(message, "Value found in array [" + haystack + "]."));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2067
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2068
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2069
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2070
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2071
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2072
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2073
     * Asserts that no values matching a condition are present in an array. This uses
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2074
     * a function to determine a match.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2075
     * @param {Function} matcher A function that returns true if the item matches or false if not.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2076
     * @param {Array} haystack An array of values.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2077
     * @param {String} message (Optional) The message to display if the assertion fails.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2078
     * @method doesNotContainMatch
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2079
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2080
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2081
    doesNotContainMatch : function (matcher, haystack,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2082
                           message) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2083
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2084
        YUITest.Assert._increment();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2085
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2086
        //check for valid matcher
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2087
        if (typeof matcher != "function"){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2088
            throw new TypeError("ArrayAssert.doesNotContainMatch(): First argument must be a function.");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2089
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2090
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2091
        if (this._some(haystack, matcher)){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2092
            YUITest.Assert.fail(YUITest.Assert._formatMessage(message, "Value found in array [" + haystack + "]."));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2093
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2094
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2095
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2096
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2097
     * Asserts that the given value is contained in an array at the specified index.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2098
     * This uses the triple equals sign so no type coercion will occur.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2099
     * @param {Object} needle The value to look for.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2100
     * @param {Array} haystack The array to search in.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2101
     * @param {Number} index The index at which the value should exist.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2102
     * @param {String} message (Optional) The message to display if the assertion fails.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2103
     * @method indexOf
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2104
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2105
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2106
    indexOf : function (needle, haystack, index, message) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2107
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2108
        YUITest.Assert._increment();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2109
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2110
        //try to find the value in the array
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2111
        for (var i=0; i < haystack.length; i++){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2112
            if (haystack[i] === needle){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2113
                if (index != i){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2114
                    YUITest.Assert.fail(YUITest.Assert._formatMessage(message, "Value exists at index " + i + " but should be at index " + index + "."));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2115
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2116
                return;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2117
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2118
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2119
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2120
        //if it makes it here, it wasn't found at all
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2121
        YUITest.Assert.fail(YUITest.Assert._formatMessage(message, "Value doesn't exist in array [" + haystack + "]."));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2122
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2123
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2124
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2125
     * Asserts that the values in an array are equal, and in the same position,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2126
     * as values in another array. This uses the double equals sign
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2127
     * so type coercion may occur. Note that the array objects themselves
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2128
     * need not be the same for this test to pass.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2129
     * @param {Array} expected An array of the expected values.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2130
     * @param {Array} actual Any array of the actual values.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2131
     * @param {String} message (Optional) The message to display if the assertion fails.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2132
     * @method itemsAreEqual
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2133
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2134
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2135
    itemsAreEqual : function (expected, actual,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2136
                           message) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2137
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2138
        YUITest.Assert._increment();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2139
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2140
        //first make sure they're array-like (this can probably be improved)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2141
        if (typeof expected != "object" || typeof actual != "object"){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2142
            YUITest.Assert.fail(YUITest.Assert._formatMessage(message, "Value should be an array."));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2143
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2144
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2145
        //next check array length
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2146
        if (expected.length != actual.length){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2147
            YUITest.Assert.fail(YUITest.Assert._formatMessage(message, "Array should have a length of " + expected.length + " but has a length of " + actual.length + "."));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2148
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2149
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2150
        //begin checking values
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2151
        for (var i=0; i < expected.length; i++){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2152
            if (expected[i] != actual[i]){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2153
                throw new YUITest.ComparisonFailure(YUITest.Assert._formatMessage(message, "Values in position " + i + " are not equal."), expected[i], actual[i]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2154
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2155
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2156
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2157
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2158
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2159
     * Asserts that the values in an array are equivalent, and in the same position,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2160
     * as values in another array. This uses a function to determine if the values
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2161
     * are equivalent. Note that the array objects themselves
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2162
     * need not be the same for this test to pass.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2163
     * @param {Array} expected An array of the expected values.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2164
     * @param {Array} actual Any array of the actual values.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2165
     * @param {Function} comparator A function that returns true if the values are equivalent
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2166
     *      or false if not.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2167
     * @param {String} message (Optional) The message to display if the assertion fails.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2168
     * @method itemsAreEquivalent
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2169
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2170
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2171
    itemsAreEquivalent : function (expected, actual,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2172
                           comparator, message) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2173
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2174
        YUITest.Assert._increment();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2175
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2176
        //make sure the comparator is valid
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2177
        if (typeof comparator != "function"){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2178
            throw new TypeError("ArrayAssert.itemsAreEquivalent(): Third argument must be a function.");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2179
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2180
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2181
        //first check array length
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2182
        if (expected.length != actual.length){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2183
            YUITest.Assert.fail(YUITest.Assert._formatMessage(message, "Array should have a length of " + expected.length + " but has a length of " + actual.length));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2184
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2185
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2186
        //begin checking values
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2187
        for (var i=0; i < expected.length; i++){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2188
            if (!comparator(expected[i], actual[i])){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2189
                throw new YUITest.ComparisonFailure(YUITest.Assert._formatMessage(message, "Values in position " + i + " are not equivalent."), expected[i], actual[i]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2190
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2191
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2192
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2193
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2194
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2195
     * Asserts that an array is empty.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2196
     * @param {Array} actual The array to test.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2197
     * @param {String} message (Optional) The message to display if the assertion fails.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2198
     * @method isEmpty
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2199
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2200
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2201
    isEmpty : function (actual, message) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2202
        YUITest.Assert._increment();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2203
        if (actual.length > 0){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2204
            YUITest.Assert.fail(YUITest.Assert._formatMessage(message, "Array should be empty."));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2205
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2206
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2207
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2208
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2209
     * Asserts that an array is not empty.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2210
     * @param {Array} actual The array to test.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2211
     * @param {String} message (Optional) The message to display if the assertion fails.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2212
     * @method isNotEmpty
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2213
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2214
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2215
    isNotEmpty : function (actual, message) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2216
        YUITest.Assert._increment();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2217
        if (actual.length === 0){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2218
            YUITest.Assert.fail(YUITest.Assert._formatMessage(message, "Array should not be empty."));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2219
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2220
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2221
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2222
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2223
     * Asserts that the values in an array are the same, and in the same position,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2224
     * as values in another array. This uses the triple equals sign
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2225
     * so no type coercion will occur. Note that the array objects themselves
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2226
     * need not be the same for this test to pass.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2227
     * @param {Array} expected An array of the expected values.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2228
     * @param {Array} actual Any array of the actual values.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2229
     * @param {String} message (Optional) The message to display if the assertion fails.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2230
     * @method itemsAreSame
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2231
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2232
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2233
    itemsAreSame : function (expected, actual,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2234
                          message) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2235
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2236
        YUITest.Assert._increment();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2237
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2238
        //first check array length
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2239
        if (expected.length != actual.length){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2240
            YUITest.Assert.fail(YUITest.Assert._formatMessage(message, "Array should have a length of " + expected.length + " but has a length of " + actual.length));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2241
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2242
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2243
        //begin checking values
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2244
        for (var i=0; i < expected.length; i++){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2245
            if (expected[i] !== actual[i]){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2246
                throw new YUITest.ComparisonFailure(YUITest.Assert._formatMessage(message, "Values in position " + i + " are not the same."), expected[i], actual[i]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2247
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2248
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2249
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2250
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2251
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2252
     * Asserts that the given value is contained in an array at the specified index,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2253
     * starting from the back of the array.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2254
     * This uses the triple equals sign so no type coercion will occur.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2255
     * @param {Object} needle The value to look for.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2256
     * @param {Array} haystack The array to search in.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2257
     * @param {Number} index The index at which the value should exist.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2258
     * @param {String} message (Optional) The message to display if the assertion fails.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2259
     * @method lastIndexOf
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2260
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2261
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2262
    lastIndexOf : function (needle, haystack, index, message) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2263
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2264
        //try to find the value in the array
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2265
        for (var i=haystack.length; i >= 0; i--){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2266
            if (haystack[i] === needle){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2267
                if (index != i){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2268
                    YUITest.Assert.fail(YUITest.Assert._formatMessage(message, "Value exists at index " + i + " but should be at index " + index + "."));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2269
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2270
                return;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2271
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2272
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2273
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2274
        //if it makes it here, it wasn't found at all
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2275
        YUITest.Assert.fail(YUITest.Assert._formatMessage(message, "Value doesn't exist in array."));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2276
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2277
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2278
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2279
     * Asserts that given array doesn't contain duplicate items.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2280
     * @param {Array} array The array to check.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2281
     * @param {Function} [comparator=null] A custom function to use to test the equality of two values.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2282
     *      This function is similar to the one given to {{#crossLink "Array/unique:method"}}Y.Array.unique{{/crossLink}}.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2283
     * @param {String} [message] The message to display if the assertion fails.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2284
     * @method isUnique
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2285
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2286
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2287
    isUnique: function (array, comparator, message) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2288
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2289
        YUITest.Assert._increment();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2290
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2291
        if (!Y.Lang.isArray(array)){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2292
            throw new TypeError("ArrayAssert.isUnique(): First argument must be an array");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2293
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2294
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2295
        if (Y.Lang.isValue(comparator) && !Y.Lang.isFunction(comparator)){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2296
            throw new TypeError("ArrayAssert.isUnique(): Second argument must be a function");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2297
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2298
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2299
        if (Y.Array.unique(array, comparator).length < array.length){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2300
            message = YUITest.Assert._formatMessage(message, "Array contains duplicate(s)");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2301
            YUITest.Assert.fail(message);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2302
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2303
    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2304
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2305
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2306
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2307
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2308
 * The Assert object provides functions to test JavaScript values against
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2309
 * known and expected results. Whenever a comparison (assertion) fails,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2310
 * an error is thrown.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2311
 * @namespace Test
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2312
 * @module test
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2313
 * @class Assert
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2314
 * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2315
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2316
YUITest.Assert = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2317
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2318
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2319
     * The number of assertions performed.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2320
     * @property _asserts
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2321
     * @type int
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2322
     * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2323
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2324
    _asserts: 0,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2325
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2326
    //-------------------------------------------------------------------------
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2327
    // Helper Methods
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2328
    //-------------------------------------------------------------------------
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2329
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2330
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2331
     * Formats a message so that it can contain the original assertion message
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2332
     * in addition to the custom message.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2333
     * @param {String} customMessage The message passed in by the developer.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2334
     * @param {String} defaultMessage The message created by the error by default.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2335
     * @return {String} The final error message, containing either or both.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2336
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2337
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2338
     * @method _formatMessage
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2339
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2340
    _formatMessage : function (customMessage, defaultMessage) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2341
        if (typeof customMessage == "string" && customMessage.length > 0){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2342
            return customMessage.replace("{message}", defaultMessage);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2343
        } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2344
            return defaultMessage;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2345
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2346
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2347
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2348
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2349
     * Returns the number of assertions that have been performed.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2350
     * @method _getCount
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2351
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2352
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2353
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2354
    _getCount: function(){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2355
        return this._asserts;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2356
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2357
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2358
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2359
     * Increments the number of assertions that have been performed.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2360
     * @method _increment
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2361
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2362
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2363
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2364
    _increment: function(){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2365
        this._asserts++;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2366
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2367
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2368
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2369
     * Resets the number of assertions that have been performed to 0.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2370
     * @method _reset
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2371
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2372
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2373
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2374
    _reset: function(){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2375
        this._asserts = 0;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2376
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2377
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2378
    //-------------------------------------------------------------------------
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2379
    // Generic Assertion Methods
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2380
    //-------------------------------------------------------------------------
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2381
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2382
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2383
     * Forces an assertion error to occur.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2384
     * @param {String} message (Optional) The message to display with the failure.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2385
     * @method fail
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2386
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2387
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2388
    fail : function (message) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2389
        throw new YUITest.AssertionError(YUITest.Assert._formatMessage(message, "Test force-failed."));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2390
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2391
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2392
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2393
     * A marker that the test should pass.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2394
     * @method pass
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2395
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2396
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2397
    pass : function (message) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2398
        YUITest.Assert._increment();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2399
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2400
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2401
    //-------------------------------------------------------------------------
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2402
    // Equality Assertion Methods
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2403
    //-------------------------------------------------------------------------
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2404
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2405
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2406
     * Asserts that a value is equal to another. This uses the double equals sign
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2407
     * so type coercion may occur.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2408
     * @param {Object} expected The expected value.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2409
     * @param {Object} actual The actual value to test.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2410
     * @param {String} message (Optional) The message to display if the assertion fails.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2411
     * @method areEqual
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2412
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2413
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2414
    areEqual : function (expected, actual, message) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2415
        YUITest.Assert._increment();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2416
        if (expected != actual) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2417
            throw new YUITest.ComparisonFailure(YUITest.Assert._formatMessage(message, "Values should be equal."), expected, actual);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2418
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2419
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2420
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2421
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2422
     * Asserts that a value is not equal to another. This uses the double equals sign
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2423
     * so type coercion may occur.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2424
     * @param {Object} unexpected The unexpected value.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2425
     * @param {Object} actual The actual value to test.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2426
     * @param {String} message (Optional) The message to display if the assertion fails.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2427
     * @method areNotEqual
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2428
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2429
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2430
    areNotEqual : function (unexpected, actual,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2431
                         message) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2432
        YUITest.Assert._increment();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2433
        if (unexpected == actual) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2434
            throw new YUITest.UnexpectedValue(YUITest.Assert._formatMessage(message, "Values should not be equal."), unexpected);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2435
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2436
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2437
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2438
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2439
     * Asserts that a value is not the same as another. This uses the triple equals sign
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2440
     * so no type coercion may occur.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2441
     * @param {Object} unexpected The unexpected value.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2442
     * @param {Object} actual The actual value to test.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2443
     * @param {String} message (Optional) The message to display if the assertion fails.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2444
     * @method areNotSame
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2445
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2446
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2447
    areNotSame : function (unexpected, actual, message) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2448
        YUITest.Assert._increment();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2449
        if (unexpected === actual) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2450
            throw new YUITest.UnexpectedValue(YUITest.Assert._formatMessage(message, "Values should not be the same."), unexpected);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2451
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2452
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2453
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2454
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2455
     * Asserts that a value is the same as another. This uses the triple equals sign
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2456
     * so no type coercion may occur.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2457
     * @param {Object} expected The expected value.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2458
     * @param {Object} actual The actual value to test.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2459
     * @param {String} message (Optional) The message to display if the assertion fails.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2460
     * @method areSame
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2461
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2462
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2463
    areSame : function (expected, actual, message) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2464
        YUITest.Assert._increment();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2465
        if (expected !== actual) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2466
            throw new YUITest.ComparisonFailure(YUITest.Assert._formatMessage(message, "Values should be the same."), expected, actual);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2467
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2468
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2469
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2470
    //-------------------------------------------------------------------------
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2471
    // Boolean Assertion Methods
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2472
    //-------------------------------------------------------------------------
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2473
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2474
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2475
     * Asserts that a value is false. This uses the triple equals sign
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2476
     * so no type coercion may occur.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2477
     * @param {Object} actual The actual value to test.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2478
     * @param {String} message (Optional) The message to display if the assertion fails.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2479
     * @method isFalse
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2480
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2481
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2482
    isFalse : function (actual, message) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2483
        YUITest.Assert._increment();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2484
        if (false !== actual) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2485
            throw new YUITest.ComparisonFailure(YUITest.Assert._formatMessage(message, "Value should be false."), false, actual);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2486
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2487
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2488
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2489
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2490
     * Asserts that a value is true. This uses the triple equals sign
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2491
     * so no type coercion may occur.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2492
     * @param {Object} actual The actual value to test.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2493
     * @param {String} message (Optional) The message to display if the assertion fails.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2494
     * @method isTrue
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2495
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2496
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2497
    isTrue : function (actual, message) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2498
        YUITest.Assert._increment();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2499
        if (true !== actual) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2500
            throw new YUITest.ComparisonFailure(YUITest.Assert._formatMessage(message, "Value should be true."), true, actual);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2501
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2502
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2503
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2504
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2505
    //-------------------------------------------------------------------------
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2506
    // Special Value Assertion Methods
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2507
    //-------------------------------------------------------------------------
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2508
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2509
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2510
     * Asserts that a value is not a number.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2511
     * @param {Object} actual The value to test.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2512
     * @param {String} message (Optional) The message to display if the assertion fails.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2513
     * @method isNaN
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2514
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2515
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2516
    isNaN : function (actual, message){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2517
        YUITest.Assert._increment();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2518
        if (!isNaN(actual)){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2519
            throw new YUITest.ComparisonFailure(YUITest.Assert._formatMessage(message, "Value should be NaN."), NaN, actual);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2520
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2521
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2522
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2523
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2524
     * Asserts that a value is not the special NaN value.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2525
     * @param {Object} actual The value to test.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2526
     * @param {String} message (Optional) The message to display if the assertion fails.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2527
     * @method isNotNaN
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2528
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2529
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2530
    isNotNaN : function (actual, message){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2531
        YUITest.Assert._increment();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2532
        if (isNaN(actual)){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2533
            throw new YUITest.UnexpectedValue(YUITest.Assert._formatMessage(message, "Values should not be NaN."), NaN);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2534
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2535
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2536
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2537
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2538
     * Asserts that a value is not null. This uses the triple equals sign
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2539
     * so no type coercion may occur.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2540
     * @param {Object} actual The actual value to test.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2541
     * @param {String} message (Optional) The message to display if the assertion fails.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2542
     * @method isNotNull
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2543
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2544
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2545
    isNotNull : function (actual, message) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2546
        YUITest.Assert._increment();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2547
        if (actual === null) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2548
            throw new YUITest.UnexpectedValue(YUITest.Assert._formatMessage(message, "Values should not be null."), null);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2549
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2550
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2551
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2552
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2553
     * Asserts that a value is not undefined. This uses the triple equals sign
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2554
     * so no type coercion may occur.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2555
     * @param {Object} actual The actual value to test.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2556
     * @param {String} message (Optional) The message to display if the assertion fails.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2557
     * @method isNotUndefined
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2558
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2559
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2560
    isNotUndefined : function (actual, message) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2561
        YUITest.Assert._increment();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2562
        if (typeof actual == "undefined") {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2563
            throw new YUITest.UnexpectedValue(YUITest.Assert._formatMessage(message, "Value should not be undefined."), undefined);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2564
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2565
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2566
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2567
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2568
     * Asserts that a value is null. This uses the triple equals sign
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2569
     * so no type coercion may occur.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2570
     * @param {Object} actual The actual value to test.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2571
     * @param {String} message (Optional) The message to display if the assertion fails.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2572
     * @method isNull
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2573
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2574
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2575
    isNull : function (actual, message) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2576
        YUITest.Assert._increment();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2577
        if (actual !== null) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2578
            throw new YUITest.ComparisonFailure(YUITest.Assert._formatMessage(message, "Value should be null."), null, actual);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2579
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2580
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2581
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2582
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2583
     * Asserts that a value is undefined. This uses the triple equals sign
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2584
     * so no type coercion may occur.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2585
     * @param {Object} actual The actual value to test.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2586
     * @param {String} message (Optional) The message to display if the assertion fails.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2587
     * @method isUndefined
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2588
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2589
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2590
    isUndefined : function (actual, message) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2591
        YUITest.Assert._increment();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2592
        if (typeof actual != "undefined") {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2593
            throw new YUITest.ComparisonFailure(YUITest.Assert._formatMessage(message, "Value should be undefined."), undefined, actual);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2594
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2595
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2596
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2597
    //--------------------------------------------------------------------------
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2598
    // Instance Assertion Methods
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2599
    //--------------------------------------------------------------------------
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2600
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2601
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2602
     * Asserts that a value is an array.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2603
     * @param {Object} actual The value to test.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2604
     * @param {String} message (Optional) The message to display if the assertion fails.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2605
     * @method isArray
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2606
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2607
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2608
    isArray : function (actual, message) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2609
        YUITest.Assert._increment();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2610
        var shouldFail = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2611
        if (Array.isArray){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2612
            shouldFail = !Array.isArray(actual);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2613
        } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2614
            shouldFail = Object.prototype.toString.call(actual) != "[object Array]";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2615
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2616
        if (shouldFail){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2617
            throw new YUITest.UnexpectedValue(YUITest.Assert._formatMessage(message, "Value should be an array."), actual);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2618
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2619
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2620
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2621
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2622
     * Asserts that a value is a Boolean.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2623
     * @param {Object} actual The value to test.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2624
     * @param {String} message (Optional) The message to display if the assertion fails.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2625
     * @method isBoolean
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2626
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2627
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2628
    isBoolean : function (actual, message) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2629
        YUITest.Assert._increment();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2630
        if (typeof actual != "boolean"){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2631
            throw new YUITest.UnexpectedValue(YUITest.Assert._formatMessage(message, "Value should be a Boolean."), actual);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2632
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2633
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2634
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2635
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2636
     * Asserts that a value is a function.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2637
     * @param {Object} actual The value to test.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2638
     * @param {String} message (Optional) The message to display if the assertion fails.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2639
     * @method isFunction
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2640
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2641
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2642
    isFunction : function (actual, message) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2643
        YUITest.Assert._increment();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2644
        if (!(actual instanceof Function)){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2645
            throw new YUITest.UnexpectedValue(YUITest.Assert._formatMessage(message, "Value should be a function."), actual);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2646
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2647
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2648
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2649
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2650
     * Asserts that a value is an instance of a particular object. This may return
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2651
     * incorrect results when comparing objects from one frame to constructors in
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2652
     * another frame. For best results, don't use in a cross-frame manner.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2653
     * @param {Function} expected The function that the object should be an instance of.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2654
     * @param {Object} actual The object to test.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2655
     * @param {String} message (Optional) The message to display if the assertion fails.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2656
     * @method isInstanceOf
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2657
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2658
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2659
    isInstanceOf : function (expected, actual, message) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2660
        YUITest.Assert._increment();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2661
        if (!(actual instanceof expected)){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2662
            throw new YUITest.ComparisonFailure(YUITest.Assert._formatMessage(message, "Value isn't an instance of expected type."), expected, actual);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2663
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2664
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2665
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2666
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2667
     * Asserts that a value is a number.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2668
     * @param {Object} actual The value to test.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2669
     * @param {String} message (Optional) The message to display if the assertion fails.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2670
     * @method isNumber
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2671
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2672
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2673
    isNumber : function (actual, message) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2674
        YUITest.Assert._increment();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2675
        if (typeof actual != "number"){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2676
            throw new YUITest.UnexpectedValue(YUITest.Assert._formatMessage(message, "Value should be a number."), actual);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2677
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2678
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2679
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2680
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2681
     * Asserts that a value is an object.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2682
     * @param {Object} actual The value to test.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2683
     * @param {String} message (Optional) The message to display if the assertion fails.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2684
     * @method isObject
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2685
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2686
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2687
    isObject : function (actual, message) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2688
        YUITest.Assert._increment();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2689
        if (!actual || (typeof actual != "object" && typeof actual != "function")){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2690
            throw new YUITest.UnexpectedValue(YUITest.Assert._formatMessage(message, "Value should be an object."), actual);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2691
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2692
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2693
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2694
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2695
     * Asserts that a value is a string.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2696
     * @param {Object} actual The value to test.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2697
     * @param {String} message (Optional) The message to display if the assertion fails.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2698
     * @method isString
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2699
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2700
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2701
    isString : function (actual, message) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2702
        YUITest.Assert._increment();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2703
        if (typeof actual != "string"){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2704
            throw new YUITest.UnexpectedValue(YUITest.Assert._formatMessage(message, "Value should be a string."), actual);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2705
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2706
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2707
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2708
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2709
     * Asserts that a value is of a particular type.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2710
     * @param {String} expectedType The expected type of the variable.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2711
     * @param {Object} actualValue The actual value to test.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2712
     * @param {String} message (Optional) The message to display if the assertion fails.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2713
     * @method isTypeOf
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2714
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2715
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2716
    isTypeOf : function (expectedType, actualValue, message){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2717
        YUITest.Assert._increment();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2718
        if (typeof actualValue != expectedType){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2719
            throw new YUITest.ComparisonFailure(YUITest.Assert._formatMessage(message, "Value should be of type " + expectedType + "."), expectedType, typeof actualValue);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2720
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2721
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2722
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2723
    //--------------------------------------------------------------------------
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2724
    // Error Detection Methods
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2725
    //--------------------------------------------------------------------------
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2726
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2727
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2728
     * Asserts that executing a particular method should throw an error of
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2729
     * a specific type. This is a replacement for _should.error.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2730
     * @param {String|Function|Object} expectedError If a string, this
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2731
     *      is the error message that the error must have; if a function, this
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2732
     *      is the constructor that should have been used to create the thrown
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2733
     *      error; if an object, this is an instance of a particular error type
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2734
     *      with a specific error message (both must match).
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2735
     * @param {Function} method The method to execute that should throw the error.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2736
     * @param {String} message (Optional) The message to display if the assertion
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2737
     *      fails.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2738
     * @method throwsError
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2739
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2740
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2741
    throwsError: function(expectedError, method, message){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2742
        YUITest.Assert._increment();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2743
        var error = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2744
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2745
        try {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2746
            method();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2747
        } catch (thrown) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2748
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2749
            //check to see what type of data we have
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2750
            if (typeof expectedError == "string"){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2751
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2752
                //if it's a string, check the error message
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2753
                if (thrown.message != expectedError){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2754
                    error = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2755
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2756
            } else if (typeof expectedError == "function"){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2757
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2758
                //if it's a function, see if the error is an instance of it
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2759
                if (!(thrown instanceof expectedError)){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2760
                    error = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2761
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2762
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2763
            } else if (typeof expectedError == "object" && expectedError !== null){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2764
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2765
                //if it's an object, check the instance and message
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2766
                if (!(thrown instanceof expectedError.constructor) ||
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2767
                        thrown.message != expectedError.message){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2768
                    error = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2769
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2770
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2771
            } else { //if it gets here, the argument could be wrong
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2772
                error = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2773
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2774
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2775
            if (error){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2776
                throw new YUITest.UnexpectedError(thrown);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2777
            } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2778
                return;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2779
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2780
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2781
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2782
        //if it reaches here, the error wasn't thrown, which is a bad thing
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2783
        throw new YUITest.AssertionError(YUITest.Assert._formatMessage(message, "Error should have been thrown."));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2784
    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2785
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2786
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2787
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2788
 * Error is thrown whenever an assertion fails. It provides methods
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2789
 * to more easily get at error information and also provides a base class
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2790
 * from which more specific assertion errors can be derived.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2791
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2792
 * @param {String} message The message to display when the error occurs.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2793
 * @namespace Test
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2794
 * @module test
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2795
 * @class AssertionError
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2796
 * @constructor
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2797
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2798
YUITest.AssertionError = function (message){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2799
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2800
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2801
     * Error message. Must be duplicated to ensure browser receives it.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2802
     * @type String
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2803
     * @property message
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2804
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2805
    this.message = message;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2806
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2807
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2808
     * The name of the error that occurred.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2809
     * @type String
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2810
     * @property name
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2811
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2812
    this.name = "Assert Error";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2813
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2814
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2815
YUITest.AssertionError.prototype = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2816
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2817
    //restore constructor
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2818
    constructor: YUITest.AssertionError,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2819
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2820
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2821
     * Returns a fully formatted error for an assertion failure. This should
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2822
     * be overridden by all subclasses to provide specific information.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2823
     * @method getMessage
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2824
     * @return {String} A string describing the error.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2825
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2826
    getMessage : function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2827
        return this.message;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2828
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2829
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2830
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2831
     * Returns a string representation of the error.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2832
     * @method toString
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2833
     * @return {String} A string representation of the error.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2834
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2835
    toString : function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2836
        return this.name + ": " + this.getMessage();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2837
    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2838
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2839
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2840
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2841
 * ComparisonFailure is subclass of Error that is thrown whenever
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2842
 * a comparison between two values fails. It provides mechanisms to retrieve
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2843
 * both the expected and actual value.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2844
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2845
 * @param {String} message The message to display when the error occurs.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2846
 * @param {Object} expected The expected value.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2847
 * @param {Object} actual The actual value that caused the assertion to fail.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2848
 * @namespace Test
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2849
 * @extends AssertionError
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2850
 * @module test
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2851
 * @class ComparisonFailure
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2852
 * @constructor
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2853
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2854
YUITest.ComparisonFailure = function (message, expected, actual){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2855
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2856
    //call superclass
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2857
    YUITest.AssertionError.call(this, message);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2858
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2859
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2860
     * The expected value.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2861
     * @type Object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2862
     * @property expected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2863
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2864
    this.expected = expected;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2865
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2866
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2867
     * The actual value.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2868
     * @type Object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2869
     * @property actual
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2870
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2871
    this.actual = actual;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2872
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2873
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2874
     * The name of the error that occurred.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2875
     * @type String
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2876
     * @property name
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2877
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2878
    this.name = "ComparisonFailure";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2879
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2880
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2881
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2882
//inherit from YUITest.AssertionError
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2883
YUITest.ComparisonFailure.prototype = new YUITest.AssertionError;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2884
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2885
//restore constructor
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2886
YUITest.ComparisonFailure.prototype.constructor = YUITest.ComparisonFailure;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2887
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2888
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2889
 * Returns a fully formatted error for an assertion failure. This message
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2890
 * provides information about the expected and actual values.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2891
 * @method getMessage
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2892
 * @return {String} A string describing the error.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2893
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2894
YUITest.ComparisonFailure.prototype.getMessage = function(){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2895
    return this.message + "\nExpected: " + this.expected + " (" + (typeof this.expected) + ")"  +
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2896
            "\nActual: " + this.actual + " (" + (typeof this.actual) + ")";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2897
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2898
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2899
 * An object object containing coverage result formatting methods.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2900
 * @namespace Test
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2901
 * @module test
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2902
 * @class CoverageFormat
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2903
 * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2904
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2905
YUITest.CoverageFormat = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2906
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2907
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2908
     * Returns the coverage report in JSON format. This is the straight
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2909
     * JSON representation of the native coverage report.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2910
     * @param {Object} coverage The coverage report object.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2911
     * @return {String} A JSON-formatted string of coverage data.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2912
     * @method JSON
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2913
     * @namespace Test.CoverageFormat
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2914
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2915
    JSON: function(coverage){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2916
        return YUITest.Util.JSON.stringify(coverage);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2917
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2918
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2919
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2920
     * Returns the coverage report in a JSON format compatible with
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2921
     * Xdebug. See <a href="http://www.xdebug.com/docs/code_coverage">Xdebug Documentation</a>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2922
     * for more information. Note: function coverage is not available
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2923
     * in this format.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2924
     * @param {Object} coverage The coverage report object.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2925
     * @return {String} A JSON-formatted string of coverage data.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2926
     * @method XdebugJSON
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2927
     * @namespace Test.CoverageFormat
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2928
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2929
    XdebugJSON: function(coverage){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2930
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2931
        var report = {};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2932
        for (var prop in coverage){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2933
            if (coverage.hasOwnProperty(prop)){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2934
                report[prop] = coverage[prop].lines;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2935
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2936
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2937
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2938
        return YUITest.Util.JSON.stringify(coverage);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2939
    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2940
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2941
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2942
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2943
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2944
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2945
 * The DateAssert object provides functions to test JavaScript Date objects
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2946
 * for a variety of cases.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2947
 * @namespace Test
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2948
 * @module test
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2949
 * @class DateAssert
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2950
 * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2951
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2952
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2953
YUITest.DateAssert = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2954
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2955
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2956
     * Asserts that a date's month, day, and year are equal to another date's.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2957
     * @param {Date} expected The expected date.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2958
     * @param {Date} actual The actual date to test.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2959
     * @param {String} message (Optional) The message to display if the assertion fails.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2960
     * @method datesAreEqual
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2961
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2962
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2963
    datesAreEqual : function (expected, actual, message){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2964
        YUITest.Assert._increment();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2965
        if (expected instanceof Date && actual instanceof Date){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2966
            var msg = "";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2967
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2968
            //check years first
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2969
            if (expected.getFullYear() != actual.getFullYear()){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2970
                msg = "Years should be equal.";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2971
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2972
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2973
            //now check months
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2974
            if (expected.getMonth() != actual.getMonth()){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2975
                msg = "Months should be equal.";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2976
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2977
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2978
            //last, check the day of the month
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2979
            if (expected.getDate() != actual.getDate()){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2980
                msg = "Days of month should be equal.";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2981
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2982
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2983
            if (msg.length){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2984
                throw new YUITest.ComparisonFailure(YUITest.Assert._formatMessage(message, msg), expected, actual);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2985
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2986
        } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2987
            throw new TypeError("YUITest.DateAssert.datesAreEqual(): Expected and actual values must be Date objects.");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2988
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2989
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2990
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2991
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2992
     * Asserts that a date's hour, minutes, and seconds are equal to another date's.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2993
     * @param {Date} expected The expected date.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2994
     * @param {Date} actual The actual date to test.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2995
     * @param {String} message (Optional) The message to display if the assertion fails.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2996
     * @method timesAreEqual
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2997
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2998
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  2999
    timesAreEqual : function (expected, actual, message){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3000
        YUITest.Assert._increment();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3001
        if (expected instanceof Date && actual instanceof Date){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3002
            var msg = "";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3003
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3004
            //check hours first
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3005
            if (expected.getHours() != actual.getHours()){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3006
                msg = "Hours should be equal.";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3007
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3008
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3009
            //now check minutes
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3010
            if (expected.getMinutes() != actual.getMinutes()){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3011
                msg = "Minutes should be equal.";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3012
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3013
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3014
            //last, check the seconds
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3015
            if (expected.getSeconds() != actual.getSeconds()){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3016
                msg = "Seconds should be equal.";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3017
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3018
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3019
            if (msg.length){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3020
                throw new YUITest.ComparisonFailure(YUITest.Assert._formatMessage(message, msg), expected, actual);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3021
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3022
        } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3023
            throw new TypeError("YUITest.DateAssert.timesAreEqual(): Expected and actual values must be Date objects.");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3024
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3025
    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3026
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3027
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3028
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3029
 * Creates a new mock object.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3030
 * @namespace Test
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3031
 * @module test
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3032
 * @class Mock
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3033
 * @constructor
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3034
 * @param {Object} template (Optional) An object whose methods
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3035
 *      should be stubbed out on the mock object.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3036
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3037
YUITest.Mock = function(template){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3038
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3039
    //use blank object is nothing is passed in
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3040
    template = template || {};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3041
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3042
    var mock,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3043
        name;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3044
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3045
    //try to create mock that keeps prototype chain intact
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3046
    //fails in the case of ActiveX objects
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3047
    try {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3048
        function f(){}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3049
        f.prototype = template;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3050
        mock = new f();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3051
    } catch (ex) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3052
        mock = {};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3053
    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3054
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3055
    //create stubs for all methods
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3056
    for (name in template){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3057
        if (template.hasOwnProperty(name)){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3058
            if (typeof template[name] == "function"){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3059
                mock[name] = function(name){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3060
                    return function(){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3061
                        YUITest.Assert.fail("Method " + name + "() was called but was not expected to be.");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3062
                    };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3063
                }(name);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3064
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3065
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3066
    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3067
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3068
    //return it
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3069
    return mock;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3070
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3071
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3072
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3073
 * Assigns an expectation to a mock object. This is used to create
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3074
 * methods and properties on the mock object that are monitored for
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3075
 * calls and changes, respectively.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3076
 * @param {Object} mock The object to add the expectation to.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3077
 * @param {Object} expectation An object defining the expectation. For
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3078
 *      properties, the keys "property" and "value" are required. For a
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3079
 *      method the "method" key defines the method's name, the optional "args"
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3080
 *      key provides an array of argument types. The "returns" key provides
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3081
 *      an optional return value. An optional "run" key provides a function
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3082
 *      to be used as the method body. The return value of a mocked method is
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3083
 *      determined first by the "returns" key, then the "run" function's return
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3084
 *      value. If neither "returns" nor "run" is provided undefined is returned.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3085
 *      An optional 'error' key defines an error type to be thrown in all cases.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3086
 *      The "callCount" key provides an optional number of times the method is
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3087
 *      expected to be called (the default is 1).
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3088
 * @method expect
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3089
 * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3090
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3091
YUITest.Mock.expect = function(mock /*:Object*/, expectation /*:Object*/){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3092
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3093
    //make sure there's a place to store the expectations
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3094
    if (!mock.__expectations) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3095
        mock.__expectations = {};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3096
    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3097
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3098
    //method expectation
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3099
    if (expectation.method){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3100
        var name = expectation.method,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3101
            args = expectation.args || [],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3102
            result = expectation.returns,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3103
            callCount = (typeof expectation.callCount == "number") ? expectation.callCount : 1,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3104
            error = expectation.error,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3105
            run = expectation.run || function(){},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3106
            runResult,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3107
            i;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3108
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3109
        //save expectations
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3110
        mock.__expectations[name] = expectation;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3111
        expectation.callCount = callCount;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3112
        expectation.actualCallCount = 0;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3113
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3114
        //process arguments
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3115
        for (i=0; i < args.length; i++){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3116
             if (!(args[i] instanceof YUITest.Mock.Value)){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3117
                args[i] = YUITest.Mock.Value(YUITest.Assert.areSame, [args[i]], "Argument " + i + " of " + name + "() is incorrect.");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3118
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3119
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3120
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3121
        //if the method is expected to be called
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3122
        if (callCount > 0){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3123
            mock[name] = function(){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3124
                try {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3125
                    expectation.actualCallCount++;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3126
                    YUITest.Assert.areEqual(args.length, arguments.length, "Method " + name + "() passed incorrect number of arguments.");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3127
                    for (var i=0, len=args.length; i < len; i++){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3128
                        args[i].verify(arguments[i]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3129
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3130
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3131
                    runResult = run.apply(this, arguments);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3132
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3133
                    if (error){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3134
                        throw error;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3135
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3136
                } catch (ex){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3137
                    //route through TestRunner for proper handling
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3138
                    YUITest.TestRunner._handleError(ex);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3139
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3140
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3141
                // Any value provided for 'returns' overrides any value returned
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3142
                // by our 'run' function.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3143
                return expectation.hasOwnProperty('returns') ? result : runResult;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3144
            };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3145
        } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3146
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3147
            //method should fail if called when not expected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3148
            mock[name] = function(){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3149
                try {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3150
                    YUITest.Assert.fail("Method " + name + "() should not have been called.");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3151
                } catch (ex){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3152
                    //route through TestRunner for proper handling
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3153
                    YUITest.TestRunner._handleError(ex);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3154
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3155
            };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3156
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3157
    } else if (expectation.property){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3158
        //save expectations
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3159
        mock.__expectations[expectation.property] = expectation;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3160
    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3161
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3162
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3163
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3164
 * Verifies that all expectations of a mock object have been met and
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3165
 * throws an assertion error if not.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3166
 * @param {Object} mock The object to verify..
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3167
 * @method verify
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3168
 * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3169
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3170
YUITest.Mock.verify = function(mock){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3171
    try {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3172
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3173
        for (var name in mock.__expectations){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3174
            if (mock.__expectations.hasOwnProperty(name)){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3175
                var expectation = mock.__expectations[name];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3176
                if (expectation.method) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3177
                    YUITest.Assert.areEqual(expectation.callCount, expectation.actualCallCount, "Method " + expectation.method + "() wasn't called the expected number of times.");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3178
                } else if (expectation.property){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3179
                    YUITest.Assert.areEqual(expectation.value, mock[expectation.property], "Property " + expectation.property + " wasn't set to the correct value.");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3180
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3181
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3182
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3183
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3184
    } catch (ex){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3185
        //route through TestRunner for proper handling
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3186
        YUITest.TestRunner._handleError(ex);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3187
    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3188
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3189
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3190
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3191
 * Creates a new value matcher.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3192
 * @param {Function} method The function to call on the value.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3193
 * @param {Array} originalArgs (Optional) Array of arguments to pass to the method.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3194
 * @param {String} message (Optional) Message to display in case of failure.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3195
 * @namespace Test.Mock
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3196
 * @module test
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3197
 * @class Value
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3198
 * @constructor
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3199
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3200
YUITest.Mock.Value = function(method, originalArgs, message){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3201
    if (this instanceof YUITest.Mock.Value){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3202
        this.verify = function(value){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3203
            var args = [].concat(originalArgs || []);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3204
            args.push(value);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3205
            args.push(message);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3206
            method.apply(null, args);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3207
        };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3208
    } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3209
        return new YUITest.Mock.Value(method, originalArgs, message);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3210
    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3211
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3212
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3213
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3214
 * Predefined matcher to match any value.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3215
 * @property Any
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3216
 * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3217
 * @type Function
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3218
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3219
YUITest.Mock.Value.Any        = YUITest.Mock.Value(function(){});
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3220
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3221
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3222
 * Predefined matcher to match boolean values.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3223
 * @property Boolean
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3224
 * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3225
 * @type Function
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3226
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3227
YUITest.Mock.Value.Boolean    = YUITest.Mock.Value(YUITest.Assert.isBoolean);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3228
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3229
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3230
 * Predefined matcher to match number values.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3231
 * @property Number
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3232
 * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3233
 * @type Function
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3234
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3235
YUITest.Mock.Value.Number     = YUITest.Mock.Value(YUITest.Assert.isNumber);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3236
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3237
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3238
 * Predefined matcher to match string values.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3239
 * @property String
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3240
 * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3241
 * @type Function
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3242
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3243
YUITest.Mock.Value.String     = YUITest.Mock.Value(YUITest.Assert.isString);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3244
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3245
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3246
 * Predefined matcher to match object values.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3247
 * @property Object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3248
 * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3249
 * @type Function
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3250
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3251
YUITest.Mock.Value.Object     = YUITest.Mock.Value(YUITest.Assert.isObject);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3252
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3253
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3254
 * Predefined matcher to match function values.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3255
 * @property Function
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3256
 * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3257
 * @type Function
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3258
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3259
YUITest.Mock.Value.Function   = YUITest.Mock.Value(YUITest.Assert.isFunction);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3260
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3261
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3262
 * The ObjectAssert object provides functions to test JavaScript objects
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3263
 * for a variety of cases.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3264
 * @namespace Test
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3265
 * @module test
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3266
 * @class ObjectAssert
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3267
 * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3268
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3269
YUITest.ObjectAssert = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3270
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3271
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3272
     * Asserts that an object has all of the same properties
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3273
     * and property values as the other.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3274
     * @param {Object} expected The object with all expected properties and values.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3275
     * @param {Object} actual The object to inspect.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3276
     * @param {String} message (Optional) The message to display if the assertion fails.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3277
     * @method areEqual
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3278
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3279
     * @deprecated
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3280
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3281
    areEqual: function(expected, actual, message) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3282
        YUITest.Assert._increment();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3283
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3284
        var expectedKeys = YUITest.Object.keys(expected),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3285
            actualKeys = YUITest.Object.keys(actual);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3286
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3287
        //first check keys array length
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3288
        if (expectedKeys.length != actualKeys.length){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3289
            YUITest.Assert.fail(YUITest.Assert._formatMessage(message, "Object should have " + expectedKeys.length + " keys but has " + actualKeys.length));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3290
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3291
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3292
        //then check values
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3293
        for (var name in expected){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3294
            if (expected.hasOwnProperty(name)){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3295
                if (expected[name] != actual[name]){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3296
                    throw new YUITest.ComparisonFailure(YUITest.Assert._formatMessage(message, "Values should be equal for property " + name), expected[name], actual[name]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3297
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3298
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3299
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3300
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3301
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3302
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3303
     * Asserts that an object has a property with the given name.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3304
     * @param {String} propertyName The name of the property to test.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3305
     * @param {Object} object The object to search.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3306
     * @param {String} message (Optional) The message to display if the assertion fails.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3307
     * @method hasKey
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3308
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3309
     * @deprecated Use ownsOrInheritsKey() instead
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3310
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3311
    hasKey: function (propertyName, object, message) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3312
        YUITest.ObjectAssert.ownsOrInheritsKey(propertyName, object, message);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3313
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3314
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3315
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3316
     * Asserts that an object has all properties of a reference object.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3317
     * @param {Array} properties An array of property names that should be on the object.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3318
     * @param {Object} object The object to search.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3319
     * @param {String} message (Optional) The message to display if the assertion fails.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3320
     * @method hasKeys
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3321
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3322
     * @deprecated Use ownsOrInheritsKeys() instead
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3323
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3324
    hasKeys: function (properties, object, message) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3325
        YUITest.ObjectAssert.ownsOrInheritsKeys(properties, object, message);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3326
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3327
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3328
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3329
     * Asserts that a property with the given name exists on an object's prototype.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3330
     * @param {String} propertyName The name of the property to test.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3331
     * @param {Object} object The object to search.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3332
     * @param {String} message (Optional) The message to display if the assertion fails.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3333
     * @method inheritsKey
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3334
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3335
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3336
    inheritsKey: function (propertyName, object, message) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3337
        YUITest.Assert._increment();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3338
        if (!(propertyName in object && !object.hasOwnProperty(propertyName))){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3339
            YUITest.Assert.fail(YUITest.Assert._formatMessage(message, "Property '" + propertyName + "' not found on object instance."));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3340
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3341
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3342
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3343
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3344
     * Asserts that all properties exist on an object prototype.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3345
     * @param {Array} properties An array of property names that should be on the object.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3346
     * @param {Object} object The object to search.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3347
     * @param {String} message (Optional) The message to display if the assertion fails.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3348
     * @method inheritsKeys
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3349
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3350
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3351
    inheritsKeys: function (properties, object, message) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3352
        YUITest.Assert._increment();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3353
        for (var i=0; i < properties.length; i++){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3354
            if (!(propertyName in object && !object.hasOwnProperty(properties[i]))){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3355
                YUITest.Assert.fail(YUITest.Assert._formatMessage(message, "Property '" + properties[i] + "' not found on object instance."));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3356
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3357
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3358
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3359
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3360
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3361
     * Asserts that a property with the given name exists on an object instance (not on its prototype).
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3362
     * @param {String} propertyName The name of the property to test.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3363
     * @param {Object} object The object to search.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3364
     * @param {String} message (Optional) The message to display if the assertion fails.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3365
     * @method ownsKey
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3366
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3367
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3368
    ownsKey: function (propertyName, object, message) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3369
        YUITest.Assert._increment();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3370
        if (!object.hasOwnProperty(propertyName)){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3371
            YUITest.Assert.fail(YUITest.Assert._formatMessage(message, "Property '" + propertyName + "' not found on object instance."));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3372
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3373
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3374
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3375
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3376
     * Asserts that all properties exist on an object instance (not on its prototype).
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3377
     * @param {Array} properties An array of property names that should be on the object.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3378
     * @param {Object} object The object to search.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3379
     * @param {String} message (Optional) The message to display if the assertion fails.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3380
     * @method ownsKeys
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3381
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3382
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3383
    ownsKeys: function (properties, object, message) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3384
        YUITest.Assert._increment();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3385
        for (var i=0; i < properties.length; i++){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3386
            if (!object.hasOwnProperty(properties[i])){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3387
                YUITest.Assert.fail(YUITest.Assert._formatMessage(message, "Property '" + properties[i] + "' not found on object instance."));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3388
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3389
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3390
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3391
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3392
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3393
     * Asserts that an object owns no properties.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3394
     * @param {Object} object The object to check.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3395
     * @param {String} message (Optional) The message to display if the assertion fails.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3396
     * @method ownsNoKeys
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3397
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3398
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3399
    ownsNoKeys : function (object, message) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3400
        YUITest.Assert._increment();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3401
        var count = YUITest.Object.keys(object).length;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3402
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3403
        if (count !== 0){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3404
            YUITest.Assert.fail(YUITest.Assert._formatMessage(message, "Object owns " + count + " properties but should own none."));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3405
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3406
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3407
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3408
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3409
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3410
     * Asserts that an object has a property with the given name.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3411
     * @param {String} propertyName The name of the property to test.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3412
     * @param {Object} object The object to search.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3413
     * @param {String} message (Optional) The message to display if the assertion fails.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3414
     * @method ownsOrInheritsKey
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3415
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3416
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3417
    ownsOrInheritsKey: function (propertyName, object, message) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3418
        YUITest.Assert._increment();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3419
        if (!(propertyName in object)){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3420
            YUITest.Assert.fail(YUITest.Assert._formatMessage(message, "Property '" + propertyName + "' not found on object."));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3421
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3422
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3423
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3424
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3425
     * Asserts that an object has all properties of a reference object.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3426
     * @param {Array} properties An array of property names that should be on the object.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3427
     * @param {Object} object The object to search.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3428
     * @param {String} message (Optional) The message to display if the assertion fails.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3429
     * @method ownsOrInheritsKeys
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3430
     * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3431
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3432
    ownsOrInheritsKeys: function (properties, object, message) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3433
        YUITest.Assert._increment();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3434
        for (var i=0; i < properties.length; i++){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3435
            if (!(properties[i] in object)){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3436
                YUITest.Assert.fail(YUITest.Assert._formatMessage(message, "Property '" + properties[i] + "' not found on object."));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3437
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3438
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3439
    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3440
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3441
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3442
 * Convenience type for storing and aggregating
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3443
 * test result information.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3444
 * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3445
 * @namespace Test
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3446
 * @module test
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3447
 * @class Results
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3448
 * @constructor
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3449
 * @param {String} name The name of the test.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3450
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3451
YUITest.Results = function(name){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3452
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3453
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3454
     * Name of the test, test case, or test suite.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3455
     * @type String
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3456
     * @property name
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3457
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3458
    this.name = name;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3459
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3460
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3461
     * Number of passed tests.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3462
     * @type int
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3463
     * @property passed
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3464
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3465
    this.passed = 0;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3466
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3467
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3468
     * Number of failed tests.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3469
     * @type int
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3470
     * @property failed
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3471
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3472
    this.failed = 0;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3473
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3474
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3475
     * Number of errors that occur in non-test methods.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3476
     * @type int
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3477
     * @property errors
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3478
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3479
    this.errors = 0;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3480
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3481
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3482
     * Number of ignored tests.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3483
     * @type int
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3484
     * @property ignored
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3485
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3486
    this.ignored = 0;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3487
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3488
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3489
     * Number of total tests.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3490
     * @type int
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3491
     * @property total
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3492
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3493
    this.total = 0;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3494
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3495
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3496
     * Amount of time (ms) it took to complete testing.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3497
     * @type int
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3498
     * @property duration
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3499
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3500
    this.duration = 0;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3501
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3502
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3503
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3504
 * Includes results from another results object into this one.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3505
 * @param {Test.Results} result The results object to include.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3506
 * @method include
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3507
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3508
YUITest.Results.prototype.include = function(results){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3509
    this.passed += results.passed;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3510
    this.failed += results.failed;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3511
    this.ignored += results.ignored;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3512
    this.total += results.total;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3513
    this.errors += results.errors;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3514
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3515
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3516
 * ShouldError is subclass of Error that is thrown whenever
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3517
 * a test is expected to throw an error but doesn't.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3518
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3519
 * @param {String} message The message to display when the error occurs.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3520
 * @namespace Test
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3521
 * @extends AssertionError
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3522
 * @module test
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3523
 * @class ShouldError
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3524
 * @constructor
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3525
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3526
YUITest.ShouldError = function (message){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3527
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3528
    //call superclass
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3529
    YUITest.AssertionError.call(this, message || "This test should have thrown an error but didn't.");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3530
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3531
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3532
     * The name of the error that occurred.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3533
     * @type String
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3534
     * @property name
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3535
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3536
    this.name = "ShouldError";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3537
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3538
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3539
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3540
//inherit from YUITest.AssertionError
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3541
YUITest.ShouldError.prototype = new YUITest.AssertionError();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3542
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3543
//restore constructor
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3544
YUITest.ShouldError.prototype.constructor = YUITest.ShouldError;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3545
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3546
 * ShouldFail is subclass of AssertionError that is thrown whenever
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3547
 * a test was expected to fail but did not.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3548
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3549
 * @param {String} message The message to display when the error occurs.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3550
 * @namespace Test
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3551
 * @extends YUITest.AssertionError
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3552
 * @module test
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3553
 * @class ShouldFail
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3554
 * @constructor
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3555
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3556
YUITest.ShouldFail = function (message){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3557
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3558
    //call superclass
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3559
    YUITest.AssertionError.call(this, message || "This test should fail but didn't.");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3560
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3561
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3562
     * The name of the error that occurred.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3563
     * @type String
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3564
     * @property name
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3565
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3566
    this.name = "ShouldFail";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3567
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3568
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3569
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3570
//inherit from YUITest.AssertionError
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3571
YUITest.ShouldFail.prototype = new YUITest.AssertionError();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3572
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3573
//restore constructor
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3574
YUITest.ShouldFail.prototype.constructor = YUITest.ShouldFail;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3575
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3576
 * UnexpectedError is subclass of AssertionError that is thrown whenever
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3577
 * an error occurs within the course of a test and the test was not expected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3578
 * to throw an error.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3579
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3580
 * @param {Error} cause The unexpected error that caused this error to be
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3581
 *                      thrown.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3582
 * @namespace Test
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3583
 * @extends YUITest.AssertionError
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3584
 * @module test
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3585
 * @class UnexpectedError
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3586
 * @constructor
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3587
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3588
YUITest.UnexpectedError = function (cause){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3589
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3590
    //call superclass
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3591
    YUITest.AssertionError.call(this, "Unexpected error: " + cause.message);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3592
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3593
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3594
     * The unexpected error that occurred.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3595
     * @type Error
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3596
     * @property cause
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3597
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3598
    this.cause = cause;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3599
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3600
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3601
     * The name of the error that occurred.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3602
     * @type String
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3603
     * @property name
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3604
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3605
    this.name = "UnexpectedError";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3606
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3607
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3608
     * Stack information for the error (if provided).
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3609
     * @type String
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3610
     * @property stack
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3611
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3612
    this.stack = cause.stack;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3613
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3614
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3615
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3616
//inherit from YUITest.AssertionError
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3617
YUITest.UnexpectedError.prototype = new YUITest.AssertionError();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3618
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3619
//restore constructor
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3620
YUITest.UnexpectedError.prototype.constructor = YUITest.UnexpectedError;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3621
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3622
 * UnexpectedValue is subclass of Error that is thrown whenever
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3623
 * a value was unexpected in its scope. This typically means that a test
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3624
 * was performed to determine that a value was *not* equal to a certain
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3625
 * value.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3626
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3627
 * @param {String} message The message to display when the error occurs.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3628
 * @param {Object} unexpected The unexpected value.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3629
 * @namespace Test
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3630
 * @extends AssertionError
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3631
 * @module test
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3632
 * @class UnexpectedValue
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3633
 * @constructor
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3634
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3635
YUITest.UnexpectedValue = function (message, unexpected){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3636
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3637
    //call superclass
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3638
    YUITest.AssertionError.call(this, message);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3639
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3640
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3641
     * The unexpected value.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3642
     * @type Object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3643
     * @property unexpected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3644
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3645
    this.unexpected = unexpected;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3646
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3647
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3648
     * The name of the error that occurred.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3649
     * @type String
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3650
     * @property name
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3651
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3652
    this.name = "UnexpectedValue";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3653
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3654
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3655
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3656
//inherit from YUITest.AssertionError
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3657
YUITest.UnexpectedValue.prototype = new YUITest.AssertionError();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3658
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3659
//restore constructor
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3660
YUITest.UnexpectedValue.prototype.constructor = YUITest.UnexpectedValue;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3661
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3662
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3663
 * Returns a fully formatted error for an assertion failure. This message
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3664
 * provides information about the expected and actual values.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3665
 * @method getMessage
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3666
 * @return {String} A string describing the error.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3667
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3668
YUITest.UnexpectedValue.prototype.getMessage = function(){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3669
    return this.message + "\nUnexpected: " + this.unexpected + " (" + (typeof this.unexpected) + ") ";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3670
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3671
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3672
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3673
 * Represents a stoppage in test execution to wait for an amount of time before
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3674
 * continuing.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3675
 * @param {Function} segment A function to run when the wait is over.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3676
 * @param {Number} delay The number of milliseconds to wait before running the code.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3677
 * @module test
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3678
 * @class Wait
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3679
 * @namespace Test
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3680
 * @constructor
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3681
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3682
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3683
YUITest.Wait = function (segment, delay) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3684
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3685
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3686
     * The segment of code to run when the wait is over.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3687
     * @type Function
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3688
     * @property segment
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3689
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3690
    this.segment = (typeof segment == "function" ? segment : null);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3691
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3692
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3693
     * The delay before running the segment of code.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3694
     * @type int
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3695
     * @property delay
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3696
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3697
    this.delay = (typeof delay == "number" ? delay : 0);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3698
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3699
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3700
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3701
//Setting up our aliases..
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3702
Y.Test = YUITest;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3703
Y.Object.each(YUITest, function(item, name) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3704
    var name = name.replace('Test', '');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3705
    Y.Test[name] = item;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3706
});
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3707
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3708
} //End of else in top wrapper
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3709
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3710
Y.Assert = YUITest.Assert;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3711
Y.Assert.Error = Y.Test.AssertionError;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3712
Y.Assert.ComparisonFailure = Y.Test.ComparisonFailure;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3713
Y.Assert.UnexpectedValue = Y.Test.UnexpectedValue;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3714
Y.Mock = Y.Test.Mock;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3715
Y.ObjectAssert = Y.Test.ObjectAssert;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3716
Y.ArrayAssert = Y.Test.ArrayAssert;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3717
Y.DateAssert = Y.Test.DateAssert;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3718
Y.Test.ResultsFormat = Y.Test.TestFormat;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3719
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3720
var itemsAreEqual = Y.Test.ArrayAssert.itemsAreEqual;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3721
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3722
Y.Test.ArrayAssert.itemsAreEqual = function(expected, actual, message) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3723
    return itemsAreEqual.call(this, Y.Array(expected), Y.Array(actual), message);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3724
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3725
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3726
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3727
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3728
 * Asserts that a given condition is true. If not, then a Y.Assert.Error object is thrown
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3729
 * and the test fails.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3730
 * @method assert
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3731
 * @param {Boolean} condition The condition to test.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3732
 * @param {String} message The message to display if the assertion fails.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3733
 * @for YUI
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3734
 * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3735
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3736
Y.assert = function(condition, message){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3737
    Y.Assert._increment();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3738
    if (!condition){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3739
        throw new Y.Assert.Error(Y.Assert._formatMessage(message, "Assertion failed."));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3740
    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3741
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3742
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3743
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3744
 * Forces an assertion error to occur. Shortcut for Y.Assert.fail().
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3745
 * @method fail
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3746
 * @param {String} message (Optional) The message to display with the failure.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3747
 * @for YUI
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3748
 * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3749
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3750
Y.fail = Y.Assert.fail;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3751
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3752
Y.Test.Runner.once = Y.Test.Runner.subscribe;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3753
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3754
Y.Test.Runner.disableLogging = function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3755
    Y.Test.Runner._log = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3756
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3757
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3758
Y.Test.Runner.enableLogging = function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3759
    Y.Test.Runner._log = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3760
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3761
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3762
Y.Test.Runner._ignoreEmpty = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3763
Y.Test.Runner._log = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3764
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3765
Y.Test.Runner.on = Y.Test.Runner.attach;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3766
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3767
//Only allow one instance of YUITest
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3768
if (!YUI.YUITest) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3769
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3770
    if (Y.config.win) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3771
        Y.config.win.YUITest = YUITest;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3772
    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3773
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3774
    YUI.YUITest = Y.Test;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3775
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3776
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3777
    //Only setup the listeners once.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3778
    var logEvent = function(event) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3779
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3780
        //data variables
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3781
        var message = "";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3782
        var messageType = "";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3783
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3784
        switch(event.type){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3785
            case this.BEGIN_EVENT:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3786
                message = "Testing began at " + (new Date()).toString() + ".";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3787
                messageType = "info";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3788
                break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3789
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3790
            case this.COMPLETE_EVENT:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3791
                message = Y.Lang.sub("Testing completed at " +
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3792
                    (new Date()).toString() + ".\n" +
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3793
                    "Passed:{passed} Failed:{failed} " +
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3794
                    "Total:{total} ({ignored} ignored)",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3795
                    event.results);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3796
                messageType = "info";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3797
                break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3798
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3799
            case this.TEST_FAIL_EVENT:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3800
                message = event.testName + ": failed.\n" + event.error.getMessage();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3801
                messageType = "fail";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3802
                break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3803
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3804
            case this.TEST_IGNORE_EVENT:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3805
                message = event.testName + ": ignored.";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3806
                messageType = "ignore";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3807
                break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3808
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3809
            case this.TEST_PASS_EVENT:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3810
                message = event.testName + ": passed.";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3811
                messageType = "pass";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3812
                break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3813
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3814
            case this.TEST_SUITE_BEGIN_EVENT:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3815
                message = "Test suite \"" + event.testSuite.name + "\" started.";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3816
                messageType = "info";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3817
                break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3818
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3819
            case this.TEST_SUITE_COMPLETE_EVENT:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3820
                message = Y.Lang.sub("Test suite \"" +
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3821
                    event.testSuite.name + "\" completed" + ".\n" +
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3822
                    "Passed:{passed} Failed:{failed} " +
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3823
                    "Total:{total} ({ignored} ignored)",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3824
                    event.results);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3825
                messageType = "info";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3826
                break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3827
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3828
            case this.TEST_CASE_BEGIN_EVENT:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3829
                message = "Test case \"" + event.testCase.name + "\" started.";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3830
                messageType = "info";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3831
                break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3832
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3833
            case this.TEST_CASE_COMPLETE_EVENT:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3834
                message = Y.Lang.sub("Test case \"" +
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3835
                    event.testCase.name + "\" completed.\n" +
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3836
                    "Passed:{passed} Failed:{failed} " +
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3837
                    "Total:{total} ({ignored} ignored)",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3838
                    event.results);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3839
                messageType = "info";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3840
                break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3841
            default:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3842
                message = "Unexpected event " + event.type;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3843
                messageType = "info";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3844
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3845
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3846
        if (Y.Test.Runner._log) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3847
            Y.log(message, messageType, "TestRunner");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3848
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3849
    };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3850
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3851
    var i, name;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3852
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3853
    for (i in Y.Test.Runner) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3854
        name = Y.Test.Runner[i];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3855
        if (i.indexOf('_EVENT') > -1) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3856
            Y.Test.Runner.subscribe(name, logEvent);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3857
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3858
    };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3859
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3860
} //End if for YUI.YUITest
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3861
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3862
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  3863
}, '@VERSION@', {"requires": ["event-simulate", "event-custom", "json-stringify"]});