mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-11-12 22:28:59 +02:00
Automatic update from web-platform-tests Add some tests for named properties on Storage. -- fixup! Add some tests for named properties on Storage. -- Add some tests for named properties on Storage. (#15014) -- wpt-commits: 07cf5c1e4289b504c72b86cbe487d35fa5d2395c, 66e29f00f5ac4b42175342c15927b9efaf4dc19f, 70cc8f087f69a681dfe58aa75dbdab466419b3dd wpt-pr: 15014
102 lines
4.2 KiB
JavaScript
102 lines
4.2 KiB
JavaScript
["localStorage", "sessionStorage"].forEach(function(name) {
|
|
[9, "x"].forEach(function(key) {
|
|
test(function() {
|
|
var value = "value";
|
|
|
|
var storage = window[name];
|
|
storage.clear();
|
|
|
|
assert_equals(storage[key], undefined);
|
|
assert_equals(storage.getItem(key), null);
|
|
assert_equals(storage[key] = value, value);
|
|
assert_equals(storage[key], "value");
|
|
assert_equals(storage.getItem(key), "value");
|
|
}, "Setting property for key " + key + " on " + name);
|
|
|
|
test(function() {
|
|
var value = {
|
|
toString: function() { return "value"; }
|
|
};
|
|
|
|
var storage = window[name];
|
|
storage.clear();
|
|
|
|
assert_equals(storage[key], undefined);
|
|
assert_equals(storage.getItem(key), null);
|
|
assert_equals(storage[key] = value, value);
|
|
assert_equals(storage[key], "value");
|
|
assert_equals(storage.getItem(key), "value");
|
|
}, "Setting property with toString for key " + key + " on " + name);
|
|
|
|
test(function() {
|
|
Storage.prototype[key] = "proto";
|
|
this.add_cleanup(function() { delete Storage.prototype[key]; });
|
|
|
|
var value = "value";
|
|
|
|
var storage = window[name];
|
|
storage.clear();
|
|
|
|
assert_equals(storage[key], "proto");
|
|
assert_equals(storage.getItem(key), null);
|
|
assert_equals(storage[key] = value, value);
|
|
// Hidden because no [OverrideBuiltins].
|
|
assert_equals(storage[key], "proto");
|
|
assert_equals(Object.getOwnPropertyDescriptor(storage, key), undefined);
|
|
assert_equals(storage.getItem(key), "value");
|
|
}, "Setting property for key " + key + " on " + name + " with data property on prototype");
|
|
|
|
test(function() {
|
|
Storage.prototype[key] = "proto";
|
|
this.add_cleanup(function() { delete Storage.prototype[key]; });
|
|
|
|
var value = "value";
|
|
|
|
var storage = window[name];
|
|
storage.clear();
|
|
|
|
storage.setItem(key, "existing");
|
|
|
|
// Hidden because no [OverrideBuiltins].
|
|
assert_equals(storage[key], "proto");
|
|
assert_equals(Object.getOwnPropertyDescriptor(storage, key), undefined);
|
|
assert_equals(storage.getItem(key), "existing");
|
|
assert_equals(storage[key] = value, value);
|
|
assert_equals(storage[key], "proto");
|
|
assert_equals(Object.getOwnPropertyDescriptor(storage, key), undefined);
|
|
assert_equals(storage.getItem(key), "value");
|
|
}, "Setting property for key " + key + " on " + name + " with data property on prototype and existing item");
|
|
|
|
test(function() {
|
|
var calledSetter = [];
|
|
Object.defineProperty(Storage.prototype, key, {
|
|
"get": function() { return "proto getter"; },
|
|
"set": function(v) { calledSetter.push(v); },
|
|
configurable: true,
|
|
});
|
|
this.add_cleanup(function() { delete Storage.prototype[key]; });
|
|
|
|
var value = "value";
|
|
|
|
var storage = window[name];
|
|
storage.clear();
|
|
|
|
assert_equals(storage[key], "proto getter");
|
|
assert_equals(storage.getItem(key), null);
|
|
assert_equals(storage[key] = value, value);
|
|
// Property is hidden because no [OverrideBuiltins].
|
|
if (typeof key === "number") {
|
|
// P is an array index: call through to OrdinarySetWithOwnDescriptor()
|
|
assert_array_equals(calledSetter, [value]);
|
|
assert_equals(storage[key], "proto getter");
|
|
assert_equals(storage.getItem(key), null);
|
|
} else {
|
|
// P is not an array index: early return in [[Set]] step 2.
|
|
// https://github.com/heycam/webidl/issues/630
|
|
assert_equals(storage[key], "proto getter");
|
|
assert_equals(Object.getOwnPropertyDescriptor(storage, key), undefined);
|
|
assert_equals(storage.getItem(key), "value");
|
|
}
|
|
}, "Setting property for key " + key + " on " + name + " with accessor property on prototype");
|
|
});
|
|
});
|