| Index: test/mjsunit/harmony/symbols.js
|
| diff --git a/test/mjsunit/harmony/symbols.js b/test/mjsunit/harmony/symbols.js
|
| index 64e6f804650fcd055d0521a916f720a8c72e9ebd..e09f37dad61fe292920ca40ce48b75720a3e07ca 100644
|
| --- a/test/mjsunit/harmony/symbols.js
|
| +++ b/test/mjsunit/harmony/symbols.js
|
| @@ -109,12 +109,110 @@ TestSet()
|
|
|
|
|
| function TestMap() {
|
| - var map = new Map;
|
| + var map = new Map
|
| for (var i in symbols) {
|
| map.set(symbols[i], i)
|
| }
|
| for (var i in symbols) {
|
| + assertTrue(map.has(symbols[i]))
|
| assertEquals(i, map.get(symbols[i]))
|
| }
|
| }
|
| TestMap()
|
| +
|
| +
|
| +
|
| +function TestKeySet(obj) {
|
| + // Set the even symbols via assignment.
|
| + for (var i = 0; i < symbols.length; i += 2) {
|
| + obj[symbols[i]] = i
|
| + }
|
| +}
|
| +
|
| +
|
| +function TestKeyDefine(obj) {
|
| + // Set the odd symbols via defineProperty (as non-enumerable).
|
| + for (var i = 1; i < symbols.length; i += 2) {
|
| + Object.defineProperty(obj, symbols[i], {value: i, configurable: true})
|
| + }
|
| +}
|
| +
|
| +
|
| +function TestKeyGet(obj) {
|
| + var obj2 = Object.create(obj)
|
| + for (var i in symbols) {
|
| + assertEquals(i|0, obj[symbols[i]])
|
| + assertEquals(i|0, obj2[symbols[i]])
|
| + }
|
| +}
|
| +
|
| +
|
| +function TestKeyHas() {
|
| + for (var i in symbols) {
|
| + assertTrue(symbols[i] in obj)
|
| + assertTrue(Object.hasOwnProperty.call(obj, symbols[i]))
|
| + }
|
| +}
|
| +
|
| +
|
| +function TestKeyEnum(obj) {
|
| + // TODO(rossberg): symbols should not show up at all in for-in.
|
| + var found = [];
|
| + names: for (var name in obj) {
|
| + for (var i in symbols) {
|
| + if (name === symbols[i]) {
|
| + found[i] = true;
|
| + continue names;
|
| + }
|
| + }
|
| + }
|
| + // All even symbols should have been enumerated.
|
| + for (var i = 0; i < symbols.length; i += 2) {
|
| + assertTrue(i in found)
|
| + }
|
| +}
|
| +
|
| +
|
| +function TestKeyKeys(obj) {
|
| + // TODO(rossberg): symbols should not be returned by Object.keys.
|
| + assertEquals(symbols.length / 2, Object.keys(obj).length)
|
| + assertTrue(symbols.length <= Object.getOwnPropertyNames(obj).length)
|
| +}
|
| +
|
| +
|
| +function TestKeyDescriptor(obj) {
|
| + for (var i in symbols) {
|
| + var desc = Object.getOwnPropertyDescriptor(obj, symbols[i]);
|
| + assertEquals(i|0, desc.value)
|
| + assertTrue(desc.configurable)
|
| + assertEquals(i % 2 == 0, desc.writable)
|
| + assertEquals(i % 2 == 0, desc.enumerable)
|
| + assertEquals(i % 2 == 0,
|
| + Object.prototype.propertyIsEnumerable.call(obj, symbols[i]))
|
| + }
|
| +}
|
| +
|
| +
|
| +function TestKeyDelete(obj) {
|
| + for (var i in symbols) {
|
| + delete obj[symbols[i]]
|
| + }
|
| + for (var i in symbols) {
|
| + assertEquals(undefined, Object.getOwnPropertyDescriptor(obj, symbols[i]))
|
| + }
|
| +}
|
| +
|
| +
|
| +var objs = [{}, [], Object.create(null), Object(1), new Map, function(){}]
|
| +
|
| +for (var i in objs) {
|
| + var obj = objs[i]
|
| + TestKeySet(obj)
|
| + TestKeyDefine(obj)
|
| + TestKeyGet(obj)
|
| + TestKeyHas(obj)
|
| + TestKeyEnum(obj)
|
| + TestKeyKeys(obj)
|
| + TestKeyDescriptor(obj)
|
| + TestKeyDelete(obj)
|
| +}
|
|
|