michael@0: /* michael@0: * Any copyright is dedicated to the Public Domain. michael@0: * http://creativecommons.org/licenses/publicdomain/ michael@0: */ michael@0: michael@0: //----------------------------------------------------------------------------- michael@0: var BUGNUMBER = 307791; michael@0: var summary = 'ES5 Object.keys(O)'; michael@0: var actual = ''; michael@0: var expect = ''; michael@0: michael@0: printBugNumber(BUGNUMBER); michael@0: printStatus(summary); michael@0: michael@0: function arraysEqual(a1, a2) michael@0: { michael@0: return a1.length === a2.length && michael@0: a1.every(function(v, i) { return v === a2[i]; }); michael@0: } michael@0: michael@0: /************** michael@0: * BEGIN TEST * michael@0: **************/ michael@0: michael@0: assertEq(Object.keys.length, 1); michael@0: michael@0: var o, keys; michael@0: michael@0: o = { a: 3, b: 2 }; michael@0: keys = Object.keys(o); michael@0: assertEq(arraysEqual(keys, ["a", "b"]), true, michael@0: "" + keys); michael@0: michael@0: o = { get a() { return 17; }, b: 2 }; michael@0: keys = Object.keys(o), michael@0: assertEq(arraysEqual(keys, ["a", "b"]), true, michael@0: "" + keys); michael@0: michael@0: o = { __iterator__: function() { return Iterator({a: 2, b: 3}); } }; michael@0: keys = Object.keys(o); michael@0: assertEq(arraysEqual(keys, ["__iterator__"]), true, michael@0: "" + keys); michael@0: michael@0: o = { a: 1, b: 2 }; michael@0: delete o.a; michael@0: o.a = 3; michael@0: keys = Object.keys(o); michael@0: assertEq(arraysEqual(keys, ["b", "a"]), true, michael@0: "" + keys); michael@0: michael@0: o = [0, 1, 2]; michael@0: keys = Object.keys(o); michael@0: assertEq(arraysEqual(keys, ["0", "1", "2"]), true, michael@0: "" + keys); michael@0: michael@0: o = /./.exec("abc"); michael@0: keys = Object.keys(o); michael@0: assertEq(arraysEqual(keys, ["0", "index", "input"]), true, michael@0: "" + keys); michael@0: michael@0: o = { a: 1, b: 2, c: 3 }; michael@0: delete o.b; michael@0: o.b = 5; michael@0: keys = Object.keys(o); michael@0: assertEq(arraysEqual(keys, ["a", "c", "b"]), true, michael@0: "" + keys); michael@0: michael@0: function f() { } michael@0: f.prototype.p = 1; michael@0: o = new f(); michael@0: o.g = 1; michael@0: keys = Object.keys(o); michael@0: assertEq(arraysEqual(keys, ["g"]), true, michael@0: "" + keys); michael@0: michael@0: if (typeof Namespace !== "undefined" && typeof QName !== "undefined") michael@0: { michael@0: var o2 = {}; michael@0: var qn = new QName(new Namespace("foo"), "v"); michael@0: o2.f = 1; michael@0: o2[qn] = 3; michael@0: o2.baz = 4; michael@0: var keys2 = Object.keys(o2); michael@0: assertEq(arraysEqual(keys2, ["f", "foo::v", "baz"]), true, michael@0: "" + keys2); michael@0: } michael@0: michael@0: /******************************************************************************/ michael@0: michael@0: reportCompare(expect, actual, "Object.keys"); michael@0: michael@0: printStatus("All tests passed!");