| 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) | 
| +} | 
|  |