blob: 652e138086c24f84b12605f9e9e1d796242eb572 [file] [log] [blame]
description("This tests some obvious failures that can happen while calling IDBObjectStore.put() and IDBObjectStore.clear().");
if (window.testRunner) {
testRunner.waitUntilDone();
testRunner.dumpAsText();
}
function done()
{
finishJSTest();
}
var createRequest = window.indexedDB.open("IDBObjectStorePutAndClearFailuresDatabase", 1);
var database;
createRequest.onupgradeneeded = function(event) {
debug("Initial upgrade needed: Old version - " + event.oldVersion + " New version - " + event.newVersion);
var versionTransaction = createRequest.transaction;
database = event.target.result;
var objectStore = database.createObjectStore("TestObjectStore");
var request = objectStore.put("bar", "foo");
request.onsuccess = function() {
try {
objectStore.put("bar", NaN);
} catch(e) {
debug("Failed to put record into object store with an invalid key");
}
database.deleteObjectStore("TestObjectStore");
try {
objectStore.put("bar", "foo");
} catch(e) {
debug("Failed to put record into object store that has been deleted");
}
try {
objectStore.clear();
} catch(e) {
debug("Failed to clear object store that has been deleted");
}
// Recreate the objectstore because we'll need it in phase 2.
var objectStore = database.createObjectStore("TestObjectStore");
objectStore.put("bar", "foo");
}
versionTransaction.onabort = function(event) {
debug("Initial upgrade versionchange transaction unexpected aborted");
done();
}
versionTransaction.oncomplete = function(event) {
debug("Initial upgrade versionchange transaction complete");
continueTest1();
}
versionTransaction.onerror = function(event) {
debug("Initial upgrade versionchange transaction unexpected error" + event);
done();
}
}
function continueTest1()
{
var transaction = database.transaction("TestObjectStore", "readonly");
var objectStore = transaction.objectStore("TestObjectStore");
try {
objectStore.clear();
} catch(e) {
debug("Failed to clear object store in read-only transaction");
}
var transaction = database.transaction("TestObjectStore", "readwrite");
var objectStore = transaction.objectStore("TestObjectStore");
// Spin the transaction with get requests to keep it alive long enough for the setTimeout to fire.
var canFinish = false;
var spinGet = function() {
objectStore.get("foo").onsuccess = function() {
if (!canFinish)
spinGet();
}
}
spinGet();
var testWhileInactive = function() {
try {
objectStore.put("bar", "foo");
} catch(e) {
debug("Failed to put record into object store with inactive transaction");
}
try {
objectStore.clear();
} catch(e) {
debug("Failed to clear object store with inactive transaction");
}
canFinish = true;
}
setTimeout(testWhileInactive, 0);
transaction.onabort = function(event) {
debug("readwrite transaction unexpected abort" + event);
done();
}
transaction.oncomplete = function(event) {
debug("readwrite transaction complete");
done();
}
transaction.onerror = function(event) {
debug("readwrite transaction unexpected error" + event);
done();
}
}