181 lines
4.6 KiB
JavaScript
181 lines
4.6 KiB
JavaScript
|
if(!dojo._hasResource["tests._base.lang"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
|
||
|
dojo._hasResource["tests._base.lang"] = true;
|
||
|
dojo.provide("tests._base.lang");
|
||
|
|
||
|
tests.register("tests._base.lang",
|
||
|
[
|
||
|
function mixin(t){
|
||
|
var src = {
|
||
|
foo: function(){
|
||
|
t.debug("foo");
|
||
|
},
|
||
|
bar: "bar"
|
||
|
};
|
||
|
var dest = {};
|
||
|
dojo.mixin(dest, src);
|
||
|
t.assertEqual("function", typeof dest["foo"]);
|
||
|
t.assertEqual("string", typeof dest["bar"]);
|
||
|
},
|
||
|
|
||
|
function extend(t){
|
||
|
var src = {
|
||
|
foo: function(){
|
||
|
t.debug("foo");
|
||
|
},
|
||
|
bar: "bar"
|
||
|
};
|
||
|
function dest(){}
|
||
|
dojo.extend(dest, src);
|
||
|
var test = new dest();
|
||
|
t.assertEqual("function", typeof test["foo"]);
|
||
|
t.assertEqual("string", typeof test["bar"]);
|
||
|
},
|
||
|
|
||
|
function isObject(t){
|
||
|
t.assertFalse(dojo.isObject(true));
|
||
|
t.assertFalse(dojo.isObject(false));
|
||
|
t.assertFalse(dojo.isObject("foo"));
|
||
|
t.assertTrue(dojo.isObject(new String("foo")));
|
||
|
t.assertTrue(dojo.isObject(null));
|
||
|
t.assertTrue(dojo.isObject({}));
|
||
|
t.assertTrue(dojo.isObject([]));
|
||
|
t.assertTrue(dojo.isObject(new Array()));
|
||
|
},
|
||
|
|
||
|
function isArray(t){
|
||
|
t.assertTrue(dojo.isArray([]));
|
||
|
t.assertTrue(dojo.isArray(new Array()));
|
||
|
t.assertFalse(dojo.isArray({}));
|
||
|
},
|
||
|
|
||
|
function isArrayLike(t){
|
||
|
t.assertFalse(dojo.isArrayLike("thinger"));
|
||
|
t.assertTrue(dojo.isArrayLike(new Array()));
|
||
|
t.assertFalse(dojo.isArrayLike({}));
|
||
|
t.assertTrue(dojo.isArrayLike(arguments));
|
||
|
},
|
||
|
|
||
|
function isString(t){
|
||
|
t.assertFalse(dojo.isString(true));
|
||
|
t.assertFalse(dojo.isString(false));
|
||
|
t.assertTrue(dojo.isString("foo"));
|
||
|
t.assertTrue(dojo.isString(new String("foo")));
|
||
|
t.assertFalse(dojo.isString(null));
|
||
|
t.assertFalse(dojo.isString({}));
|
||
|
t.assertFalse(dojo.isString([]));
|
||
|
},
|
||
|
|
||
|
function partial(t){
|
||
|
var scope = { foo: "bar" };
|
||
|
var scope2 = { foo: "baz" };
|
||
|
function thinger(arg1, arg2){
|
||
|
return [this.foo, arg1, arg2];
|
||
|
}
|
||
|
|
||
|
var st1 = dojo.partial(thinger);
|
||
|
t.assertEqual("bar", st1.call(scope)[0]);
|
||
|
t.assertEqual(undefined, st1()[0]);
|
||
|
var st2 = dojo.partial(thinger, "foo", "bar");
|
||
|
t.assertEqual("bar", st2()[2]);
|
||
|
var st3 = dojo.partial(thinger, "foo", "bar");
|
||
|
},
|
||
|
|
||
|
function nestedPartial(t){
|
||
|
function thinger(arg1, arg2){
|
||
|
return [arg1, arg2];
|
||
|
}
|
||
|
|
||
|
var st1 = dojo.partial(thinger, "foo");
|
||
|
t.assertEqual(undefined, st1()[1]);
|
||
|
t.assertEqual("bar", st1("bar")[1]);
|
||
|
|
||
|
// partials can accumulate
|
||
|
var st2 = dojo.partial(st1, "thud");
|
||
|
t.assertEqual("foo", st2()[0]);
|
||
|
t.assertEqual("thud", st2()[1]);
|
||
|
},
|
||
|
|
||
|
function hitch(t){
|
||
|
var scope = { foo: "bar" };
|
||
|
var scope2 = { foo: "baz" };
|
||
|
function thinger(){
|
||
|
return [this.foo, arguments.length];
|
||
|
}
|
||
|
|
||
|
var st1 = dojo.hitch(scope, thinger);
|
||
|
t.assertEqual("bar", st1()[0]);
|
||
|
t.assertEqual(0, st1()[1]);
|
||
|
|
||
|
var st2 = dojo.hitch(scope2, thinger);
|
||
|
t.assertEqual("baz", st2()[0]);
|
||
|
t.assertEqual(0, st1()[1]);
|
||
|
t.assertEqual(1, st1("blah")[1]);
|
||
|
|
||
|
// st2 should be "scope proof"
|
||
|
t.assertEqual("baz", st2.call(scope)[0]);
|
||
|
},
|
||
|
|
||
|
function hitchWithArgs(t){
|
||
|
var scope = { foo: "bar" };
|
||
|
var scope2 = { foo: "baz" };
|
||
|
function thinger(){
|
||
|
return [this.foo, arguments.length];
|
||
|
}
|
||
|
|
||
|
var st1 = dojo.hitch(scope, thinger, "foo", "bar");
|
||
|
t.assertEqual("bar", st1()[0]);
|
||
|
t.assertEqual(2, st1()[1]);
|
||
|
var st2 = dojo.hitch(scope2, thinger, "foo", "bar");
|
||
|
t.assertEqual("baz", st2()[0]);
|
||
|
t.assertEqual(2, st2()[1]);
|
||
|
},
|
||
|
|
||
|
function hitchAsPartial(t){
|
||
|
var scope = { foo: "bar" };
|
||
|
var scope2 = { foo: "baz" };
|
||
|
function thinger(arg1, arg2){
|
||
|
return [this.foo, arg1, arg2];
|
||
|
}
|
||
|
|
||
|
var st1 = dojo.hitch(null, thinger);
|
||
|
t.assertEqual("bar", st1.call(scope)[0]);
|
||
|
t.assertEqual(undefined, st1()[0]);
|
||
|
var st2 = dojo.hitch(null, thinger, "foo", "bar");
|
||
|
t.assertEqual("bar", st2()[2]);
|
||
|
var st3 = dojo.hitch(null, thinger, "foo", "bar");
|
||
|
},
|
||
|
|
||
|
function _toArray(t){
|
||
|
var obj1 = [ 'foo', 'bar', 'spam', 'ham' ];
|
||
|
|
||
|
function thinger(){
|
||
|
return dojo._toArray(arguments);
|
||
|
}
|
||
|
var obj2 = thinger.apply(this, obj1);
|
||
|
t.assertEqual(obj1[0], obj2[0]);
|
||
|
},
|
||
|
|
||
|
function clone(t) {
|
||
|
var obj1 = {foo: 'bar', answer: 42, jan102007: new Date(2007, 0, 10),
|
||
|
baz: {
|
||
|
a: null,
|
||
|
b: [
|
||
|
1, "b", 2.3, true, false
|
||
|
//, function(){ return 4; }, /\d+/gm
|
||
|
]
|
||
|
}
|
||
|
};
|
||
|
var obj2 = dojo.clone(obj1);
|
||
|
t.assertEqual(obj1.foo, obj2.foo);
|
||
|
t.assertEqual(obj1.answer, obj2.answer);
|
||
|
t.assertEqual(obj1.jan102007, obj2.jan102007);
|
||
|
t.assertEqual(obj1.baz.a, obj2.baz.a);
|
||
|
for(var i = 0; i < obj1.baz.b.length; ++i){
|
||
|
t.assertEqual(obj1.baz.b[i], obj2.baz.b[i]);
|
||
|
}
|
||
|
}
|
||
|
]
|
||
|
);
|
||
|
|
||
|
}
|