Update web-platform-tests to revision 0d318188757a9c996e20b82db201fd04de5aa255

This commit is contained in:
James Graham 2015-03-27 09:15:38 +00:00
parent b2a5225831
commit 1a81b18b9f
12321 changed files with 544385 additions and 6 deletions

View file

@ -0,0 +1,10 @@
This directory contains the Web Storage test suite.
The spec's Implementation Report contains a list of each test file in the test suite and the results of running the test file on several browsers <http://www.w3.org/wiki/Webapps/Interop/WebStorage>.
To run this test suite within a browser, go to: <http://w3c-test.org/webstorage/>.
A W3C Recommendation of Web Storage was published on 30 July 2013 <http://www.w3.org/TR/2013/REC-webstorage-20130730/>.
Latest Editor's Draft of Web Storage is: <http://dev.w3.org/html5/webstorage/>.

View file

@ -0,0 +1,24 @@
<!DOCTYPE HTML>
<mete charset=utf-8>
<title>Builtins</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="log"></div>
<script>
["localStorage", "sessionStorage"].forEach(function(name) {
test(function() {
var storage = window[name];
storage.clear();
assert_equals(storage.length, 0, "storage.length");
var builtins = ["key", "getItem", "setItem", "removeItem", "clear"];
var origBuiltins = builtins.map(function(b) { return Storage.prototype[b]; });
assert_array_equals(builtins.map(function(b) { return storage[b]; }), origBuiltins, "a");
builtins.forEach(function(b) { storage[b] = b; });
assert_array_equals(builtins.map(function(b) { return storage[b]; }), origBuiltins, "b");
assert_array_equals(builtins.map(function(b) { return storage.getItem(b); }), builtins, "c");
assert_equals(storage.length, builtins.length, "storage.length");
}, "Builtins in " + name);
});
</script>

View file

@ -0,0 +1,24 @@
<!DOCTYPE HTML>
<mete charset=utf-8>
<title>Clear</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="log"></div>
<script>
["localStorage", "sessionStorage"].forEach(function(name) {
test(function() {
var storage = window[name];
storage.clear();
storage.setItem("name", "user1");
assert_equals(storage.getItem("name"), "user1");
assert_equals(storage.name, "user1");
assert_equals(storage.length, 1);
storage.clear();
assert_equals(storage.getItem("name"), null, "storage.getItem('name')");
assert_equals(storage.name, undefined, "storage.name");
assert_equals(storage.length, 0, "storage.length");
}, "Clear in " + name);
});
</script>

View file

@ -0,0 +1,32 @@
<!DOCTYPE HTML>
<html>
<head>
<title>Web Storage</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();
}
window.addEventListener('storage', onStorageEvent, false);
var event = new StorageEvent('storage');
window.dispatchEvent(event);
});
</script>
</body>
</html>

View file

@ -0,0 +1,37 @@
<!DOCTYPE HTML>
<html>
<head>
<title>Web Storage</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
<body>
<h1>event_Constructor</h1>
<div id="log"></div>
<script>
test(function() {
var t = async_test("StorageEvent constructor and nulls");
function onStorageEvent(event) {
t.step(function() {
assert_equals(event.type, 'storage', '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');
});
t.done();
}
window.addEventListener('storage', onStorageEvent, false);
var event = new StorageEvent('storage', {
key: null,
oldValue: null,
newValue: null,
url: null
});
window.dispatchEvent(event);
});
</script>
</body>
</html>

View file

@ -0,0 +1,42 @@
<!DOCTYPE HTML>
<html>
<head>
<title>Web Storage</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
function fail(msg) {
t.step(function() {
assert_unreached(msg);
});
t.done();
}
</script>
</head>
<body>
<h1>event_local_key</h1>
<div id="log"></div>
<script>
test(function() {
localStorage.clear();
var t = async_test("key property test of local event");
var expected = ['name', null]
function onStorageEvent(event) {
t.step(function() {
assert_equals(event.key, expected.shift());
});
if (!expected.length) {
t.done();
}
}
window.addEventListener('storage', onStorageEvent, false);
var el = document.createElement("iframe");
el.setAttribute('id', 'ifrm');
el.setAttribute('src', 'iframe/local_set_item_clear_iframe.html');
document.body.appendChild(el);
});
</script>
</body>
</html>

