if (this.importScripts) {
importScripts('../../../resources/js-test.js');
importScripts('shared.js');
}
description("Verify that you can put the same data in 2 different databases without uniqueness constraints firing.");
testCount = 0;
test();
function test()
{
if (testCount++ == 0)
indexedDBTest(prepareDatabase, test, {'suffix': '-1'});
else
indexedDBTest(prepareDatabase, finishJSTest, {'suffix': '-2'});
}
function prepareDatabase()
{
db = event.target.result;
self.store = evalAndLog("db.createObjectStore('storeName', null)");
self.indexObject = evalAndLog("store.createIndex('indexName', 'x')");
addData();
}
function addData()
{
request = evalAndLog("store.add({x: 'value', y: 'zzz'}, 'key')");
request.onsuccess = addMore;
request.onerror = unexpectedErrorCallback;
}
function addMore()
{
request = evalAndLog("event.target.source.add({x: 'value2', y: 'zzz2'}, 'key2')");
request.onsuccess = getData;
request.onerror = unexpectedErrorCallback;
}
function getData()
{
request = evalAndLog("indexObject.getKey('value')");
request.onsuccess = getObjectData;
request.onerror = unexpectedErrorCallback;
}
function getObjectData()
{
shouldBeEqualToString("event.target.result", "key");
request = evalAndLog("indexObject.get('value')");
request.onsuccess = getDataFail;
request.onerror = unexpectedErrorCallback;
}
function getDataFail()
{
shouldBeEqualToString("event.target.result.x", "value");
shouldBeEqualToString("event.target.result.y", "zzz");
request = evalAndLog("indexObject.getKey('does not exist')");
request.onsuccess = getObjectDataFail;
request.onerror = unexpectedErrorCallback;
}
function getObjectDataFail()
{
shouldBe("event.target.result", "undefined");
request = evalAndLog("indexObject.get('does not exist')");
request.onsuccess = openKeyCursor;
request.onerror = unexpectedErrorCallback;
}
function openKeyCursor()
{
shouldBe("event.target.result", "undefined");
self.request = evalAndLog("indexObject.openKeyCursor()");
request.onsuccess = cursor1Continue;
request.onerror = unexpectedErrorCallback;
}
function cursor1Continue()
{
shouldBeNonNull("event.target.result");
shouldBeEqualToString("event.target.result.key", "value");
shouldBeEqualToString("event.target.result.primaryKey", "key");
// We re-use the last request object.
evalAndLog("event.target.result.continue()");
self.request.onsuccess = cursor1Continue2;
}
function cursor1Continue2()
{
shouldBeNonNull("event.target.result");
shouldBeEqualToString("event.target.result.key", "value2");
shouldBeEqualToString("event.target.result.primaryKey", "key2");
// We re-use the last request object.
evalAndLog("event.target.result.continue()");
self.request.onsuccess = openObjectCursor;
}
function openObjectCursor()
{
shouldBeNull("event.target.result");
self.request = evalAndLog("indexObject.openCursor()");
request.onsuccess = cursor2Continue;
request.onerror = unexpectedErrorCallback;
}
function cursor2Continue()
{
shouldBeNonNull("event.target.result");
shouldBeEqualToString("event.target.result.key", "value");
shouldBeEqualToString("event.target.result.value.x", "value");
shouldBeEqualToString("event.target.result.value.y", "zzz");
// We re-use the last request object.
evalAndLog("event.target.result.continue()");
self.request.onsuccess = cursor2Continue2;
}
function cursor2Continue2()
{
shouldBeNonNull("event.target.result");
shouldBeEqualToString("event.target.result.key", "value2");
shouldBeEqualToString("event.target.result.value.x", "value2");
shouldBeEqualToString("event.target.result.value.y", "zzz2");
// We re-use the last request object.
evalAndLog("event.target.result.continue()");
self.request.onsuccess = last;
}
function last()
{
shouldBeNull("event.target.result");
}