33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass/**
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * The ArrayAssert object provides functions to test JavaScript array objects
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * for a variety of cases.
5aab19b8b78189ce79cf89283f2d505566d4e6a8Dav Glass * @namespace Test
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @class ArrayAssert
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @static
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass */
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha
d0199bcbfc68b65683c19c4e3e0c38e238142e7eDav GlassYUITest.ArrayAssert = {
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass //=========================================================================
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass // Private methods
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass //=========================================================================
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass /**
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * Simple indexOf() implementation for an array. Defers to native
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * if available.
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @param {Array} haystack The array to search.
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @param {Variant} needle The value to locate.
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @return {int} The index of the needle if found or -1 if not.
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @method _indexOf
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @private
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass */
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass _indexOf: function(haystack, needle){
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass if (haystack.indexOf){
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass return haystack.indexOf(needle);
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass } else {
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass for (var i=0; i < haystack.length; i++){
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass if (haystack[i] === needle){
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass return i;
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass return -1;
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass },
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass /**
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * Simple some() implementation for an array. Defers to native
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * if available.
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @param {Array} haystack The array to search.
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @param {Function} matcher The function to run on each value.
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @return {Boolean} True if any value, when run through the matcher,
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * returns true.
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @method _some
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @private
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass */
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass _some: function(haystack, matcher){
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass if (haystack.some){
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass return haystack.some(matcher);
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass } else {
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass for (var i=0; i < haystack.length; i++){
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass if (matcher(haystack[i])){
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass return true;
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass return false;
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha },
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass /**
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha * Asserts that a value is present in an array. This uses the triple equals
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha * sign so no type coercion may occur.
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @param {Object} needle The value that is expected in the array.
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @param {Array} haystack An array of values.
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha * @param {String} message (Optional) The message to display if the assertion
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha fails.
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @method contains
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @static
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass */
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha contains : function (needle, haystack,
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass message) {
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha YUITest.Assert._increment();
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass if (this._indexOf(haystack, needle) == -1){
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha YUITest.Assert.fail(YUITest.Assert._formatMessage(message, "Value " +
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha needle + " (" + (typeof needle) + ") not found in array [" + haystack +
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha "]."));
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass },
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass /**
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha * Asserts that a set of values are present in an array. This uses the triple
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha equals
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha * sign so no type coercion may occur. For this assertion to pass, all values must
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * be found.
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @param {Object[]} needles An array of values that are expected in the array.
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @param {Array} haystack An array of values to check.
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha * @param {String} message (Optional) The message to display if the assertion
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha fails.
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @method containsItems
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @static
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass */
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha containsItems : function (needles, haystack,
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass message) {
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha YUITest.Assert._increment();
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass //begin checking values
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass for (var i=0; i < needles.length; i++){
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass if (this._indexOf(haystack, needles[i]) == -1){
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha YUITest.Assert.fail(YUITest.Assert._formatMessage(message, "Value " +
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha needles[i] + " (" + (typeof needles[i]) + ") not found in array [" +
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha haystack + "]."));
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass },
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass /**
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * Asserts that a value matching some condition is present in an array. This uses
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * a function to determine a match.
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha * @param {Function} matcher A function that returns true if the items matches or
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha false if not.
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @param {Array} haystack An array of values.
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha * @param {String} message (Optional) The message to display if the assertion
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha fails.
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @method containsMatch
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @static
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass */
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha containsMatch : function (matcher, haystack,
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass message) {
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha YUITest.Assert._increment();
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass //check for valid matcher
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass if (typeof matcher != "function"){
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha throw new TypeError("ArrayAssert.containsMatch(): First argument must be a
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha function.");
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass if (!this._some(haystack, matcher)){
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha YUITest.Assert.fail(YUITest.Assert._formatMessage(message, "No match found
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha in array [" + haystack + "]."));
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass },
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass /**
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha * Asserts that a value is not present in an array. This uses the triple equals
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha * Asserts that a value is not present in an array. This uses the triple equals
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha * sign so no type coercion may occur.
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @param {Object} needle The value that is expected in the array.
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @param {Array} haystack An array of values.
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha * @param {String} message (Optional) The message to display if the assertion
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha fails.
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @method doesNotContain
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @static
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass */
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha doesNotContain : function (needle, haystack,
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass message) {
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha YUITest.Assert._increment();
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass if (this._indexOf(haystack, needle) > -1){
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha YUITest.Assert.fail(YUITest.Assert._formatMessage(message, "Value found in
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha array [" + haystack + "]."));
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass },
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass /**
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha * Asserts that a set of values are not present in an array. This uses the triple
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha equals
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha * sign so no type coercion may occur. For this assertion to pass, all values must
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * not be found.
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @param {Object[]} needles An array of values that are not expected in the array.
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @param {Array} haystack An array of values to check.
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha * @param {String} message (Optional) The message to display if the assertion
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha fails.
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @method doesNotContainItems
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @static
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass */
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha doesNotContainItems : function (needles, haystack,
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass message) {
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha YUITest.Assert._increment();
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass for (var i=0; i < needles.length; i++){
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass if (this._indexOf(haystack, needles[i]) > -1){
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha YUITest.Assert.fail(YUITest.Assert._formatMessage(message, "Value found
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha in array [" + haystack + "]."));
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass },
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass /**
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * Asserts that no values matching a condition are present in an array. This uses
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * a function to determine a match.
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha * @param {Function} matcher A function that returns true if the item matches or
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha false if not.
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @param {Array} haystack An array of values.
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha * @param {String} message (Optional) The message to display if the assertion
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha fails.
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @method doesNotContainMatch
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @static
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass */
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha doesNotContainMatch : function (matcher, haystack,
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass message) {
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha YUITest.Assert._increment();
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass //check for valid matcher
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass if (typeof matcher != "function"){
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha throw new TypeError("ArrayAssert.doesNotContainMatch(): First argument must
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha be a function.");
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass if (this._some(haystack, matcher)){
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha YUITest.Assert.fail(YUITest.Assert._formatMessage(message, "Value found in
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha array [" + haystack + "]."));
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass },
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass /**
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * Asserts that the given value is contained in an array at the specified index.
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha * This uses the triple equals sign so no type coercion will occur.
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @param {Object} needle The value to look for.
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @param {Array} haystack The array to search in.
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @param {int} index The index at which the value should exist.
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha * @param {String} message (Optional) The message to display if the assertion
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha fails.
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @method indexOf
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @static
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass */
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass indexOf : function (needle, haystack, index, message) {
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha YUITest.Assert._increment();
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass //try to find the value in the array
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass for (var i=0; i < haystack.length; i++){
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass if (haystack[i] === needle){
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass if (index != i){
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha YUITest.Assert.fail(YUITest.Assert._formatMessage(message, "Value
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha exists at index " + i + " but should be at index " + index + "."));
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass return;
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass //if it makes it here, it wasn't found at all
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha YUITest.Assert.fail(YUITest.Assert._formatMessage(message, "Value doesn't exist
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha in array [" + haystack + "]."));
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass },
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass /**
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * Asserts that the values in an array are equal, and in the same position,
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * as values in another array. This uses the double equals sign
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha * so type coercion may occur. Note that the array objects themselves
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * need not be the same for this test to pass.
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @param {Array} expected An array of the expected values.
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @param {Array} actual Any array of the actual values.
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha * @param {String} message (Optional) The message to display if the assertion
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha fails.
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @method itemsAreEqual
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @static
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass */
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha itemsAreEqual : function (expected, actual,
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass message) {
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha YUITest.Assert._increment();
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass //first make sure they're array-like (this can probably be improved)
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass if (typeof expected != "object" || typeof actual != "object"){
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha YUITest.Assert.fail(YUITest.Assert._formatMessage(message, "Value should be
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha an array."));
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass //next check array length
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass if (expected.length != actual.length){
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha YUITest.Assert.fail(YUITest.Assert._formatMessage(message, "Array should
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha have a length of " + expected.length + " but has a length of " +
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha actual.length + "."));
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass //begin checking values
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass for (var i=0; i < expected.length; i++){
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass if (expected[i] != actual[i]){
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha throw new
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha YUITest.ComparisonFailure(YUITest.Assert._formatMessage(message,
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha "Values in position " + i + " are not equal."), expected[i],
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha actual[i]);
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass },
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass /**
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * Asserts that the values in an array are equivalent, and in the same position,
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * as values in another array. This uses a function to determine if the values
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * are equivalent. Note that the array objects themselves
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * need not be the same for this test to pass.
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @param {Array} expected An array of the expected values.
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @param {Array} actual Any array of the actual values.
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha * @param {Function} comparator A function that returns true if the values are
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha equivalent
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * or false if not.
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha * @param {String} message (Optional) The message to display if the assertion
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha fails.
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @return {Void}
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @method itemsAreEquivalent
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @static
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass */
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha itemsAreEquivalent : function (expected, actual,
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass comparator, message) {
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha YUITest.Assert._increment();
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass //make sure the comparator is valid
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass if (typeof comparator != "function"){
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha throw new TypeError("ArrayAssert.itemsAreEquivalent(): Third argument must
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha be a function.");
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass //first check array length
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass if (expected.length != actual.length){
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha YUITest.Assert.fail(YUITest.Assert._formatMessage(message, "Array should
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha have a length of " + expected.length + " but has a length of " +
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha actual.length));
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass //begin checking values
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass for (var i=0; i < expected.length; i++){
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass if (!comparator(expected[i], actual[i])){
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha throw new
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha YUITest.ComparisonFailure(YUITest.Assert._formatMessage(message,
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha "Values in position " + i + " are not equivalent."), expected[i],
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha actual[i]);
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass },
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass /**
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * Asserts that an array is empty.
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @param {Array} actual The array to test.
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha * @param {String} message (Optional) The message to display if the assertion
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha fails.
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @method isEmpty
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @static
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass */
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha isEmpty : function (actual, message) {
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha YUITest.Assert._increment();
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass if (actual.length > 0){
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha YUITest.Assert.fail(YUITest.Assert._formatMessage(message, "Array should be
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha empty."));
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha },
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass /**
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * Asserts that an array is not empty.
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @param {Array} actual The array to test.
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha * @param {String} message (Optional) The message to display if the assertion
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha fails.
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @method isNotEmpty
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @static
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass */
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha isNotEmpty : function (actual, message) {
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha YUITest.Assert._increment();
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass if (actual.length === 0){
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha YUITest.Assert.fail(YUITest.Assert._formatMessage(message, "Array should
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha not be empty."));
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha },
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass /**
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * Asserts that the values in an array are the same, and in the same position,
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * as values in another array. This uses the triple equals sign
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha * so no type coercion will occur. Note that the array objects themselves
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * need not be the same for this test to pass.
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @param {Array} expected An array of the expected values.
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @param {Array} actual Any array of the actual values.
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha * @param {String} message (Optional) The message to display if the assertion
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha fails.
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @method itemsAreSame
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @static
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass */
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha itemsAreSame : function (expected, actual,
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass message) {
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha YUITest.Assert._increment();
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass //first check array length
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass if (expected.length != actual.length){
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha YUITest.Assert.fail(YUITest.Assert._formatMessage(message, "Array should
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha have a length of " + expected.length + " but has a length of " +
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha actual.length));
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass //begin checking values
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass for (var i=0; i < expected.length; i++){
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass if (expected[i] !== actual[i]){
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha throw new
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha YUITest.ComparisonFailure(YUITest.Assert._formatMessage(message,
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha "Values in position " + i + " are not the same."), expected[i],
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha actual[i]);
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass },
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass /**
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * Asserts that the given value is contained in an array at the specified index,
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * starting from the back of the array.
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha * This uses the triple equals sign so no type coercion will occur.
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @param {Object} needle The value to look for.
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @param {Array} haystack The array to search in.
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @param {int} index The index at which the value should exist.
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha * @param {String} message (Optional) The message to display if the assertion
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha fails.
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @method lastIndexOf
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass * @static
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass */
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass lastIndexOf : function (needle, haystack, index, message) {
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass //try to find the value in the array
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass for (var i=haystack.length; i >= 0; i--){
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass if (haystack[i] === needle){
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass if (index != i){
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha YUITest.Assert.fail(YUITest.Assert._formatMessage(message, "Value
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha exists at index " + i + " but should be at index " + index + "."));
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass return;
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass //if it makes it here, it wasn't found at all
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha YUITest.Assert.fail(YUITest.Assert._formatMessage(message, "Value doesn't exist
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha in array."));
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass }
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha
33d85edf47749fa345d7b636b9b4b9d0d0386f44Dav Glass};
9ad88eb481f21d24bd0ee8e13276f2a73f7557d7TSha