View file

@ -0,0 +1,42 @@
<!DOCTYPE HTML>
<html>
<head>
<title>Web Storage</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
function fail(msg) {
t.step(function() {
assert_unreached(msg);
});
t.done();
}
</script>
</head>
<body>
<h1>event_local_newValue</h1>
<div id="log"></div>
<script>
test(function() {
localStorage.clear();
var t = async_test("newValue property test of local event");
var expected = ['user1', 'user2', null]
function onStorageEvent(event) {
t.step(function() {
assert_equals(event.newValue, expected.shift());
});
if (!expected.length) {
t.done();
}
}
window.addEventListener('storage', onStorageEvent, false);
var el = document.createElement("iframe");
el.setAttribute('id', 'ifrm');
el.setAttribute('src', 'iframe/local_change_item_iframe.html');
document.body.appendChild(el);
});
</script>
</body>
</html>

View file

@ -0,0 +1,42 @@
<!DOCTYPE HTML>
<html>
<head>
<title>Web Storage</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
function fail(msg) {
t.step(function() {
assert_unreached(msg);
});
t.done();
}
</script>
</head>
<body>
<h1>event_local_oldValue</h1>
<div id="log"></div>
<script>
test(function() {
localStorage.clear();
var t = async_test("oldValue property test of local event");
var expected = [null, 'user1', null]
function onStorageEvent(event) {
t.step(function() {
assert_equals(event.oldValue, expected.shift());
});
if (!expected.length) {
t.done();
}
}
window.addEventListener('storage', onStorageEvent, false);
var el = document.createElement("iframe");
el.setAttribute('id', 'ifrm');
el.setAttribute('src', 'iframe/local_change_item_iframe.html');
document.body.appendChild(el);
});
</script>
</body>
</html>

View file

@ -0,0 +1,43 @@
<!DOCTYPE HTML>
<html>
<head>
<title>Web Storage</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
function fail(msg) {
t.step(function() {
assert_unreached(msg);
});
t.done();
}
</script>
</head>
<body>
<h1>event_local_storageArea</h1>
<div id="log"></div>
<script>
test(function() {
localStorage.clear();
var t = async_test("storageArea property test of local event");
function onStorageEvent(event) {
t.step(function() {
assert_equals(event.storageArea.length, 1);
var key = event.storageArea.key(0);
var value = event.storageArea.getItem(key);
assert_equals(key, "name");
assert_equals(value, "user1");
});
t.done();
}
window.addEventListener('storage', onStorageEvent, false);
var el = document.createElement("iframe");
el.setAttribute('id', 'ifrm');
el.setAttribute('src', 'iframe/local_set_item_iframe.html');
document.body.appendChild(el);
});
</script>
</body>
</html>

View file

@ -0,0 +1,39 @@
<!DOCTYPE HTML>
<html>
<head>
<title>Web Storage</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
<body>
<h1>event_local_StorageEventInit</h1>
<div id="log"></div>
<script>
test(function() {
var t = async_test("storageeventinit test");
function onStorageEvent(event) {
t.step(function() {
assert_equals(event.key, 'key');
assert_equals(event.oldValue, 'oldValue');
assert_equals(event.newValue, 'newValue');
assert_equals(event.url, window.location.href);
assert_equals(event.storageArea, window.localStorage);
});
t.done();
}
window.addEventListener('storage', onStorageEvent, false);
var event = new StorageEvent('storage', {
key: 'key',
oldValue: 'oldValue',
newValue: 'newValue',
url: window.location.href,
storageArea: window.localStorage
});
window.dispatchEvent(event);
});
</script>
</body>
</html>

View file

