summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/collections/Set-forEach.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/jit-test/tests/collections/Set-forEach.js')
-rw-r--r--js/src/jit-test/tests/collections/Set-forEach.js49
1 files changed, 49 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/collections/Set-forEach.js b/js/src/jit-test/tests/collections/Set-forEach.js
new file mode 100644
index 0000000000..35ba036bcf
--- /dev/null
+++ b/js/src/jit-test/tests/collections/Set-forEach.js
@@ -0,0 +1,49 @@
+/* test Set.prototype.forEach */
+
+load(libdir + 'asserts.js');
+load(libdir + 'iteration.js');
+
+// testing success conditions of Set.prototype.forEach
+
+var testSet = new Set();
+
+function callback(value, key, set) {
+ assertEq(value, key);
+ testSet.add(value);
+ assertEq(set.has(key), true);
+}
+
+var initialSet = new Set(['a', 1, undefined]);
+initialSet.forEach(callback);
+
+// test that both the Sets are equal and are in same order
+var iterator = initialSet[Symbol.iterator]();
+var count = 0;
+for (var v of testSet) {
+ assertEq(initialSet.has(v), true);
+ assertIteratorNext(iterator, v);
+ count++;
+}
+
+//check both the Sets we have are equal in size
+assertEq(initialSet.size, testSet.size);
+assertEq(initialSet.size, count);
+
+var x = { abc: 'test'};
+function callback2(value, key, set) {
+ assertEq(x, this);
+}
+initialSet = new Set(['a']);
+initialSet.forEach(callback2, x);
+
+// testing failure conditions of Set.prototype.forEach
+
+var m = new Map([['a', 1], ['b', 2.3], ['c', undefined]]);
+assertThrowsInstanceOf(function() {
+ Set.prototype.forEach.call(m, callback);
+}, TypeError, "Set.prototype.forEach should raise TypeError if not a used on a Set");
+
+var fn = 2;
+assertThrowsInstanceOf(function() {
+ initialSet.forEach(fn);
+}, TypeError, "Set.prototype.forEach should raise TypeError if callback is not a function");