UNPKG

dojo

Version:

Dojo core is a powerful, lightweight library that makes common tasks quicker and easier. Animate elements, manipulate the DOM, and query with easy CSS syntax, all without sacrificing performance.

320 lines (282 loc) 8.5 kB
define([ 'intern!object', 'intern/chai!assert', '../../../_base/array' ], function (registerSuite, assert, array) { registerSuite({ name: 'dojo/_base/array', '.indexOf': { 'no index' : function () { var foo = [128, 256, 512]; var bar = ['aaa', 'bbb', 'ccc']; assert.strictEqual(array.indexOf([45, 56, 85], 56), 1); assert.strictEqual(array.indexOf([Number, String, Date], String), 1); assert.strictEqual(array.indexOf(foo, foo[1]), 1); assert.strictEqual(array.indexOf(foo, foo[2]), 2); assert.strictEqual(array.indexOf(bar, bar[1]), 1); assert.strictEqual(array.indexOf(bar, bar[2]), 2); assert.strictEqual(array.indexOf({a:1}, 'a'), -1); foo.push(bar); assert.strictEqual(array.indexOf(foo, bar), 3); }, 'from index': function () { assert.strictEqual(array.indexOf([45, 56, 85], 56, 2), -1); assert.strictEqual(array.indexOf([45, 56, 85], 56, 1), 1); assert.strictEqual(array.indexOf([45, 56, 85], 56, -3), 1); // Make sure going out of bounds doesn't throw us in an infinite loop assert.strictEqual(array.indexOf([45, 56, 85], 56, 3), -1); } }, '.lastIndexOf': { 'no index': function () { var foo = [128, 256, 512]; var bar = ['aaa', 'bbb', 'aaa', 'ccc']; assert.strictEqual(array.indexOf([45, 56, 85], 56), 1); assert.strictEqual(array.indexOf([Number, String, Date], String), 1); assert.strictEqual(array.lastIndexOf(foo, foo[1]), 1); assert.strictEqual(array.lastIndexOf(foo, foo[2]), 2); assert.strictEqual(array.lastIndexOf(bar, bar[1]), 1); assert.strictEqual(array.lastIndexOf(bar, bar[2]), 2); assert.strictEqual(array.lastIndexOf(bar, bar[0]), 2); }, 'from index': function () { assert.strictEqual(array.lastIndexOf([45, 56, 85], 56, 1), 1); assert.strictEqual(array.lastIndexOf([45, 56, 85], 85, 1), -1); assert.strictEqual(array.lastIndexOf([45, 56, 85], 85, -2), -1); assert.strictEqual(array.lastIndexOf([45, 56, 45], 45, 0), 0); } }, '.forEach': { 'no exception': function () { var foo = [128, 'bbb', 512]; array.forEach(foo, function (item, index) { switch (index) { case 0: assert.strictEqual(item, 128); break; case 1: assert.strictEqual(item, 'bbb'); break; case 2: assert.strictEqual(item, 512); break; default: assert.ok(false); } }); assert.doesNotThrow(function () { array.forEach(undefined, function () {}); }, /.*/, 'forEach on undefined'); }, string: function () { var bar = 'abc'; array.forEach(bar, function (item, index) { switch (index) { case 0: assert.strictEqual(item, 'a'); break; case 1: assert.strictEqual(item, 'b'); break; case 2: assert.strictEqual(item, 'c'); break; default: assert.ok(false); } }); }, // FIXME: test forEach w/ a NodeList()? 'string callback': function () { // Test using strings as callback", which accept the parameters with // the names "item", "index" and "array"! var foo = [128, 'bbb', 512]; // Test that the variable "item" contains the value of each item. var obj = { _res: '' }; array.forEach(foo, 'this._res += item', obj); assert.strictEqual(obj._res, '128bbb512'); // Test that the variable "index" contains each index. obj._res = []; array.forEach(foo, 'this._res.push(index)', obj); assert.deepEqual(obj._res, [0,1,2]); // Test that the variable "array" always contains the entire array. obj._res = []; array.forEach(foo, 'this._res.push(array)', obj); assert.deepEqual(obj._res, [ [128, 'bbb', 512], [128, 'bbb', 512], [128, 'bbb', 512] ]); // Catch undefined variable usage (I used to use "i" :-)). assert.throws(function () { array.forEach(foo, 'this._res += arr[i];', obj); }, /.*/, 'forEach on undefined variable'); } }, '.every': { // FIXME: test forEach w/ a NodeList()? array: function () { var foo = [128, 'bbb', 512]; assert.ok( array.every(foo, function (item, index, array) { assert.strictEqual(array.constructor, Array); assert.typeOf(array, 'array'); assert.typeOf(index, 'number'); if(index === 1) { assert.strictEqual(item, 'bbb'); } return true; }) ); assert.ok( array.every(foo, function (item, index) { switch (index) { case 0: assert.strictEqual(item, 128); return true; case 1: assert.strictEqual(item, 'bbb'); return true; case 2: assert.strictEqual(item, 512); return true; default: return false; } }) ); assert.ok( // intern chai has no assert.notOk !array.every(foo, function (item, index) { switch (index) { case 0: assert.strictEqual(item, 128); return true; case 1: assert.strictEqual(item, 'bbb'); return true; case 2: assert.strictEqual(item, 512); return false; default: return true; } }) ); }, string: function () { var bar = 'abc'; assert.ok( array.every(bar, function (item, index) { switch (index) { case 0: assert.strictEqual(item, 'a'); return true; case 1: assert.strictEqual(item, 'b'); return true; case 2: assert.strictEqual(item, 'c'); return true; default: return false; } }) ); assert.ok( // intern chai has no assert.notOk !array.every(bar, function (item, index) { switch (index) { case 0: assert.strictEqual(item, 'a'); return true; case 1: assert.strictEqual(item, 'b'); return true; case 2: assert.strictEqual(item, 'c'); return false; default: return true; } }) ); } }, '.some': { // FIXME: test NodeList for every()? array: function () { var foo = [128, 'bbb', 512]; assert.ok( array.some(foo, function (item, index, array) { assert.strictEqual(array.length, 3); return true; }) ); assert.ok( array.some(foo, function (item, index) { return index < 1; }) ); assert.ok( !array.some(foo, function () { return false; }) ); assert.ok( array.some(foo, function (item, index, array) { assert.strictEqual(array.constructor, Array); assert.typeOf(array, 'array'); assert.typeOf(index, 'number'); if(index === 1) { assert.strictEqual(item, 'bbb'); } return true; }) ); }, string: function () { var bar = 'abc'; assert.ok( array.some(bar, function (item, index, array) { assert.strictEqual(array.length, 3); switch (index) { case 0: assert.strictEqual(item, 'a'); return true; case 1: assert.strictEqual(item, 'b'); return true; case 2: assert.strictEqual(item, 'c'); return true; default: return false; } }) ); assert.ok( array.some(bar, function (item, index) { switch (index) { case 0: assert.strictEqual(item, 'a'); return true; case 1: assert.strictEqual(item, 'b'); return true; case 2: assert.strictEqual(item, 'c'); return false; default: return true; } }) ); assert.ok( !array.some(bar, function () { return false; }) ); } }, '.filter': { // FIXME: need to add scoping tests for all of these!!! array: function () { var foo = ['foo', 'bar', 10]; assert.deepEqual( array.filter(foo, function (item, index) { return index < 1; }), ['foo'], 'index < 1' ); assert.deepEqual( array.filter(foo, function (item) { return item === 'foo'; }), ['foo'], 'item == "foo"' ); assert.deepEqual( array.filter(foo, function () { return false; }), [] ); assert.deepEqual( array.filter(foo, function (item) { return typeof item === 'number'; }), [10] ); }, string: function () { var foo = 'thinger blah blah blah'; assert.deepEqual( array.filter(foo, function (item, index) { return index < 3; }), ['t', 'h', 'i'] ); assert.deepEqual( array.filter(foo, function () { return false; }), [] ); } }, '.map': function () { assert.deepEqual( array.map(function () { return true; }, []), [] ); assert.deepEqual( array.map(['cat', 'dog', 'mouse'], function (item, index) { return index+1; }), [1, 2, 3] ); } }); });