@ -0,0 +1,47 @@
<!DOCTYPE HTML>
<html>
<head>
<title>Web Storage</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
function fail(msg) {
t.step(function() {
assert_unreached(msg);
});
t.done();
}
</script>
</head>
<body>
<h1>event_local_url</h1>
<div id="log"></div>
<script>
test(function() {
localStorage.clear();
var t = async_test("url property test of local event");
function onStorageEvent(event) {
t.step(function() {
var url = window.location.href;
var pos = url.lastIndexOf("/");
if (pos != -1) {
url = url.substr(0, pos + 1);
url = url + "iframe/local_set_item_iframe.html";
}
assert_equals(event.url, url);
});
t.done();
}
window.addEventListener('storage', onStorageEvent, false);
var el = document.createElement("iframe");
el.setAttribute('id', 'ifrm');
el.setAttribute('src', 'iframe/local_set_item_iframe.html');
document.body.appendChild(el);
});
</script>
</body>
</html>

View file

@ -0,0 +1,42 @@
<!DOCTYPE HTML>
<html>
<head>
<title>Web Storage</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
function fail(msg) {
t.step(function() {
assert_unreached(msg);
});
t.done();
}
</script>
</head>
<body>
<h1>event_session_key</h1>
<div id="log"></div>
<script>
test(function() {
sessionStorage.clear();
var t = async_test("key property test of session event");
var expected = ['name', null]
function onStorageEvent(event) {
t.step(function() {
assert_equals(event.key, expected.shift());
});
if (!expected.length) {
t.done();
}
}
window.addEventListener('storage', onStorageEvent, false);
var el = document.createElement("iframe");
el.setAttribute('id', 'ifrm');
el.setAttribute('src', 'iframe/session_set_item_clear_iframe.html');
document.body.appendChild(el);
});
</script>
</body>
</html>

View file

@ -0,0 +1,42 @@
<!DOCTYPE HTML>
<html>
<head>
<title>Web Storage</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
function fail(msg) {
t.step(function() {
assert_unreached(msg);
});
t.done();
}
</script>
</head>
<body>
<h1>event_session_newValue</h1>
<div id="log"></div>
<script>
test(function() {
sessionStorage.clear();
var t = async_test("newvalue property test of session event");
var expected = ['user1', 'user2', null]
function onStorageEvent(event) {
t.step(function() {
assert_equals(event.newValue, expected.shift());
});
if (!expected.length) {
t.done();
}
}
window.addEventListener('storage', onStorageEvent, false);
var el = document.createElement("iframe");
el.setAttribute('id', 'ifrm');
el.setAttribute('src', 'iframe/session_change_item_iframe.html');
document.body.appendChild(el);
});
</script>
</body>
</html>

View file

@ -0,0 +1,42 @@
<!DOCTYPE HTML>
<html>
<head>
<title>Web Storage</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
function fail(msg) {
t.step(function() {
assert_unreached(msg);
});
t.done();
}
</script>
</head>
<body>
<h1>event_session_oldValue</h1>
<div id="log"></div>
<script>
test(function() {
sessionStorage.clear();
var t = async_test("oldvalue property test of session event");
var expected = [null, 'user1', null]
function onStorageEvent(event) {
t.step(function() {
assert_equals(event.oldValue, expected.shift());
});
if (!expected.length) {
t.done();
}
}
window.addEventListener('storage', onStorageEvent, false);
var el = document.createElement("iframe");
el.setAttribute('id', 'ifrm');
el.setAttribute('src', 'iframe/session_change_item_iframe.html');
document.body.appendChild(el);
});
</script>
</body>
</html>

View file

@ -0,0 +1,43 @@
<!DOCTYPE HTML>
<html>
<head>
<title>Web Storage</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
function fail(msg) {
t.step(function() {
assert_unreached(msg);
});
t.done();
}
</script>
</head>
<body>
<h1>event_session_storageArea</h1>
<div id="log"></div>
<script>
test(function() {
var t = async_test("storageArea property test of session event");
function onStorageEvent(event) {
t.step(function() {
assert_equals(event.storageArea.length, 1);
var key = event.storageArea.key(0);
var value = event.storageArea.getItem(key);
assert_equals(key, "name");
assert_equals(value, "user1");
});
t.done();
}
window.addEventListener('storage', onStorageEvent, false);
var el = document.createElement("iframe");
el.setAttribute('id', 'ifrm');
el.setAttribute('src', 'iframe/session_set_item_iframe.html');
document.body.appendChild(el);
});
</script>
</body>
</html>

