Implement ES6 Symbol
[WebKit-https.git] / LayoutTests / js / script-tests / symbol-object.js
1 description(
2 "This tests Symbol object behaviors."
3 );
4
5 // Symbol constructor cannot be called with `new` style.
6 // To create Symbol object, call `Object(symbol)`.
7 shouldThrow("new Symbol", "\"TypeError: function is not a constructor (evaluating 'new Symbol')\"");
8 shouldThrow("new Symbol('Cappuccino')", "\"TypeError: function is not a constructor (evaluating 'new Symbol('Cappuccino')')\"");
9
10 var symbolObject = Object(Symbol.iterator);
11 shouldBeTrue("symbolObject instanceof Symbol");
12 // Since Symbol object's @@toPrimitive returns Symbol value,
13 // ToString(symbol) will be called.
14 shouldThrow("String(symbolObject)", "'TypeError: Type error'");
15 shouldBeEqualToString("symbolObject.toString()", "Symbol(Symbol.iterator)");
16
17 var object = {};
18 object[symbolObject] = 42;
19 // ToPropertyKey(symbolObject) will call toPrimitive(symbolObject), and toPrimitive(symbolObject) will return symbol primitive value. As a result, object[symbolObject] equals to object[symbol in the symbolObject].
20 shouldBe("object[symbolObject]", "42");
21 shouldBe("object['Symbol(Symbol.iterator)']", "undefined");
22 shouldBe("object[Symbol.iterator]", "42");
23
24 var symbol = Symbol("Matcha");
25 object[symbol] = 'Cocoa';
26 shouldBeEqualToString("object[symbol]", "Cocoa");
27 shouldBeEqualToString("object[symbol.valueOf()]", "Cocoa");
28 shouldBeEqualToString("object[Object(symbol)]", "Cocoa");
29 shouldBe("object['Matcha']", "undefined");
30
31 // ToObject will be called.
32 shouldBe("Symbol.iterator.hello", "undefined");
33
34 successfullyParsed = true;