@qooxdoo/framework
Version:
The JS Framework for Coders
333 lines (273 loc) • 8.37 kB
JavaScript
/* ************************************************************************
qooxdoo - the new era of web development
http://qooxdoo.org
Copyright:
2007-2008 1&1 Internet AG, Germany, http://www.1und1.de
License:
MIT: https://opensource.org/licenses/MIT
See the LICENSE file in the project's top-level directory for details.
Authors:
* Fabian Jakobs (fjakobs)
************************************************************************ */
qx.Class.define("qx.test.lang.Object", {
extend: qx.dev.unit.TestCase,
members: {
testObject() {
this.assertNotUndefined(qx.lang.Object);
},
testEmpty() {
var object = { a: 1 };
qx.lang.Object.empty(object);
this.assertTrue(qx.lang.Object.isEmpty(object));
var object = {};
qx.lang.Object.empty(object);
this.assertTrue(qx.lang.Object.isEmpty(object));
},
testIsEmpty() {
this.assertEquals(true, qx.lang.Object.isEmpty({}));
this.assertEquals(false, qx.lang.Object.isEmpty({ a: undefined }));
this.assertEquals(false, qx.lang.Object.isEmpty({ a: null }));
this.assertEquals(false, qx.lang.Object.isEmpty({ a: 1 }));
},
testGetLength() {
var object = {};
this.assertEquals(0, qx.lang.Object.getLength(object));
var object = { a: 1 };
this.assertEquals(1, qx.lang.Object.getLength(object));
var object = { a: undefined, b: null, c: 1 };
this.assertEquals(3, qx.lang.Object.getLength(object));
},
testGetKeys() {
var object = {
a: undefined,
b: null,
c: 1
};
this.assertArrayEquals(
["a", "b", "c"].sort(),
Object.keys(object).sort()
);
var object = {};
this.assertArrayEquals([], Object.keys(object));
var object = {
isPrototypeOf: 1,
hasOwnProperty: 1,
toLocaleString: 1,
toString: 1,
valueOf: 1
};
this.assertArrayEquals(
[
"isPrototypeOf",
"hasOwnProperty",
"toLocaleString",
"toString",
"valueOf"
].sort(),
Object.keys(object).sort()
);
},
testGetValues() {
var object = {
a: undefined,
b: null,
c: 1
};
this.assertArrayEquals(
[undefined, null, 1].sort(),
qx.lang.Object.getValues(object).sort()
);
var object = {};
this.assertArrayEquals([], qx.lang.Object.getValues(object));
var object = {
isPrototypeOf: 1,
hasOwnProperty: 2,
toLocaleString: 3,
toString: 4,
valueOf: 5
};
this.assertArrayEquals(
[1, 2, 3, 4, 5].sort(),
qx.lang.Object.getValues(object).sort()
);
},
testMergeWith() {
var original = { a: 0 };
var o1 = { a: 2, b: 1 };
qx.lang.Object.mergeWith(original, o1, true);
// check the original
this.assertEquals(2, original.a);
this.assertEquals(1, original.b);
},
testMergeWithCarefully() {
var original = { a: 0 };
var o1 = { a: 2, b: 1 };
qx.lang.Object.mergeWith(original, o1, false);
// check the original
this.assertEquals(0, original.a);
this.assertEquals(1, original.b);
},
testClone() {
var original = { a: 12, b: true, c: "affe" };
var clone = qx.lang.Object.clone(original);
clone.a = 14;
original.b = false;
clone.c = "AFFE";
// check the original
this.assertEquals(12, original.a);
this.assertEquals(false, original.b);
this.assertEquals("affe", original.c);
// check the clone
this.assertEquals(14, clone.a);
this.assertEquals(true, clone.b);
this.assertEquals("AFFE", clone.c);
},
testCloneDeep() {
var original = { a: { b: 0 } };
var clone = qx.lang.Object.clone(original, true);
// change the original
original.a.b = 1;
this.assertEquals(0, clone.a.b);
original = { a: [{ b: 0 }] };
clone = qx.lang.Object.clone(original, true);
// change the original
original.a[0].b = 1;
this.assertEquals(0, clone.a[0].b);
original = [];
original.push({ a: { b: 0 } });
clone = qx.lang.Object.clone(original, true);
this.assertEquals(0, clone[0].a.b);
original[0].a.b = 1;
this.assertEquals(0, clone[0].a.b);
},
testInvert() {
this.assertNotUndefined(qx.lang.Object.invert);
var Obj = qx.lang.Object;
this.assertJsonEquals(
{
a: "1",
2: "b"
},
Obj.invert({
1: "a",
b: 2
})
);
},
testGetKeyFromValue() {
var obj = { a: 123 };
this.assertEquals("a", qx.lang.Object.getKeyFromValue(obj, 123));
},
testContains() {
this.assertTrue(qx.lang.Object.contains({ a: 1 }, 1));
},
testFromArray() {
var array = ["a", "b"];
var obj = qx.lang.Object.fromArray(array);
this.assertTrue(obj.a);
this.assertTrue(obj.b);
},
/**
* Some behavior, which must be consistent in all browsers for some
* assertions to work.
*/
testObjectAssertions() {
var objConstructor = {}.constructor;
this.assertIdentical({ a: 12 }.constructor, objConstructor);
/* eslint-disable-next-line no-new-object */
this.assertIdentical(new Object().constructor, objConstructor);
var qxObj = new qx.core.Object();
this.assertNotIdentical(qxObj.constructor, objConstructor);
this.assertNotIdentical((1).constructor, objConstructor);
this.assertNotIdentical("Juhu".constructor, objConstructor);
this.assertNotIdentical(/abc/.constructor, objConstructor);
qxObj.dispose();
},
testEquals() {
var a = { a: "text", b: [0, 1] };
var b = { a: "text", b: [0, 1] };
var c = { a: "text", b: 0 };
var d = { a: "text", b: false };
var e = { a: "text", b: [1, 0] };
var f = {
a: "text",
b: [1, 0],
f() {
this.f = this.b;
}
};
var g = {
a: "text",
b: [1, 0],
f() {
this.f = this.b;
}
};
var h = {
a: "text",
b: [1, 0],
f() {
this.a = this.b;
}
};
var i = {
a: "text",
c: {
b: [1, 0],
f() {
this.a = this.b;
}
}
};
var j = {
a: "text",
c: {
b: [1, 0],
f() {
this.a = this.b;
}
}
};
var k = { a: "text", b: null };
var l = { a: "text", b: undefined };
this.assertTrue(qx.lang.Object.equals(a, b));
this.assertFalse(qx.lang.Object.equals(a, c));
this.assertFalse(qx.lang.Object.equals(c, d));
this.assertFalse(qx.lang.Object.equals(a, e));
this.assertFalse(qx.lang.Object.equals(f, g));
this.assertFalse(qx.lang.Object.equals(h, g));
this.assertFalse(qx.lang.Object.equals(i, j));
this.assertFalse(qx.lang.Object.equals(d, k));
this.assertFalse(qx.lang.Object.equals(k, l));
this.assertFalse(qx.lang.Object.equals({}, null));
this.assertFalse(qx.lang.Object.equals({}, undefined));
this.assertTrue(qx.lang.Object.equals("qooxdoo", "qooxdoo"));
this.assertTrue(qx.lang.Object.equals(5, 5));
this.assertFalse(qx.lang.Object.equals(5, 10));
this.assertFalse(qx.lang.Object.equals(1, "1"));
this.assertTrue(qx.lang.Object.equals([], []));
this.assertTrue(qx.lang.Object.equals([1, 2], [1, 2]));
this.assertFalse(qx.lang.Object.equals([1, 2], [2, 1]));
this.assertFalse(qx.lang.Object.equals([1, 2], [1, 2, 3]));
this.assertTrue(
qx.lang.Object.equals(new Date("03/31/2014"), new Date("03/31/2014"))
);
this.assertFalse(
qx.lang.Object.equals(
{ 1: { name: "mhc", age: 28 }, 2: { name: "arb", age: 26 } },
{ 1: { name: "mhc", age: 28 }, 2: { name: "arb", age: 27 } }
)
);
this.assertFalse(
qx.lang.Object.equals(
function (x) {
return x;
},
function (y) {
return y + 2;
}
)
);
}
}
});