302 lines
7.8 KiB
JavaScript
302 lines
7.8 KiB
JavaScript
|
if(!dojo._hasResource["tests._base.array"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
|
||
|
dojo._hasResource["tests._base.array"] = true;
|
||
|
dojo.provide("tests._base.array");
|
||
|
|
||
|
tests.register("tests._base.array",
|
||
|
[
|
||
|
function testIndexOf(t){
|
||
|
var foo = [128, 256, 512];
|
||
|
var bar = ["aaa", "bbb", "ccc"];
|
||
|
|
||
|
t.assertEqual(1, dojo.indexOf([45, 56, 85], 56));
|
||
|
t.assertEqual(1, dojo.indexOf([Number, String, Date], String));
|
||
|
t.assertEqual(1, dojo.indexOf(foo, foo[1]));
|
||
|
t.assertEqual(2, dojo.indexOf(foo, foo[2]));
|
||
|
t.assertEqual(1, dojo.indexOf(bar, bar[1]));
|
||
|
t.assertEqual(2, dojo.indexOf(bar, bar[2]));
|
||
|
t.assertEqual(-1, dojo.indexOf({a:1}, "a"));
|
||
|
|
||
|
foo.push(bar);
|
||
|
t.assertEqual(3, dojo.indexOf(foo, bar));
|
||
|
},
|
||
|
|
||
|
function testIndexOfFromIndex(t){
|
||
|
var foo = [128, 256, 512];
|
||
|
var bar = ["aaa", "bbb", "ccc"];
|
||
|
|
||
|
t.assertEqual(-1, dojo.indexOf([45, 56, 85], 56, 2));
|
||
|
t.assertEqual(1, dojo.indexOf([45, 56, 85], 56, 1));
|
||
|
t.assertEqual(1, dojo.indexOf([45, 56, 85], 56, -1));
|
||
|
// Make sure going out of bounds doesn't throw us in an infinite loop
|
||
|
t.assertEqual(-1, dojo.indexOf([45, 56, 85], 56, 3));
|
||
|
},
|
||
|
|
||
|
function testLastIndexOf(t){
|
||
|
var foo = [128, 256, 512];
|
||
|
var bar = ["aaa", "bbb", "aaa", "ccc"];
|
||
|
|
||
|
t.assertEqual(1, dojo.indexOf([45, 56, 85], 56));
|
||
|
t.assertEqual(1, dojo.indexOf([Number, String, Date], String));
|
||
|
t.assertEqual(1, dojo.lastIndexOf(foo, foo[1]));
|
||
|
t.assertEqual(2, dojo.lastIndexOf(foo, foo[2]));
|
||
|
t.assertEqual(1, dojo.lastIndexOf(bar, bar[1]));
|
||
|
t.assertEqual(2, dojo.lastIndexOf(bar, bar[2]));
|
||
|
t.assertEqual(2, dojo.lastIndexOf(bar, bar[0]));
|
||
|
},
|
||
|
|
||
|
function testLastIndexOfFromIndex(t){
|
||
|
t.assertEqual(1, dojo.lastIndexOf([45, 56, 85], 56, 1));
|
||
|
t.assertEqual(-1, dojo.lastIndexOf([45, 56, 85], 85, 1));
|
||
|
t.assertEqual(-1, dojo.lastIndexOf([45, 56, 85], 85, -1));
|
||
|
t.assertEqual(0, dojo.lastIndexOf([45, 56, 45], 45, 0));
|
||
|
},
|
||
|
|
||
|
function testForEach(t){
|
||
|
var foo = [128, "bbb", 512];
|
||
|
dojo.forEach(foo, function(elt, idx, array){
|
||
|
switch(idx){
|
||
|
case 0: t.assertEqual(128, elt); break;
|
||
|
case 1: t.assertEqual("bbb", elt); break;
|
||
|
case 2: t.assertEqual(512, elt); break;
|
||
|
default: t.assertTrue(false);
|
||
|
}
|
||
|
});
|
||
|
|
||
|
var noException = true;
|
||
|
try{
|
||
|
dojo.forEach(undefined, function(){});
|
||
|
}catch(e){
|
||
|
noException = false;
|
||
|
}
|
||
|
t.assertTrue(noException);
|
||
|
},
|
||
|
|
||
|
function testForEach_str(t){
|
||
|
var bar = 'abc';
|
||
|
dojo.forEach(bar, function(elt, idx, array){
|
||
|
switch(idx){
|
||
|
case 0: t.assertEqual("a", elt); break;
|
||
|
case 1: t.assertEqual("b", elt); break;
|
||
|
case 2: t.assertEqual("c", elt); break;
|
||
|
default: t.assertTrue(false);
|
||
|
}
|
||
|
});
|
||
|
},
|
||
|
// FIXME: test forEach w/ a NodeList()?
|
||
|
|
||
|
function testForEach_string_callback(t){
|
||
|
// 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.
|
||
|
this._res = "";
|
||
|
dojo.forEach(foo, 'this._res+=item', this);
|
||
|
t.assertEqual(this._res, "128bbb512");
|
||
|
// Test that the variable "index" contains each index.
|
||
|
this._res = [];
|
||
|
dojo.forEach(foo, 'this._res.push(index)', this);
|
||
|
t.assertEqual(this._res, [0,1,2]);
|
||
|
// Test that the variable "array" always contains the entire array.
|
||
|
this._res = [];
|
||
|
dojo.forEach(foo, 'this._res.push(array)', this);
|
||
|
t.assertEqual(this._res, [[128, "bbb", 512],[128, "bbb", 512],[128, "bbb", 512]]);
|
||
|
// Catch undefined variable usage (I used to use "i" :-)).
|
||
|
var caughtException = false;
|
||
|
try{
|
||
|
dojo.forEach(foo, 'this._res+=i', this);
|
||
|
}catch(e){
|
||
|
caughtException = true;
|
||
|
}
|
||
|
t.assertTrue(caughtException);
|
||
|
},
|
||
|
|
||
|
// FIXME: test forEach w/ a NodeList()?
|
||
|
function testEvery(t){
|
||
|
var foo = [128, "bbb", 512];
|
||
|
|
||
|
t.assertTrue(
|
||
|
dojo.every(foo, function(elt, idx, array){
|
||
|
t.assertEqual(Array, array.constructor);
|
||
|
t.assertTrue(dojo.isArray(array));
|
||
|
t.assertTrue(typeof idx == "number");
|
||
|
if(idx == 1){ t.assertEqual("bbb" , elt); }
|
||
|
return true;
|
||
|
})
|
||
|
);
|
||
|
|
||
|
t.assertTrue(
|
||
|
dojo.every(foo, function(elt, idx, array){
|
||
|
switch(idx){
|
||
|
case 0: t.assertEqual(128, elt); return true;
|
||
|
case 1: t.assertEqual("bbb", elt); return true;
|
||
|
case 2: t.assertEqual(512, elt); return true;
|
||
|
default: return false;
|
||
|
}
|
||
|
})
|
||
|
);
|
||
|
|
||
|
t.assertFalse(
|
||
|
dojo.every(foo, function(elt, idx, array){
|
||
|
switch(idx){
|
||
|
case 0: t.assertEqual(128, elt); return true;
|
||
|
case 1: t.assertEqual("bbb", elt); return true;
|
||
|
case 2: t.assertEqual(512, elt); return false;
|
||
|
default: return true;
|
||
|
}
|
||
|
})
|
||
|
);
|
||
|
|
||
|
},
|
||
|
|
||
|
function testEvery_str(t){
|
||
|
var bar = 'abc';
|
||
|
t.assertTrue(
|
||
|
dojo.every(bar, function(elt, idx, array){
|
||
|
switch(idx){
|
||
|
case 0: t.assertEqual("a", elt); return true;
|
||
|
case 1: t.assertEqual("b", elt); return true;
|
||
|
case 2: t.assertEqual("c", elt); return true;
|
||
|
default: return false;
|
||
|
}
|
||
|
})
|
||
|
);
|
||
|
|
||
|
t.assertFalse(
|
||
|
dojo.every(bar, function(elt, idx, array){
|
||
|
switch(idx){
|
||
|
case 0: t.assertEqual("a", elt); return true;
|
||
|
case 1: t.assertEqual("b", elt); return true;
|
||
|
case 2: t.assertEqual("c", elt); return false;
|
||
|
default: return true;
|
||
|
}
|
||
|
})
|
||
|
);
|
||
|
},
|
||
|
// FIXME: test NodeList for every()?
|
||
|
|
||
|
function testSome(t){
|
||
|
var foo = [128, "bbb", 512];
|
||
|
t.assertTrue(
|
||
|
dojo.some(foo, function(elt, idx, array){
|
||
|
t.assertEqual(3, array.length);
|
||
|
return true;
|
||
|
})
|
||
|
);
|
||
|
|
||
|
t.assertTrue(
|
||
|
dojo.some(foo, function(elt, idx, array){
|
||
|
if(idx < 1){ return true; }
|
||
|
return false;
|
||
|
})
|
||
|
);
|
||
|
|
||
|
t.assertFalse(
|
||
|
dojo.some(foo, function(elt, idx, array){
|
||
|
return false;
|
||
|
})
|
||
|
);
|
||
|
|
||
|
t.assertTrue(
|
||
|
dojo.some(foo, function(elt, idx, array){
|
||
|
t.assertEqual(Array, array.constructor);
|
||
|
t.assertTrue(dojo.isArray(array));
|
||
|
t.assertTrue(typeof idx == "number");
|
||
|
if(idx == 1){ t.assertEqual("bbb" , elt); }
|
||
|
return true;
|
||
|
})
|
||
|
);
|
||
|
},
|
||
|
|
||
|
function testSome_str(t){
|
||
|
var bar = 'abc';
|
||
|
t.assertTrue(
|
||
|
dojo.some(bar, function(elt, idx, array){
|
||
|
t.assertEqual(3, array.length);
|
||
|
switch(idx){
|
||
|
case 0: t.assertEqual("a", elt); return true;
|
||
|
case 1: t.assertEqual("b", elt); return true;
|
||
|
case 2: t.assertEqual("c", elt); return true;
|
||
|
default: return false;
|
||
|
}
|
||
|
})
|
||
|
);
|
||
|
|
||
|
t.assertTrue(
|
||
|
dojo.some(bar, function(elt, idx, array){
|
||
|
switch(idx){
|
||
|
case 0: t.assertEqual("a", elt); return true;
|
||
|
case 1: t.assertEqual("b", elt); return true;
|
||
|
case 2: t.assertEqual("c", elt); return false;
|
||
|
default: return true;
|
||
|
}
|
||
|
})
|
||
|
);
|
||
|
|
||
|
t.assertFalse(
|
||
|
dojo.some(bar, function(elt, idx, array){
|
||
|
return false;
|
||
|
})
|
||
|
);
|
||
|
},
|
||
|
// FIXME: need to add scoping tests for all of these!!!
|
||
|
|
||
|
function testFilter(t){
|
||
|
var foo = ["foo", "bar", 10];
|
||
|
|
||
|
t.assertEqual(["foo"],
|
||
|
dojo.filter(foo, function(elt, idx, array){
|
||
|
return idx < 1;
|
||
|
})
|
||
|
);
|
||
|
|
||
|
t.assertEqual(["foo"],
|
||
|
dojo.filter(foo, function(elt, idx, array){
|
||
|
return elt == "foo";
|
||
|
})
|
||
|
);
|
||
|
|
||
|
t.assertEqual([],
|
||
|
dojo.filter(foo, function(elt, idx, array){
|
||
|
return false;
|
||
|
})
|
||
|
);
|
||
|
|
||
|
t.assertEqual([10],
|
||
|
dojo.filter(foo, function(elt, idx, array){
|
||
|
return typeof elt == "number";
|
||
|
})
|
||
|
);
|
||
|
},
|
||
|
|
||
|
function testFilter_str(t){
|
||
|
var foo = "thinger blah blah blah";
|
||
|
t.assertEqual(["t", "h", "i"],
|
||
|
dojo.filter(foo, function(elt, idx, array){
|
||
|
return idx < 3;
|
||
|
})
|
||
|
);
|
||
|
|
||
|
t.assertEqual([],
|
||
|
dojo.filter(foo, function(elt, idx, array){
|
||
|
return false;
|
||
|
})
|
||
|
);
|
||
|
},
|
||
|
|
||
|
function testMap(t){
|
||
|
t.assertEqual([],
|
||
|
dojo.map([], function(){ return true; })
|
||
|
);
|
||
|
|
||
|
t.assertEqual([1, 2, 3],
|
||
|
dojo.map(["cat", "dog", "mouse"], function(elt, idx, array){
|
||
|
return idx+1;
|
||
|
})
|
||
|
);
|
||
|
}
|
||
|
]
|
||
|
);
|
||
|
|
||
|
|
||
|
}
|