src/cm/media/js/lib/yui/yui_3.0.0b1/build/test/test-debug.js
author Yves-Marie Haussonne <ymh.work+github@gmail.com>
Fri, 09 May 2014 18:35:26 +0200
changeset 656 a84519031134
parent 0 40c8f766c9b8
permissions -rw-r--r--
add link to "privacy policy" in the header test
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     1
/*
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     2
Copyright (c) 2009, Yahoo! Inc. All rights reserved.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     3
Code licensed under the BSD License:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     4
http://developer.yahoo.net/yui/license.txt
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     5
version: 3.0.0b1
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     6
build: 1163
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     7
*/
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     8
YUI.add('test', function(Y) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     9
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    10
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    11
     * YUI JavaScript Testing Framework
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    12
     *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    13
     * @module yuitest
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    14
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    15
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    16
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    17
    Y.namespace("Test");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    18
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    19
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    20
     * Test case containing various tests to run.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    21
     * @param template An object containing any number of test methods, other methods,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    22
     *                 an optional name, and anything else the test case needs.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    23
     * @class Case
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    24
     * @namespace Test
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    25
     * @constructor
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    26
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    27
    Y.Test.Case = function (template) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    28
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    29
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    30
         * Special rules for the test case. Possible subobjects
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    31
         * are fail, for tests that should fail, and error, for
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    32
         * tests that should throw an error.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    33
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    34
        this._should = {};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    35
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    36
        //copy over all properties from the template to this object
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    37
        for (var prop in template) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    38
            this[prop] = template[prop];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    39
        }    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    40
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    41
        //check for a valid name
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    42
        if (!Y.Lang.isString(this.name)){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    43
            /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    44
             * Name for the test case.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    45
             */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    46
            this.name = "testCase" + Y.guid();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    47
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    48
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    49
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    50
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    51
    Y.Test.Case.prototype = {  
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    52
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    53
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    54
         * Resumes a paused test and runs the given function.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    55
         * @param {Function} segment (Optional) The function to run.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    56
         *      If omitted, the test automatically passes.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    57
         * @return {Void}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    58
         * @method resume
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    59
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    60
        resume : function (segment) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    61
            Y.Test.Runner.resume(segment);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    62
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    63
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    64
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    65
         * Causes the test case to wait a specified amount of time and then
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    66
         * continue executing the given code.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    67
         * @param {Function} segment (Optional) The function to run after the delay.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    68
         *      If omitted, the TestRunner will wait until resume() is called.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    69
         * @param {int} delay (Optional) The number of milliseconds to wait before running
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    70
         *      the function. If omitted, defaults to zero.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    71
         * @return {Void}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    72
         * @method wait
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    73
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    74
        wait : function (segment, delay){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    75
            var args = arguments;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    76
            if (Y.Lang.isFunction(args[0])){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    77
                throw new Y.Test.Wait(args[0], args[1]);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    78
            } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    79
                throw new Y.Test.Wait(function(){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    80
                    Y.Assert.fail("Timeout: wait() called but resume() never called.");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    81
                }, (Y.Lang.isNumber(args[0]) ? args[0] : 10000));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    82
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    83
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    84
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    85
        //-------------------------------------------------------------------------
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    86
        // Stub Methods
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    87
        //-------------------------------------------------------------------------
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    88
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    89
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    90
         * Function to run before each test is executed.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    91
         * @return {Void}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    92
         * @method setUp
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    93
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    94
        setUp : function () {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    95
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    96
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    97
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    98
         * Function to run after each test is executed.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    99
         * @return {Void}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   100
         * @method tearDown
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   101
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   102
        tearDown: function () {    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   103
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   104
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   105
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   106
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   107
     * Represents a stoppage in test execution to wait for an amount of time before
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   108
     * continuing.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   109
     * @param {Function} segment A function to run when the wait is over.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   110
     * @param {int} delay The number of milliseconds to wait before running the code.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   111
     * @class Wait
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   112
     * @namespace Test
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   113
     * @constructor
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   114
     *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   115
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   116
    Y.Test.Wait = function (segment, delay) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   117
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   118
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   119
         * The segment of code to run when the wait is over.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   120
         * @type Function
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   121
         * @property segment
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   122
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   123
        this.segment = (Y.Lang.isFunction(segment) ? segment : null);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   124
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   125
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   126
         * The delay before running the segment of code.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   127
         * @type int
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   128
         * @property delay
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   129
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   130
        this.delay = (Y.Lang.isNumber(delay) ? delay : 0);        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   131
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   132
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   133
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   134
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   135
    Y.namespace("Test");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   136
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   137
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   138
     * A test suite that can contain a collection of TestCase and TestSuite objects.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   139
     * @param {String||Object} data The name of the test suite or an object containing
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   140
     *      a name property as well as setUp and tearDown methods.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   141
     * @namespace Test
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   142
     * @class Suite
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   143
     * @constructor
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   144
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   145
    Y.Test.Suite = function (data /*:String||Object*/) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   146
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   147
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   148
         * The name of the test suite.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   149
         * @type String
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   150
         * @property name
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   151
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   152
        this.name = "";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   153
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   154
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   155
         * Array of test suites and
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   156
         * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   157
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   158
        this.items = [];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   159
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   160
        //initialize the properties
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   161
        if (Y.Lang.isString(data)){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   162
            this.name = data;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   163
        } else if (Y.Lang.isObject(data)){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   164
            Y.mix(this, data, true);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   165
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   166
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   167
        //double-check name
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   168
        if (this.name === ""){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   169
            this.name = "testSuite" + Y.guid();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   170
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   171
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   172
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   173
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   174
    Y.Test.Suite.prototype = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   175
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   176
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   177
         * Adds a test suite or test case to the test suite.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   178
         * @param {Y.Test.Suite||Y.Test.Case} testObject The test suite or test case to add.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   179
         * @return {Void}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   180
         * @method add
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   181
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   182
        add : function (testObject /*:Y.Test.Suite*/) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   183
            if (testObject instanceof Y.Test.Suite || testObject instanceof Y.Test.Case) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   184
                this.items.push(testObject);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   185
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   186
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   187
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   188
        //-------------------------------------------------------------------------
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   189
        // Stub Methods
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   190
        //-------------------------------------------------------------------------
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   191
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   192
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   193
         * Function to run before each test is executed.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   194
         * @return {Void}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   195
         * @method setUp
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   196
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   197
        setUp : function () {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   198
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   199
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   200
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   201
         * Function to run after each test is executed.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   202
         * @return {Void}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   203
         * @method tearDown
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   204
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   205
        tearDown: function () {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   206
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   207
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   208
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   209
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   210
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   211
    /*
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   212
     * Runs test suites and test cases, providing events to allowing for the
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   213
     * interpretation of test results.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   214
     * @namespace Test
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   215
     * @class Runner
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   216
     * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   217
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   218
    Y.Test.Runner = (function(){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   219
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   220
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   221
         * A node in the test tree structure. May represent a TestSuite, TestCase, or
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   222
         * test function.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   223
         * @param {Variant} testObject A TestSuite, TestCase, or the name of a test function.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   224
         * @class TestNode
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   225
         * @constructor
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   226
         * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   227
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   228
        function TestNode(testObject){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   229
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   230
            /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   231
             * The TestSuite, TestCase, or test function represented by this node.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   232
             * @type Variant
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   233
             * @property testObject
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   234
             */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   235
            this.testObject = testObject;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   236
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   237
            /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   238
             * Pointer to this node's first child.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   239
             * @type TestNode
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   240
             * @property firstChild
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   241
             */        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   242
            this.firstChild = null;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   243
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   244
            /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   245
             * Pointer to this node's last child.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   246
             * @type TestNode
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   247
             * @property lastChild
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   248
             */        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   249
            this.lastChild = null;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   250
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   251
            /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   252
             * Pointer to this node's parent.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   253
             * @type TestNode
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   254
             * @property parent
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   255
             */        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   256
            this.parent = null; 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   257
       
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   258
            /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   259
             * Pointer to this node's next sibling.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   260
             * @type TestNode
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   261
             * @property next
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   262
             */        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   263
            this.next = null;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   264
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   265
            /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   266
             * Test results for this test object.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   267
             * @type object
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   268
             * @property results
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   269
             */                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   270
            this.results = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   271
                passed : 0,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   272
                failed : 0,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   273
                total : 0,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   274
                ignored : 0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   275
            };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   276
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   277
            //initialize results
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   278
            if (testObject instanceof Y.Test.Suite){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   279
                this.results.type = "testsuite";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   280
                this.results.name = testObject.name;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   281
            } else if (testObject instanceof Y.Test.Case){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   282
                this.results.type = "testcase";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   283
                this.results.name = testObject.name;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   284
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   285
           
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   286
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   287
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   288
        TestNode.prototype = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   289
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   290
            /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   291
             * Appends a new test object (TestSuite, TestCase, or test function name) as a child
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   292
             * of this node.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   293
             * @param {Variant} testObject A TestSuite, TestCase, or the name of a test function.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   294
             * @return {Void}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   295
             */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   296
            appendChild : function (testObject){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   297
                var node = new TestNode(testObject);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   298
                if (this.firstChild === null){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   299
                    this.firstChild = this.lastChild = node;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   300
                } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   301
                    this.lastChild.next = node;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   302
                    this.lastChild = node;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   303
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   304
                node.parent = this;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   305
                return node;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   306
            }       
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   307
        };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   308
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   309
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   310
         * Runs test suites and test cases, providing events to allowing for the
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   311
         * interpretation of test results.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   312
         * @namespace Test
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   313
         * @class Runner
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   314
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   315
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   316
        function TestRunner(){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   317
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   318
            //inherit from EventProvider
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   319
            TestRunner.superclass.constructor.apply(this,arguments);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   320
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   321
            /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   322
             * Suite on which to attach all TestSuites and TestCases to be run.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   323
             * @type Y.Test.Suite
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   324
             * @property masterSuite
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   325
             * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   326
             * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   327
             */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   328
            this.masterSuite /*:Y.Test.Suite*/ = new Y.Test.Suite("YUI Test Results");        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   329
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   330
            /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   331
             * Pointer to the current node in the test tree.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   332
             * @type TestNode
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   333
             * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   334
             * @property _cur
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   335
             * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   336
             */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   337
            this._cur = null;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   338
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   339
            /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   340
             * Pointer to the root node in the test tree.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   341
             * @type TestNode
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   342
             * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   343
             * @property _root
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   344
             * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   345
             */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   346
            this._root = null;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   347
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   348
            /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   349
             * Indicates if the TestRunner will log events or not.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   350
             * @type Boolean
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   351
             * @property _log
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   352
             * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   353
             * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   354
             */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   355
            this._log = true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   356
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   357
            /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   358
             * Indicates if the TestRunner is waiting as a result of
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   359
             * wait() being called.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   360
             * @type Boolean
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   361
             * @property _waiting
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   362
             * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   363
             * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   364
             */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   365
            this._waiting = false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   366
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   367
            //create events
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   368
            var events = [
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   369
                this.TEST_CASE_BEGIN_EVENT,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   370
                this.TEST_CASE_COMPLETE_EVENT,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   371
                this.TEST_SUITE_BEGIN_EVENT,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   372
                this.TEST_SUITE_COMPLETE_EVENT,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   373
                this.TEST_PASS_EVENT,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   374
                this.TEST_FAIL_EVENT,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   375
                this.TEST_IGNORE_EVENT,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   376
                this.COMPLETE_EVENT,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   377
                this.BEGIN_EVENT
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   378
            ];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   379
            for (var i=0; i < events.length; i++){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   380
                this.subscribe(events[i], this._logEvent, this, true);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   381
            }      
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   382
       
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   383
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   384
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   385
        Y.extend(TestRunner, Y.Event.Target, {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   386
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   387
            //-------------------------------------------------------------------------
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   388
            // Constants
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   389
            //-------------------------------------------------------------------------
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   390
             
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   391
            /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   392
             * Fires when a test case is opened but before the first 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   393
             * test is executed.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   394
             * @event testcasebegin
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   395
             * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   396
             */         
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   397
            TEST_CASE_BEGIN_EVENT : "testcasebegin",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   398
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   399
            /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   400
             * Fires when all tests in a test case have been executed.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   401
             * @event testcasecomplete
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   402
             * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   403
             */        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   404
            TEST_CASE_COMPLETE_EVENT : "testcasecomplete",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   405
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   406
            /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   407
             * Fires when a test suite is opened but before the first 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   408
             * test is executed.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   409
             * @event testsuitebegin
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   410
             * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   411
             */        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   412
            TEST_SUITE_BEGIN_EVENT : "testsuitebegin",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   413
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   414
            /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   415
             * Fires when all test cases in a test suite have been
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   416
             * completed.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   417
             * @event testsuitecomplete
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   418
             * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   419
             */        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   420
            TEST_SUITE_COMPLETE_EVENT : "testsuitecomplete",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   421
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   422
            /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   423
             * Fires when a test has passed.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   424
             * @event pass
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   425
             * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   426
             */        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   427
            TEST_PASS_EVENT : "pass",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   428
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   429
            /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   430
             * Fires when a test has failed.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   431
             * @event fail
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   432
             * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   433
             */        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   434
            TEST_FAIL_EVENT : "fail",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   435
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   436
            /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   437
             * Fires when a test has been ignored.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   438
             * @event ignore
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   439
             * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   440
             */        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   441
            TEST_IGNORE_EVENT : "ignore",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   442
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   443
            /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   444
             * Fires when all test suites and test cases have been completed.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   445
             * @event complete
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   446
             * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   447
             */        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   448
            COMPLETE_EVENT : "complete",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   449
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   450
            /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   451
             * Fires when the run() method is called.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   452
             * @event begin
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   453
             * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   454
             */        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   455
            BEGIN_EVENT : "begin",    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   456
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   457
            //-------------------------------------------------------------------------
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   458
            // Logging-Related Methods
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   459
            //-------------------------------------------------------------------------
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   460
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   461
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   462
            /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   463
             * Disable logging via Y.log(). Test output will not be visible unless
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   464
             * TestRunner events are subscribed to.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   465
             * @return {Void}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   466
             * @method disableLogging
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   467
             * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   468
             */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   469
            disableLogging: function(){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   470
                this._log = false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   471
            },    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   472
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   473
            /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   474
             * Enable logging via Y.log(). Test output is published and can be read via
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   475
             * logreader.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   476
             * @return {Void}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   477
             * @method enableLogging
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   478
             * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   479
             */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   480
            enableLogging: function(){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   481
                this._log = true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   482
            },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   483
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   484
            /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   485
             * Logs TestRunner events using Y.log().
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   486
             * @param {Object} event The event object for the event.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   487
             * @return {Void}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   488
             * @method _logEvent
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   489
             * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   490
             * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   491
             */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   492
            _logEvent: function(event){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   493
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   494
                //data variables
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   495
                var message = "";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   496
                var messageType = "";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   497
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   498
                switch(event.type){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   499
                    case this.BEGIN_EVENT:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   500
                        message = "Testing began at " + (new Date()).toString() + ".";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   501
                        messageType = "info";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   502
                        break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   503
                        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   504
                    case this.COMPLETE_EVENT:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   505
                        message = "Testing completed at " + (new Date()).toString() + ".\nPassed:" + 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   506
                            event.results.passed + " Failed:" + event.results.failed + " Total:" + event.results.total;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   507
                        messageType = "info";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   508
                        break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   509
                        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   510
                    case this.TEST_FAIL_EVENT:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   511
                        message = event.testName + ": " + event.error.getMessage();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   512
                        messageType = "fail";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   513
                        break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   514
                        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   515
                    case this.TEST_IGNORE_EVENT:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   516
                        message = event.testName + ": ignored.";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   517
                        messageType = "ignore";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   518
                        break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   519
                        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   520
                    case this.TEST_PASS_EVENT:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   521
                        message = event.testName + ": passed.";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   522
                        messageType = "pass";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   523
                        break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   524
                        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   525
                    case this.TEST_SUITE_BEGIN_EVENT:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   526
                        message = "Test suite \"" + event.testSuite.name + "\" started.";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   527
                        messageType = "info";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   528
                        break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   529
                        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   530
                    case this.TEST_SUITE_COMPLETE_EVENT:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   531
                        message = "Test suite \"" + event.testSuite.name + "\" completed.\nPassed:" + 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   532
                            event.results.passed + " Failed:" + event.results.failed + " Total:" + event.results.total;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   533
                        messageType = "info";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   534
                        break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   535
                        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   536
                    case this.TEST_CASE_BEGIN_EVENT:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   537
                        message = "Test case \"" + event.testCase.name + "\" started.";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   538
                        messageType = "info";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   539
                        break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   540
                        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   541
                    case this.TEST_CASE_COMPLETE_EVENT:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   542
                        message = "Test case \"" + event.testCase.name + "\" completed.\nPassed:" + 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   543
                            event.results.passed + " Failed:" + event.results.failed + " Total:" + event.results.total;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   544
                        messageType = "info";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   545
                        break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   546
                    default:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   547
                        message = "Unexpected event " + event.type;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   548
                        message = "info";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   549
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   550
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   551
                //only log if required
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   552
                if (this._log){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   553
                    Y.log(message, messageType, "TestRunner");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   554
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   555
            },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   556
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   557
            //-------------------------------------------------------------------------
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   558
            // Test Tree-Related Methods
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   559
            //-------------------------------------------------------------------------
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   560
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   561
            /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   562
             * Adds a test case to the test tree as a child of the specified node.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   563
             * @param {TestNode} parentNode The node to add the test case to as a child.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   564
             * @param {Y.Test.Case} testCase The test case to add.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   565
             * @return {Void}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   566
             * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   567
             * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   568
             * @method _addTestCaseToTestTree
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   569
             */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   570
           _addTestCaseToTestTree : function (parentNode, testCase /*:Y.Test.Case*/){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   571
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   572
                //add the test suite
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   573
                var node = parentNode.appendChild(testCase),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   574
                    prop,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   575
                    testName;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   576
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   577
                //iterate over the items in the test case
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   578
                for (prop in testCase){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   579
                    if ((prop.indexOf("test") === 0 || (prop.toLowerCase().indexOf("should") > -1 && prop.indexOf(" ") > -1 ))&& Y.Lang.isFunction(testCase[prop])){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   580
                        node.appendChild(prop);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   581
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   582
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   583
             
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   584
            },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   585
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   586
            /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   587
             * Adds a test suite to the test tree as a child of the specified node.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   588
             * @param {TestNode} parentNode The node to add the test suite to as a child.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   589
             * @param {Y.Test.Suite} testSuite The test suite to add.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   590
             * @return {Void}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   591
             * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   592
             * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   593
             * @method _addTestSuiteToTestTree
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   594
             */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   595
            _addTestSuiteToTestTree : function (parentNode, testSuite /*:Y.Test.Suite*/) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   596
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   597
                //add the test suite
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   598
                var node = parentNode.appendChild(testSuite);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   599
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   600
                //iterate over the items in the master suite
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   601
                for (var i=0; i < testSuite.items.length; i++){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   602
                    if (testSuite.items[i] instanceof Y.Test.Suite) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   603
                        this._addTestSuiteToTestTree(node, testSuite.items[i]);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   604
                    } else if (testSuite.items[i] instanceof Y.Test.Case) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   605
                        this._addTestCaseToTestTree(node, testSuite.items[i]);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   606
                    }                   
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   607
                }            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   608
            },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   609
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   610
            /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   611
             * Builds the test tree based on items in the master suite. The tree is a hierarchical
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   612
             * representation of the test suites, test cases, and test functions. The resulting tree
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   613
             * is stored in _root and the pointer _cur is set to the root initially.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   614
             * @return {Void}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   615
             * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   616
             * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   617
             * @method _buildTestTree
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   618
             */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   619
            _buildTestTree : function () {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   620
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   621
                this._root = new TestNode(this.masterSuite);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   622
                this._cur = this._root;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   623
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   624
                //iterate over the items in the master suite
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   625
                for (var i=0; i < this.masterSuite.items.length; i++){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   626
                    if (this.masterSuite.items[i] instanceof Y.Test.Suite) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   627
                        this._addTestSuiteToTestTree(this._root, this.masterSuite.items[i]);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   628
                    } else if (this.masterSuite.items[i] instanceof Y.Test.Case) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   629
                        this._addTestCaseToTestTree(this._root, this.masterSuite.items[i]);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   630
                    }                   
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   631
                }            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   632
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   633
            }, 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   634
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   635
            //-------------------------------------------------------------------------
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   636
            // Private Methods
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   637
            //-------------------------------------------------------------------------
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   638
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   639
            /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   640
             * Handles the completion of a test object's tests. Tallies test results 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   641
             * from one level up to the next.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   642
             * @param {TestNode} node The TestNode representing the test object.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   643
             * @return {Void}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   644
             * @method _handleTestObjectComplete
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   645
             * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   646
             */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   647
            _handleTestObjectComplete : function (node) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   648
                if (Y.Lang.isObject(node.testObject)){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   649
                    node.parent.results.passed += node.results.passed;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   650
                    node.parent.results.failed += node.results.failed;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   651
                    node.parent.results.total += node.results.total;                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   652
                    node.parent.results.ignored += node.results.ignored;                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   653
                    node.parent.results[node.testObject.name] = node.results;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   654
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   655
                    if (node.testObject instanceof Y.Test.Suite){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   656
                        node.testObject.tearDown();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   657
                        this.fire(this.TEST_SUITE_COMPLETE_EVENT, { testSuite: node.testObject, results: node.results});
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   658
                    } else if (node.testObject instanceof Y.Test.Case){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   659
                        this.fire(this.TEST_CASE_COMPLETE_EVENT, { testCase: node.testObject, results: node.results});
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   660
                    }      
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   661
                } 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   662
            },                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   663
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   664
            //-------------------------------------------------------------------------
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   665
            // Navigation Methods
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   666
            //-------------------------------------------------------------------------
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   667
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   668
            /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   669
             * Retrieves the next node in the test tree.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   670
             * @return {TestNode} The next node in the test tree or null if the end is reached.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   671
             * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   672
             * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   673
             * @method _next
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   674
             */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   675
            _next : function () {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   676
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   677
                if (this._cur.firstChild) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   678
                    this._cur = this._cur.firstChild;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   679
                } else if (this._cur.next) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   680
                    this._cur = this._cur.next;            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   681
                } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   682
                    while (this._cur && !this._cur.next && this._cur !== this._root){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   683
                        this._handleTestObjectComplete(this._cur);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   684
                        this._cur = this._cur.parent;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   685
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   686
                    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   687
                    if (this._cur == this._root){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   688
                        this._cur.results.type = "report";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   689
                        this._cur.results.timestamp = (new Date()).toLocaleString();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   690
                        this._cur.results.duration = (new Date()) - this._cur.results.duration;                            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   691
                        this.fire(this.COMPLETE_EVENT, { results: this._cur.results});
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   692
                        this._cur = null;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   693
                    } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   694
                        this._handleTestObjectComplete(this._cur);               
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   695
                        this._cur = this._cur.next;                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   696
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   697
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   698
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   699
                return this._cur;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   700
            },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   701
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   702
            /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   703
             * Runs a test case or test suite, returning the results.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   704
             * @param {Y.Test.Case|Y.Test.Suite} testObject The test case or test suite to run.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   705
             * @return {Object} Results of the execution with properties passed, failed, and total.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   706
             * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   707
             * @method _run
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   708
             * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   709
             */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   710
            _run : function () {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   711
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   712
                //flag to indicate if the TestRunner should wait before continuing
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   713
                var shouldWait = false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   714
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   715
                //get the next test node
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   716
                var node = this._next();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   717
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   718
                if (node !== null) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   719
                    var testObject = node.testObject;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   720
                    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   721
                    //figure out what to do
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   722
                    if (Y.Lang.isObject(testObject)){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   723
                        if (testObject instanceof Y.Test.Suite){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   724
                            this.fire(this.TEST_SUITE_BEGIN_EVENT, { testSuite: testObject });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   725
                            testObject.setUp();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   726
                        } else if (testObject instanceof Y.Test.Case){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   727
                            this.fire(this.TEST_CASE_BEGIN_EVENT, { testCase: testObject });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   728
                        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   729
                        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   730
                        //some environments don't support setTimeout
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   731
                        if (typeof setTimeout != "undefined"){                    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   732
                            setTimeout(function(){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   733
                                Y.Test.Runner._run();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   734
                            }, 0);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   735
                        } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   736
                            this._run();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   737
                        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   738
                    } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   739
                        this._runTest(node);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   740
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   741
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   742
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   743
            },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   744
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   745
            _resumeTest : function (segment) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   746
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   747
                //get relevant information
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   748
                var node = this._cur;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   749
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   750
                //if there's no node, it probably means a wait() was called after resume()
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   751
                if (!node){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   752
                    //TODO: Handle in some way?
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   753
                    //console.log("wait() called after resume()");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   754
                    //this.fire("error", { testCase: "(unknown)", test: "(unknown)", error: new Error("wait() called after resume()")} );
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   755
                    return;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   756
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   757
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   758
                var testName = node.testObject;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   759
                var testCase /*:Y.Test.Case*/ = node.parent.testObject;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   760
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   761
                //cancel other waits if available
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   762
                if (testCase.__yui_wait){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   763
                    clearTimeout(testCase.__yui_wait);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   764
                    delete testCase.__yui_wait;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   765
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   766
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   767
                //get the "should" test cases
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   768
                var shouldFail = (testCase._should.fail || {})[testName];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   769
                var shouldError = (testCase._should.error || {})[testName];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   770
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   771
                //variable to hold whether or not the test failed
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   772
                var failed = false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   773
                var error = null;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   774
                    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   775
                //try the test
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   776
                try {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   777
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   778
                    //run the test
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   779
                    segment.apply(testCase);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   780
                    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   781
                    //if it should fail, and it got here, then it's a fail because it didn't
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   782
                    if (shouldFail){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   783
                        error = new Y.Assert.ShouldFail();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   784
                        failed = true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   785
                    } else if (shouldError){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   786
                        error = new Y.Assert.ShouldError();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   787
                        failed = true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   788
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   789
                               
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   790
                } catch (thrown){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   791
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   792
                    //cancel any pending waits, the test already failed
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   793
                    if (testCase.__yui_wait){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   794
                        clearTimeout(testCase.__yui_wait);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   795
                        delete testCase.__yui_wait;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   796
                    }                    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   797
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   798
                    //figure out what type of error it was
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   799
                    if (thrown instanceof Y.Assert.Error) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   800
                        if (!shouldFail){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   801
                            error = thrown;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   802
                            failed = true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   803
                        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   804
                    } else if (thrown instanceof Y.Test.Wait){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   805
                    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   806
                        if (Y.Lang.isFunction(thrown.segment)){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   807
                            if (Y.Lang.isNumber(thrown.delay)){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   808
                            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   809
                                //some environments don't support setTimeout
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   810
                                if (typeof setTimeout != "undefined"){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   811
                                    testCase.__yui_wait = setTimeout(function(){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   812
                                        Y.Test.Runner._resumeTest(thrown.segment);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   813
                                    }, thrown.delay);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   814
                                    this._waiting = true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   815
                                } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   816
                                    throw new Error("Asynchronous tests not supported in this environment.");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   817
                                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   818
                            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   819
                        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   820
                        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   821
                        return;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   822
                    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   823
                    } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   824
                        //first check to see if it should error
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   825
                        if (!shouldError) {                        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   826
                            error = new Y.Assert.UnexpectedError(thrown);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   827
                            failed = true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   828
                        } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   829
                            //check to see what type of data we have
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   830
                            if (Y.Lang.isString(shouldError)){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   831
                                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   832
                                //if it's a string, check the error message
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   833
                                if (thrown.message != shouldError){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   834
                                    error = new Y.Assert.UnexpectedError(thrown);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   835
                                    failed = true;                                    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   836
                                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   837
                            } else if (Y.Lang.isFunction(shouldError)){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   838
                            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   839
                                //if it's a function, see if the error is an instance of it
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   840
                                if (!(thrown instanceof shouldError)){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   841
                                    error = new Y.Assert.UnexpectedError(thrown);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   842
                                    failed = true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   843
                                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   844
                            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   845
                            } else if (Y.Lang.isObject(shouldError)){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   846
                            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   847
                                //if it's an object, check the instance and message
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   848
                                if (!(thrown instanceof shouldError.constructor) || 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   849
                                        thrown.message != shouldError.message){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   850
                                    error = new Y.Assert.UnexpectedError(thrown);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   851
                                    failed = true;                                    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   852
                                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   853
                            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   854
                            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   855
                        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   856
                        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   857
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   858
                    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   859
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   860
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   861
                //fire appropriate event
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   862
                if (failed) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   863
                    this.fire(this.TEST_FAIL_EVENT, { testCase: testCase, testName: testName, error: error });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   864
                } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   865
                    this.fire(this.TEST_PASS_EVENT, { testCase: testCase, testName: testName });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   866
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   867
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   868
                //run the tear down
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   869
                testCase.tearDown();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   870
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   871
                //update results
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   872
                node.parent.results[testName] = { 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   873
                    result: failed ? "fail" : "pass",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   874
                    message: error ? error.getMessage() : "Test passed",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   875
                    type: "test",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   876
                    name: testName
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   877
                };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   878
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   879
                if (failed){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   880
                    node.parent.results.failed++;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   881
                } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   882
                    node.parent.results.passed++;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   883
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   884
                node.parent.results.total++;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   885
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   886
                //we know there's no more waiting now
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   887
                this._waiting = false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   888
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   889
                //set timeout not supported in all environments
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   890
                if (typeof setTimeout != "undefined"){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   891
                    setTimeout(function(){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   892
                        Y.Test.Runner._run();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   893
                    }, 0);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   894
                } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   895
                    this._run();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   896
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   897
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   898
            },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   899
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   900
            /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   901
             * Handles an error as if it occurred within the currently executing
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   902
             * test. This is for mock methods that may be called asynchronously
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   903
             * and therefore out of the scope of the TestRunner. Previously, this
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   904
             * error would bubble up to the browser. Now, this method is used
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   905
             * to tell TestRunner about the error. This should never be called
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   906
             * by anyplace other than the Mock object.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   907
             * @param {Error} error The error object.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   908
             * @return {Void}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   909
             * @method _handleError
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   910
             * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   911
             * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   912
             */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   913
            _handleError: function(error){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   914
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   915
                if (this._waiting){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   916
                    this._resumeTest(function(){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   917
                        throw error;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   918
                    });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   919
                } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   920
                    throw error;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   921
                }           
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   922
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   923
            },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   924
                    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   925
            /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   926
             * Runs a single test based on the data provided in the node.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   927
             * @param {TestNode} node The TestNode representing the test to run.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   928
             * @return {Void}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   929
             * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   930
             * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   931
             * @name _runTest
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   932
             */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   933
            _runTest : function (node) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   934
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   935
                //get relevant information
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   936
                var testName = node.testObject;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   937
                var testCase /*:Y.Test.Case*/ = node.parent.testObject;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   938
                var test = testCase[testName];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   939
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   940
                //get the "should" test cases
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   941
                var shouldIgnore = (testCase._should.ignore || {})[testName];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   942
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   943
                //figure out if the test should be ignored or not
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   944
                if (shouldIgnore){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   945
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   946
                    //update results
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   947
                    node.parent.results[testName] = { 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   948
                        result: "ignore",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   949
                        message: "Test ignored",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   950
                        type: "test",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   951
                        name: testName
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   952
                    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   953
                    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   954
                    node.parent.results.ignored++;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   955
                    node.parent.results.total++;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   956
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   957
                    this.fire(this.TEST_IGNORE_EVENT, { testCase: testCase, testName: testName });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   958
                    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   959
                    //some environments don't support setTimeout
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   960
                    if (typeof setTimeout != "undefined"){                    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   961
                        setTimeout(function(){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   962
                            Y.Test.Runner._run();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   963
                        }, 0);              
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   964
                    } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   965
                        this._run();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   966
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   967
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   968
                } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   969
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   970
                    //run the setup
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   971
                    testCase.setUp();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   972
                    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   973
                    //now call the body of the test
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   974
                    this._resumeTest(test);                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   975
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   976
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   977
            },        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   978
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   979
            //-------------------------------------------------------------------------
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   980
            // Protected Methods
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   981
            //-------------------------------------------------------------------------   
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   982
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   983
            /*
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   984
             * Fires events for the TestRunner. This overrides the default fire()
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   985
             * method from EventProvider to add the type property to the data that is
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   986
             * passed through on each event call.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   987
             * @param {String} type The type of event to fire.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   988
             * @param {Object} data (Optional) Data for the event.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   989
             * @method fire
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   990
             * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   991
             * @protected
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   992
             */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   993
            fire : function (type, data) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   994
                data = data || {};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   995
                data.type = type;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   996
                TestRunner.superclass.fire.call(this, type, data);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   997
            },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   998
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   999
            //-------------------------------------------------------------------------
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1000
            // Public Methods
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1001
            //-------------------------------------------------------------------------   
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1002
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1003
            /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1004
             * Adds a test suite or test case to the list of test objects to run.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1005
             * @param testObject Either a TestCase or a TestSuite that should be run.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1006
             * @return {Void}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1007
             * @method add
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1008
             * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1009
             */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1010
            add : function (testObject) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1011
                this.masterSuite.add(testObject);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1012
            },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1013
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1014
            /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1015
             * Removes all test objects from the runner.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1016
             * @return {Void}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1017
             * @method clear
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1018
             * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1019
             */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1020
            clear : function () {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1021
                this.masterSuite.items = [];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1022
            },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1023
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1024
            /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1025
             * Indicates if the TestRunner is waiting for a test to resume
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1026
             * @return {Boolean} True if the TestRunner is waiting, false if not.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1027
             * @method isWaiting
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1028
             * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1029
             */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1030
            isWaiting: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1031
                return this._waiting;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1032
            },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1033
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1034
            /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1035
             * Resumes the TestRunner after wait() was called.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1036
             * @param {Function} segment The function to run as the rest
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1037
             *      of the haulted test.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1038
             * @return {Void}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1039
             * @method resume
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1040
             * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1041
             */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1042
            resume : function (segment) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1043
                this._resumeTest(segment || function(){});
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1044
            },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1045
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1046
            /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1047
             * Runs the test suite.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1048
             * @return {Void}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1049
             * @method run
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1050
             * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1051
             */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1052
            run : function (testObject) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1053
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1054
                //pointer to runner to avoid scope issues 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1055
                var runner = Y.Test.Runner;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1056
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1057
                //build the test tree
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1058
                runner._buildTestTree();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1059
                            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1060
                //set when the test started
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1061
                runner._root.results.duration = (new Date()).valueOf();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1062
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1063
                //fire the begin event
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1064
                runner.fire(runner.BEGIN_EVENT);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1065
           
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1066
                //begin the testing
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1067
                runner._run();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1068
            }    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1069
        });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1070
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1071
        return new TestRunner();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1072
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1073
    })();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1074
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1075
  
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1076
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1077
     * The Assert object provides functions to test JavaScript values against
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1078
     * known and expected results. Whenever a comparison (assertion) fails,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1079
     * an error is thrown.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1080
     *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1081
     * @class Assert
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1082
     * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1083
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1084
    Y.Assert = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1085
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1086
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1087
         * The number of assertions performed.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1088
         * @property _asserts
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1089
         * @type int
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1090
         * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1091
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1092
        _asserts: 0,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1093
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1094
        //-------------------------------------------------------------------------
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1095
        // Helper Methods
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1096
        //-------------------------------------------------------------------------
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1097
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1098
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1099
         * Formats a message so that it can contain the original assertion message
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1100
         * in addition to the custom message.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1101
         * @param {String} customMessage The message passed in by the developer.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1102
         * @param {String} defaultMessage The message created by the error by default.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1103
         * @return {String} The final error message, containing either or both.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1104
         * @protected
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1105
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1106
         * @method _formatMessage
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1107
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1108
        _formatMessage : function (customMessage, defaultMessage) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1109
            var message = customMessage;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1110
            if (Y.Lang.isString(customMessage) && customMessage.length > 0){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1111
                return Y.Lang.substitute(customMessage, { message: defaultMessage });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1112
            } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1113
                return defaultMessage;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1114
            }        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1115
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1116
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1117
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1118
         * Returns the number of assertions that have been performed.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1119
         * @method _getCount
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1120
         * @protected
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1121
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1122
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1123
        _getCount: function(){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1124
            return this._asserts;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1125
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1126
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1127
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1128
         * Increments the number of assertions that have been performed.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1129
         * @method _increment
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1130
         * @protected
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1131
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1132
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1133
        _increment: function(){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1134
            this._asserts++;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1135
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1136
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1137
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1138
         * Resets the number of assertions that have been performed to 0.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1139
         * @method _reset
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1140
         * @protected
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1141
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1142
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1143
        _reset: function(){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1144
            this._asserts = 0;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1145
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1146
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1147
        //-------------------------------------------------------------------------
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1148
        // Generic Assertion Methods
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1149
        //-------------------------------------------------------------------------
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1150
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1151
        /** 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1152
         * Forces an assertion error to occur.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1153
         * @param {String} message (Optional) The message to display with the failure.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1154
         * @method fail
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1155
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1156
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1157
        fail : function (message) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1158
            throw new Y.Assert.Error(Y.Assert._formatMessage(message, "Test force-failed."));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1159
        },       
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1160
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1161
        //-------------------------------------------------------------------------
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1162
        // Equality Assertion Methods
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1163
        //-------------------------------------------------------------------------    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1164
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1165
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1166
         * Asserts that a value is equal to another. This uses the double equals sign
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1167
         * so type cohersion may occur.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1168
         * @param {Object} expected The expected value.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1169
         * @param {Object} actual The actual value to test.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1170
         * @param {String} message (Optional) The message to display if the assertion fails.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1171
         * @method areEqual
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1172
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1173
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1174
        areEqual : function (expected, actual, message) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1175
            Y.Assert._increment();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1176
            if (expected != actual) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1177
                throw new Y.Assert.ComparisonFailure(Y.Assert._formatMessage(message, "Values should be equal."), expected, actual);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1178
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1179
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1180
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1181
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1182
         * Asserts that a value is not equal to another. This uses the double equals sign
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1183
         * so type cohersion may occur.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1184
         * @param {Object} unexpected The unexpected value.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1185
         * @param {Object} actual The actual value to test.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1186
         * @param {String} message (Optional) The message to display if the assertion fails.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1187
         * @method areNotEqual
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1188
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1189
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1190
        areNotEqual : function (unexpected, actual, 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1191
                             message) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1192
            Y.Assert._increment();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1193
            if (unexpected == actual) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1194
                throw new Y.Assert.UnexpectedValue(Y.Assert._formatMessage(message, "Values should not be equal."), unexpected);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1195
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1196
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1197
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1198
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1199
         * Asserts that a value is not the same as another. This uses the triple equals sign
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1200
         * so no type cohersion may occur.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1201
         * @param {Object} unexpected The unexpected value.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1202
         * @param {Object} actual The actual value to test.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1203
         * @param {String} message (Optional) The message to display if the assertion fails.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1204
         * @method areNotSame
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1205
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1206
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1207
        areNotSame : function (unexpected, actual, message) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1208
            Y.Assert._increment();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1209
            if (unexpected === actual) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1210
                throw new Y.Assert.UnexpectedValue(Y.Assert._formatMessage(message, "Values should not be the same."), unexpected);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1211
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1212
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1213
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1214
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1215
         * Asserts that a value is the same as another. This uses the triple equals sign
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1216
         * so no type cohersion may occur.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1217
         * @param {Object} expected The expected value.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1218
         * @param {Object} actual The actual value to test.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1219
         * @param {String} message (Optional) The message to display if the assertion fails.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1220
         * @method areSame
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1221
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1222
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1223
        areSame : function (expected, actual, message) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1224
            Y.Assert._increment();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1225
            if (expected !== actual) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1226
                throw new Y.Assert.ComparisonFailure(Y.Assert._formatMessage(message, "Values should be the same."), expected, actual);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1227
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1228
        },    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1229
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1230
        //-------------------------------------------------------------------------
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1231
        // Boolean Assertion Methods
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1232
        //-------------------------------------------------------------------------    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1233
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1234
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1235
         * Asserts that a value is false. This uses the triple equals sign
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1236
         * so no type cohersion may occur.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1237
         * @param {Object} actual The actual value to test.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1238
         * @param {String} message (Optional) The message to display if the assertion fails.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1239
         * @method isFalse
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1240
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1241
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1242
        isFalse : function (actual, message) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1243
            Y.Assert._increment();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1244
            if (false !== actual) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1245
                throw new Y.Assert.ComparisonFailure(Y.Assert._formatMessage(message, "Value should be false."), false, actual);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1246
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1247
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1248
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1249
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1250
         * Asserts that a value is true. This uses the triple equals sign
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1251
         * so no type cohersion may occur.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1252
         * @param {Object} actual The actual value to test.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1253
         * @param {String} message (Optional) The message to display if the assertion fails.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1254
         * @method isTrue
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1255
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1256
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1257
        isTrue : function (actual, message) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1258
            Y.Assert._increment();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1259
            if (true !== actual) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1260
                throw new Y.Assert.ComparisonFailure(Y.Assert._formatMessage(message, "Value should be true."), true, actual);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1261
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1262
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1263
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1264
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1265
        //-------------------------------------------------------------------------
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1266
        // Special Value Assertion Methods
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1267
        //-------------------------------------------------------------------------    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1268
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1269
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1270
         * Asserts that a value is not a number.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1271
         * @param {Object} actual The value to test.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1272
         * @param {String} message (Optional) The message to display if the assertion fails.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1273
         * @method isNaN
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1274
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1275
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1276
        isNaN : function (actual, message){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1277
            Y.Assert._increment();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1278
            if (!isNaN(actual)){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1279
                throw new Y.Assert.ComparisonFailure(Y.Assert._formatMessage(message, "Value should be NaN."), NaN, actual);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1280
            }    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1281
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1282
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1283
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1284
         * Asserts that a value is not the special NaN value.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1285
         * @param {Object} actual The value to test.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1286
         * @param {String} message (Optional) The message to display if the assertion fails.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1287
         * @method isNotNaN
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1288
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1289
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1290
        isNotNaN : function (actual, message){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1291
            Y.Assert._increment();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1292
            if (isNaN(actual)){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1293
                throw new Y.Assert.UnexpectedValue(Y.Assert._formatMessage(message, "Values should not be NaN."), NaN);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1294
            }    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1295
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1296
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1297
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1298
         * Asserts that a value is not null. This uses the triple equals sign
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1299
         * so no type cohersion may occur.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1300
         * @param {Object} actual The actual value to test.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1301
         * @param {String} message (Optional) The message to display if the assertion fails.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1302
         * @method isNotNull
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1303
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1304
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1305
        isNotNull : function (actual, message) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1306
            Y.Assert._increment();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1307
            if (Y.Lang.isNull(actual)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1308
                throw new Y.Assert.UnexpectedValue(Y.Assert._formatMessage(message, "Values should not be null."), null);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1309
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1310
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1311
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1312
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1313
         * Asserts that a value is not undefined. This uses the triple equals sign
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1314
         * so no type cohersion may occur.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1315
         * @param {Object} actual The actual value to test.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1316
         * @param {String} message (Optional) The message to display if the assertion fails.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1317
         * @method isNotUndefined
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1318
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1319
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1320
        isNotUndefined : function (actual, message) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1321
            Y.Assert._increment();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1322
            if (Y.Lang.isUndefined(actual)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1323
                throw new Y.Assert.UnexpectedValue(Y.Assert._formatMessage(message, "Value should not be undefined."), undefined);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1324
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1325
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1326
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1327
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1328
         * Asserts that a value is null. This uses the triple equals sign
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1329
         * so no type cohersion may occur.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1330
         * @param {Object} actual The actual value to test.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1331
         * @param {String} message (Optional) The message to display if the assertion fails.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1332
         * @method isNull
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1333
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1334
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1335
        isNull : function (actual, message) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1336
            Y.Assert._increment();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1337
            if (!Y.Lang.isNull(actual)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1338
                throw new Y.Assert.ComparisonFailure(Y.Assert._formatMessage(message, "Value should be null."), null, actual);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1339
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1340
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1341
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1342
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1343
         * Asserts that a value is undefined. This uses the triple equals sign
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1344
         * so no type cohersion may occur.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1345
         * @param {Object} actual The actual value to test.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1346
         * @param {String} message (Optional) The message to display if the assertion fails.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1347
         * @method isUndefined
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1348
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1349
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1350
        isUndefined : function (actual, message) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1351
            Y.Assert._increment();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1352
            if (!Y.Lang.isUndefined(actual)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1353
                throw new Y.Assert.ComparisonFailure(Y.Assert._formatMessage(message, "Value should be undefined."), undefined, actual);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1354
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1355
        },    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1356
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1357
        //--------------------------------------------------------------------------
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1358
        // Instance Assertion Methods
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1359
        //--------------------------------------------------------------------------    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1360
       
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1361
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1362
         * Asserts that a value is an array.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1363
         * @param {Object} actual The value to test.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1364
         * @param {String} message (Optional) The message to display if the assertion fails.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1365
         * @method isArray
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1366
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1367
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1368
        isArray : function (actual, message) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1369
            Y.Assert._increment();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1370
            if (!Y.Lang.isArray(actual)){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1371
                throw new Y.Assert.UnexpectedValue(Y.Assert._formatMessage(message, "Value should be an array."), actual);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1372
            }    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1373
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1374
       
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1375
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1376
         * Asserts that a value is a Boolean.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1377
         * @param {Object} actual The value to test.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1378
         * @param {String} message (Optional) The message to display if the assertion fails.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1379
         * @method isBoolean
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1380
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1381
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1382
        isBoolean : function (actual, message) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1383
            Y.Assert._increment();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1384
            if (!Y.Lang.isBoolean(actual)){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1385
                throw new Y.Assert.UnexpectedValue(Y.Assert._formatMessage(message, "Value should be a Boolean."), actual);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1386
            }    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1387
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1388
       
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1389
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1390
         * Asserts that a value is a function.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1391
         * @param {Object} actual The value to test.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1392
         * @param {String} message (Optional) The message to display if the assertion fails.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1393
         * @method isFunction
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1394
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1395
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1396
        isFunction : function (actual, message) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1397
            Y.Assert._increment();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1398
            if (!Y.Lang.isFunction(actual)){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1399
                throw new Y.Assert.UnexpectedValue(Y.Assert._formatMessage(message, "Value should be a function."), actual);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1400
            }    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1401
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1402
       
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1403
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1404
         * Asserts that a value is an instance of a particular object. This may return
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1405
         * incorrect results when comparing objects from one frame to constructors in
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1406
         * another frame. For best results, don't use in a cross-frame manner.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1407
         * @param {Function} expected The function that the object should be an instance of.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1408
         * @param {Object} actual The object to test.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1409
         * @param {String} message (Optional) The message to display if the assertion fails.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1410
         * @method isInstanceOf
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1411
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1412
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1413
        isInstanceOf : function (expected, actual, message) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1414
            Y.Assert._increment();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1415
            if (!(actual instanceof expected)){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1416
                throw new Y.Assert.ComparisonFailure(Y.Assert._formatMessage(message, "Value isn't an instance of expected type."), expected, actual);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1417
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1418
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1419
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1420
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1421
         * Asserts that a value is a number.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1422
         * @param {Object} actual The value to test.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1423
         * @param {String} message (Optional) The message to display if the assertion fails.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1424
         * @method isNumber
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1425
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1426
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1427
        isNumber : function (actual, message) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1428
            Y.Assert._increment();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1429
            if (!Y.Lang.isNumber(actual)){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1430
                throw new Y.Assert.UnexpectedValue(Y.Assert._formatMessage(message, "Value should be a number."), actual);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1431
            }    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1432
        },    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1433
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1434
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1435
         * Asserts that a value is an object.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1436
         * @param {Object} actual The value to test.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1437
         * @param {String} message (Optional) The message to display if the assertion fails.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1438
         * @method isObject
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1439
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1440
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1441
        isObject : function (actual, message) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1442
            Y.Assert._increment();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1443
            if (!Y.Lang.isObject(actual)){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1444
                throw new Y.Assert.UnexpectedValue(Y.Assert._formatMessage(message, "Value should be an object."), actual);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1445
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1446
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1447
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1448
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1449
         * Asserts that a value is a string.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1450
         * @param {Object} actual The value to test.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1451
         * @param {String} message (Optional) The message to display if the assertion fails.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1452
         * @method isString
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1453
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1454
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1455
        isString : function (actual, message) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1456
            Y.Assert._increment();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1457
            if (!Y.Lang.isString(actual)){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1458
                throw new Y.Assert.UnexpectedValue(Y.Assert._formatMessage(message, "Value should be a string."), actual);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1459
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1460
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1461
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1462
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1463
         * Asserts that a value is of a particular type. 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1464
         * @param {String} expectedType The expected type of the variable.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1465
         * @param {Object} actualValue The actual value to test.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1466
         * @param {String} message (Optional) The message to display if the assertion fails.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1467
         * @method isTypeOf
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1468
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1469
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1470
        isTypeOf : function (expectedType, actualValue, message){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1471
            Y.Assert._increment();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1472
            if (typeof actualValue != expectedType){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1473
                throw new Y.Assert.ComparisonFailure(Y.Assert._formatMessage(message, "Value should be of type " + expectedType + "."), expected, typeof actualValue);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1474
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1475
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1476
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1477
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1478
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1479
     * Asserts that a given condition is true. If not, then a Y.Assert.Error object is thrown
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1480
     * and the test fails.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1481
     * @method Y.assert
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1482
     * @param {Boolean} condition The condition to test.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1483
     * @param {String} message The message to display if the assertion fails.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1484
     * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1485
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1486
    Y.assert = function(condition, message){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1487
        Y.Assert._increment();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1488
        if (!condition){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1489
            throw new Y.Assert.Error(Y.Assert._formatMessage(message, "Assertion failed."));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1490
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1491
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1492
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1493
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1494
     * Forces an assertion error to occur. Shortcut for Y.Assert.fail().
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1495
     * @method Y.fail
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1496
     * @param {String} message (Optional) The message to display with the failure.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1497
     * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1498
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1499
    Y.fail = Y.Assert.fail;   
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1500
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1501
    //-----------------------------------------------------------------------------
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1502
    // Assertion errors
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1503
    //-----------------------------------------------------------------------------
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1504
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1505
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1506
     * Error is thrown whenever an assertion fails. It provides methods
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1507
     * to more easily get at error information and also provides a base class
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1508
     * from which more specific assertion errors can be derived.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1509
     *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1510
     * @param {String} message The message to display when the error occurs.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1511
     * @namespace Assert
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1512
     * @class Error
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1513
     * @constructor
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1514
     */ 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1515
    Y.Assert.Error = function (message){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1516
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1517
        //call superclass
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1518
        arguments.callee.superclass.constructor.call(this, message);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1519
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1520
        /*
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1521
         * Error message. Must be duplicated to ensure browser receives it.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1522
         * @type String
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1523
         * @property message
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1524
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1525
        this.message = message;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1526
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1527
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1528
         * The name of the error that occurred.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1529
         * @type String
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1530
         * @property name
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1531
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1532
        this.name = "Assert Error";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1533
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1534
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1535
    //inherit methods
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1536
    Y.extend(Y.Assert.Error, Error, {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1537
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1538
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1539
         * Returns a fully formatted error for an assertion failure. This should
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1540
         * be overridden by all subclasses to provide specific information.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1541
         * @method getMessage
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1542
         * @return {String} A string describing the error.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1543
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1544
        getMessage : function () {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1545
            return this.message;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1546
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1547
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1548
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1549
         * Returns a string representation of the error.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1550
         * @method toString
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1551
         * @return {String} A string representation of the error.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1552
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1553
        toString : function () {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1554
            return this.name + ": " + this.getMessage();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1555
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1556
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1557
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1558
         * Returns a primitive value version of the error. Same as toString().
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1559
         * @method valueOf
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1560
         * @return {String} A primitive value version of the error.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1561
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1562
        valueOf : function () {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1563
            return this.toString();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1564
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1565
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1566
    });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1567
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1568
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1569
     * ComparisonFailure is subclass of Error that is thrown whenever
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1570
     * a comparison between two values fails. It provides mechanisms to retrieve
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1571
     * both the expected and actual value.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1572
     *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1573
     * @param {String} message The message to display when the error occurs.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1574
     * @param {Object} expected The expected value.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1575
     * @param {Object} actual The actual value that caused the assertion to fail.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1576
     * @namespace Assert 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1577
     * @extends Assert.Error
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1578
     * @class ComparisonFailure
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1579
     * @constructor
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1580
     */ 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1581
    Y.Assert.ComparisonFailure = function (message, expected, actual){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1582
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1583
        //call superclass
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1584
        arguments.callee.superclass.constructor.call(this, message);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1585
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1586
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1587
         * The expected value.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1588
         * @type Object
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1589
         * @property expected
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1590
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1591
        this.expected = expected;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1592
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1593
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1594
         * The actual value.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1595
         * @type Object
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1596
         * @property actual
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1597
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1598
        this.actual = actual;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1599
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1600
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1601
         * The name of the error that occurred.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1602
         * @type String
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1603
         * @property name
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1604
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1605
        this.name = "ComparisonFailure";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1606
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1607
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1608
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1609
    //inherit methods
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1610
    Y.extend(Y.Assert.ComparisonFailure, Y.Assert.Error, {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1611
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1612
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1613
         * Returns a fully formatted error for an assertion failure. This message
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1614
         * provides information about the expected and actual values.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1615
         * @method toString
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1616
         * @return {String} A string describing the error.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1617
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1618
        getMessage : function () {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1619
            return this.message + "\nExpected: " + this.expected + " (" + (typeof this.expected) + ")"  +
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1620
                "\nActual:" + this.actual + " (" + (typeof this.actual) + ")";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1621
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1622
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1623
    });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1624
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1625
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1626
     * UnexpectedValue is subclass of Error that is thrown whenever
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1627
     * a value was unexpected in its scope. This typically means that a test
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1628
     * was performed to determine that a value was *not* equal to a certain
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1629
     * value.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1630
     *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1631
     * @param {String} message The message to display when the error occurs.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1632
     * @param {Object} unexpected The unexpected value.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1633
     * @namespace Assert
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1634
     * @extends Assert.Error
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1635
     * @class UnexpectedValue
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1636
     * @constructor
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1637
     */ 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1638
    Y.Assert.UnexpectedValue = function (message, unexpected){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1639
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1640
        //call superclass
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1641
        arguments.callee.superclass.constructor.call(this, message);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1642
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1643
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1644
         * The unexpected value.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1645
         * @type Object
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1646
         * @property unexpected
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1647
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1648
        this.unexpected = unexpected;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1649
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1650
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1651
         * The name of the error that occurred.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1652
         * @type String
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1653
         * @property name
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1654
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1655
        this.name = "UnexpectedValue";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1656
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1657
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1658
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1659
    //inherit methods
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1660
    Y.extend(Y.Assert.UnexpectedValue, Y.Assert.Error, {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1661
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1662
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1663
         * Returns a fully formatted error for an assertion failure. The message
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1664
         * contains information about the unexpected value that was encountered.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1665
         * @method getMessage
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1666
         * @return {String} A string describing the error.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1667
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1668
        getMessage : function () {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1669
            return this.message + "\nUnexpected: " + this.unexpected + " (" + (typeof this.unexpected) + ") ";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1670
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1671
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1672
    });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1673
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1674
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1675
     * ShouldFail is subclass of Error that is thrown whenever
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1676
     * a test was expected to fail but did not.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1677
     *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1678
     * @param {String} message The message to display when the error occurs.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1679
     * @namespace Assert
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1680
     * @extends Assert.Error
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1681
     * @class ShouldFail
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1682
     * @constructor
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1683
     */  
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1684
    Y.Assert.ShouldFail = function (message){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1685
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1686
        //call superclass
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1687
        arguments.callee.superclass.constructor.call(this, message || "This test should fail but didn't.");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1688
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1689
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1690
         * The name of the error that occurred.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1691
         * @type String
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1692
         * @property name
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1693
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1694
        this.name = "ShouldFail";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1695
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1696
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1697
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1698
    //inherit methods
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1699
    Y.extend(Y.Assert.ShouldFail, Y.Assert.Error);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1700
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1701
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1702
     * ShouldError is subclass of Error that is thrown whenever
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1703
     * a test is expected to throw an error but doesn't.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1704
     *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1705
     * @param {String} message The message to display when the error occurs.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1706
     * @namespace Assert
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1707
     * @extends Assert.Error
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1708
     * @class ShouldError
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1709
     * @constructor
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1710
     */  
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1711
    Y.Assert.ShouldError = function (message){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1712
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1713
        //call superclass
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1714
        arguments.callee.superclass.constructor.call(this, message || "This test should have thrown an error but didn't.");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1715
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1716
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1717
         * The name of the error that occurred.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1718
         * @type String
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1719
         * @property name
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1720
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1721
        this.name = "ShouldError";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1722
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1723
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1724
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1725
    //inherit methods
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1726
    Y.extend(Y.Assert.ShouldError, Y.Assert.Error);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1727
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1728
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1729
     * UnexpectedError is subclass of Error that is thrown whenever
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1730
     * an error occurs within the course of a test and the test was not expected
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1731
     * to throw an error.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1732
     *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1733
     * @param {Error} cause The unexpected error that caused this error to be 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1734
     *                      thrown.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1735
     * @namespace Assert
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1736
     * @extends Assert.Error
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1737
     * @class UnexpectedError
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1738
     * @constructor
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1739
     */  
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1740
    Y.Assert.UnexpectedError = function (cause){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1741
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1742
        //call superclass
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1743
        arguments.callee.superclass.constructor.call(this, "Unexpected error: " + cause.message);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1744
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1745
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1746
         * The unexpected error that occurred.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1747
         * @type Error
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1748
         * @property cause
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1749
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1750
        this.cause = cause;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1751
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1752
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1753
         * The name of the error that occurred.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1754
         * @type String
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1755
         * @property name
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1756
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1757
        this.name = "UnexpectedError";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1758
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1759
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1760
         * Stack information for the error (if provided).
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1761
         * @type String
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1762
         * @property stack
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1763
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1764
        this.stack = cause.stack;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1765
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1766
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1767
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1768
    //inherit methods
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1769
    Y.extend(Y.Assert.UnexpectedError, Y.Assert.Error);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1770
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1771
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1772
   
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1773
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1774
     * The ArrayAssert object provides functions to test JavaScript array objects
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1775
     * for a variety of cases.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1776
     *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1777
     * @class ArrayAssert
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1778
     * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1779
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1780
     
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1781
    Y.ArrayAssert = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1782
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1783
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1784
         * Asserts that a value is present in an array. This uses the triple equals 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1785
         * sign so no type cohersion may occur.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1786
         * @param {Object} needle The value that is expected in the array.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1787
         * @param {Array} haystack An array of values.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1788
         * @param {String} message (Optional) The message to display if the assertion fails.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1789
         * @method contains
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1790
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1791
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1792
        contains : function (needle, haystack, 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1793
                               message) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1794
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1795
            Y.Assert._increment();               
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1796
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1797
            if (Y.Array.indexOf(haystack, needle) == -1){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1798
                Y.Assert.fail(Y.Assert._formatMessage(message, "Value " + needle + " (" + (typeof needle) + ") not found in array [" + haystack + "]."));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1799
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1800
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1801
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1802
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1803
         * Asserts that a set of values are present in an array. This uses the triple equals 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1804
         * sign so no type cohersion may occur. For this assertion to pass, all values must
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1805
         * be found.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1806
         * @param {Object[]} needles An array of values that are expected in the array.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1807
         * @param {Array} haystack An array of values to check.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1808
         * @param {String} message (Optional) The message to display if the assertion fails.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1809
         * @method containsItems
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1810
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1811
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1812
        containsItems : function (needles, haystack, 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1813
                               message) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1814
            Y.Assert._increment();               
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1815
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1816
            //begin checking values
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1817
            for (var i=0; i < needles.length; i++){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1818
                if (Y.Array.indexOf(haystack, needles[i]) == -1){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1819
                    Y.Assert.fail(Y.Assert._formatMessage(message, "Value " + needles[i] + " (" + (typeof needles[i]) + ") not found in array [" + haystack + "]."));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1820
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1821
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1822
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1823
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1824
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1825
         * Asserts that a value matching some condition is present in an array. This uses
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1826
         * a function to determine a match.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1827
         * @param {Function} matcher A function that returns true if the items matches or false if not.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1828
         * @param {Array} haystack An array of values.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1829
         * @param {String} message (Optional) The message to display if the assertion fails.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1830
         * @method containsMatch
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1831
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1832
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1833
        containsMatch : function (matcher, haystack, 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1834
                               message) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1835
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1836
            Y.Assert._increment();               
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1837
            //check for valid matcher
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1838
            if (typeof matcher != "function"){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1839
                throw new TypeError("ArrayAssert.containsMatch(): First argument must be a function.");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1840
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1841
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1842
            if (!Y.Array.some(matcher)){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1843
                Y.Assert.fail(Y.Assert._formatMessage(message, "No match found in array [" + haystack + "]."));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1844
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1845
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1846
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1847
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1848
         * Asserts that a value is not present in an array. This uses the triple equals 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1849
         * Asserts that a value is not present in an array. This uses the triple equals 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1850
         * sign so no type cohersion may occur.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1851
         * @param {Object} needle The value that is expected in the array.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1852
         * @param {Array} haystack An array of values.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1853
         * @param {String} message (Optional) The message to display if the assertion fails.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1854
         * @method doesNotContain
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1855
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1856
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1857
        doesNotContain : function (needle, haystack, 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1858
                               message) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1859
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1860
            Y.Assert._increment();               
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1861
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1862
            if (Y.Array.indexOf(haystack, needle) > -1){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1863
                Y.Assert.fail(Y.Assert._formatMessage(message, "Value found in array [" + haystack + "]."));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1864
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1865
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1866
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1867
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1868
         * Asserts that a set of values are not present in an array. This uses the triple equals 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1869
         * sign so no type cohersion may occur. For this assertion to pass, all values must
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1870
         * not be found.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1871
         * @param {Object[]} needles An array of values that are not expected in the array.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1872
         * @param {Array} haystack An array of values to check.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1873
         * @param {String} message (Optional) The message to display if the assertion fails.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1874
         * @method doesNotContainItems
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1875
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1876
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1877
        doesNotContainItems : function (needles, haystack, 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1878
                               message) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1879
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1880
            Y.Assert._increment();               
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1881
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1882
            for (var i=0; i < needles.length; i++){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1883
                if (Y.Array.indexOf(haystack, needles[i]) > -1){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1884
                    Y.Assert.fail(Y.Assert._formatMessage(message, "Value found in array [" + haystack + "]."));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1885
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1886
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1887
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1888
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1889
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1890
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1891
         * Asserts that no values matching a condition are present in an array. This uses
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1892
         * a function to determine a match.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1893
         * @param {Function} matcher A function that returns true if the items matches or false if not.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1894
         * @param {Array} haystack An array of values.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1895
         * @param {String} message (Optional) The message to display if the assertion fails.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1896
         * @method doesNotContainMatch
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1897
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1898
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1899
        doesNotContainMatch : function (matcher, haystack, 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1900
                               message) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1901
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1902
            Y.Assert._increment();     
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1903
          
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1904
            //check for valid matcher
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1905
            if (typeof matcher != "function"){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1906
                throw new TypeError("ArrayAssert.doesNotContainMatch(): First argument must be a function.");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1907
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1908
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1909
            if (Y.Array.some(matcher)){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1910
                Y.Assert.fail(Y.Assert._formatMessage(message, "Value found in array [" + haystack + "]."));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1911
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1912
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1913
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1914
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1915
         * Asserts that the given value is contained in an array at the specified index.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1916
         * This uses the triple equals sign so no type cohersion will occur.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1917
         * @param {Object} needle The value to look for.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1918
         * @param {Array} haystack The array to search in.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1919
         * @param {int} index The index at which the value should exist.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1920
         * @param {String} message (Optional) The message to display if the assertion fails.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1921
         * @method indexOf
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1922
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1923
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1924
        indexOf : function (needle, haystack, index, message) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1925
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1926
            Y.Assert._increment();     
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1927
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1928
            //try to find the value in the array
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1929
            for (var i=0; i < haystack.length; i++){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1930
                if (haystack[i] === needle){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1931
                    if (index != i){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1932
                        Y.Assert.fail(Y.Assert._formatMessage(message, "Value exists at index " + i + " but should be at index " + index + "."));                    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1933
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1934
                    return;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1935
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1936
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1937
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1938
            //if it makes it here, it wasn't found at all
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1939
            Y.Assert.fail(Y.Assert._formatMessage(message, "Value doesn't exist in array [" + haystack + "]."));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1940
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1941
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1942
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1943
         * Asserts that the values in an array are equal, and in the same position,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1944
         * as values in another array. This uses the double equals sign
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1945
         * so type cohersion may occur. Note that the array objects themselves
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1946
         * need not be the same for this test to pass.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1947
         * @param {Array} expected An array of the expected values.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1948
         * @param {Array} actual Any array of the actual values.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1949
         * @param {String} message (Optional) The message to display if the assertion fails.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1950
         * @method itemsAreEqual
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1951
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1952
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1953
        itemsAreEqual : function (expected, actual, 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1954
                               message) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1955
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1956
            Y.Assert._increment();     
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1957
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1958
            //first check array length
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1959
            if (expected.length != actual.length){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1960
                Y.Assert.fail(Y.Assert._formatMessage(message, "Array should have a length of " + expected.length + " but has a length of " + actual.length));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1961
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1962
           
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1963
            //begin checking values
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1964
            for (var i=0; i < expected.length; i++){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1965
                if (expected[i] != actual[i]){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1966
                    throw new Y.Assert.ComparisonFailure(Y.Assert._formatMessage(message, "Values in position " + i + " are not equal."), expected[i], actual[i]);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1967
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1968
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1969
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1970
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1971
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1972
         * Asserts that the values in an array are equivalent, and in the same position,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1973
         * as values in another array. This uses a function to determine if the values
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1974
         * are equivalent. Note that the array objects themselves
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1975
         * need not be the same for this test to pass.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1976
         * @param {Array} expected An array of the expected values.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1977
         * @param {Array} actual Any array of the actual values.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1978
         * @param {Function} comparator A function that returns true if the values are equivalent
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1979
         *      or false if not.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1980
         * @param {String} message (Optional) The message to display if the assertion fails.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1981
         * @return {Void}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1982
         * @method itemsAreEquivalent
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1983
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1984
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1985
        itemsAreEquivalent : function (expected, actual, 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1986
                               comparator, message) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1987
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1988
            Y.Assert._increment();     
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1989
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1990
            //make sure the comparator is valid
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1991
            if (typeof comparator != "function"){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1992
                throw new TypeError("ArrayAssert.itemsAreEquivalent(): Third argument must be a function.");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1993
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1994
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1995
            //first check array length
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1996
            if (expected.length != actual.length){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1997
                Y.Assert.fail(Y.Assert._formatMessage(message, "Array should have a length of " + expected.length + " but has a length of " + actual.length));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1998
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1999
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2000
            //begin checking values
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2001
            for (var i=0; i < expected.length; i++){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2002
                if (!comparator(expected[i], actual[i])){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2003
                    throw new Y.Assert.ComparisonFailure(Y.Assert._formatMessage(message, "Values in position " + i + " are not equivalent."), expected[i], actual[i]);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2004
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2005
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2006
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2007
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2008
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2009
         * Asserts that an array is empty.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2010
         * @param {Array} actual The array to test.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2011
         * @param {String} message (Optional) The message to display if the assertion fails.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2012
         * @method isEmpty
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2013
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2014
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2015
        isEmpty : function (actual, message) {        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2016
            Y.Assert._increment();     
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2017
            if (actual.length > 0){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2018
                Y.Assert.fail(Y.Assert._formatMessage(message, "Array should be empty."));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2019
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2020
        },    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2021
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2022
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2023
         * Asserts that an array is not empty.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2024
         * @param {Array} actual The array to test.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2025
         * @param {String} message (Optional) The message to display if the assertion fails.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2026
         * @method isNotEmpty
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2027
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2028
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2029
        isNotEmpty : function (actual, message) {        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2030
            Y.Assert._increment();     
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2031
            if (actual.length === 0){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2032
                Y.Assert.fail(Y.Assert._formatMessage(message, "Array should not be empty."));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2033
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2034
        },    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2035
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2036
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2037
         * Asserts that the values in an array are the same, and in the same position,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2038
         * as values in another array. This uses the triple equals sign
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2039
         * so no type cohersion will occur. Note that the array objects themselves
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2040
         * need not be the same for this test to pass.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2041
         * @param {Array} expected An array of the expected values.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2042
         * @param {Array} actual Any array of the actual values.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2043
         * @param {String} message (Optional) The message to display if the assertion fails.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2044
         * @method itemsAreSame
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2045
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2046
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2047
        itemsAreSame : function (expected, actual, 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2048
                              message) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2049
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2050
            Y.Assert._increment();     
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2051
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2052
            //first check array length
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2053
            if (expected.length != actual.length){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2054
                Y.Assert.fail(Y.Assert._formatMessage(message, "Array should have a length of " + expected.length + " but has a length of " + actual.length));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2055
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2056
                        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2057
            //begin checking values
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2058
            for (var i=0; i < expected.length; i++){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2059
                if (expected[i] !== actual[i]){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2060
                    throw new Y.Assert.ComparisonFailure(Y.Assert._formatMessage(message, "Values in position " + i + " are not the same."), expected[i], actual[i]);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2061
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2062
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2063
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2064
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2065
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2066
         * Asserts that the given value is contained in an array at the specified index,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2067
         * starting from the back of the array.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2068
         * This uses the triple equals sign so no type cohersion will occur.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2069
         * @param {Object} needle The value to look for.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2070
         * @param {Array} haystack The array to search in.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2071
         * @param {int} index The index at which the value should exist.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2072
         * @param {String} message (Optional) The message to display if the assertion fails.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2073
         * @method lastIndexOf
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2074
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2075
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2076
        lastIndexOf : function (needle, haystack, index, message) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2077
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2078
            //try to find the value in the array
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2079
            for (var i=haystack.length; i >= 0; i--){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2080
                if (haystack[i] === needle){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2081
                    if (index != i){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2082
                        Y.Assert.fail(Y.Assert._formatMessage(message, "Value exists at index " + i + " but should be at index " + index + "."));                    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2083
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2084
                    return;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2085
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2086
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2087
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2088
            //if it makes it here, it wasn't found at all
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2089
            Y.Assert.fail(Y.Assert._formatMessage(message, "Value doesn't exist in array."));        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2090
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2091
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2092
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2093
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2094
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2095
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2096
     * The ObjectAssert object provides functions to test JavaScript objects
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2097
     * for a variety of cases.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2098
     *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2099
     * @class ObjectAssert
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2100
     * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2101
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2102
    Y.ObjectAssert = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2103
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2104
        areEqual: function(expected, actual, message) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2105
            Y.Assert._increment();               
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2106
            Y.Object.each(expected, function(value, name){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2107
                if (expected[name] != actual[name]){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2108
                    throw new Y.Assert.ComparisonFailure(Y.Assert._formatMessage(message, "Values should be equal for property " + name), expected[name], actual[name]);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2109
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2110
            });            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2111
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2112
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2113
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2114
         * Asserts that an object has a property with the given name.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2115
         * @param {String} propertyName The name of the property to test.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2116
         * @param {Object} object The object to search.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2117
         * @param {String} message (Optional) The message to display if the assertion fails.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2118
         * @method hasKey
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2119
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2120
         */    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2121
        hasKey: function (propertyName, object, message) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2122
            Y.Assert._increment();               
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2123
            if (!Y.Object.hasKey(object, propertyName)){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2124
                Y.fail(Y.Assert._formatMessage(message, "Property '" + propertyName + "' not found on object."));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2125
            }    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2126
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2127
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2128
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2129
         * Asserts that an object has all properties of a reference object.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2130
         * @param {Array} properties An array of property names that should be on the object.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2131
         * @param {Object} object The object to search.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2132
         * @param {String} message (Optional) The message to display if the assertion fails.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2133
         * @method hasKeys
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2134
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2135
         */    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2136
        hasKeys: function (properties, object, message) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2137
            Y.Assert._increment();  
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2138
            for (var i=0; i < properties.length; i++){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2139
                if (!Y.Object.hasKey(object, properties[i])){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2140
                    Y.fail(Y.Assert._formatMessage(message, "Property '" + properties[i] + "' not found on object."));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2141
                }      
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2142
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2143
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2144
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2145
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2146
         * Asserts that a property with the given name exists on an object instance (not on its prototype).
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2147
         * @param {String} propertyName The name of the property to test.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2148
         * @param {Object} object The object to search.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2149
         * @param {String} message (Optional) The message to display if the assertion fails.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2150
         * @method ownsKey
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2151
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2152
         */    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2153
        ownsKey: function (propertyName, object, message) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2154
            Y.Assert._increment();               
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2155
            if (!object.hasOwnProperty(propertyName)){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2156
                Y.fail(Y.Assert._formatMessage(message, "Property '" + propertyName + "' not found on object instance."));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2157
            }     
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2158
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2159
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2160
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2161
         * Asserts that all properties exist on an object instance (not on its prototype).
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2162
         * @param {Array} properties An array of property names that should be on the object.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2163
         * @param {Object} object The object to search.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2164
         * @param {String} message (Optional) The message to display if the assertion fails.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2165
         * @method ownsKeys
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2166
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2167
         */    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2168
        ownsKeys: function (properties, object, message) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2169
            Y.Assert._increment();        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2170
            for (var i=0; i < properties.length; i++){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2171
                if (!object.hasOwnProperty(properties[i])){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2172
                    Y.fail(Y.Assert._formatMessage(message, "Property '" + properties[i] + "' not found on object instance."));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2173
                }      
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2174
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2175
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2176
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2177
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2178
         * Asserts that an object owns no properties.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2179
         * @param {Object} object The object to check.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2180
         * @param {String} message (Optional) The message to display if the assertion fails.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2181
         * @method ownsNoKeys
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2182
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2183
         */    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2184
        ownsNoKeys : function (object, message) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2185
            Y.Assert._increment();  
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2186
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2187
            var keys = Y.Object.keys(object);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2188
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2189
            if (keys.length > 0){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2190
                Y.fail(Y.Assert._formatMessage(message, "Object owns " + keys.length + " properties but should own none."));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2191
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2192
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2193
        }     
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2194
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2195
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2196
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2197
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2198
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2199
     * The DateAssert object provides functions to test JavaScript Date objects
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2200
     * for a variety of cases.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2201
     *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2202
     * @class DateAssert
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2203
     * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2204
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2205
     
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2206
    Y.DateAssert = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2207
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2208
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2209
         * Asserts that a date's month, day, and year are equal to another date's.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2210
         * @param {Date} expected The expected date.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2211
         * @param {Date} actual The actual date to test.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2212
         * @param {String} message (Optional) The message to display if the assertion fails.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2213
         * @method datesAreEqual
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2214
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2215
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2216
        datesAreEqual : function (expected, actual, message){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2217
            Y.Assert._increment();        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2218
            if (expected instanceof Date && actual instanceof Date){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2219
                var msg = "";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2220
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2221
                //check years first
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2222
                if (expected.getFullYear() != actual.getFullYear()){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2223
                    msg = "Years should be equal.";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2224
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2225
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2226
                //now check months
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2227
                if (expected.getMonth() != actual.getMonth()){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2228
                    msg = "Months should be equal.";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2229
                }                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2230
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2231
                //last, check the day of the month
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2232
                if (expected.getDate() != actual.getDate()){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2233
                    msg = "Days of month should be equal.";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2234
                }                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2235
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2236
                if (msg.length){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2237
                    throw new Y.Assert.ComparisonFailure(Y.Assert._formatMessage(message, msg), expected, actual);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2238
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2239
            } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2240
                throw new TypeError("Y.Assert.datesAreEqual(): Expected and actual values must be Date objects.");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2241
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2242
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2243
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2244
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2245
         * Asserts that a date's hour, minutes, and seconds are equal to another date's.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2246
         * @param {Date} expected The expected date.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2247
         * @param {Date} actual The actual date to test.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2248
         * @param {String} message (Optional) The message to display if the assertion fails.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2249
         * @method timesAreEqual
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2250
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2251
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2252
        timesAreEqual : function (expected, actual, message){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2253
            Y.Assert._increment();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2254
            if (expected instanceof Date && actual instanceof Date){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2255
                var msg = "";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2256
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2257
                //check hours first
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2258
                if (expected.getHours() != actual.getHours()){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2259
                    msg = "Hours should be equal.";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2260
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2261
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2262
                //now check minutes
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2263
                if (expected.getMinutes() != actual.getMinutes()){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2264
                    msg = "Minutes should be equal.";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2265
                }                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2266
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2267
                //last, check the seconds
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2268
                if (expected.getSeconds() != actual.getSeconds()){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2269
                    msg = "Seconds should be equal.";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2270
                }                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2271
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2272
                if (msg.length){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2273
                    throw new Y.Assert.ComparisonFailure(Y.Assert._formatMessage(message, msg), expected, actual);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2274
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2275
            } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2276
                throw new TypeError("DateY.AsserttimesAreEqual(): Expected and actual values must be Date objects.");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2277
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2278
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2279
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2280
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2281
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2282
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2283
    Y.namespace("Test.Format");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2284
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2285
    /* (intentionally not documented)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2286
     * Basic XML escaping method. Replaces quotes, less-than, greater-than,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2287
     * apostrophe, and ampersand characters with their corresponding entities.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2288
     * @param {String} text The text to encode.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2289
     * @return {String} The XML-escaped text.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2290
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2291
    function xmlEscape(text){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2292
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2293
        return text.replace(/[<>"'&]/g, function(value){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2294
            switch(value){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2295
                case "<":   return "&lt;";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2296
                case ">":   return "&gt;";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2297
                case "\"":  return "&quot;";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2298
                case "'":   return "&apos;";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2299
                case "&":   return "&amp;";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2300
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2301
        });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2302
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2303
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2304
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2305
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2306
     * Returns test results formatted as a JSON string. Requires JSON utility.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2307
     * @param {Object} result The results object created by TestRunner.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2308
     * @return {String} A JSON-formatted string of results.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2309
     * @namespace Test.Format
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2310
     * @method JSON
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2311
     * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2312
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2313
    Y.Test.Format.JSON = function(results) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2314
        return Y.JSON.stringify(results);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2315
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2316
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2317
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2318
     * Returns test results formatted as an XML string.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2319
     * @param {Object} result The results object created by TestRunner.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2320
     * @return {String} An XML-formatted string of results.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2321
     * @namespace Test.Format
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2322
     * @method XML
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2323
     * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2324
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2325
    Y.Test.Format.XML = function(results) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2326
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2327
        var l = Y.Lang;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2328
        var xml = "<" + results.type + " name=\"" + xmlEscape(results.name) + "\"";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2329
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2330
        if (results.type == "test"){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2331
            xml += " result=\"" + xmlEscape(results.result) + "\" message=\"" + xmlEscape(results.message) + "\">";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2332
        } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2333
            xml += " passed=\"" + results.passed + "\" failed=\"" + results.failed + "\" ignored=\"" + results.ignored + "\" total=\"" + results.total + "\">";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2334
            Y.Object.each(results, function(value, prop){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2335
                if (l.isObject(value) && !l.isArray(value)){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2336
                    xml += arguments.callee(value);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2337
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2338
            });        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2339
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2340
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2341
        xml += "</" + results.type + ">";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2342
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2343
        return xml;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2344
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2345
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2346
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2347
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2348
    Y.namespace("Test");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2349
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2350
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2351
     * An object capable of sending test results to a server.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2352
     * @param {String} url The URL to submit the results to.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2353
     * @param {Function} format (Optiona) A function that outputs the results in a specific format.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2354
     *      Default is Y.Test.Format.XML.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2355
     * @constructor
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2356
     * @namespace Test
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2357
     * @class Reporter
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2358
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2359
    Y.Test.Reporter = function(url, format) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2360
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2361
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2362
         * The URL to submit the data to.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2363
         * @type String
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2364
         * @property url
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2365
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2366
        this.url = url;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2367
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2368
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2369
         * The formatting function to call when submitting the data.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2370
         * @type Function
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2371
         * @property format
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2372
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2373
        this.format = format || Y.Test.Format.XML;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2374
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2375
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2376
         * Extra fields to submit with the request.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2377
         * @type Object
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2378
         * @property _fields
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2379
         * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2380
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2381
        this._fields = new Object();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2382
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2383
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2384
         * The form element used to submit the results.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2385
         * @type HTMLFormElement
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2386
         * @property _form
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2387
         * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2388
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2389
        this._form = null;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2390
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2391
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2392
         * Iframe used as a target for form submission.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2393
         * @type HTMLIFrameElement
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2394
         * @property _iframe
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2395
         * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2396
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2397
        this._iframe = null;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2398
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2399
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2400
    Y.Test.Reporter.prototype = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2401
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2402
        //restore missing constructor
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2403
        constructor: Y.Test.Reporter,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2404
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2405
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2406
         * Adds a field to the form that submits the results.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2407
         * @param {String} name The name of the field.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2408
         * @param {Variant} value The value of the field.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2409
         * @return {Void}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2410
         * @method addField
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2411
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2412
        addField : function (name, value){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2413
            this._fields[name] = value;    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2414
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2415
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2416
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2417
         * Removes all previous defined fields.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2418
         * @return {Void}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2419
         * @method addField
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2420
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2421
        clearFields : function(){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2422
            this._fields = new Object();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2423
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2424
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2425
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2426
         * Cleans up the memory associated with the TestReporter, removing DOM elements
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2427
         * that were created.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2428
         * @return {Void}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2429
         * @method destroy
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2430
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2431
        destroy : function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2432
            if (this._form){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2433
                this._form.parentNode.removeChild(this._form);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2434
                this._form = null;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2435
            }        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2436
            if (this._iframe){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2437
                this._iframe.parentNode.removeChild(this._iframe);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2438
                this._iframe = null;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2439
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2440
            this._fields = null;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2441
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2442
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2443
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2444
         * Sends the report to the server.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2445
         * @param {Object} results The results object created by TestRunner.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2446
         * @return {Void}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2447
         * @method report
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2448
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2449
        report : function(results){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2450
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2451
            //if the form hasn't been created yet, create it
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2452
            if (!this._form){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2453
                this._form = document.createElement("form");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2454
                this._form.method = "post";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2455
                this._form.style.visibility = "hidden";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2456
                this._form.style.position = "absolute";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2457
                this._form.style.top = 0;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2458
                document.body.appendChild(this._form);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2459
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2460
                //IE won't let you assign a name using the DOM, must do it the hacky way
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2461
                if (Y.UA.ie){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2462
                    this._iframe = document.createElement("<iframe name=\"yuiTestTarget\" />");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2463
                } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2464
                    this._iframe = document.createElement("iframe");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2465
                    this._iframe.name = "yuiTestTarget";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2466
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2467
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2468
                this._iframe.src = "javascript:false";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2469
                this._iframe.style.visibility = "hidden";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2470
                this._iframe.style.position = "absolute";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2471
                this._iframe.style.top = 0;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2472
                document.body.appendChild(this._iframe);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2473
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2474
                this._form.target = "yuiTestTarget";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2475
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2476
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2477
            //set the form's action
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2478
            this._form.action = this.url;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2479
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2480
            //remove any existing fields
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2481
            while(this._form.hasChildNodes()){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2482
                this._form.removeChild(this._form.lastChild);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2483
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2484
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2485
            //create default fields
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2486
            this._fields.results = this.format(results);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2487
            this._fields.useragent = navigator.userAgent;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2488
            this._fields.timestamp = (new Date()).toLocaleString();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2489
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2490
            //add fields to the form
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2491
            Y.Object.each(this._fields, function(value, prop){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2492
                if (typeof value != "function"){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2493
                    var input = document.createElement("input");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2494
                    input.type = "hidden";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2495
                    input.name = prop;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2496
                    input.value = value;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2497
                    this._form.appendChild(input);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2498
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2499
            }, this);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2500
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2501
            //remove default fields
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2502
            delete this._fields.results;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2503
            delete this._fields.useragent;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2504
            delete this._fields.timestamp;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2505
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2506
            if (arguments[1] !== false){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2507
                this._form.submit();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2508
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2509
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2510
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2511
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2512
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2513
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2514
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2515
     * Creates a new mock object.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2516
     * @class Mock
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2517
     * @constructor
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2518
     * @param {Object} template (Optional) An object whose methods
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2519
     *      should be stubbed out on the mock object.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2520
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2521
    Y.Mock = function(template){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2522
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2523
        //use blank object is nothing is passed in
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2524
        template = template || {};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2525
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2526
        var mock = null;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2527
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2528
        //try to create mock that keeps prototype chain intact
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2529
        try {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2530
            mock = Y.Object(template);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2531
        } catch (ex) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2532
            mock = {};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2533
            Y.log("Couldn't create mock with prototype.", "warn", "Mock");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2534
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2535
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2536
        //create new versions of the methods so that they don't actually do anything
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2537
        Y.Object.each(template, function(name){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2538
            if (Y.Lang.isFunction(template[name])){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2539
                mock[name] = function(){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2540
                    Y.Assert.fail("Method " + name + "() was called but was not expected to be.");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2541
                };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2542
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2543
        });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2544
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2545
        //return it
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2546
        return mock;    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2547
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2548
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2549
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2550
     * Assigns an expectation to a mock object. This is used to create
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2551
     * methods and properties on the mock object that are monitored for
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2552
     * calls and changes, respectively.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2553
     * @param {Object} mock The object to add the expectation to.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2554
     * @param {Object} expectation An object defining the expectation. For
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2555
     *      a method, the keys "method" and "args" are required with
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2556
     *      an optional "returns" key available. For properties, the keys
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2557
     *      "property" and "value" are required.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2558
     * @return {void}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2559
     * @method expect
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2560
     * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2561
     */ 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2562
    Y.Mock.expect = function(mock /*:Object*/, expectation /*:Object*/){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2563
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2564
        //make sure there's a place to store the expectations
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2565
        if (!mock.__expectations) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2566
            mock.__expectations = {};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2567
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2568
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2569
        //method expectation
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2570
        if (expectation.method){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2571
            var name = expectation.method,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2572
                args = expectation.args || expectation.arguments || [],
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2573
                result = expectation.returns,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2574
                callCount = Y.Lang.isNumber(expectation.callCount) ? expectation.callCount : 1,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2575
                error = expectation.error,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2576
                run = expectation.run || function(){};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2577
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2578
            //save expectations
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2579
            mock.__expectations[name] = expectation;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2580
            expectation.callCount = callCount;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2581
            expectation.actualCallCount = 0;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2582
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2583
            //process arguments
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2584
            Y.Array.each(args, function(arg, i, array){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2585
                if (!(array[i] instanceof Y.Mock.Value)){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2586
                    array[i] = Y.Mock.Value(Y.Assert.areSame, [arg], "Argument " + i + " of " + name + "() is incorrect.");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2587
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2588
            });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2589
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2590
            //if the method is expected to be called
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2591
            if (callCount > 0){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2592
                mock[name] = function(){   
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2593
                    try {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2594
                        expectation.actualCallCount++;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2595
                        Y.Assert.areEqual(args.length, arguments.length, "Method " + name + "() passed incorrect number of arguments.");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2596
                        for (var i=0, len=args.length; i < len; i++){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2597
                            //if (args[i]){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2598
                                args[i].verify(arguments[i]);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2599
                            //} else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2600
                            //    Y.Assert.fail("Argument " + i + " (" + arguments[i] + ") was not expected to be used.");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2601
                            //}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2602
                            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2603
                        }                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2604
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2605
                        run.apply(this, arguments);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2606
                        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2607
                        if (error){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2608
                            throw error;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2609
                        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2610
                    } catch (ex){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2611
                        //route through TestRunner for proper handling
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2612
                        Y.Test.Runner._handleError(ex);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2613
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2614
                    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2615
                    return result;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2616
                };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2617
            } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2618
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2619
                //method should fail if called when not expected
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2620
                mock[name] = function(){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2621
                    Y.Assert.fail("Method " + name + "() should not have been called.");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2622
                };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2623
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2624
        } else if (expectation.property){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2625
            //save expectations
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2626
            mock.__expectations[name] = expectation;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2627
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2628
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2629
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2630
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2631
     * Verifies that all expectations of a mock object have been met and
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2632
     * throws an assertion error if not.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2633
     * @param {Object} mock The object to verify..
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2634
     * @return {void}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2635
     * @method verify
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2636
     * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2637
     */ 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2638
    Y.Mock.verify = function(mock /*:Object*/){    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2639
        Y.Object.each(mock.__expectations, function(expectation){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2640
            if (expectation.method) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2641
                Y.Assert.areEqual(expectation.callCount, expectation.actualCallCount, "Method " + expectation.method + "() wasn't called the expected number of times.");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2642
            } else if (expectation.property){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2643
                Y.Assert.areEqual(expectation.value, mock[expectation.property], "Property " + expectation.property + " wasn't set to the correct value."); 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2644
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2645
        });    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2646
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2647
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2648
    Y.Mock.Value = function(method, originalArgs, message){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2649
        if (this instanceof Y.Mock.Value){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2650
            this.verify = function(value){
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2651
                var args = [].concat(originalArgs || []);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2652
                args.push(value);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2653
                args.push(message);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2654
                method.apply(null, args);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2655
            };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2656
        } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2657
            return new Y.Mock.Value(method, originalArgs, message);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2658
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2659
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2660
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2661
    Y.Mock.Value.Any        = Y.Mock.Value(function(){});
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2662
    Y.Mock.Value.Boolean    = Y.Mock.Value(Y.Assert.isBoolean);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2663
    Y.Mock.Value.Number     = Y.Mock.Value(Y.Assert.isNumber);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2664
    Y.Mock.Value.String     = Y.Mock.Value(Y.Assert.isString);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2665
    Y.Mock.Value.Object     = Y.Mock.Value(Y.Assert.isObject);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2666
    Y.Mock.Value.Function   = Y.Mock.Value(Y.Assert.isFunction);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2667
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2668
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2669
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2670
}, '3.0.0b1' ,{requires:['substitute','event-simulate','event']});