Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Test StorageEvent constructor and initStorageEvent() #13368

Merged
merged 2 commits into from Oct 5, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
87 changes: 68 additions & 19 deletions webstorage/event_constructor.html
@@ -1,32 +1,81 @@
<!DOCTYPE HTML>
<html>
<head>
<title>WebStorage Test: StorageEvent - init value</title>
<title>WebStorage Test: StorageEvent - constructor</title>
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've run these tests manually. They pass 5/5 in Chrome, Firefox in Safari. In Edge on real hardware and on BrowserStack however, the test seems to crash Edge, saying "This page is having a problem loading". @thejohnjansen FYI, there's probably a real bug here.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've narrowed it down to new StorageEvent('storage', { url: null }). I'll file a bug.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
<body>
<h1>event_session_Constructor</h1>
<div id="log"></div>
<script>
test(function() {
var t = async_test("storageeventinit test");
function onStorageEvent(event) {
t.step(function() {
assert_equals(event.type, 'storage');
assert_equals(event.key, null);
assert_equals(event.oldValue, null);
assert_equals(event.newValue, null);
assert_equals(event.url, '');
assert_equals(event.storageArea, null);
});
t.done();
}
assert_throws(new TypeError, () => new StorageEvent());
// should be redundant, but .length can be wrong with custom bindings
assert_equals(StorageEvent.length, 1, 'StorageEvent.length');
}, 'constructor with no arguments');

window.addEventListener('storage', onStorageEvent, false);
var event = new StorageEvent('storage');
window.dispatchEvent(event);
}, "The initial values of storage event properties.");
test(function() {
var event = new StorageEvent('type');
assert_equals(event.type, 'type', 'type');
assert_equals(event.key, null, 'key');
assert_equals(event.oldValue, null, 'oldValue');
assert_equals(event.newValue, null, 'newValue');
assert_equals(event.url, '', 'url');
assert_equals(event.storageArea, null, 'storageArea');
}, 'constructor with just type argument');

test(function() {
assert_not_equals(localStorage, null, 'localStorage'); // precondition

var event = new StorageEvent('storage', {
bubbles: true,
cancelable: true,
key: 'key',
oldValue: 'oldValue',
newValue: 'newValue',
url: 'url', // not an absolute URL to ensure it isn't resolved
storageArea: localStorage
});
assert_equals(event.type, 'storage', 'type');
assert_equals(event.bubbles, true, 'bubbles');
assert_equals(event.cancelable, true, 'cancelable');
assert_equals(event.key, 'key', 'key');
assert_equals(event.oldValue, 'oldValue', 'oldValue');
assert_equals(event.newValue, 'newValue', 'newValue');
assert_equals(event.url, 'url', 'url');
assert_equals(event.storageArea, localStorage, 'storageArea');
}, 'constructor with sensible type argument and members');

test(function() {
var event = new StorageEvent(null, {
key: null,
oldValue: null,
newValue: null,
url: null,
storageArea: null
});
assert_equals(event.type, 'null', 'type');
assert_equals(event.key, null, 'key');
assert_equals(event.oldValue, null, 'oldValue');
assert_equals(event.newValue, null, 'newValue');
assert_equals(event.url, 'null', 'url');
assert_equals(event.storageArea, null, 'storageArea');
}, 'constructor with null type argument and members');

test(function() {
var event = new StorageEvent(undefined, {
key: undefined,
oldValue: undefined,
newValue: undefined,
url: undefined,
storageArea: undefined
});
assert_equals(event.type, 'undefined', 'type');
assert_equals(event.key, null, 'key');
assert_equals(event.oldValue, null, 'oldValue');
assert_equals(event.newValue, null, 'newValue');
assert_equals(event.url, '', 'url'); // not 'undefined'!
assert_equals(event.storageArea, null, 'storageArea');
}, 'constructor with undefined type argument and members');
</script>
</body>
</html>
34 changes: 0 additions & 34 deletions webstorage/event_constructor_eventinit.html

This file was deleted.

