Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(39)

Unified Diff: test/mjsunit/harmony/symbols.js

Issue 12957004: ES6 symbols: turn symbols into a proper primitive type (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Addressed comments Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/x64/lithium-codegen-x64.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/mjsunit/harmony/symbols.js
diff --git a/test/mjsunit/harmony/symbols.js b/test/mjsunit/harmony/symbols.js
index cdc63628ae9d219bde3ecb3a271d1396cbbf345a..fe7fd0aed4f1f083d1f08cd8bcafb1097f8fcded 100644
--- a/test/mjsunit/harmony/symbols.js
+++ b/test/mjsunit/harmony/symbols.js
@@ -34,20 +34,19 @@ var symbols = []
function TestNew() {
function IndirectSymbol() { return new Symbol }
function indirect() { return new IndirectSymbol() }
- for (var i = 0; i < 10; ++i) {
- symbols.push(new Symbol)
- symbols.push(new Symbol())
- symbols.push(Symbol())
- symbols.push(indirect())
- }
- %OptimizeFunctionOnNextCall(indirect)
- indirect() // Call once before GC throws away type feedback.
- gc() // Promote existing symbols and then allocate some more.
- for (var i = 0; i < 10; ++i) {
- symbols.push(new Symbol)
- symbols.push(new Symbol())
- symbols.push(Symbol())
- symbols.push(indirect())
+ for (var i = 0; i < 2; ++i) {
+ for (var j = 0; j < 5; ++j) {
+ symbols.push(Symbol())
+ symbols.push(Symbol(Symbol()))
+ symbols.push((new Symbol).valueOf())
+ symbols.push((new Symbol()).valueOf())
+ symbols.push((new Symbol(Symbol())).valueOf())
+ symbols.push(Object(Symbol()).valueOf())
+ symbols.push((indirect()).valueOf())
+ }
+ %OptimizeFunctionOnNextCall(indirect)
+ indirect() // Call once before GC throws away type feedback.
+ gc() // Promote existing symbols and then allocate some more.
}
}
TestNew()
@@ -55,15 +54,70 @@ TestNew()
function TestType() {
for (var i in symbols) {
- assertTrue(%_IsSymbol(symbols[i]))
- assertEquals("object", typeof symbols[i])
- assertTrue(typeof symbols[i] === "object")
- assertEquals("[object Symbol]", Object.prototype.toString.call(symbols[i]))
+ assertEquals("symbol", typeof symbols[i])
+ assertTrue(typeof symbols[i] === "symbol")
+ assertEquals(null, %_ClassOf(symbols[i]))
+ assertEquals("Symbol", %_ClassOf(new Symbol(symbols[i])))
+ assertEquals("Symbol", %_ClassOf(Object(symbols[i])))
}
}
TestType()
+function TestPrototype() {
+ assertSame(Object.prototype, Symbol.prototype.__proto__)
+ assertSame(Symbol.prototype, Symbol().__proto__)
+ assertSame(Symbol.prototype, Symbol(Symbol()).__proto__)
+ assertSame(Symbol.prototype, (new Symbol).__proto__)
+ assertSame(Symbol.prototype, (new Symbol()).__proto__)
+ assertSame(Symbol.prototype, (new Symbol(Symbol())).__proto__)
+ assertSame(Symbol.prototype, Object(Symbol()).__proto__)
+ for (var i in symbols) {
+ assertSame(Symbol.prototype, symbols[i].__proto__)
+ }
+}
+TestPrototype()
+
+
+function TestToString() {
+ for (var i in symbols) {
+ assertThrows(function() { String(symbols[i]) }, TypeError)
+ assertThrows(function() { symbols[i] + "" }, TypeError)
+ assertThrows(function() { symbols[i].toString() }, TypeError)
+ assertThrows(function() { (new Symbol(symbols[i])).toString() }, TypeError)
+ assertThrows(function() { Object(symbols[i]).toString() }, TypeError)
+ assertEquals("[object Symbol]", Object.prototype.toString.call(symbols[i]))
+ }
+}
+TestToString()
+
+
+function TestToBoolean() {
+ for (var i in symbols) {
+ assertTrue(Boolean(symbols[i]).valueOf())
+ assertFalse(!symbols[i])
+ assertTrue(!!symbols[i])
+ assertTrue(symbols[i] && true)
+ assertFalse(!symbols[i] && false)
+ assertTrue(!symbols[i] || true)
+ assertEquals(1, symbols[i] ? 1 : 2)
+ assertEquals(2, !symbols[i] ? 1 : 2)
+ if (!symbols[i]) assertUnreachable();
+ if (symbols[i]) {} else assertUnreachable();
+ }
+}
+TestToBoolean()
+
+
+function TestToNumber() {
+ for (var i in symbols) {
+ assertSame(NaN, Number(symbols[i]).valueOf())
+ assertSame(NaN, symbols[i] + 0)
+ }
+}
+TestToNumber()
+
+
function TestEquality() {
// Every symbol should equal itself.
for (var i in symbols) {
@@ -88,8 +142,8 @@ TestEquality()
function TestGet() {
for (var i in symbols) {
- assertEquals("[object Symbol]", symbols[i].toString())
- assertEquals(undefined, symbols[i].valueOf)
+ assertThrows(function() { symbols[i].toString() }, TypeError)
+ assertEquals(symbols[i], symbols[i].valueOf())
assertEquals(undefined, symbols[i].a)
assertEquals(undefined, symbols[i]["a" + "b"])
assertEquals(undefined, symbols[i]["" + "1"])
@@ -102,7 +156,9 @@ TestGet()
function TestSet() {
for (var i in symbols) {
symbols[i].toString = 0
- assertEquals("[object Symbol]", symbols[i].toString())
+ assertThrows(function() { symbols[i].toString() }, TypeError)
+ symbols[i].valueOf = 0
+ assertEquals(symbols[i], symbols[i].valueOf())
symbols[i].a = 0
assertEquals(undefined, symbols[i].a)
symbols[i]["a" + "b"] = 0
@@ -179,7 +235,7 @@ function TestKeyHas() {
function TestKeyEnum(obj) {
for (var name in obj) {
- assertFalse(%_IsSymbol(name))
+ assertTrue(typeof name !== "symbol")
}
}
@@ -195,9 +251,7 @@ function TestKeyNames(obj) {
for (var i = 0; i < symbols.length; ++i) expected.add(symbols[i])
for (var i = 0; i < names.length; ++i) {
var name = names[i]
- var asString = String(name)
- if (asString !== name) {
- assertEquals("[object Symbol]", asString)
+ if (typeof name === 'symbol') {
assertTrue(expected.has(name))
expected.delete(name)
}
« no previous file with comments | « src/x64/lithium-codegen-x64.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698