Add some WeakMap tests. default tip master
authorMs2ger <ms2ger@gmail.com>
Wed, 28 Nov 2012 11:27:30 +0100
changeset 11 9f25b2278c3a
parent 10 e0a9564ea062
Add some WeakMap tests.
builtins/MANIFEST
builtins/WeakMap.prototype-properties.html
--- a/builtins/MANIFEST	Wed Jul 04 21:10:28 2012 +0200
+++ b/builtins/MANIFEST	Wed Nov 28 11:27:30 2012 +0100
@@ -4,3 +4,4 @@
 support Math.maxmin.js
 Math.min.html
 Object.prototype.hasOwnProperty-order.html
+WeakMap.prototype-properties.html
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/builtins/WeakMap.prototype-properties.html	Wed Nov 28 11:27:30 2012 +0100
@@ -0,0 +1,121 @@
+<!doctype html>
+<title>WeakMap.prototype</title>
+<link rel=author href=mailto:[email protected] title=Ms2ger>
+<link rel=help href=http://people.mozilla.org/~jorendorff/es6-draft.html#sec-15.15.5>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<div id=log></div>
+<script>
+function assert_propdesc(obj, prop, Writable, Enumerable, Configurable) {
+  var propdesc = Object.getOwnPropertyDescriptor(obj, prop);
+  assert_equals(typeof propdesc, "object");
+  assert_equals(propdesc.writable, Writable, "[[Writable]]");
+  assert_equals(propdesc.enumerable, Enumerable, "[[Enumerable]]");
+  assert_equals(propdesc.configurable, Configurable, "[[Configurable]]");
+}
+
+function test_length(fun, expected) {
+  test(function() {
+    assert_propdesc(WeakMap.prototype[fun], "length", false, false, false);
+    assert_equals(WeakMap.prototype[fun].length, expected);
+  }, "WeakMap.prototype." + fun + ".length")
+}
+
+function test_thisval(fun, args) {
+  // Step 1-2
+  test(function() {
+    assert_throws(new TypeError(), function() {
+      WeakMap.prototype[fun].apply(null, args);
+    });
+    assert_throws(new TypeError(), function() {
+      WeakMap.prototype[fun].apply(undefined, args);
+    });
+  }, "WeakMap.prototype." + fun + ": ToObject on this")
+  // Step 3
+  test(function() {
+    assert_throws(new TypeError(), function() {
+      WeakMap.prototype[fun].apply({}, args);
+    });
+  }, "WeakMap.prototype." + fun + ": this has no [[WeakMapData]] internal property")
+}
+
+// In every case, the length property of a built-in Function object described
+// in this clause has the attributes { [[Writable]]: false, [[Enumerable]]:
+// false, [[Configurable]]: false }. Every other property described in this
+// clause has the attributes { [[Writable]]: true, [[Enumerable]]: false,
+// [[Configurable]]: true } unless otherwise specified.
+
+test(function() {
+  assert_equals(Object.getPrototypeOf(WeakMap.prototype), Object.prototype);
+}, "The value of the [[Prototype]] internal property of the WeakMap prototype object is the standard built-in Object prototype object (15.2.4).")
+
+// 15.15.5.1 WeakMap.prototype.constructor
+test(function() {
+  assert_equals(WeakMap.prototype.constructor, WeakMap);
+  assert_propdesc(WeakMap.prototype, "constructor", true, false, true);
+}, "The initial value of WeakMap.prototype.constructor is the built-in WeakMap constructor.")
+
+// 15.15.5.2 WeakMap.prototype.clear ()
+test(function() {
+  assert_propdesc(WeakMap.prototype, "clear", true, false, true);
+  test_length("clear", 0);
+  // Step 1-3
+  test_thisval("clear", null);
+  // Step 4-5
+  test(function() {
+    var wm = new WeakMap();
+    var key = {};
+    wm.set(key, "fail");
+    assert_true(wm.has(key));
+    var res = wm.clear();
+    assert_equals(res, undefined);
+    assert_false(wm.has(key));
+  }, "WeakMap.prototype.clear: basic functionality");
+}, "WeakMap.prototype.clear")
+
+// 15.15.5.3 WeakMap.prototype.delete ( key )
+test(function() {
+  assert_propdesc(WeakMap.prototype, "delete", true, false, true);
+  test_length("delete", 1);
+  // Step 1-3
+  test_thisval("delete", [{}]);
+}, "WeakMap.prototype.delete")
+
+// 15.15.5.4 WeakMap.prototype.get ( key )
+test(function() {
+  assert_propdesc(WeakMap.prototype, "get", true, false, true);
+  test_length("get", 1);
+  // Step 1-3
+  test_thisval("get", [{}]);
+
+  // Step 8
+  test(function() {
+    var wm = new WeakMap();
+    var key = {};
+    var res = wm.get({}, {});
+    assert_equals(res, undefined);
+  }, "WeakMap.prototype.get: return undefined");
+}, "WeakMap.prototype.get")
+
+// 15.14.5.5 Map.prototype.has ( key )
+test(function() {
+  assert_propdesc(WeakMap.prototype, "has", true, false, true);
+  test_length("has", 1);
+  // Step 1-3
+  test_thisval("has", [{}]);
+}, "WeakMap.prototype.has")
+
+// 15.14.5.6 Map.prototype.set ( key , value )
+test(function() {
+  assert_propdesc(WeakMap.prototype, "set", true, false, true);
+  test_length("set", 2);
+  // Step 1-3
+  test_thisval("set", [{}, {}]);
+}, "WeakMap.prototype.set")
+
+// 15.15.5.7 [email protected]@toStringTag
+test(function() {
+  assert_class_string(new WeakMap(), "WeakMap");
+  assert_class_string(WeakMap.prototype, "WeakMap");
+}, "[email protected]@toStringTag")
+</script>