View file

@ -0,0 +1,39 @@
<!DOCTYPE HTML>
<html>
<head>
<title>Web Storage</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
<body>
<h1>event_session_StorageEventInit</h1>
<div id="log"></div>
<script>
test(function() {
var t = async_test("storageeventinit test");
function onStorageEvent(event) {
t.step(function() {
assert_equals(event.key, 'key');
assert_equals(event.oldValue, 'oldValue');
assert_equals(event.newValue, 'newValue');
assert_equals(event.url, window.location.href);
assert_equals(event.storageArea, window.sessionStorage);
});
t.done();
}
window.addEventListener('storage', onStorageEvent, false);
var event = new StorageEvent('storage', {
key: 'key',
oldValue: 'oldValue',
newValue: 'newValue',
url: window.location.href,
storageArea: window.sessionStorage
});
window.dispatchEvent(event);
});
</script>
</body>
</html>

View file

@ -0,0 +1,47 @@
<!DOCTYPE HTML>
<html>
<head>
<title>Web Storage</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
function fail(msg) {
t.step(function() {
assert_unreached(msg);
});
t.done();
}
</script>
</head>
<body>
<h1>event_session_url</h1>
<div id="log"></div>
<script>
test(function() {
sessionStorage.clear();
var t = async_test("url property test of session event");
function onStorageEvent(event) {
t.step(function() {
var url = window.location.href;
var pos = url.lastIndexOf("/");
if (pos != -1) {
url = url.substr(0, pos + 1);
url = url + "iframe/session_set_item_iframe.html";
}
assert_equals(event.url, url);
});
t.done();
}
window.addEventListener('storage', onStorageEvent, false);
var el = document.createElement("iframe");
el.setAttribute('id', 'ifrm');
el.setAttribute('src', 'iframe/session_set_item_iframe.html');
document.body.appendChild(el);
});
</script>
</body>
</html>

View file

@ -0,0 +1,42 @@
<!DOCTYPE HTML>
<mete charset=utf-8>
<title>getItem and named getter</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="log"></div>
<script>
["localStorage", "sessionStorage"].forEach(function(name) {
test(function() {
var storage = window[name];
storage.clear();
storage.setItem("name", "x");
storage.setItem("undefined", "foo");
storage.setItem("null", "bar");
storage.setItem("", "baz");
test(function() {
assert_equals(storage.length, 4);
}, "All items should be added to " + name + ".");
test(function() {
assert_equals(storage["unknown"], undefined, "storage['unknown']")
assert_equals(storage["name"], "x", "storage['name']")
assert_equals(storage["undefined"], "foo", "storage['undefined']")
assert_equals(storage["null"], "bar", "storage['null']")
assert_equals(storage[undefined], "foo", "storage[undefined]")
assert_equals(storage[null], "bar", "storage[null]")
assert_equals(storage[""], "baz", "storage['']")
}, "Named access to " + name + " should be correct");
test(function() {
assert_equals(storage.getItem("unknown"), null, "storage.getItem('unknown')")
assert_equals(storage.getItem("name"), "x", "storage.getItem('name')")
assert_equals(storage.getItem("undefined"), "foo", "storage.getItem('undefined')")
assert_equals(storage.getItem("null"), "bar", "storage.getItem('null')")
assert_equals(storage.getItem(undefined), "foo", "storage.getItem(undefined)")
assert_equals(storage.getItem(null), "bar", "storage.getItem(null)")
assert_equals(storage.getItem(""), "baz", "storage.getItem('')")
}, name + ".getItem should be correct")
}, "Builtins in " + name);
});
</script>

View file

