This tests the constructor for the StorageEvent DOM class.

On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".


PASS new StorageEvent('eventType').bubbles is false
PASS new StorageEvent('eventType').cancelable is false
PASS new StorageEvent('eventType').key is null
PASS new StorageEvent('eventType').oldValue is null
PASS new StorageEvent('eventType').newValue is null
PASS new StorageEvent('eventType').url is ""
PASS new StorageEvent('eventType').storageArea is null
PASS new StorageEvent('eventType', { bubbles: false }).bubbles is false
PASS new StorageEvent('eventType', { bubbles: true }).bubbles is true
PASS new StorageEvent('eventType', { cancelable: false }).cancelable is false
PASS new StorageEvent('eventType', { cancelable: true }).cancelable is true
PASS new StorageEvent('eventType', { key: 'abcde' }).key is "abcde"
PASS new StorageEvent('eventType', { key: '' }).key is ""
PASS new StorageEvent('eventType', { key: undefined }).key is null
PASS new StorageEvent('eventType', { key: null }).key is null
PASS new StorageEvent('eventType', { key: false }).key is "false"
PASS new StorageEvent('eventType', { key: true }).key is "true"
PASS new StorageEvent('eventType', { key: 12345 }).key is "12345"
PASS new StorageEvent('eventType', { key: 18446744073709551615 }).key is "18446744073709552000"
PASS new StorageEvent('eventType', { key: NaN }).key is "NaN"
PASS new StorageEvent('eventType', { key: [] }).key is ""
PASS new StorageEvent('eventType', { key: [1, 2, 3] }).key is "1,2,3"
PASS new StorageEvent('eventType', { key: {abcde: 12345} }).key is "[object Object]"
PASS new StorageEvent('eventType', { key: {valueOf: function () { return 'abcde'; } } }).key is "[object Object]"
PASS new StorageEvent('eventType', { oldValue: 'abcde' }).oldValue is "abcde"
PASS new StorageEvent('eventType', { oldValue: '' }).oldValue is ""
PASS new StorageEvent('eventType', { oldValue: undefined }).oldValue is null
PASS new StorageEvent('eventType', { oldValue: null }).oldValue is null
PASS new StorageEvent('eventType', { oldValue: false }).oldValue is "false"
PASS new StorageEvent('eventType', { oldValue: true }).oldValue is "true"
PASS new StorageEvent('eventType', { oldValue: 12345 }).oldValue is "12345"
PASS new StorageEvent('eventType', { oldValue: 18446744073709551615 }).oldValue is "18446744073709552000"
PASS new StorageEvent('eventType', { oldValue: NaN }).oldValue is "NaN"
PASS new StorageEvent('eventType', { oldValue: [] }).oldValue is ""
PASS new StorageEvent('eventType', { oldValue: [1, 2, 3] }).oldValue is "1,2,3"
PASS new StorageEvent('eventType', { oldValue: {abcde: 12345} }).oldValue is "[object Object]"
PASS new StorageEvent('eventType', { oldValue: {valueOf: function () { return 'abcde'; } } }).oldValue is "[object Object]"
PASS new StorageEvent('eventType', { newValue: 'abcde' }).newValue is "abcde"
PASS new StorageEvent('eventType', { newValue: '' }).newValue is ""
PASS new StorageEvent('eventType', { newValue: undefined }).newValue is null
PASS new StorageEvent('eventType', { newValue: null }).newValue is null
PASS new StorageEvent('eventType', { newValue: false }).newValue is "false"
PASS new StorageEvent('eventType', { newValue: true }).newValue is "true"
PASS new StorageEvent('eventType', { newValue: 12345 }).newValue is "12345"
PASS new StorageEvent('eventType', { newValue: 18446744073709551615 }).newValue is "18446744073709552000"
PASS new StorageEvent('eventType', { newValue: NaN }).newValue is "NaN"
PASS new StorageEvent('eventType', { newValue: [] }).newValue is ""
PASS new StorageEvent('eventType', { newValue: [1, 2, 3] }).newValue is "1,2,3"
PASS new StorageEvent('eventType', { newValue: {abcde: 12345} }).newValue is "[object Object]"
PASS new StorageEvent('eventType', { newValue: {valueOf: function () { return 'abcde'; } } }).newValue is "[object Object]"
PASS new StorageEvent('eventType', { url: 'abcde' }).url is "abcde"
PASS new StorageEvent('eventType', { url: '' }).url is ""
PASS new StorageEvent('eventType', { url: undefined }).url is ""
PASS new StorageEvent('eventType', { url: null }).url is "null"
PASS new StorageEvent('eventType', { url: false }).url is "false"
PASS new StorageEvent('eventType', { url: true }).url is "true"
PASS new StorageEvent('eventType', { url: 12345 }).url is "12345"
PASS new StorageEvent('eventType', { url: 18446744073709551615 }).url is "18446744073709552000"
PASS new StorageEvent('eventType', { url: NaN }).url is "NaN"
PASS new StorageEvent('eventType', { url: [] }).url is ""
PASS new StorageEvent('eventType', { url: [1, 2, 3] }).url is "1,2,3"
PASS new StorageEvent('eventType', { url: {abcde: 12345} }).url is "[object Object]"
PASS new StorageEvent('eventType', { url: {valueOf: function () { return 'abcde'; } } }).url is "[object Object]"
PASS new StorageEvent('eventType', { storageArea: localStorage }).storageArea is localStorage
PASS new StorageEvent('eventType', { storageArea: sessionStorage }).storageArea is sessionStorage
PASS new StorageEvent('eventType', { storageArea: test_object }) threw exception TypeError: Type error.
PASS new StorageEvent('eventType', { storageArea: window }) threw exception TypeError: Type error.
PASS new StorageEvent('eventType', { storageArea: document }) threw exception TypeError: Type error.
PASS new StorageEvent('eventType', { storageArea: undefined }).storageArea is null
PASS new StorageEvent('eventType', { storageArea: null }).storageArea is null
PASS new StorageEvent('eventType', { storageArea: false }) threw exception TypeError: Type error.
PASS new StorageEvent('eventType', { storageArea: true }) threw exception TypeError: Type error.
PASS new StorageEvent('eventType', { storageArea: '' }) threw exception TypeError: Type error.
PASS new StorageEvent('eventType', { storageArea: 'chocolate' }) threw exception TypeError: Type error.
PASS new StorageEvent('eventType', { storageArea: 12345 }) threw exception TypeError: Type error.
PASS new StorageEvent('eventType', { storageArea: 18446744073709551615 }) threw exception TypeError: Type error.
PASS new StorageEvent('eventType', { storageArea: NaN }) threw exception TypeError: Type error.
PASS new StorageEvent('eventType', { storageArea: {valueOf: function () { return window; } } }) threw exception TypeError: Type error.
PASS new StorageEvent('eventType', { get storageArea() { return 123; } }).storageArea threw exception TypeError: Type error.
PASS new StorageEvent('eventType', { get storageArea() { throw 'StorageEvent Error'; } }) threw exception StorageEvent Error.
PASS new StorageEvent('eventType', { bubbles: true, cancelable: false, key: 'abc', oldValue: 'def', newValue: 'ghi', url: 'jkl', storageArea: localStorage }).bubbles is true
PASS new StorageEvent('eventType', { bubbles: false, cancelable: true, key: 'abc', oldValue: 'def', newValue: 'ghi', url: 'jkl', storageArea: localStorage }).cancelable is true
PASS new StorageEvent('eventType', { bubbles: true, cancelable: true, key: 'abc', oldValue: 'def', newValue: 'ghi', url: 'jkl', storageArea: localStorage }).key is "abc"
PASS new StorageEvent('eventType', { bubbles: true, cancelable: true, key: 'abc', oldValue: 'def', newValue: 'ghi', url: 'jkl', storageArea: localStorage }).oldValue is "def"
PASS new StorageEvent('eventType', { bubbles: true, cancelable: true, key: 'abc', oldValue: 'def', newValue: 'ghi', url: 'jkl', storageArea: localStorage }).newValue is "ghi"
PASS new StorageEvent('eventType', { bubbles: true, cancelable: true, key: 'abc', oldValue: 'def', newValue: 'ghi', url: 'jkl', storageArea: localStorage }).url is "jkl"
PASS new StorageEvent('eventType', { bubbles: true, cancelable: true, key: 'abc', oldValue: 'def', newValue: 'ghi', url: 'jkl', storageArea: localStorage }).storageArea is localStorage
PASS successfullyParsed is true

TEST COMPLETE