72 changes: 72 additions & 0 deletions webstorage/event_initstorageevent.html
@@ -0,0 +1,72 @@
<!DOCTYPE HTML>
<html>
<head>
<title>WebStorage Test: StorageEvent - initStorageEvent</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
<body>
<script>
test(() => {
const event = new StorageEvent('storage');
assert_throws(new TypeError, () => event.initStorageEvent());
// should be redundant, but .length can be wrong with custom bindings
assert_equals(event.initStorageEvent.length, 1, 'event.initStorageEvent.length');
}, 'initStorageEvent with 0 arguments');

test(() => {
const event = new StorageEvent('storage');
event.initStorageEvent('type');
assert_equals(event.type, 'type', 'event.type');
assert_equals(event.bubbles, false, 'event.bubbles');
assert_equals(event.cancelable, false, 'event.cancelable');
assert_equals(event.key, null, 'event.key');
assert_equals(event.oldValue, null, 'event.oldValue');
assert_equals(event.newValue, null, 'event.newValue');
assert_equals(event.url, '', 'event.url');
assert_equals(event.storageArea, null, 'event.storageArea');
}, 'initStorageEvent with 1 argument');

test(() => {
assert_not_equals(localStorage, null, 'localStorage'); // precondition

const event = new StorageEvent('storage');
event.initStorageEvent('type', true, true, 'key', 'oldValue', 'newValue', 'url', localStorage);
assert_equals(event.type, 'type', 'event.type');
assert_equals(event.bubbles, true, 'event.bubbles');
assert_equals(event.cancelable, true, 'event.cancelable');
assert_equals(event.key, 'key', 'event.key');
assert_equals(event.oldValue, 'oldValue', 'event.oldValue');
assert_equals(event.newValue, 'newValue', 'event.newValue');
assert_equals(event.url, 'url', 'event.url');
assert_equals(event.storageArea, localStorage, 'event.storageArea');
}, 'initStorageEvent with 8 sensible arguments');

test(() => {
const event = new StorageEvent('storage');
event.initStorageEvent(null, null, null, null, null, null, null, null);
assert_equals(event.type, 'null', 'event.type');
assert_equals(event.bubbles, false, 'event.bubbles');
assert_equals(event.cancelable, false, 'event.cancelable');
assert_equals(event.key, null, 'event.key');
assert_equals(event.oldValue, null, 'event.oldValue');
assert_equals(event.newValue, null, 'event.newValue');
assert_equals(event.url, 'null', 'event.url');
assert_equals(event.storageArea, null, 'event.storageArea');
}, 'initStorageEvent with 8 null arguments');

test(() => {
const event = new StorageEvent('storage');
event.initStorageEvent(undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined);
assert_equals(event.type, 'undefined', 'event.type');
assert_equals(event.bubbles, false, 'event.bubbles');
assert_equals(event.cancelable, false, 'event.cancelable');
assert_equals(event.key, null, 'event.key');
assert_equals(event.oldValue, null, 'event.oldValue');
assert_equals(event.newValue, null, 'event.newValue');
assert_equals(event.url, 'undefined', 'event.url');
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@foolip I'm implementing initStorageEvent() in jsdom and got an error on this line. Should this be the empty string rather than 'undefined', given the default value for url?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, this was a mistake. Only the non-optional argument (type) will be the string 'undefined'. Sending fix.

assert_equals(event.storageArea, null, 'event.storageArea');
}, 'initStorageEvent with 8 undefined arguments');
</script>
</body>
</html>
37 changes: 0 additions & 37 deletions webstorage/event_local_storageeventinit.html

This file was deleted.

36 changes: 0 additions & 36 deletions webstorage/event_session_storageeventinit.html

This file was deleted.

3 changes: 0 additions & 3 deletions webstorage/missing_arguments.html
Expand Up @@ -6,8 +6,6 @@
<script src="/resources/testharnessreport.js"></script>
</head>
<body>
<h1>missing_arguments</h1>
<div id="log"></div>
<script>
var tests = [
function() { localStorage.key(); },
Expand All @@ -20,7 +18,6 @@ <h1>missing_arguments</h1>
function() { sessionStorage.setItem(); },
function() { sessionStorage.setItem("a"); },
function() { sessionStorage.removeItem(); },
function() { new StorageEvent(); }
];
tests.forEach(function(fun) {
test(function() {
Expand Down