@ -0,0 +1,81 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Web Storage IDL tests</title>
<link rel="author" title="W3C" href="http://www.w3.org/" />
<link rel="help" href="http://www.w3.org/TR/webstorage/#storage"/>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/WebIDLParser.js"></script>
<script src="/resources/idlharness.js"></script>
</head>
<body>
<h1>Web Storage IDL tests</h1>
<div id="log"></div>
<pre id='untested_idl' style='display:none'>
[PrimaryGlobal]
interface Window {
};
interface Event {
};
interface EventInit {
};
</pre>
<pre id='idl'>
interface Storage {
readonly attribute unsigned long length;
DOMString? key(unsigned long index);
getter DOMString getItem(DOMString key);
setter creator void setItem(DOMString key, DOMString value);
deleter void removeItem(DOMString key);
void clear();
};
[NoInterfaceObject]
interface WindowSessionStorage {
readonly attribute Storage sessionStorage;
};
Window implements WindowSessionStorage;
[NoInterfaceObject]
interface WindowLocalStorage {
readonly attribute Storage localStorage;
};
Window implements WindowLocalStorage;
[Constructor(DOMString type, optional StorageEventInit eventInitDict)]
interface StorageEvent : Event {
readonly attribute DOMString key;
readonly attribute DOMString? oldValue;
readonly attribute DOMString? newValue;
readonly attribute DOMString url;
readonly attribute Storage? storageArea;
};
dictionary StorageEventInit : EventInit {
DOMString key;
DOMString? oldValue;
DOMString? newValue;
DOMString url;
Storage? storageArea;
};
</pre>
<script>
(function() {
var idl_array = new IdlArray();
idl_array.add_untested_idls(document.getElementById("untested_idl").textContent);
idl_array.add_idls(document.getElementById("idl").textContent);
idl_array.add_objects({Storage: ["window.localStorage"]});
idl_array.test();
})();
</script>
</body>
</html>

View file

@ -0,0 +1,18 @@
<!DOCTYPE HTML>
<html>
<body>
<script>
if (('localStorage' in window) && window.localStorage !== null){
try {
localStorage.setItem("name", "user1");
localStorage.setItem("name", "user2");
} catch (e) {
parent.fail("setItem method is failed.");
}
localStorage.clear();
} else {
parent.fail("localStorage is not supported.");
}
</script>
</body>
</html>

View file

@ -0,0 +1,17 @@
<!DOCTYPE HTML>
<html>
<body>
<script>
if (('localStorage' in window) && window.localStorage !== null){
try {
localStorage.setItem("name", "user1");
} catch (e) {
parent.fail("setItem method is failed.");
}
localStorage.clear();
} else {
parent.fail("localStorage is not supported.");
}
</script>
</body>
</html>

View file

@ -0,0 +1,16 @@
<!DOCTYPE HTML>
<html>
<body>
<script>
if (('localStorage' in window) && window.localStorage !== null){
try {
localStorage.setItem("name", "user1");
} catch (e) {
parent.fail("setItem method is failed.");
}
} else {
parent.fail("localStorage is not supported.");
}
</script>
</body>
</html>

View file

@ -0,0 +1,18 @@
<!DOCTYPE HTML>
<html>
<body>
<script>
if (('sessionStorage' in window) && window.sessionStorage !== null){
try {
sessionStorage.setItem("name", "user1");
sessionStorage.setItem("name", "user2");
} catch (e) {
parent.fail("setItem method is failed.");
}
sessionStorage.clear();
} else {
parent.fail("sessionStorage is not supported.");
}
</script>
</body>
</html>

View file

@ -0,0 +1,17 @@
<!DOCTYPE HTML>
<html>
<body>
<script>
if (('sessionStorage' in window) && window.sessionStorage !== null){
try {
sessionStorage.setItem('name', 'user1');
} catch (e) {
parent.fail('setItem method is failed.');
}
sessionStorage.clear();
} else {
parent.fail('sessionStorage is not supported.');
}
</script>
</body>
</html>

View file

