<!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).")
// 23.3.3.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.")
// 23.3.3.2 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")
// 23.3.3.3 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")
// 23.3.3.4 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")
// 23.3.3.5 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")
// 23.3.3.6 Map.prototype.@@toStringTag
test(function() {
assert_class_string(new WeakMap(), "WeakMap");
assert_class_string(WeakMap.prototype, "WeakMap");
}, "WeakMap.prototype.@@toStringTag")
</script>