diff options
Diffstat (limited to 'js/src/tests/ecma_6/Set')
-rw-r--r-- | js/src/tests/ecma_6/Set/NaN-as-key.js | 56 | ||||
-rw-r--r-- | js/src/tests/ecma_6/Set/browser.js | 0 | ||||
-rw-r--r-- | js/src/tests/ecma_6/Set/forEach-selfhosted-behavior.js | 51 | ||||
-rw-r--r-- | js/src/tests/ecma_6/Set/getter-name.js | 10 | ||||
-rw-r--r-- | js/src/tests/ecma_6/Set/shell.js | 0 | ||||
-rw-r--r-- | js/src/tests/ecma_6/Set/symbols.js | 27 |
6 files changed, 144 insertions, 0 deletions
diff --git a/js/src/tests/ecma_6/Set/NaN-as-key.js b/js/src/tests/ecma_6/Set/NaN-as-key.js new file mode 100644 index 000000000..8c9207e88 --- /dev/null +++ b/js/src/tests/ecma_6/Set/NaN-as-key.js @@ -0,0 +1,56 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 722260; +var summary = 'All NaNs must be treated as identical keys for Set'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +/* Avoid constant-folding that would happen were |undefined| to be used. */ +var key = -/a/g.missingProperty; + +var s = new Set(); +s.add(key, 17); +assertEq(s.has(key), true); +assertEq(s.has(-key), true); +assertEq(s.has(NaN), true); + +s.delete(-key); +assertEq(s.has(key), false); +assertEq(s.has(-key), false); +assertEq(s.has(NaN), false); + +s.add(-key, 17); +assertEq(s.has(key), true); +assertEq(s.has(-key), true); +assertEq(s.has(NaN), true); + +s.delete(NaN); +assertEq(s.has(key), false); +assertEq(s.has(-key), false); +assertEq(s.has(NaN), false); + +s.add(NaN, 17); +assertEq(s.has(key), true); +assertEq(s.has(-key), true); +assertEq(s.has(NaN), true); + +s.delete(key); +assertEq(s.has(key), false); +assertEq(s.has(-key), false); +assertEq(s.has(NaN), false); + + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/js/src/tests/ecma_6/Set/browser.js b/js/src/tests/ecma_6/Set/browser.js new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/js/src/tests/ecma_6/Set/browser.js diff --git a/js/src/tests/ecma_6/Set/forEach-selfhosted-behavior.js b/js/src/tests/ecma_6/Set/forEach-selfhosted-behavior.js new file mode 100644 index 000000000..37c87feef --- /dev/null +++ b/js/src/tests/ecma_6/Set/forEach-selfhosted-behavior.js @@ -0,0 +1,51 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 987243; +var summary = "Don't use .call(...) in the self-hosted Set.prototype.forEach"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var functionCall = Function.prototype.call; + +function throwSyntaxError() +{ + throw new SyntaxError("Function.prototype.call incorrectly called"); +} + +function lalala() {} + +Function.prototype.call = throwSyntaxError; + +new Set().forEach(throwSyntaxError); +new Set([1]).forEach(lalala); +new Set([{}, 4]).forEach(lalala); + +Function.prototype.call = function() { this.add(3.141592654); }; + +new Set().forEach(throwSyntaxError); +new Set(["foo"]).forEach(lalala); +new Set([undefined, NaN]).forEach(lalala); + +var callCount = 0; +Function.prototype.call = function() { callCount++; }; + +new Set().forEach(throwSyntaxError); +new Set([new Number]).forEach(lalala); +new Set([true, new Boolean(false)]).forEach(lalala); + +assertEq(callCount, 0); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/js/src/tests/ecma_6/Set/getter-name.js b/js/src/tests/ecma_6/Set/getter-name.js new file mode 100644 index 000000000..9a3e84fa4 --- /dev/null +++ b/js/src/tests/ecma_6/Set/getter-name.js @@ -0,0 +1,10 @@ +var BUGNUMBER = 1180290; +var summary = 'Set getters should have get prefix'; + +print(BUGNUMBER + ": " + summary); + +assertEq(Object.getOwnPropertyDescriptor(Set, Symbol.species).get.name, "get [Symbol.species]"); +assertEq(Object.getOwnPropertyDescriptor(Set.prototype, "size").get.name, "get size"); + +if (typeof reportCompare === 'function') + reportCompare(true, true); diff --git a/js/src/tests/ecma_6/Set/shell.js b/js/src/tests/ecma_6/Set/shell.js new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/js/src/tests/ecma_6/Set/shell.js diff --git a/js/src/tests/ecma_6/Set/symbols.js b/js/src/tests/ecma_6/Set/symbols.js new file mode 100644 index 000000000..364b3155c --- /dev/null +++ b/js/src/tests/ecma_6/Set/symbols.js @@ -0,0 +1,27 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ */ + +var s = new Set; + +// Symbols can be stored in Sets. +var sym = Symbol(); +s.add(sym); +assertEq(s.has(sym), true); +assertEq(s.has(Symbol()), false); +assertEq([...s][0], sym); +s.add(sym); +assertEq(s.has(sym), true); +assertEq(s.size, 1); +s.delete(sym); +assertEq(s.has(sym), false); +assertEq(s.size, 0); + +// Symbols returned by Symbol.for() can be in Sets. +var str = "how much wood would a woodchuck chuck if a woodchuck could chuck wood"; +var s2 = "how much wood would a woodchuck chuck if could"; +var arr = [for (word of str.split(" ")) Symbol.for(word)]; +s = new Set(arr); +assertDeepEq([...s], [for (word of s2.split(" ")) Symbol.for(word)]); + +if (typeof reportCompare === "function") + reportCompare(0, 0); |