@ -0,0 +1,16 @@
<!DOCTYPE HTML>
<html>
<body>
<script>
if (('sessionStorage' in window) && window.sessionStorage !== null){
try {
sessionStorage.setItem('name', 'user1');
} catch (e) {
parent.fail('setItem method is failed.');
}
} else {
parent.fail('sessionStorage is not supported.');
}
</script>
</body>
</html>

View file

@ -0,0 +1,30 @@
<!DOCTYPE HTML>
<mete charset=utf-8>
<title>The in operator</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="log"></div>
<script>
["localStorage", "sessionStorage"].forEach(function(name) {
test(function() {
var storage = window[name];
storage.clear();
assert_false("name" in storage);
storage["name"] = "user1";
assert_true("name" in storage);
}, "The in operator in " + name + ": property access");
test(function() {
var storage = window[name];
storage.clear();
assert_false("name" in storage);
storage.setItem("name", "user1");
assert_true("name" in storage);
assert_equals(storage.name, "user1");
storage.removeItem("name");
assert_false("name" in storage);
}, "The in operator in " + name + ": method access");
});
</script>

View file

@ -0,0 +1,36 @@
<!DOCTYPE HTML>
<mete charset=utf-8>
<title>Indexed getter</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="log"></div>
<script>
["localStorage", "sessionStorage"].forEach(function(name) {
test(function() {
var storage = window[name];
storage.clear();
storage["name"] = "user1";
storage["age"] = "42";
test(function() {
assert_equals(storage[-1], undefined);
assert_equals(storage[0], undefined);
assert_equals(storage[1], undefined);
assert_equals(storage[2], undefined);
}, "Getting number properties on " + name);
test(function() {
assert_equals(storage["-1"], undefined);
assert_equals(storage["0"], undefined);
assert_equals(storage["1"], undefined);
assert_equals(storage["2"], undefined);
}, "Getting number-valued string properties on " + name);
test(function() {
storage.setItem(1, "number");
assert_equals(storage[1], "number");
assert_equals(storage["1"], "number");
}, "Getting existing number-valued properties on " + name);
}, "Indexed getter on " + name);
});
</script>

View file

@ -0,0 +1,59 @@
<!DOCTYPE HTML>
<mete charset=utf-8>
<title>Key</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="log"></div>
<script>
["localStorage", "sessionStorage"].forEach(function(name) {
test(function() {
var storage = window[name];
storage.clear();
storage.setItem("name", "user1");
storage.setItem("age", "20");
storage.setItem("a", "1");
storage.setItem("b", "2");
var keys = ["name", "age", "a", "b"];
function doTest(index) {
test(function() {
var key = storage.key(index);
assert_not_equals(key, null);
assert_true(keys.indexOf(key) >= 0,
"Unexpected key " + key + " found.");
}, name + ".key(" + index + ") should return the right thing.");
}
for (var i = 0; i < keys.length; ++i) {
doTest(i);
doTest(i + 0x100000000);
}
test(function() {
assert_equals(storage.key(-1), null, "storage.key(-1)");
assert_equals(storage.key(4), null, "storage.key(4)");
}, name + ".key() should return null for out-of-range arguments.");
}, name + ".key");
test(function() {
var get_keys = function(s) {
var keys = [];
for (var i = 0; i < s.length; ++i) {
keys.push(s.key(i));
}
return keys;
};
var storage = window[name];
storage.clear();
storage.setItem("name", "user1");
storage.setItem("age", "20");
storage.setItem("a", "1");
storage.setItem("b", "2");
var expected_keys = get_keys(storage);
storage.setItem("name", "user2");
assert_array_equals(get_keys(storage), expected_keys);
}, name + ".key with value changes");
});
</script>

View file

