mirror of
https://github.com/LadybirdBrowser/ladybird
synced 2026-04-26 17:55:07 +02:00
Tests/LibWeb: Import some more webstorage WPT tests
Which were helpful in determining property behaviour for the Storage object.
This commit is contained in:
committed by
Shannon Booth
parent
e859402ea1
commit
a0d4344d4e
Notes:
github-actions[bot]
2026-02-16 17:50:33 +00:00
Author: https://github.com/shannonbooth Commit: https://github.com/LadybirdBrowser/ladybird/commit/a0d4344d4e4 Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/7967
103
Tests/LibWeb/Text/input/wpt-import/webstorage/set.window.js
Normal file
103
Tests/LibWeb/Text/input/wpt-import/webstorage/set.window.js
Normal file
@@ -0,0 +1,103 @@
|
||||
// NOTE: localStorage is disabled in import as this races with other tests.
|
||||
[/* "localStorage", */ "sessionStorage"].forEach(function(name) {
|
||||
[9, "x"].forEach(function(key) {
|
||||
test(function() {
|
||||
var expected = "value for " + this.name;
|
||||
var value = expected;
|
||||
|
||||
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], expected);
|
||||
assert_equals(storage.getItem(key), expected);
|
||||
}, "Setting property for key " + key + " on " + name);
|
||||
|
||||
test(function() {
|
||||
var expected = "value for " + this.name;
|
||||
var value = {
|
||||
toString: function() { return expected; }
|
||||
};
|
||||
|
||||
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], expected);
|
||||
assert_equals(storage.getItem(key), expected);
|
||||
}, "Setting property with toString for key " + key + " on " + name);
|
||||
|
||||
test(function() {
|
||||
var proto = "proto for " + this.name;
|
||||
Storage.prototype[key] = proto;
|
||||
this.add_cleanup(function() { delete Storage.prototype[key]; });
|
||||
|
||||
var value = "value for " + this.name;
|
||||
|
||||
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 [LegacyOverrideBuiltIns].
|
||||
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() {
|
||||
var proto = "proto for " + this.name;
|
||||
Storage.prototype[key] = proto;
|
||||
this.add_cleanup(function() { delete Storage.prototype[key]; });
|
||||
|
||||
var value = "value for " + this.name;
|
||||
var existing = "existing for " + this.name;
|
||||
|
||||
var storage = window[name];
|
||||
storage.clear();
|
||||
|
||||
storage.setItem(key, existing);
|
||||
|
||||
// Hidden because no [LegacyOverrideBuiltIns].
|
||||
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 storage = window[name];
|
||||
storage.clear();
|
||||
|
||||
var proto = "proto getter for " + this.name;
|
||||
Object.defineProperty(Storage.prototype, key, {
|
||||
"get": function() { return proto; },
|
||||
"set": this.unreached_func("Should not call [[Set]] on prototype"),
|
||||
"configurable": true,
|
||||
});
|
||||
this.add_cleanup(function() {
|
||||
delete Storage.prototype[key];
|
||||
delete storage[key];
|
||||
assert_false(key in storage);
|
||||
});
|
||||
|
||||
var value = "value for " + this.name;
|
||||
|
||||
assert_equals(storage[key], proto);
|
||||
assert_equals(storage.getItem(key), null);
|
||||
assert_equals(storage[key] = value, value);
|
||||
// Property is hidden because no [LegacyOverrideBuiltIns].
|
||||
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 accessor property on prototype");
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user