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
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,32 +1,81 @@ | ||
<!DOCTYPE HTML> | ||
<html> | ||
<head> | ||
<title>WebStorage Test: StorageEvent - init value</title> | ||
<title>WebStorage Test: StorageEvent - constructor</title> | ||
<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> |
This file was deleted.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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'); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @foolip I'm implementing There was a problem hiding this comment. Choose a reason for hiding this commentThe 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> |
This file was deleted.
This file was deleted.
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've filed https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/19216299/ with this test case: http://software.hixie.ch/utilities/js/live-dom-viewer/saved/6254