@ -0,0 +1,31 @@
<!DOCTYPE HTML>
<mete charset=utf-8>
<title>Length</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="log"></div>
<script>
["localStorage", "sessionStorage"].forEach(function(name) {
test(function() {
var storage = window[name];
storage.clear();
assert_equals(storage.length, 0, "storage.length")
storage["name"] = "user1";
storage["age"] = "20";
assert_equals(storage.length, 2, "storage.length")
}, name + ".length (method access)");
test(function() {
var storage = window[name];
storage.clear();
assert_equals(storage.length, 0, "storage.length")
storage.setItem("name", "user1");
storage.setItem("age", "20");
assert_equals(storage.length, 2, "storage.length")
}, name + ".length (proprty access)");
});
</script>

View file

@ -0,0 +1,32 @@
<!DOCTYPE HTML>
<html>
<head>
<title>Web Storage</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
<body>
<h1>missing_arguments</h1>
<div id="log"></div>
<script>
var tests = [
function() { localStorage.key(); },
function() { localStorage.getItem(); },
function() { localStorage.setItem(); },
function() { localStorage.setItem("a"); },
function() { localStorage.removeItem(); },
function() { sessionStorage.key(); },
function() { sessionStorage.getItem(); },
function() { sessionStorage.setItem(); },
function() { sessionStorage.setItem("a"); },
function() { sessionStorage.removeItem(); },
function() { new StorageEvent(); }
];
tests.forEach(function(fun) {
test(function() {
assert_throws(new TypeError(), fun);
}, "Should throw TypeError for " + format_value(fun) + ".");
});
</script>
</body>
</html>

View file

@ -0,0 +1,52 @@
<!DOCTYPE HTML>
<mete charset=utf-8>
<title>RemoveItem</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="log"></div>
<script>
["localStorage", "sessionStorage"].forEach(function(name) {
test(function() {
var storage = window[name];
storage.clear();
storage.setItem("name", "user1");
assert_equals(storage.getItem("name"), "user1");
storage.removeItem("name");
storage.removeItem("unknown");
assert_equals(storage.getItem("name"), null, "storage.getItem('name')")
}, name + ".removeItem()");
test(function() {
var storage = window[name];
storage.clear();
storage.setItem("name", "user1");
assert_equals(storage.getItem("name"), "user1");
delete storage["name"];
delete storage["unknown"];
assert_equals(storage.getItem("name"), null, "storage.getItem('name')")
}, "delete " + name + "[]");
test(function() {
var storage = window[name];
storage.clear();
storage.setItem("null", "test");
assert_true("null" in storage);
storage.removeItem(null);
assert_false("null" in storage);
}, name + ".removeItem(null)");
test(function() {
var storage = window[name];
storage.clear();
storage.setItem("undefined", "test");
assert_true("undefined" in storage);
storage.removeItem(undefined);
assert_false("undefined" in storage);
}, name + ".removeItem(undefined)");
});
</script>

View file

