'dojo/has!host-browser?dojo/domReady!'
], function (registerSuite, assert, array, lang, kernel, has) {
assert.isTrue(lang.exists('foo', test), 'test.foo should exist');
assert.isFalse(lang.exists('foo.bar', test), 'test.foo.bar should not exist');
assert.isFalse(lang.exists('_existsTest'), '_existsTest should not exist');
kernel.global._existsTest = false;
assert.isTrue(lang.exists('_existsTest'), '_existsTest should exist');
assert.isFalse(lang.exists('_existsTest.bar'), '_existsTest.bar should not exist');
assert.isTrue(lang.exists('dojo.dijit'), 'dojo.dijit should exist');
assert.isFalse(lang.exists('dojo.foo'), 'dojo.foo should not exist');
'.getObject': function () {
assert.strictEqual(lang.getObject('foo', false, test), test.foo);
assert.strictEqual(typeof lang.getObject('foo.bar', false, test), 'undefined');
assert.strictEqual(typeof lang.getObject('foo.bar', true, test), 'object');
test.foo.bar.baz = 'test';
assert.strictEqual(lang.getObject('foo.bar', false, test), test.foo.bar);
assert.strictEqual(typeof lang.getObject('_getObjectTest.bar', false), 'undefined');
kernel.global._getObjectTest = {};
assert.strictEqual(lang.getObject('_getObjectTest', false), kernel.global._getObjectTest);
assert.strictEqual(typeof lang.getObject('_getObjectTest.bar', true), 'object');
assert.strictEqual(typeof lang.getObject('./TestWidget'), 'undefined');
assert.strictEqual(lang.getObject('', false, test), test);
assert.strictEqual(lang.getObject('', false, null), null);
assert.strictEqual(lang.getObject(''), undefined);
'.setObject': function () {
lang.setObject('foo', { bar: 'test' }, test);
assert.deepEqual(test, { foo: { bar: 'test' } });
assert.typeOf(lang.mixin(), 'object');
assert.typeOf(lang.mixin(undefined), 'object');
assert.typeOf(lang.mixin(null), 'object');
assert.typeOf(dest.foo, 'function');
assert.typeOf(dest.bar, 'string');
assert.typeOf(test.foo, 'function');
assert.typeOf(test.bar, 'string');
'.isFunction': function () {
assert.isTrue(lang.isFunction(new Function()));
assert.isTrue(lang.isFunction(test));
if (has('host-browser')) {
assert.isFalse(lang.isFunction(document.getElementsByName('html')));
assert.isFalse(lang.isFunction(document.createElement('object')));
'.isObject': function () {
assert.isFalse(lang.isObject(true));
assert.isFalse(lang.isObject(false));
assert.isFalse(lang.isObject('foo'));
assert.isTrue(lang.isObject(new String('foo')));
assert.isTrue(lang.isObject(null));
assert.isTrue(lang.isObject({}));
assert.isTrue(lang.isObject([]));
assert.isTrue(lang.isObject(new Array()));
'.isArray': function () {
assert.isTrue(lang.isArray([]));
assert.isTrue(lang.isArray(new Array()));
assert.isFalse(lang.isArray({}));
assert.isFalse(lang.isArray(''));
assert.isFalse(lang.isArray(0));
assert.isFalse(lang.isArray(NaN));
assert.isFalse(lang.isArray(null));
assert.isFalse(lang.isArray(undefined));
if (typeof window !== 'undefined') {
assert.isFalse(lang.isArray(window));
assert.isFalse(lang.isArray(Function));
assert.isFalse(lang.isArray(new Tricky()));
'.isArrayLike': function () {
assert.isFalse(lang.isArrayLike('thinger'));
assert.isTrue(lang.isArrayLike(new Array()));
assert.isFalse(lang.isArrayLike({}));
assert.isTrue(lang.isArrayLike(arguments));
assert.isFalse(lang.isArrayLike(''));
assert.isFalse(lang.isArrayLike(false));
assert.isFalse(lang.isArrayLike(NaN));
assert.isFalse(lang.isArrayLike(undefined));
assert.isFalse(lang.isArrayLike(null));
if(typeof window !== 'undefined'){
assert.isTrue(lang.isArrayLike(window));
assert.isFalse(lang.isArrayLike(Function));
assert.isTrue(lang.isArrayLike({0: 1, 1: 2, length: 2}));
assert.isTrue(lang.isArrayLike(new Tricky()));
'.isString': function () {
assert.isFalse(lang.isString(true));
assert.isFalse(lang.isString(false));
assert.isTrue(lang.isString('foo'));
assert.isTrue(lang.isString(new String('foo')));
assert.isFalse(lang.isString(null));
assert.isFalse(lang.isString({}));
assert.isFalse(lang.isString([]));
'.partial': function () {
var scope = { foo: 'bar' };
function thinger(arg1, arg2) {
return [this.foo, arg1, arg2];
st1 = lang.partial(thinger);
assert.equal('bar', st1.call(scope)[0]);
assert.equal(undefined, st1()[0]);
st2 = lang.partial(thinger, 'foo', 'bar');
assert.equal('bar', st2()[2]);
st3 = lang.partial(thinger, 'foo', 'bar');
'.partial nested': function () {
function thinger(arg1, arg2) {
st1 = lang.partial(thinger, 'foo');
assert.equal(undefined, st1()[1]);
assert.equal('bar', st1('bar')[1]);
st2 = lang.partial(st1, 'thud');
assert.equal('foo', st2()[0]);
assert.equal('thud', st2()[1]);
var scope = { foo: 'bar' };
var scope2 = { foo: 'baz' };
return [this.foo, arguments.length];
st1 = lang.hitch(scope, thinger);
assert.equal('bar', st1()[0]);
assert.equal(0, st1()[1]);
st2 = lang.hitch(scope2, thinger);
assert.equal('baz', st2()[0]);
assert.equal(0, st1()[1]);
assert.equal(1, st1('blah')[1]);
assert.equal('baz', st2.call(scope)[0]);
'.hitch with args': function () {
var scope = { foo: 'bar' };
var scope2 = { foo: 'baz' };
return [this.foo, arguments.length];
st1 = lang.hitch(scope, thinger, 'foo', 'bar');
assert.equal('bar', st1()[0]);
assert.equal(2, st1()[1]);
st2 = lang.hitch(scope2, thinger, 'foo', 'bar');
assert.equal('baz', st2()[0]);
assert.equal(2, st2()[1]);
'.hitch as partial': function () {
var scope = { foo: 'bar' };
function thinger(arg1, arg2) {
return [this.foo, arg1, arg2];
st1 = lang.hitch(null, thinger);
assert.equal('bar', st1.call(scope)[0]);
assert.equal(undefined, st1()[0]);
st2 = lang.hitch(null, thinger, 'foo', 'bar');
assert.equal('bar', st2()[2]);
'.toArray': function () {
var obj1 = [ 'foo', 'bar', 'spam', 'ham' ];
return lang._toArray(arguments);
obj2 = thinger.apply(this, obj1);
assert.equal(obj1[0], obj2[0]);
if (has('host-browser')) {
div = document.createElement('div');
div.innerHTML = '<a href="#"">link</a>text';
result = lang._toArray(div.childNodes);
assert.equal(2, result.length);
jan102007: new Date(2007, 0, 10),
b: [1, 'b', 2.3, true, false],
f: function () { console.log(42); return 42; },
toString: function () { return 'meow'; }
assert.deepEqual(obj1, lang.clone(obj1));
'.delegate': function () {
y: function () { return 2; },
y: function () { return 12; },
toString: function () { return 'bark!'; },
toLocaleString: function () { return 'le bark-s!'; }
assert.strictEqual(1, a.x);
assert.strictEqual(2, a.y());
assert.strictEqual(99, a.z1);
assert.strictEqual(1, a.x);
assert.strictEqual(2, a.y());
assert.strictEqual(99, a.z1);
assert.strictEqual(11, c.x);
assert.strictEqual(12, c.y());
assert.strictEqual('bark!', c.toString());
assert.strictEqual('le bark-s!', c.toLocaleString());
assert.strictEqual(99, c.z1);
assert.strictEqual(33, c.z2);
'.replace with object': function () {
var s1 = lang.replace('Hello, {name.first} {name.last} AKA {nick}!', objectContext);
assert.equal('Hello, Robert Cringely AKA Bob!', s1);
'.replace with array context': function () {
var arrayContext = ['Robert', 'X', 'Cringely'];
var s2 = lang.replace('Hello, {0} {2}!', arrayContext);
assert.equal('Hello, Robert Cringely!', s2);
'.replace with function': function () {
array.forEach(a, function (x) { t += x; });
'{count} payments averaging {avg} USD per payment.',
{ payments: [11, 16, 12] },
return this.payments.length;
return sum(this.payments) / this.payments.length;
assert.equal('3 payments averaging 13 USD per payment.', s1);
'.replace with regex': function () {
var s4 = lang.replace('Hello, ${0} ${2}!', ['Robert', 'X', 'Cringely'], /\$\{([^\}]+)\}/g);
assert.equal('Hello, Robert Cringely!', s4);