| <!doctype html> |
| <title>WeakMap.prototype</title> |
| <link rel=author href=mailto:Ms2ger@gmail.com title=Ms2ger> |
| <link rel=help href=https://people.mozilla.org/~jorendorff/es6-draft.html#sec-properties-of-the-weakmap-prototype-object> |
| <link rel=help href=https://people.mozilla.org/~jorendorff/es6-draft.html#sec-functioninitialize> |
| <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, true); |
| 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 Map.prototype.@@toStringTag |
| test(function() { |
| assert_class_string(new WeakMap(), "WeakMap"); |
| assert_class_string(WeakMap.prototype, "WeakMap"); |
| }, "WeakMap.prototype.@@toStringTag") |
| </script> |