@ -0,0 +1,160 @@
<!DOCTYPE HTML>
<mete charset=utf-8>
<title>SetItem</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="log"></div>
<script>
["localStorage", "sessionStorage"].forEach(function(name) {
var test_error = { name: "test" };
test(function() {
var storage = window[name];
storage.clear();
storage.setItem("name", "user1");
assert_equals(storage.length, 1, "localStorage.setItem")
}, name + ".setItem()");
test(function() {
var storage = window[name];
storage.clear();
storage["name"] = "user1";
assert_true("name" in storage);
assert_equals(storage.length, 1, "storage.length")
assert_equals(storage.getItem("name"), "user1");
assert_equals(storage["name"], "user1");
}, name + "[]");
test(function() {
var storage = window[name];
storage.clear();
storage["name"] = "user1";
storage["name"] = "user2";
assert_true("name" in storage);
assert_equals(storage.length, 1, "storage.length")
assert_equals(storage.getItem("name"), "user2");
assert_equals(storage["name"], "user2");
}, name + "[] update");
test(function() {
var storage = window[name];
storage.clear();
storage.setItem("age", null);
assert_true("age" in storage);
assert_equals(storage.length, 1, "storage.length")
assert_equals(storage.getItem("age"), "null");
assert_equals(storage["age"], "null");
}, name + ".setItem(_, null)");
test(function() {
var storage = window[name];
storage.clear();
storage["age"] = null;
assert_true("age" in storage);
assert_equals(storage.length, 1, "storage.length")
assert_equals(storage.getItem("age"), "null");
assert_equals(storage["age"], "null");
}, name + "[] = null");
test(function() {
var storage = window[name];
storage.clear();
storage.setItem("age", undefined);
assert_true("age" in storage);
assert_equals(storage.length, 1, "storage.length")
assert_equals(storage.getItem("age"), "undefined");
assert_equals(storage["age"], "undefined");
}, name + ".setItem(_, undefined)");
test(function() {
var storage = window[name];
storage.clear();
storage["age"] = undefined;
assert_true("age" in storage);
assert_equals(storage.length, 1, "storage.length")
assert_equals(storage.getItem("age"), "undefined");
assert_equals(storage["age"], "undefined");
}, name + "[] = undefined");
test(function() {
var storage = window[name];
storage.clear();
storage.setItem("age", "10");
assert_throws(test_error, function() {
storage.setItem("age",
{ toString: function() { throw test_error; } });
});
assert_true("age" in storage);
assert_equals(storage.length, 1, "storage.length")
assert_equals(storage.getItem("age"), "10");
assert_equals(storage["age"], "10");
}, name + ".setItem({ throws })");
test(function() {
var storage = window[name];
storage.clear();
storage.setItem("age", "10");
assert_throws(test_error, function() {
storage["age"] =
{ toString: function() { throw test_error; } };
});
assert_true("age" in storage);
assert_equals(storage.length, 1, "storage.length")
assert_equals(storage.getItem("age"), "10");
assert_equals(storage["age"], "10");
}, name + "[] = { throws }");
test(function() {
var storage = window[name];
storage.clear();
storage.setItem(undefined, "test");
assert_true("undefined" in storage);
assert_equals(storage.length, 1, "storage.length")
assert_equals(storage.getItem("undefined"), "test");
assert_equals(storage["undefined"], "test");
}, name + ".setItem(undefined, _)");
test(function() {
var storage = window[name];
storage.clear();
storage[undefined] = "test2";
assert_true("undefined" in storage);
assert_equals(storage.length, 1, "storage.length")
assert_equals(storage.getItem("undefined"), "test2");
assert_equals(storage["undefined"], "test2");
}, name + "[undefined]");
test(function() {
var storage = window[name];
storage.clear();
storage.setItem(null, "test");
assert_true("null" in storage);
assert_equals(storage.length, 1, "storage.length")
assert_equals(storage.getItem("null"), "test");
assert_equals(storage["null"], "test");
}, name + ".setItem(null, _)");
test(function() {
var storage = window[name];
storage.clear();
storage[null] = "test2";
assert_true("null" in storage);
assert_equals(storage.length, 1, "storage.length")
assert_equals(storage.getItem("null"), "test2");
assert_equals(storage["null"], "test2");
}, name + "[null]");
});
</script>

View file

@ -0,0 +1,31 @@
<!DOCTYPE HTML>
<html>
<head>
<title>Web Storage</title>
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
<body>
<h1>storage_local_setItem_QUOTA_EXCEEDED_ERR</h1>
<div id="log"></div>
<script>
test(function() {
localStorage.clear();
var index = 0;
var key = "name";
var val = "user";
assert_throws("QUOTA_EXCEEDED_ERR", function() {
while (true) {
index++;
localStorage.setItem("" + key + index, "" + name + index);
}
});
localStorage.clear();
});
</script>
</body>
</html>

View file

@ -0,0 +1,31 @@
<!DOCTYPE HTML>
<html>
<head>
<title>Web Storage</title>
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
<body>
<h1>storage_session_setItem_QUOTA_EXCEEDED_ERR</h1>
<div id="log"></div>
<script>
test(function() {
sessionStorage.clear();
var index = 0;
var key = "name";
var val = "user";
assert_throws("QUOTA_EXCEEDED_ERR", function() {
while (true) {
index++;
sessionStorage.setItem("" + key + index, "" + name + index);
}
});
sessionStorage.clear();
});
</script>
</body>
</html>