summaryrefslogtreecommitdiffstats
path: root/LayoutTests/storage
diff options
context:
space:
mode:
authorBen Murdoch <benm@google.com>2010-10-22 13:02:20 +0100
committerBen Murdoch <benm@google.com>2010-10-26 15:21:41 +0100
commita94275402997c11dd2e778633dacf4b7e630a35d (patch)
treee66f56c67e3b01f22c9c23cd932271ee9ac558ed /LayoutTests/storage
parent09e26c78506587b3f5d930d7bc72a23287ffbec0 (diff)
downloadexternal_webkit-a94275402997c11dd2e778633dacf4b7e630a35d.zip
external_webkit-a94275402997c11dd2e778633dacf4b7e630a35d.tar.gz
external_webkit-a94275402997c11dd2e778633dacf4b7e630a35d.tar.bz2
Merge WebKit at r70209: Initial merge by Git
Change-Id: Id23a68efa36e9d1126bcce0b137872db00892c8e
Diffstat (limited to 'LayoutTests/storage')
-rw-r--r--LayoutTests/storage/indexeddb/basics-expected.txt12
-rw-r--r--LayoutTests/storage/indexeddb/basics.html42
-rw-r--r--LayoutTests/storage/indexeddb/constants-expected.txt52
-rw-r--r--LayoutTests/storage/indexeddb/constants.html60
-rw-r--r--LayoutTests/storage/indexeddb/database-basics-expected.txt42
-rw-r--r--LayoutTests/storage/indexeddb/database-basics.html79
-rw-r--r--LayoutTests/storage/indexeddb/database-quota-expected.txt1115
-rw-r--r--LayoutTests/storage/indexeddb/database-quota.html126
-rw-r--r--LayoutTests/storage/indexeddb/index-basics-expected.txt63
-rw-r--r--LayoutTests/storage/indexeddb/index-basics.html74
-rw-r--r--LayoutTests/storage/indexeddb/index-cursor-expected.txt39
-rw-r--r--LayoutTests/storage/indexeddb/index-cursor.html50
-rw-r--r--LayoutTests/storage/indexeddb/keyrange-expected.txt76
-rw-r--r--LayoutTests/storage/indexeddb/keyrange.html34
-rw-r--r--LayoutTests/storage/indexeddb/objectstore-basics-expected.txt59
-rw-r--r--LayoutTests/storage/indexeddb/objectstore-basics.html118
-rw-r--r--LayoutTests/storage/indexeddb/objectstore-cursor-expected.txt20
-rw-r--r--LayoutTests/storage/indexeddb/objectstore-cursor.html46
-rw-r--r--LayoutTests/storage/indexeddb/objectstore-removeobjectstore-expected.txt51
-rw-r--r--LayoutTests/storage/indexeddb/objectstore-removeobjectstore.html61
-rw-r--r--LayoutTests/storage/indexeddb/open-cursor-expected.txt12
-rw-r--r--LayoutTests/storage/indexeddb/open-cursor.html33
-rw-r--r--LayoutTests/storage/indexeddb/queued-commands-expected.txt104
-rw-r--r--LayoutTests/storage/indexeddb/queued-commands.html87
-rw-r--r--LayoutTests/storage/indexeddb/resources/shared.js33
-rw-r--r--LayoutTests/storage/indexeddb/transaction-basics-expected.txt144
-rw-r--r--LayoutTests/storage/indexeddb/transaction-basics.html221
27 files changed, 2398 insertions, 455 deletions
diff --git a/LayoutTests/storage/indexeddb/basics-expected.txt b/LayoutTests/storage/indexeddb/basics-expected.txt
index 7632e40..b7b8b94 100644
--- a/LayoutTests/storage/indexeddb/basics-expected.txt
+++ b/LayoutTests/storage/indexeddb/basics-expected.txt
@@ -3,9 +3,9 @@ Test IndexedDB's basics.
On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-PASS 'indexedDB' in window is true
-PASS indexedDB == null is false
-indexedDB.open('name', 'description')
+PASS 'webkitIndexedDB' in window is true
+PASS webkitIndexedDB == null is false
+webkitIndexedDB.open('name', 'description')
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
@@ -22,6 +22,12 @@ PASS 'onerror' in event.target is true
PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
+webkitIndexedDB.open('name');
+PASS Exception thrown.
+webkitIndexedDB.open('name', null);
+PASS Exception thrown.
+webkitIndexedDB.open('name', undefined);
+PASS Exception thrown.
PASS successfullyParsed is true
TEST COMPLETE
diff --git a/LayoutTests/storage/indexeddb/basics.html b/LayoutTests/storage/indexeddb/basics.html
index 9f5f20f..2e382b2 100644
--- a/LayoutTests/storage/indexeddb/basics.html
+++ b/LayoutTests/storage/indexeddb/basics.html
@@ -14,25 +14,47 @@ description("Test IndexedDB's basics.");
if (window.layoutTestController)
layoutTestController.waitUntilDone();
-function openCallback()
-{
- verifySuccessEvent(event);
- done();
-}
-
function test()
{
- shouldBeTrue("'indexedDB' in window");
- shouldBeFalse("indexedDB == null");
+ shouldBeTrue("'webkitIndexedDB' in window");
+ shouldBeFalse("webkitIndexedDB == null");
// FIXME: Verify other IndexedDatabaseRequest constructors, once they're implemented.
- result = evalAndLog("indexedDB.open('name', 'description')");
+ result = evalAndLog("webkitIndexedDB.open('name', 'description')");
verifyResult(result);
result.onsuccess = openCallback;
- result.onerror = unexpectedErrorCallback;
+ result.onerror = unexpectedErrorCallback;
+}
+
+function openCallback()
+{
+ verifySuccessEvent(event);
+ try {
+ debug("webkitIndexedDB.open('name');");
+ webkitIndexedDB.open('name');
+ testFailed("Calling IDBFactory::open without a description should have thrown.");
+ } catch (err) {
+ testPassed("Exception thrown.");
+ }
+ try {
+ debug("webkitIndexedDB.open('name', null);");
+ webkitIndexedDB.open('name', null);
+ testFailed("Calling IDBFactory::open with a null description should have thrown.");
+ } catch (err) {
+ testPassed("Exception thrown.");
+ }
+ try {
+ debug("webkitIndexedDB.open('name', undefined);");
+ webkitIndexedDB.open('name', undefined);
+ testFailed("Calling IDBFactory::open with an undefined description should have thrown.");
+ } catch (err) {
+ testPassed("Exception thrown.");
+ }
+ done();
}
+
test();
var successfullyParsed = true;
diff --git a/LayoutTests/storage/indexeddb/constants-expected.txt b/LayoutTests/storage/indexeddb/constants-expected.txt
index ff47655..15a2df7 100644
--- a/LayoutTests/storage/indexeddb/constants-expected.txt
+++ b/LayoutTests/storage/indexeddb/constants-expected.txt
@@ -3,32 +3,32 @@ Test IndexedDB's constants.
On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-PASS IDBKeyRange.SINGLE is 0
-PASS IDBKeyRange.LEFT_OPEN is 1
-PASS IDBKeyRange.RIGHT_OPEN is 2
-PASS IDBKeyRange.LEFT_BOUND is 4
-PASS IDBKeyRange.RIGHT_BOUND is 8
-PASS IDBDatabaseException.UNKNOWN_ERR is 0
-PASS IDBDatabaseException.NON_TRANSIENT_ERR is 1
-PASS IDBDatabaseException.NOT_FOUND_ERR is 2
-PASS IDBDatabaseException.CONSTRAINT_ERR is 3
-PASS IDBDatabaseException.DATA_ERR is 4
-PASS IDBDatabaseException.NOT_ALLOWED_ERR is 5
-PASS IDBDatabaseException.SERIAL_ERR is 11
-PASS IDBDatabaseException.RECOVERABLE_ERR is 21
-PASS IDBDatabaseException.TRANSIENT_ERR is 31
-PASS IDBDatabaseException.TIMEOUT_ERR is 32
-PASS IDBDatabaseException.DEADLOCK_ERR is 33
-PASS IDBRequest.LOADING is 1
-PASS IDBRequest.DONE is 2
-PASS IDBCursor.NEXT is 0
-PASS IDBCursor.NEXT_NO_DUPLICATE is 1
-PASS IDBCursor.PREV is 2
-PASS IDBCursor.PREV_NO_DUPLICATE is 3
-PASS IDBTransaction.READ_WRITE is 0
-PASS IDBTransaction.READ_ONLY is 1
-PASS IDBTransaction.SNAPSHOT_READ is 2
-PASS IDBTransaction.VERSION_CHANGE is 3
+PASS webkitIDBKeyRange.SINGLE is 0
+PASS webkitIDBKeyRange.LEFT_OPEN is 1
+PASS webkitIDBKeyRange.RIGHT_OPEN is 2
+PASS webkitIDBKeyRange.LEFT_BOUND is 4
+PASS webkitIDBKeyRange.RIGHT_BOUND is 8
+PASS webkitIDBDatabaseException.UNKNOWN_ERR is 0
+PASS webkitIDBDatabaseException.NON_TRANSIENT_ERR is 1
+PASS webkitIDBDatabaseException.NOT_FOUND_ERR is 2
+PASS webkitIDBDatabaseException.CONSTRAINT_ERR is 3
+PASS webkitIDBDatabaseException.DATA_ERR is 4
+PASS webkitIDBDatabaseException.NOT_ALLOWED_ERR is 5
+PASS webkitIDBDatabaseException.SERIAL_ERR is 11
+PASS webkitIDBDatabaseException.RECOVERABLE_ERR is 21
+PASS webkitIDBDatabaseException.TRANSIENT_ERR is 31
+PASS webkitIDBDatabaseException.TIMEOUT_ERR is 32
+PASS webkitIDBDatabaseException.DEADLOCK_ERR is 33
+PASS webkitIDBRequest.LOADING is 1
+PASS webkitIDBRequest.DONE is 2
+PASS webkitIDBCursor.NEXT is 0
+PASS webkitIDBCursor.NEXT_NO_DUPLICATE is 1
+PASS webkitIDBCursor.PREV is 2
+PASS webkitIDBCursor.PREV_NO_DUPLICATE is 3
+PASS webkitIDBTransaction.READ_WRITE is 0
+PASS webkitIDBTransaction.READ_ONLY is 1
+PASS webkitIDBTransaction.SNAPSHOT_READ is 2
+PASS webkitIDBTransaction.VERSION_CHANGE is 3
PASS successfullyParsed is true
TEST COMPLETE
diff --git a/LayoutTests/storage/indexeddb/constants.html b/LayoutTests/storage/indexeddb/constants.html
index dd24917..813fe7a 100644
--- a/LayoutTests/storage/indexeddb/constants.html
+++ b/LayoutTests/storage/indexeddb/constants.html
@@ -16,36 +16,36 @@ if (window.layoutTestController)
function test()
{
- shouldBe("IDBKeyRange.SINGLE", "0");
- shouldBe("IDBKeyRange.LEFT_OPEN", "1");
- shouldBe("IDBKeyRange.RIGHT_OPEN", "2");
- shouldBe("IDBKeyRange.LEFT_BOUND", "4");
- shouldBe("IDBKeyRange.RIGHT_BOUND", "8");
-
- shouldBe("IDBDatabaseException.UNKNOWN_ERR", "0");
- shouldBe("IDBDatabaseException.NON_TRANSIENT_ERR", "1");
- shouldBe("IDBDatabaseException.NOT_FOUND_ERR", "2");
- shouldBe("IDBDatabaseException.CONSTRAINT_ERR", "3");
- shouldBe("IDBDatabaseException.DATA_ERR", "4");
- shouldBe("IDBDatabaseException.NOT_ALLOWED_ERR", "5");
- shouldBe("IDBDatabaseException.SERIAL_ERR", "11");
- shouldBe("IDBDatabaseException.RECOVERABLE_ERR", "21");
- shouldBe("IDBDatabaseException.TRANSIENT_ERR", "31");
- shouldBe("IDBDatabaseException.TIMEOUT_ERR", "32");
- shouldBe("IDBDatabaseException.DEADLOCK_ERR", "33");
-
- shouldBe("IDBRequest.LOADING", "1");
- shouldBe("IDBRequest.DONE", "2");
-
- shouldBe("IDBCursor.NEXT", "0");
- shouldBe("IDBCursor.NEXT_NO_DUPLICATE", "1");
- shouldBe("IDBCursor.PREV", "2");
- shouldBe("IDBCursor.PREV_NO_DUPLICATE", "3");
-
- shouldBe("IDBTransaction.READ_WRITE", "0");
- shouldBe("IDBTransaction.READ_ONLY", "1");
- shouldBe("IDBTransaction.SNAPSHOT_READ", "2");
- shouldBe("IDBTransaction.VERSION_CHANGE", "3");
+ shouldBe("webkitIDBKeyRange.SINGLE", "0");
+ shouldBe("webkitIDBKeyRange.LEFT_OPEN", "1");
+ shouldBe("webkitIDBKeyRange.RIGHT_OPEN", "2");
+ shouldBe("webkitIDBKeyRange.LEFT_BOUND", "4");
+ shouldBe("webkitIDBKeyRange.RIGHT_BOUND", "8");
+
+ shouldBe("webkitIDBDatabaseException.UNKNOWN_ERR", "0");
+ shouldBe("webkitIDBDatabaseException.NON_TRANSIENT_ERR", "1");
+ shouldBe("webkitIDBDatabaseException.NOT_FOUND_ERR", "2");
+ shouldBe("webkitIDBDatabaseException.CONSTRAINT_ERR", "3");
+ shouldBe("webkitIDBDatabaseException.DATA_ERR", "4");
+ shouldBe("webkitIDBDatabaseException.NOT_ALLOWED_ERR", "5");
+ shouldBe("webkitIDBDatabaseException.SERIAL_ERR", "11");
+ shouldBe("webkitIDBDatabaseException.RECOVERABLE_ERR", "21");
+ shouldBe("webkitIDBDatabaseException.TRANSIENT_ERR", "31");
+ shouldBe("webkitIDBDatabaseException.TIMEOUT_ERR", "32");
+ shouldBe("webkitIDBDatabaseException.DEADLOCK_ERR", "33");
+
+ shouldBe("webkitIDBRequest.LOADING", "1");
+ shouldBe("webkitIDBRequest.DONE", "2");
+
+ shouldBe("webkitIDBCursor.NEXT", "0");
+ shouldBe("webkitIDBCursor.NEXT_NO_DUPLICATE", "1");
+ shouldBe("webkitIDBCursor.PREV", "2");
+ shouldBe("webkitIDBCursor.PREV_NO_DUPLICATE", "3");
+
+ shouldBe("webkitIDBTransaction.READ_WRITE", "0");
+ shouldBe("webkitIDBTransaction.READ_ONLY", "1");
+ shouldBe("webkitIDBTransaction.SNAPSHOT_READ", "2");
+ shouldBe("webkitIDBTransaction.VERSION_CHANGE", "3");
}
test();
diff --git a/LayoutTests/storage/indexeddb/database-basics-expected.txt b/LayoutTests/storage/indexeddb/database-basics-expected.txt
index 42c9879..2a5fa2f 100644
--- a/LayoutTests/storage/indexeddb/database-basics-expected.txt
+++ b/LayoutTests/storage/indexeddb/database-basics-expected.txt
@@ -3,7 +3,7 @@ Test the basics of IndexedDB's IDBDatabase.
On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-indexedDB.open('name', 'description')
+webkitIndexedDB.open('name', 'description')
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
@@ -21,6 +21,27 @@ PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
db = event.result
+db.setVersion('new version')
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+setVersionSuccess():
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+trans = event.result
+PASS trans !== null is true
+Deleted all object stores.
Testing setVersion.
db.setVersion("version a")
PASS 'onsuccess' in result is true
@@ -61,7 +82,15 @@ PASS db.name is "name"
PASS db.objectStores is []
PASS db.objectStores.length is 0
PASS db.objectStores.contains('') is false
+PASS db.objectStores[0] is null
+PASS db.objectStores.item(0) is null
db.createObjectStore("test123")
+PASS db.objectStores is ['test123']
+PASS db.objectStores.length is 1
+PASS db.objectStores.contains('') is false
+PASS db.objectStores.contains('test456') is false
+PASS db.objectStores.contains('test123') is true
+db.setVersion("version c")
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
@@ -78,6 +107,17 @@ PASS 'onerror' in event.target is true
PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
+PASS db.version is "version c"
+PASS db.name is "name"
+PASS db.objectStores is ['test123']
+PASS db.objectStores.length is 1
+PASS db.objectStores.contains('') is false
+PASS db.objectStores.contains('test456') is false
+PASS db.objectStores.contains('test123') is true
+db.createObjectStore("test456")
+setVersionTrans = event.result
+PASS setVersionTrans !== null is true
+PASS db.version is "version b"
PASS db.objectStores is ['test123']
PASS db.objectStores.length is 1
PASS db.objectStores.contains('') is false
diff --git a/LayoutTests/storage/indexeddb/database-basics.html b/LayoutTests/storage/indexeddb/database-basics.html
index b099a49..31c887b 100644
--- a/LayoutTests/storage/indexeddb/database-basics.html
+++ b/LayoutTests/storage/indexeddb/database-basics.html
@@ -14,23 +14,43 @@ description("Test the basics of IndexedDB's IDBDatabase.");
if (window.layoutTestController)
layoutTestController.waitUntilDone();
+function test()
+{
+ result = evalAndLog("webkitIndexedDB.open('name', 'description')");
+ verifyResult(result);
+ result.onsuccess = openSuccess;
+ result.onerror = unexpectedErrorCallback;
+}
+
function openSuccess()
{
verifySuccessEvent(event);
+ window.db = evalAndLog("db = event.result");
+
+ result = evalAndLog("db.setVersion('new version')");
+ verifyResult(result);
+ result.onsuccess = setVersionSuccess;
+ result.onerror = unexpectedErrorCallback;
+}
- var db = evalAndLog("db = event.result");
- deleteAllObjectStores(db);
+function setVersionSuccess()
+{
+ debug("setVersionSuccess():");
+ verifySuccessEvent(event);
+ window.trans = evalAndLog("trans = event.result");
+ shouldBeTrue("trans !== null");
+ trans.onabort = unexpectedAbortCallback;
- // We must do something asynchronous before anything synchronous since
- // deleteAllObjectStores only schedules the object stores to be removed.
- // We don't know for sure whether it's happened until an IDBRequest object
- // that was created after the removes fires.
+ deleteAllObjectStores(db, testSetVersion);
+}
+function testSetVersion()
+{
debug("Testing setVersion.");
result = evalAndLog('db.setVersion("version a")');
verifyResult(result);
result.onsuccess = setVersionAgain;
- result.onError = unexpectedErrorCallback;
+ result.onerror = unexpectedErrorCallback;
}
function setVersionAgain()
@@ -40,7 +60,7 @@ function setVersionAgain()
result = evalAndLog('db.setVersion("version b")');
verifyResult(result);
result.onsuccess = createObjectStore;
- result.onError = unexpectedErrorCallback;
+ result.onerror = unexpectedErrorCallback;
}
function createObjectStore()
@@ -51,33 +71,58 @@ function createObjectStore()
shouldBe("db.objectStores", "[]");
shouldBe("db.objectStores.length", "0");
shouldBe("db.objectStores.contains('')", "false");
+ shouldBeNull("db.objectStores[0]");
+ shouldBeNull("db.objectStores.item(0)");
- result = evalAndLog('db.createObjectStore("test123")');
- verifyResult(result);
- result.onsuccess = checkObjectStore;
- result.onError = unexpectedErrorCallback;
+ objectStore = evalAndLog('db.createObjectStore("test123")');
+ checkObjectStore();
+ commitAndContinue();
}
function checkObjectStore()
{
- verifySuccessEvent(event);
shouldBe("db.objectStores", "['test123']");
shouldBe("db.objectStores.length", "1");
shouldBe("db.objectStores.contains('')", "false");
shouldBe("db.objectStores.contains('test456')", "false");
shouldBe("db.objectStores.contains('test123')", "true");
+}
- done();
+function commitAndContinue()
+{
+ window.setTimeout(testSetVersionAbort, 0);
}
-function test()
+function testSetVersionAbort()
{
- result = evalAndLog("indexedDB.open('name', 'description')");
+ result = evalAndLog('db.setVersion("version c")');
verifyResult(result);
- result.onsuccess = openSuccess;
+ result.onsuccess = createAnotherObjectStore;
result.onerror = unexpectedErrorCallback;
}
+function createAnotherObjectStore()
+{
+ verifySuccessEvent(event);
+ shouldBeEqualToString("db.version", "version c");
+ shouldBeEqualToString("db.name", "name");
+ checkObjectStore();
+
+ objectStore = evalAndLog('db.createObjectStore("test456")');
+ var setVersionTrans = evalAndLog("setVersionTrans = event.result");
+ shouldBeTrue("setVersionTrans !== null");
+ setVersionTrans.oncomplete = unexpectedCompleteCallback;
+ setVersionTrans.onabort = checkMetadata;
+ setVersionTrans.abort();
+}
+
+function checkMetadata()
+{
+ shouldBeEqualToString("db.version", "version b");
+ checkObjectStore();
+ done();
+}
+
test();
var successfullyParsed = true;
diff --git a/LayoutTests/storage/indexeddb/database-quota-expected.txt b/LayoutTests/storage/indexeddb/database-quota-expected.txt
new file mode 100644
index 0000000..b6ea505
--- /dev/null
+++ b/LayoutTests/storage/indexeddb/database-quota-expected.txt
@@ -0,0 +1,1115 @@
+Tests IndexedDB's quota enforcing mechanism.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+webkitIndexedDB.open('name', 'description')
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+db = event.result
+db.setVersion('new version')
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+setVersionSuccess():
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+trans = event.result
+PASS trans !== null is true
+Deleted all object stores.
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+PASS db.version is "new version"
+PASS db.name is "name"
+PASS db.objectStores is []
+PASS db.objectStores.length is 0
+PASS db.objectStores.contains('') is false
+db.createObjectStore("test123")
+PASS db.objectStores is ['test123']
+PASS db.objectStores.length is 1
+PASS db.objectStores.contains('') is false
+PASS db.objectStores.contains('test456') is false
+PASS db.objectStores.contains('test123') is true
+trans = db.transaction()
+Creating 'data' which contains 64K of data
+PASS data.length is 65536
+store = trans.objectStore('test123')
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+store = event.source
+store.add({x: data}, dataAdded)
+Error function called: (0) Error writing data to stable storage.
+Error event fired:
+PASS 'result' in event is false
+PASS 'code' in event is true
+PASS 'message' in event is true
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+PASS Adding data failed due to quota error. Data added was: 5120 KB
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/storage/indexeddb/database-quota.html b/LayoutTests/storage/indexeddb/database-quota.html
new file mode 100644
index 0000000..45ce709
--- /dev/null
+++ b/LayoutTests/storage/indexeddb/database-quota.html
@@ -0,0 +1,126 @@
+<html>
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+<script src="../../fast/js/resources/js-test-post-function.js"></script>
+<script src="resources/shared.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+<script>
+
+description("Tests IndexedDB's quota enforcing mechanism.");
+if (window.layoutTestController)
+ layoutTestController.waitUntilDone();
+
+function test()
+{
+ result = evalAndLog("webkitIndexedDB.open('name', 'description')");
+ verifyResult(result);
+ result.onsuccess = openSuccess;
+ result.onerror = unexpectedErrorCallback;
+}
+
+function openSuccess()
+{
+ verifySuccessEvent(event);
+ window.db = evalAndLog("db = event.result");
+
+ result = evalAndLog("db.setVersion('new version')");
+ verifyResult(result);
+ result.onsuccess = setVersionSuccess;
+ result.onerror = unexpectedErrorCallback;
+}
+
+function setVersionSuccess()
+{
+ debug("setVersionSuccess():");
+ verifySuccessEvent(event);
+ window.trans = evalAndLog("trans = event.result");
+ shouldBeTrue("trans !== null");
+ trans.onabort = unexpectedAbortCallback;
+
+ deleteAllObjectStores(db, createNewObjectStore);
+}
+
+function createNewObjectStore()
+{
+ verifySuccessEvent(event);
+ shouldBeEqualToString("db.version", "new version");
+ shouldBeEqualToString("db.name", "name");
+ shouldBe("db.objectStores", "[]");
+ shouldBe("db.objectStores.length", "0");
+ shouldBe("db.objectStores.contains('')", "false");
+
+ objectStore = evalAndLog('db.createObjectStore("test123")');
+ checkObjectStore();
+ commitAndContinue();
+}
+
+function checkObjectStore()
+{
+ shouldBe("db.objectStores", "['test123']");
+ shouldBe("db.objectStores.length", "1");
+ shouldBe("db.objectStores.contains('')", "false");
+ shouldBe("db.objectStores.contains('test456')", "false");
+ shouldBe("db.objectStores.contains('test123')", "true");
+}
+
+function commitAndContinue()
+{
+ window.setTimeout(checkQuotaEnforcing, 0);
+}
+
+function checkQuotaEnforcing()
+{
+ var trans = evalAndLog("trans = db.transaction()");
+ trans.onabort = testComplete;
+ trans.oncomplete = unexpectedCompleteCallback;
+ debug("Creating 'data' which contains 64K of data");
+ window.data = "X";
+ for (var i = 0; i < 16; i++)
+ data += data;
+ shouldBe("data.length", "65536");
+ window.dataAdded = 0;
+ window.store = evalAndLog("store = trans.objectStore('test123')");
+ addData();
+}
+
+function addData()
+{
+ if (dataAdded < 5 * 1024 * 1024) {
+ if (dataAdded > 0) {
+ verifySuccessEvent(event);
+ store = evalAndLog("store = event.source");
+ }
+ } else {
+ testFailed("added more than quota");
+ done();
+ return;
+ }
+ dataAdded += 65536;
+ result = evalAndLog("store.add({x: data}, dataAdded)");
+ result.onsuccess = addData;
+ result.onerror = logError;
+}
+
+function logError()
+{
+ debug("Error function called: (" + event.code + ") " + event.message);
+ verifyErrorEvent(event);
+}
+
+function testComplete()
+{
+ testPassed("Adding data failed due to quota error. Data added was: " + dataAdded / 1024 + " KB");
+ done();
+}
+
+test();
+
+var successfullyParsed = true;
+
+</script>
+</body>
+</html>
diff --git a/LayoutTests/storage/indexeddb/index-basics-expected.txt b/LayoutTests/storage/indexeddb/index-basics-expected.txt
index 564bdc8..0869d95 100644
--- a/LayoutTests/storage/indexeddb/index-basics-expected.txt
+++ b/LayoutTests/storage/indexeddb/index-basics-expected.txt
@@ -1,9 +1,9 @@
-Test the basics of IndexedDB's IDBIndex.
+Test the basics of IndexedDB's webkitIDBIndex.
On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-indexedDB.open('name', 'description')
+webkitIndexedDB.open('name', 'description')
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
@@ -21,12 +21,13 @@ PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
db = event.result
-db.createObjectStore('storeName', null)
+db.setVersion('new version')
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
An event should fire shortly...
+setVersionSuccess():
Success event fired:
PASS 'result' in event is true
PASS 'code' in event is false
@@ -38,8 +39,25 @@ PASS 'onerror' in event.target is true
PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
-store = event.result
-event.result.createIndex('indexName', 'x')
+trans = event.result
+PASS trans !== null is true
+Deleted all object stores.
+db.createObjectStore('storeName', null)
+store.createIndex('indexName', 'x')
+store.createIndex('indexName2', 'y', false)
+PASS 'name' in indexObject is true
+PASS indexObject.name is "indexName"
+PASS 'storeName' in indexObject is true
+PASS indexObject.storeName is "storeName"
+PASS 'keyPath' in indexObject is true
+PASS indexObject.keyPath is "x"
+PASS 'unique' in indexObject is true
+PASS indexObject.unique is false
+PASS 'openKeyCursor' in indexObject is true
+PASS 'openCursor' in indexObject is true
+PASS 'getKey' in indexObject is true
+PASS 'get' in indexObject is true
+store.add({x: 'value', y: 'zzz'}, 'key')
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
@@ -56,21 +74,7 @@ PASS 'onerror' in event.target is true
PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
-PASS event.result === null is false
-indexObject = event.result
-PASS 'name' in indexObject is true
-PASS indexObject.name is "indexName"
-PASS 'storeName' in indexObject is true
-PASS indexObject.storeName is "storeName"
-PASS 'keyPath' in indexObject is true
-PASS indexObject.keyPath is "x"
-PASS 'unique' in indexObject is true
-PASS indexObject.unique is false
-PASS 'openObjectCursor' in indexObject is true
-PASS 'openCursor' in indexObject is true
-PASS 'getObject' in indexObject is true
-PASS 'get' in indexObject is true
-event.source.add({x: 'value', y: 'zzz'}, 'key')
+event.source.add({x: 'value2', y: 'zzz2'}, 'key2')
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
@@ -87,7 +91,7 @@ PASS 'onerror' in event.target is true
PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
-event.source.add({x: 'value2', y: 'zzz2'}, 'key2')
+indexObject.getKey('value')
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
@@ -104,7 +108,8 @@ PASS 'onerror' in event.target is true
PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
-indexObject.get('value')
+PASS event.result is "key"
+indexObject2.getKey('zzz')
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
@@ -122,7 +127,7 @@ PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
PASS event.result is "key"
-indexObject.getObject('value')
+indexObject.get('value')
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
@@ -141,7 +146,7 @@ PASS event.target.readyState is event.target.DONE
PASS event.result.x is "value"
PASS event.result.y is "zzz"
-indexObject.get('does not exist')
+indexObject.getKey('does not exist')
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
@@ -158,8 +163,8 @@ PASS 'onerror' in event.target is true
PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
-PASS event.code is IDBDatabaseException.NOT_FOUND_ERR
-indexObject.getObject('does not exist')
+PASS event.code is webkitIDBDatabaseException.NOT_FOUND_ERR
+indexObject.get('does not exist')
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
@@ -176,8 +181,8 @@ PASS 'onerror' in event.target is true
PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
-PASS event.code is IDBDatabaseException.NOT_FOUND_ERR
-indexObject.openCursor()
+PASS event.code is webkitIDBDatabaseException.NOT_FOUND_ERR
+indexObject.openKeyCursor()
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
@@ -235,7 +240,7 @@ PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
PASS event.result === null is true
-indexObject.openObjectCursor()
+indexObject.openCursor()
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
diff --git a/LayoutTests/storage/indexeddb/index-basics.html b/LayoutTests/storage/indexeddb/index-basics.html
index c23f141..f7257f1 100644
--- a/LayoutTests/storage/indexeddb/index-basics.html
+++ b/LayoutTests/storage/indexeddb/index-basics.html
@@ -10,47 +10,50 @@
<div id="console"></div>
<script>
-description("Test the basics of IndexedDB's IDBIndex.");
+description("Test the basics of IndexedDB's webkitIDBIndex.");
if (window.layoutTestController)
layoutTestController.waitUntilDone();
function test()
{
- result = evalAndLog("indexedDB.open('name', 'description')");
+ result = evalAndLog("webkitIndexedDB.open('name', 'description')");
verifyResult(result);
- result.onsuccess = createObjectStore;
+ result.onsuccess = setVersion;
result.onerror = unexpectedErrorCallback;
}
-function createObjectStore()
+function setVersion()
{
verifySuccessEvent(event);
db = evalAndLog("db = event.result");
- deleteAllObjectStores(db);
-
- result = evalAndLog("db.createObjectStore('storeName', null)");
+ result = evalAndLog("db.setVersion('new version')");
verifyResult(result);
- result.onsuccess = createIndex;
+ result.onsuccess = deleteExisting;
result.onerror = unexpectedErrorCallback;
}
-function createIndex()
+function deleteExisting()
{
+ debug("setVersionSuccess():");
verifySuccessEvent(event);
- window.store = evalAndLog("store = event.result");
+ window.trans = evalAndLog("trans = event.result");
+ shouldBeTrue("trans !== null");
+ trans.onabort = unexpectedAbortCallback;
- result = evalAndLog("event.result.createIndex('indexName', 'x')");
- verifyResult(result);
- result.onsuccess = addData;
- result.onerror = unexpectedErrorCallback;
+ deleteAllObjectStores(db, createIndex);
+}
+
+function createIndex()
+{
+ window.store = evalAndLog("db.createObjectStore('storeName', null)");
+ window.indexObject = evalAndLog("store.createIndex('indexName', 'x')");
+ window.indexObject2 = evalAndLog("store.createIndex('indexName2', 'y', false)");
+ addData();
}
function addData()
{
- verifySuccessEvent(event);
- shouldBeFalse("event.result === null");
- window.indexObject = evalAndLog("indexObject = event.result");
shouldBeTrue("'name' in indexObject");
shouldBeEqualToString("indexObject.name", "indexName");
shouldBeTrue("'storeName' in indexObject");
@@ -59,12 +62,12 @@ function addData()
shouldBeEqualToString("indexObject.keyPath", "x");
shouldBeTrue("'unique' in indexObject");
shouldBeFalse("indexObject.unique");
- shouldBeTrue("'openObjectCursor' in indexObject");
+ shouldBeTrue("'openKeyCursor' in indexObject");
shouldBeTrue("'openCursor' in indexObject");
- shouldBeTrue("'getObject' in indexObject");
+ shouldBeTrue("'getKey' in indexObject");
shouldBeTrue("'get' in indexObject");
- result = evalAndLog("event.source.add({x: 'value', y: 'zzz'}, 'key')");
+ result = evalAndLog("store.add({x: 'value', y: 'zzz'}, 'key')");
verifyResult(result);
result.onsuccess = addMore;
result.onerror = unexpectedErrorCallback;
@@ -84,7 +87,7 @@ function getData()
{
verifySuccessEvent(event);
- result = evalAndLog("indexObject.get('value')");
+ result = evalAndLog("indexObject.getKey('value')");
verifyResult(result);
result.onsuccess = getObjectData;
result.onerror = unexpectedErrorCallback;
@@ -95,7 +98,18 @@ function getObjectData()
verifySuccessEvent(event);
shouldBeEqualToString("event.result", "key");
- result = evalAndLog("indexObject.getObject('value')");
+ result = evalAndLog("indexObject2.getKey('zzz')");
+ verifyResult(result);
+ result.onsuccess = getObjectData2;
+ result.onerror = unexpectedErrorCallback;
+}
+
+function getObjectData2()
+{
+ verifySuccessEvent(event);
+ shouldBeEqualToString("event.result", "key");
+
+ result = evalAndLog("indexObject.get('value')");
verifyResult(result);
result.onsuccess = getDataFail;
result.onerror = unexpectedErrorCallback;
@@ -107,7 +121,7 @@ function getDataFail()
shouldBeEqualToString("event.result.x", "value");
shouldBeEqualToString("event.result.y", "zzz");
- result = evalAndLog("indexObject.get('does not exist')");
+ result = evalAndLog("indexObject.getKey('does not exist')");
verifyResult(result);
result.onsuccess = unexpectedSuccessCallback;
result.onerror = getObjectDataFail;
@@ -116,20 +130,20 @@ function getDataFail()
function getObjectDataFail()
{
verifyErrorEvent(event);
- shouldBe("event.code", "IDBDatabaseException.NOT_FOUND_ERR");
+ shouldBe("event.code", "webkitIDBDatabaseException.NOT_FOUND_ERR");
- result = evalAndLog("indexObject.getObject('does not exist')");
+ result = evalAndLog("indexObject.get('does not exist')");
verifyResult(result);
result.onsuccess = unexpectedSuccessCallback;
- result.onerror = openCursor;
+ result.onerror = openKeyCursor;
}
-function openCursor()
+function openKeyCursor()
{
verifyErrorEvent(event);
- shouldBe("event.code", "IDBDatabaseException.NOT_FOUND_ERR");
+ shouldBe("event.code", "webkitIDBDatabaseException.NOT_FOUND_ERR");
- window.result = evalAndLog("indexObject.openCursor()");
+ window.result = evalAndLog("indexObject.openKeyCursor()");
verifyResult(result);
result.onsuccess = cursor1Continue;
result.onerror = unexpectedErrorCallback;
@@ -166,7 +180,7 @@ function openObjectCursor()
verifySuccessEvent(event);
shouldBeTrue("event.result === null");
- window.result = evalAndLog("indexObject.openObjectCursor()");
+ window.result = evalAndLog("indexObject.openCursor()");
verifyResult(result);
result.onsuccess = cursor2Continue;
result.onerror = unexpectedErrorCallback;
diff --git a/LayoutTests/storage/indexeddb/index-cursor-expected.txt b/LayoutTests/storage/indexeddb/index-cursor-expected.txt
index 6d1417f..88b96ff 100644
--- a/LayoutTests/storage/indexeddb/index-cursor-expected.txt
+++ b/LayoutTests/storage/indexeddb/index-cursor-expected.txt
@@ -1,9 +1,9 @@
-Test IndexedDB's IDBIndex.openCursor + the cursor it produces in depth.
+Test IndexedDB's webkitIDBIndex.openCursor + the cursor it produces in depth.
On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-indexedDB.open('someDB', 'some description')
+webkitIndexedDB.open('someDB', 'some description')
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
@@ -21,7 +21,7 @@ PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
db = event.result
-db.createObjectStore('someObjectStore')
+db.setVersion('new version')
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
@@ -38,36 +38,11 @@ PASS 'onerror' in event.target is true
PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
-objectStore = event.result
+trans = event.result
+PASS trans !== null is true
+Deleted all object stores.
+db.createObjectStore('someObjectStore')
objectStore.createIndex('someIndex', 'x')
-PASS 'onsuccess' in result is true
-PASS 'onerror' in result is true
-PASS 'readyState' in result is true
-An event should fire shortly...
-
-Success event fired:
-PASS 'result' in event is true
-PASS 'code' in event is false
-PASS 'message' in event is false
-PASS 'source' in event is true
-PASS event.source != null is true
-PASS 'onsuccess' in event.target is true
-PASS 'onerror' in event.target is true
-PASS 'readyState' in event.target is true
-PASS event.target.readyState is event.target.DONE
-
-indexObject = event.result
-Success event fired:
-PASS 'result' in event is true
-PASS 'code' in event is false
-PASS 'message' in event is false
-PASS 'source' in event is true
-PASS event.source != null is true
-PASS 'onsuccess' in event.target is true
-PASS 'onerror' in event.target is true
-PASS 'readyState' in event.target is true
-PASS event.target.readyState is event.target.DONE
-
objectStore.add({'x': testData[nextToAdd]}, nextToAdd)
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
diff --git a/LayoutTests/storage/indexeddb/index-cursor.html b/LayoutTests/storage/indexeddb/index-cursor.html
index 9541d60..5aab4f8 100644
--- a/LayoutTests/storage/indexeddb/index-cursor.html
+++ b/LayoutTests/storage/indexeddb/index-cursor.html
@@ -10,7 +10,7 @@
<div id="console"></div>
<script>
-description("Test IndexedDB's IDBIndex.openCursor + the cursor it produces in depth.");
+description("Test IndexedDB's webkitIDBIndex.openCursor + the cursor it produces in depth.");
if (window.layoutTestController)
layoutTestController.waitUntilDone();
@@ -29,49 +29,45 @@ window.testData = [
function openDatabase()
{
- result = evalAndLog("indexedDB.open('someDB', 'some description')");
+ result = evalAndLog("webkitIndexedDB.open('someDB', 'some description')");
verifyResult(result);
- result.onsuccess = openObjectStore;
+ result.onsuccess = setVersion;
result.onerror = unexpectedErrorCallback;
}
-function openObjectStore()
+function setVersion()
{
verifySuccessEvent(event);
window.db = evalAndLog("db = event.result");
- deleteAllObjectStores(db);
-
- result = evalAndLog("db.createObjectStore('someObjectStore')");
+ result = evalAndLog("db.setVersion('new version')");
verifyResult(result);
- result.onsuccess = openIndex;
+ result.onsuccess = deleteExisting;
result.onerror = unexpectedErrorCallback;
}
-function openIndex()
+function deleteExisting()
{
verifySuccessEvent(event);
- window.objectStore = evalAndLog("objectStore = event.result");
+ window.trans = evalAndLog("trans = event.result");
+ shouldBeTrue("trans !== null");
+ trans.onabort = unexpectedAbortCallback;
- result = evalAndLog("objectStore.createIndex('someIndex', 'x')");
- verifyResult(result);
- result.onsuccess = startAddingData;
- result.onerror = unexpectedErrorCallback;
+ deleteAllObjectStores(db, startAddingData);
}
function startAddingData()
{
- verifySuccessEvent(event);
- window.indexObject = evalAndLog("indexObject = event.result");
-
+ window.objectStore = evalAndLog("db.createObjectStore('someObjectStore')");
+ window.indexObject = evalAndLog("objectStore.createIndex('someIndex', 'x')");
window.nextToAdd = 0;
addData();
}
function addData()
{
- // We cheat when called for the first time; we're in the context of the objectStore success event.
- verifySuccessEvent(event);
+ if (window.nextToAdd > 0)
+ verifySuccessEvent(event);
result = evalAndLog("objectStore.add({'x': testData[nextToAdd]}, nextToAdd)");
verifyResult(result);
@@ -105,7 +101,7 @@ function scheduleTests()
}
debug("Running tests...");
- setTimeout(runNextTest, 0);
+ runNextTest();
}
function runNextTest()
@@ -184,13 +180,13 @@ function runNextTest()
var keyRange;
if (lower !== null && upper !== null)
- keyRange = IDBKeyRange.bound(testData[lower], testData[upper], lowerIsOpen, upperIsOpen);
+ keyRange = webkitIDBKeyRange.bound(testData[lower], testData[upper], lowerIsOpen, upperIsOpen);
else if (lower !== null)
- keyRange = IDBKeyRange.leftBound(testData[lower], lowerIsOpen);
+ keyRange = webkitIDBKeyRange.leftBound(testData[lower], lowerIsOpen);
else
- keyRange = IDBKeyRange.rightBound(testData[upper], upperIsOpen);
+ keyRange = webkitIDBKeyRange.rightBound(testData[upper], upperIsOpen);
- var request = indexObject.openCursor(keyRange, ascending ? IDBCursor.NEXT : IDBCursor.PREV);
+ var request = indexObject.openKeyCursor(keyRange, ascending ? webkitIDBCursor.NEXT : webkitIDBCursor.PREV);
request.onsuccess = cursorIteration;
request.onerror = unexpectedErrorCallback;
}
@@ -213,12 +209,12 @@ function cursorIteration()
{
if (expectedIndex === null) {
shouldBeNull("event.result");
- setTimeout(runNextTest, 0);
+ runNextTest();
return;
}
if (event.result === null) {
- testFailed("Event.result should not be null.")
- setTimeout(runNextTest, 0);
+ testFailed("Event.result should not be null.");
+ runNextTest();
return;
}
diff --git a/LayoutTests/storage/indexeddb/keyrange-expected.txt b/LayoutTests/storage/indexeddb/keyrange-expected.txt
index 6528a11..8d6bf86 100644
--- a/LayoutTests/storage/indexeddb/keyrange-expected.txt
+++ b/LayoutTests/storage/indexeddb/keyrange-expected.txt
@@ -3,20 +3,20 @@ Test IndexedDB's KeyRange.
On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-PASS 'SINGLE' in IDBKeyRange is true
-PASS 'LEFT_OPEN' in IDBKeyRange is true
-PASS 'RIGHT_OPEN' in IDBKeyRange is true
-PASS 'LEFT_BOUND' in IDBKeyRange is true
-PASS 'RIGHT_BOUND' in IDBKeyRange is true
-PASS 'left' in IDBKeyRange is false
-PASS 'right' in IDBKeyRange is false
-PASS 'flags' in IDBKeyRange is false
-PASS 'only' in IDBKeyRange is true
-PASS 'leftBound' in IDBKeyRange is true
-PASS 'rightBound' in IDBKeyRange is true
-PASS 'bound' in IDBKeyRange is true
+PASS 'SINGLE' in webkitIDBKeyRange is true
+PASS 'LEFT_OPEN' in webkitIDBKeyRange is true
+PASS 'RIGHT_OPEN' in webkitIDBKeyRange is true
+PASS 'LEFT_BOUND' in webkitIDBKeyRange is true
+PASS 'RIGHT_BOUND' in webkitIDBKeyRange is true
+PASS 'left' in webkitIDBKeyRange is false
+PASS 'right' in webkitIDBKeyRange is false
+PASS 'flags' in webkitIDBKeyRange is false
+PASS 'only' in webkitIDBKeyRange is true
+PASS 'leftBound' in webkitIDBKeyRange is true
+PASS 'rightBound' in webkitIDBKeyRange is true
+PASS 'bound' in webkitIDBKeyRange is true
-instance = IDBKeyRange.only(1)
+instance = webkitIDBKeyRange.only(1)
PASS 'SINGLE' in instance is true
PASS 'LEFT_OPEN' in instance is true
PASS 'RIGHT_OPEN' in instance is true
@@ -30,113 +30,113 @@ PASS 'leftBound' in instance is false
PASS 'rightBound' in instance is false
PASS 'bound' in instance is false
-IDBKeyRange.only(1)
+webkitIDBKeyRange.only(1)
PASS keyRange.left is 1
PASS keyRange.right is 1
PASS keyRange.flags is keyRange.SINGLE
-IDBKeyRange.only('a')
+webkitIDBKeyRange.only('a')
PASS keyRange.left is 'a'
PASS keyRange.right is 'a'
PASS keyRange.flags is keyRange.SINGLE
-IDBKeyRange.leftBound(10,true)
+webkitIDBKeyRange.leftBound(10,true)
PASS keyRange.left is 10
PASS keyRange.right is null
PASS keyRange.flags is keyRange.LEFT_OPEN | keyRange.LEFT_BOUND
-IDBKeyRange.leftBound(11,false)
+webkitIDBKeyRange.leftBound(11,false)
PASS keyRange.left is 11
PASS keyRange.right is null
PASS keyRange.flags is keyRange.LEFT_BOUND
-IDBKeyRange.leftBound(12,undefined)
+webkitIDBKeyRange.leftBound(12,undefined)
PASS keyRange.left is 12
PASS keyRange.right is null
PASS keyRange.flags is keyRange.LEFT_BOUND
-IDBKeyRange.leftBound('aa',true)
+webkitIDBKeyRange.leftBound('aa',true)
PASS keyRange.left is 'aa'
PASS keyRange.right is null
PASS keyRange.flags is keyRange.LEFT_OPEN | keyRange.LEFT_BOUND
-IDBKeyRange.leftBound('ab',false)
+webkitIDBKeyRange.leftBound('ab',false)
PASS keyRange.left is 'ab'
PASS keyRange.right is null
PASS keyRange.flags is keyRange.LEFT_BOUND
-IDBKeyRange.leftBound('ac',undefined)
+webkitIDBKeyRange.leftBound('ac',undefined)
PASS keyRange.left is 'ac'
PASS keyRange.right is null
PASS keyRange.flags is keyRange.LEFT_BOUND
-IDBKeyRange.rightBound(20,true)
+webkitIDBKeyRange.rightBound(20,true)
PASS keyRange.right is 20
PASS keyRange.left is null
PASS keyRange.flags is keyRange.RIGHT_OPEN | keyRange.RIGHT_BOUND
-IDBKeyRange.rightBound(21,false)
+webkitIDBKeyRange.rightBound(21,false)
PASS keyRange.right is 21
PASS keyRange.left is null
PASS keyRange.flags is keyRange.RIGHT_BOUND
-IDBKeyRange.rightBound(22,undefined)
+webkitIDBKeyRange.rightBound(22,undefined)
PASS keyRange.right is 22
PASS keyRange.left is null
PASS keyRange.flags is keyRange.RIGHT_BOUND
-IDBKeyRange.rightBound('ba',true)
+webkitIDBKeyRange.rightBound('ba',true)
PASS keyRange.right is 'ba'
PASS keyRange.left is null
PASS keyRange.flags is keyRange.RIGHT_OPEN | keyRange.RIGHT_BOUND
-IDBKeyRange.rightBound('bb',false)
+webkitIDBKeyRange.rightBound('bb',false)
PASS keyRange.right is 'bb'
PASS keyRange.left is null
PASS keyRange.flags is keyRange.RIGHT_BOUND
-IDBKeyRange.rightBound('bc',undefined)
+webkitIDBKeyRange.rightBound('bc',undefined)
PASS keyRange.right is 'bc'
PASS keyRange.left is null
PASS keyRange.flags is keyRange.RIGHT_BOUND
-IDBKeyRange.bound(30,40,undefined,undefined)
+webkitIDBKeyRange.bound(30,40,undefined,undefined)
PASS keyRange.left is 30
PASS keyRange.right is 40
PASS leftFlags is keyRange.LEFT_BOUND
PASS rightFlags is keyRange.RIGHT_BOUND
-IDBKeyRange.bound(31,41,false,false)
+webkitIDBKeyRange.bound(31,41,false,false)
PASS keyRange.left is 31
PASS keyRange.right is 41
PASS leftFlags is keyRange.LEFT_BOUND
PASS rightFlags is keyRange.RIGHT_BOUND
-IDBKeyRange.bound(32,42,false,true)
+webkitIDBKeyRange.bound(32,42,false,true)
PASS keyRange.left is 32
PASS keyRange.right is 42
PASS leftFlags is keyRange.LEFT_BOUND
PASS rightFlags is keyRange.RIGHT_OPEN | keyRange.RIGHT_BOUND
-IDBKeyRange.bound(33,43,true,false)
+webkitIDBKeyRange.bound(33,43,true,false)
PASS keyRange.left is 33
PASS keyRange.right is 43
PASS leftFlags is keyRange.LEFT_OPEN | keyRange.LEFT_BOUND
PASS rightFlags is keyRange.RIGHT_BOUND
-IDBKeyRange.bound(34,44,true,true)
+webkitIDBKeyRange.bound(34,44,true,true)
PASS keyRange.left is 34
PASS keyRange.right is 44
PASS leftFlags is keyRange.LEFT_OPEN | keyRange.LEFT_BOUND
PASS rightFlags is keyRange.RIGHT_OPEN | keyRange.RIGHT_BOUND
-IDBKeyRange.bound('aaa','aba',false,false)
+webkitIDBKeyRange.bound('aaa','aba',false,false)
PASS keyRange.left is 'aaa'
PASS keyRange.right is 'aba'
PASS leftFlags is keyRange.LEFT_BOUND
PASS rightFlags is keyRange.RIGHT_BOUND
-IDBKeyRange.bound('aab','abb',undefined,undefined)
+webkitIDBKeyRange.bound('aab','abb',undefined,undefined)
PASS keyRange.left is 'aab'
PASS keyRange.right is 'abb'
PASS leftFlags is keyRange.LEFT_BOUND
PASS rightFlags is keyRange.RIGHT_BOUND
-IDBKeyRange.bound('aac','abc',false,false)
+webkitIDBKeyRange.bound('aac','abc',false,false)
PASS keyRange.left is 'aac'
PASS keyRange.right is 'abc'
PASS leftFlags is keyRange.LEFT_BOUND
PASS rightFlags is keyRange.RIGHT_BOUND
-IDBKeyRange.bound('aad','abd',false,true)
+webkitIDBKeyRange.bound('aad','abd',false,true)
PASS keyRange.left is 'aad'
PASS keyRange.right is 'abd'
PASS leftFlags is keyRange.LEFT_BOUND
PASS rightFlags is keyRange.RIGHT_OPEN | keyRange.RIGHT_BOUND
-IDBKeyRange.bound('aae','abe',true,false)
+webkitIDBKeyRange.bound('aae','abe',true,false)
PASS keyRange.left is 'aae'
PASS keyRange.right is 'abe'
PASS leftFlags is keyRange.LEFT_OPEN | keyRange.LEFT_BOUND
PASS rightFlags is keyRange.RIGHT_BOUND
-IDBKeyRange.bound('aaf','abf',true,true)
+webkitIDBKeyRange.bound('aaf','abf',true,true)
PASS keyRange.left is 'aaf'
PASS keyRange.right is 'abf'
PASS leftFlags is keyRange.LEFT_OPEN | keyRange.LEFT_BOUND
diff --git a/LayoutTests/storage/indexeddb/keyrange.html b/LayoutTests/storage/indexeddb/keyrange.html
index d60cb15..c3885fc 100644
--- a/LayoutTests/storage/indexeddb/keyrange.html
+++ b/LayoutTests/storage/indexeddb/keyrange.html
@@ -16,7 +16,7 @@ if (window.layoutTestController)
function checkSingleKeyRange(value)
{
- keyRange = evalAndLog("IDBKeyRange.only(" + value + ")");
+ keyRange = evalAndLog("webkitIDBKeyRange.only(" + value + ")");
shouldBe("keyRange.left", "" + value);
shouldBe("keyRange.right", "" + value);
shouldBe("keyRange.flags", "keyRange.SINGLE");
@@ -24,7 +24,7 @@ function checkSingleKeyRange(value)
function checkLeftBoundKeyRange(value, open)
{
- keyRange = evalAndLog("IDBKeyRange.leftBound(" + value + "," + open + ")");
+ keyRange = evalAndLog("webkitIDBKeyRange.leftBound(" + value + "," + open + ")");
shouldBe("keyRange.left", "" + value);
shouldBeNull("keyRange.right");
shouldBe("keyRange.flags", open ? "keyRange.LEFT_OPEN | keyRange.LEFT_BOUND" : "keyRange.LEFT_BOUND");
@@ -32,7 +32,7 @@ function checkLeftBoundKeyRange(value, open)
function checkRightBoundKeyRange(value, open)
{
- keyRange = evalAndLog("IDBKeyRange.rightBound(" + value + "," + open + ")");
+ keyRange = evalAndLog("webkitIDBKeyRange.rightBound(" + value + "," + open + ")");
shouldBe("keyRange.right", "" + value);
shouldBeNull("keyRange.left");
shouldBe("keyRange.flags", open ? "keyRange.RIGHT_OPEN | keyRange.RIGHT_BOUND" : "keyRange.RIGHT_BOUND");
@@ -40,7 +40,7 @@ function checkRightBoundKeyRange(value, open)
function checkBoundKeyRange(left, right, openLeft, openRight)
{
- keyRange = evalAndLog("IDBKeyRange.bound(" + left + "," + right + "," + openLeft + "," + openRight + ")");
+ keyRange = evalAndLog("webkitIDBKeyRange.bound(" + left + "," + right + "," + openLeft + "," + openRight + ")");
shouldBe("keyRange.left", "" + left);
shouldBe("keyRange.right", "" + right);
leftFlags = keyRange.flags & (keyRange.LEFT_OPEN | keyRange.LEFT_BOUND);
@@ -51,22 +51,22 @@ function checkBoundKeyRange(left, right, openLeft, openRight)
function test()
{
- shouldBeTrue("'SINGLE' in IDBKeyRange");
- shouldBeTrue("'LEFT_OPEN' in IDBKeyRange");
- shouldBeTrue("'RIGHT_OPEN' in IDBKeyRange");
- shouldBeTrue("'LEFT_BOUND' in IDBKeyRange");
- shouldBeTrue("'RIGHT_BOUND' in IDBKeyRange");
- shouldBeFalse("'left' in IDBKeyRange");
- shouldBeFalse("'right' in IDBKeyRange");
- shouldBeFalse("'flags' in IDBKeyRange");
- shouldBeTrue("'only' in IDBKeyRange");
- shouldBeTrue("'leftBound' in IDBKeyRange");
- shouldBeTrue("'rightBound' in IDBKeyRange");
- shouldBeTrue("'bound' in IDBKeyRange");
+ shouldBeTrue("'SINGLE' in webkitIDBKeyRange");
+ shouldBeTrue("'LEFT_OPEN' in webkitIDBKeyRange");
+ shouldBeTrue("'RIGHT_OPEN' in webkitIDBKeyRange");
+ shouldBeTrue("'LEFT_BOUND' in webkitIDBKeyRange");
+ shouldBeTrue("'RIGHT_BOUND' in webkitIDBKeyRange");
+ shouldBeFalse("'left' in webkitIDBKeyRange");
+ shouldBeFalse("'right' in webkitIDBKeyRange");
+ shouldBeFalse("'flags' in webkitIDBKeyRange");
+ shouldBeTrue("'only' in webkitIDBKeyRange");
+ shouldBeTrue("'leftBound' in webkitIDBKeyRange");
+ shouldBeTrue("'rightBound' in webkitIDBKeyRange");
+ shouldBeTrue("'bound' in webkitIDBKeyRange");
debug("");
- var instance = evalAndLog("instance = IDBKeyRange.only(1)");
+ var instance = evalAndLog("instance = webkitIDBKeyRange.only(1)");
shouldBeTrue("'SINGLE' in instance");
shouldBeTrue("'LEFT_OPEN' in instance");
shouldBeTrue("'RIGHT_OPEN' in instance");
diff --git a/LayoutTests/storage/indexeddb/objectstore-basics-expected.txt b/LayoutTests/storage/indexeddb/objectstore-basics-expected.txt
index 7b5439a..d22e6f0 100644
--- a/LayoutTests/storage/indexeddb/objectstore-basics-expected.txt
+++ b/LayoutTests/storage/indexeddb/objectstore-basics-expected.txt
@@ -3,7 +3,7 @@ Test the basics of IndexedDB's IDBObjectStore.
On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-indexedDB.open('name', 'description')
+webkitIndexedDB.open('name', 'description')
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
@@ -22,13 +22,13 @@ PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
db = event.result
-db.createObjectStore('storeName', null)
+db.setVersion('new version')
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
An event should fire shortly...
-createSuccess():
+setVersionSuccess():
Success event fired:
PASS 'result' in event is true
PASS 'code' in event is false
@@ -40,23 +40,34 @@ PASS 'onerror' in event.target is true
PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
-store = event.result
+trans = event.result
+PASS trans !== null is true
+Deleted all object stores.
+creatObjectStore():
+store = db.createObjectStore('storeName', null)
storeNames = db.objectStores
PASS store.name is "storeName"
PASS store.keyPath is null
PASS storeNames.contains('storeName') is true
PASS storeNames.length is 1
-Ask for a store that doesn't exist:
+Ask for an index that doesn't exist:
index = store.index('asdf')
-PASS index is null
-FAIL Asking for a store that doesn't exist should have thrown.
-event.result.createIndex('indexName', 'x', true)
+PASS Exception thrown.
+createIndex():
+index = store.createIndex('indexName', 'x', true)
+PASS index !== null is true
+PASS store.indexNames.contains('indexName') is true
+index = store.index('indexName')
+PASS index !== null is true
+Ask for an index that doesn't exist:
+index = store.index('asdf')
+PASS Exception thrown.
+db.setVersion("version fail")
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
An event should fire shortly...
-addIndexSuccess():
Success event fired:
PASS 'result' in event is true
PASS 'code' in event is false
@@ -68,15 +79,25 @@ PASS 'onerror' in event.target is true
PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
-PASS event.result !== null is true
-PASS event.source.indexNames.contains('indexName') is true
-index = event.source.index('indexName')
-PASS index !== null is true
-Ask for a store that doesn't exist:
-index = store.index('asdf')
-PASS index is null
-FAIL Asking for a store that doesn't exist should have thrown.
-event.source.add({x: 'value'}, 'key')
+PASS db.version is "version fail"
+setVersionTrans = event.result
+PASS setVersionTrans !== null is true
+store = setVersionTrans.objectStore('storeName')
+index = store.createIndex('indexFail', 'x')
+PASS db.version is "new version"
+PASS store.indexNames is ['indexName']
+PASS store.indexNames.length is 1
+PASS store.indexNames.contains('') is false
+PASS store.indexNames.contains('indexFail') is false
+PASS store.indexNames.contains('indexName') is true
+PASS store.indexNames[0] is "indexName"
+PASS store.indexNames[1] is null
+PASS store.indexNames[100] is null
+PASS store.indexNames.item(1) is null
+PASS store.indexNames.item(100) is null
+transaction = db.transaction()
+store = transaction.objectStore('storeName')
+store.add({x: 'value'}, 'key')
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
@@ -113,7 +134,7 @@ PASS 'onerror' in event.target is true
PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
-PASS event.code is IDBDatabaseException.UNKNOWN_ERR
+PASS event.code is webkitIDBDatabaseException.UNKNOWN_ERR
db.transaction()
store = transaction.objectStore('storeName')
store.get('key')
diff --git a/LayoutTests/storage/indexeddb/objectstore-basics.html b/LayoutTests/storage/indexeddb/objectstore-basics.html
index b2d383a..9730db8 100644
--- a/LayoutTests/storage/indexeddb/objectstore-basics.html
+++ b/LayoutTests/storage/indexeddb/objectstore-basics.html
@@ -16,7 +16,7 @@ if (window.layoutTestController)
function test()
{
- result = evalAndLog("indexedDB.open('name', 'description')");
+ result = evalAndLog("webkitIndexedDB.open('name', 'description')");
verifyResult(result);
result.onsuccess = openSuccess;
result.onerror = unexpectedErrorCallback;
@@ -26,21 +26,29 @@ function openSuccess()
{
debug("openSuccess():");
verifySuccessEvent(event);
- db = evalAndLog("db = event.result");
+ window.db = evalAndLog("db = event.result");
- deleteAllObjectStores(db);
-
- result = evalAndLog("db.createObjectStore('storeName', null)");
+ result = evalAndLog("db.setVersion('new version')");
verifyResult(result);
- result.onsuccess = createSuccess;
+ result.onsuccess = setVersionSuccess;
result.onerror = unexpectedErrorCallback;
}
-function createSuccess()
+function setVersionSuccess()
{
- debug("createSuccess():");
+ debug("setVersionSuccess():");
verifySuccessEvent(event);
- var store = evalAndLog("store = event.result");
+ window.trans = evalAndLog("trans = event.result");
+ shouldBeTrue("trans !== null");
+ trans.onabort = unexpectedAbortCallback;
+
+ deleteAllObjectStores(db, createObjectStore);
+}
+
+function createObjectStore()
+{
+ debug("creatObjectStore():");
+ window.store = evalAndLog("store = db.createObjectStore('storeName', null)");
var storeNames = evalAndLog("storeNames = db.objectStores");
shouldBeEqualToString("store.name", "storeName");
@@ -49,42 +57,92 @@ function createSuccess()
shouldBe("storeNames.length", "1");
// FIXME: test all of object store's methods.
- debug("Ask for a store that doesn't exist:");
+ debug("Ask for an index that doesn't exist:");
try {
- index = evalAndLog("index = store.index('asdf')");
- shouldBeNull("index"); // Returning null is wrong, but less wrong than returning an actual object!
+ debug("index = store.index('asdf')");
+ index = store.index('asdf');
testFailed("Asking for a store that doesn't exist should have thrown.");
} catch (err) {
- testPassed("Error thrown.");
+ testPassed("Exception thrown.");
// FIXME: Verify the correct exception thrown.
}
- result = evalAndLog("event.result.createIndex('indexName', 'x', true)"); // true == unique requirement.
- verifyResult(result);
- result.onsuccess = addIndexSuccess;
- result.onerror = unexpectedErrorCallback;
+ createIndex();
}
-function addIndexSuccess()
+function createIndex()
{
- debug("addIndexSuccess():");
- verifySuccessEvent(event);
- shouldBeTrue("event.result !== null");
- shouldBeTrue("event.source.indexNames.contains('indexName')");
- index = evalAndLog("index = event.source.index('indexName')");
+ debug("createIndex():");
+ var index = evalAndLog("index = store.createIndex('indexName', 'x', true)"); // true == unique requirement.
shouldBeTrue("index !== null");
-
- debug("Ask for a store that doesn't exist:");
+ shouldBeTrue("store.indexNames.contains('indexName')");
+ index = evalAndLog("index = store.index('indexName')");
+ shouldBeTrue("index !== null");
+
+ debug("Ask for an index that doesn't exist:");
try {
- index = evalAndLog("index = store.index('asdf')");
- shouldBeNull("index"); // Returning null is wrong, but less wrong than returning an actual object!
+ debug("index = store.index('asdf')");
+ index = store.index('asdf');
testFailed("Asking for a store that doesn't exist should have thrown.");
} catch (err) {
- testPassed("Error thrown.");
+ testPassed("Exception thrown.");
// FIXME: Verify the correct exception thrown.
}
- result = evalAndLog("event.source.add({x: 'value'}, 'key')");
+ commitAndContinue();
+}
+
+function commitAndContinue()
+{
+ window.setTimeout(testSetVersionAbort, 0);
+}
+
+function testSetVersionAbort()
+{
+ result = evalAndLog('db.setVersion("version fail")');
+ verifyResult(result);
+ result.onsuccess = createAnotherIndex;
+ result.onerror = unexpectedErrorCallback;
+}
+
+function createAnotherIndex()
+{
+ verifySuccessEvent(event);
+ shouldBeEqualToString("db.version", "version fail");
+
+ var setVersionTrans = evalAndLog("setVersionTrans = event.result");
+ shouldBeTrue("setVersionTrans !== null");
+ setVersionTrans.oncomplete = unexpectedCompleteCallback;
+ setVersionTrans.onabort = checkMetadata;
+ window.store = evalAndLog("store = setVersionTrans.objectStore('storeName')");
+ var index = evalAndLog("index = store.createIndex('indexFail', 'x')");
+
+ setVersionTrans.abort();
+}
+
+function checkMetadata()
+{
+ shouldBeEqualToString("db.version", "new version");
+ shouldBe("store.indexNames", "['indexName']");
+ shouldBe("store.indexNames.length", "1");
+ shouldBe("store.indexNames.contains('')", "false");
+ shouldBe("store.indexNames.contains('indexFail')", "false");
+ shouldBe("store.indexNames.contains('indexName')", "true");
+ shouldBeEqualToString("store.indexNames[0]", "indexName");
+ shouldBeNull("store.indexNames[1]");
+ shouldBeNull("store.indexNames[100]");
+ shouldBeNull("store.indexNames.item(1)");
+ shouldBeNull("store.indexNames.item(100)");
+ addData();
+}
+
+
+function addData()
+{
+ var transaction = evalAndLog("transaction = db.transaction()");
+ transaction.onabort = unexpectedAbortCallback;
+ window.store = evalAndLog("store = transaction.objectStore('storeName')");
+ result = evalAndLog("store.add({x: 'value'}, 'key')");
verifyResult(result);
result.onsuccess = addSuccess;
result.onerror = unexpectedErrorCallback;
@@ -107,7 +165,7 @@ function addAgainFailure()
debug("addAgainFailure():");
verifyErrorEvent(event);
// FIXME: This error code needs to be specced.
- shouldBe("event.code", "IDBDatabaseException.UNKNOWN_ERR");
+ shouldBe("event.code", "webkitIDBDatabaseException.UNKNOWN_ERR");
transaction = evalAndLog("db.transaction()");
transaction.onabort = unexpectedErrorCallback;
diff --git a/LayoutTests/storage/indexeddb/objectstore-cursor-expected.txt b/LayoutTests/storage/indexeddb/objectstore-cursor-expected.txt
index e7211f6..881fe92 100644
--- a/LayoutTests/storage/indexeddb/objectstore-cursor-expected.txt
+++ b/LayoutTests/storage/indexeddb/objectstore-cursor-expected.txt
@@ -3,7 +3,7 @@ Test IndexedDB's objectStore.openCursor + the cursor it produces in depth.
On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-indexedDB.open('someDB', 'some description')
+webkitIndexedDB.open('someDB', 'some description')
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
@@ -21,7 +21,7 @@ PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
db = event.result
-db.createObjectStore('someObjectStore')
+db.setVersion('new version')
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
@@ -38,18 +38,10 @@ PASS 'onerror' in event.target is true
PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
-objectStore = event.result
-Success event fired:
-PASS 'result' in event is true
-PASS 'code' in event is false
-PASS 'message' in event is false
-PASS 'source' in event is true
-PASS event.source != null is true
-PASS 'onsuccess' in event.target is true
-PASS 'onerror' in event.target is true
-PASS 'readyState' in event.target is true
-PASS event.target.readyState is event.target.DONE
-
+trans = event.result
+PASS trans !== null is true
+Deleted all object stores.
+db.createObjectStore('someObjectStore')
objectStore.add('', testData[nextToAdd])
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
diff --git a/LayoutTests/storage/indexeddb/objectstore-cursor.html b/LayoutTests/storage/indexeddb/objectstore-cursor.html
index 25e9456..d9ad805 100644
--- a/LayoutTests/storage/indexeddb/objectstore-cursor.html
+++ b/LayoutTests/storage/indexeddb/objectstore-cursor.html
@@ -28,38 +28,44 @@ window.testData = [
function openDatabase()
{
- result = evalAndLog("indexedDB.open('someDB', 'some description')");
+ result = evalAndLog("webkitIndexedDB.open('someDB', 'some description')");
verifyResult(result);
- result.onsuccess = openObjectStore;
+ result.onsuccess = setVersion;
result.onerror = unexpectedErrorCallback;
}
-function openObjectStore()
+function setVersion()
{
verifySuccessEvent(event);
window.db = evalAndLog("db = event.result");
- deleteAllObjectStores(db);
-
- result = evalAndLog("db.createObjectStore('someObjectStore')");
+ result = evalAndLog("db.setVersion('new version')");
verifyResult(result);
- result.onsuccess = startAddingData;
+ result.onsuccess = deleteExisting;
result.onerror = unexpectedErrorCallback;
}
-
-function startAddingData()
+
+function deleteExisting()
{
verifySuccessEvent(event);
- window.objectStore = evalAndLog("objectStore = event.result");
+ window.trans = evalAndLog("trans = event.result");
+ shouldBeTrue("trans !== null");
+ trans.onabort = unexpectedAbortCallback;
+ deleteAllObjectStores(db, startAddingData);
+}
+
+function startAddingData()
+{
+ window.objectStore = evalAndLog("db.createObjectStore('someObjectStore')");
window.nextToAdd = 0;
addData();
}
function addData()
{
- // We cheat when called for the first time; we're in the context of the objectStore success event.
- verifySuccessEvent(event);
+ if (window.nextToAdd > 0)
+ verifySuccessEvent(event);
result = evalAndLog("objectStore.add('', testData[nextToAdd])");
verifyResult(result);
@@ -93,7 +99,7 @@ function scheduleTests()
}
debug("Running tests...");
- setTimeout(runNextTest, 0);
+ runNextTest();
}
function runNextTest()
@@ -152,13 +158,13 @@ function runNextTest()
var keyRange;
if (lower !== null && upper !== null)
- keyRange = IDBKeyRange.bound(testData[lower], testData[upper], lowerIsOpen, upperIsOpen);
+ keyRange = webkitIDBKeyRange.bound(testData[lower], testData[upper], lowerIsOpen, upperIsOpen);
else if (lower !== null)
- keyRange = IDBKeyRange.leftBound(testData[lower], lowerIsOpen);
+ keyRange = webkitIDBKeyRange.leftBound(testData[lower], lowerIsOpen);
else
- keyRange = IDBKeyRange.rightBound(testData[upper], upperIsOpen);
+ keyRange = webkitIDBKeyRange.rightBound(testData[upper], upperIsOpen);
- // FIXME: Should be IDBCursor.NEXT : IDBCursor.PREV, but we can't do that yet.
+ // FIXME: Should be webkitIDBCursor.NEXT : webkitIDBCursor.PREV, but we can't do that yet.
var request = objectStore.openCursor(keyRange, ascending ? 0 : 2);
request.onsuccess = cursorIteration;
request.onerror = unexpectedErrorCallback;
@@ -182,12 +188,12 @@ function cursorIteration()
{
if (expectedIndex === null) {
shouldBeNull("event.result");
- setTimeout(runNextTest, 0);
+ runNextTest();
return;
}
if (event.result === null) {
- testFailed("Event.result should not be null.")
- setTimeout(runNextTest, 0);
+ testFailed("Event.result should not be null.");
+ runNextTest();
return;
}
diff --git a/LayoutTests/storage/indexeddb/objectstore-removeobjectstore-expected.txt b/LayoutTests/storage/indexeddb/objectstore-removeobjectstore-expected.txt
index b7ba473..b6b20a2 100644
--- a/LayoutTests/storage/indexeddb/objectstore-removeobjectstore-expected.txt
+++ b/LayoutTests/storage/indexeddb/objectstore-removeobjectstore-expected.txt
@@ -1,9 +1,9 @@
-Test IndexedDB's IDBObjectStore.removeObjectStore().
+Test IndexedDB's webkitIDBObjectStore.removeObjectStore().
On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-indexedDB.open('name', 'description')
+webkitIndexedDB.open('name', 'description')
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
@@ -21,7 +21,7 @@ PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
db = event.result
-db.createObjectStore('storeName', null)
+db.setVersion('new version')
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
@@ -38,7 +38,13 @@ PASS 'onerror' in event.target is true
PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
-event.result.add('value', 'key')
+trans = event.result
+PASS trans !== null is true
+Deleted all object stores.
+store = db.createObjectStore('storeName', null)
+store.createIndex('indexName', '')
+PASS store.indexNames.contains('indexName') is true
+store.add('value', 'key')
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
@@ -75,7 +81,7 @@ PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
PASS event.result is "value"
-event.source.createIndex('indexName', '')
+db.setVersion('new version')
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
@@ -92,41 +98,10 @@ PASS 'onerror' in event.target is true
PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
-PASS event.source.indexNames.contains('indexName') is true
+trans = event.result
+PASS trans !== null is true
db.removeObjectStore('storeName')
-PASS 'onsuccess' in result is true
-PASS 'onerror' in result is true
-PASS 'readyState' in result is true
-An event should fire shortly...
-
-Success event fired:
-PASS 'result' in event is true
-PASS 'code' in event is false
-PASS 'message' in event is false
-PASS 'source' in event is true
-PASS event.source != null is true
-PASS 'onsuccess' in event.target is true
-PASS 'onerror' in event.target is true
-PASS 'readyState' in event.target is true
-PASS event.target.readyState is event.target.DONE
-
db.createObjectStore('storeName', null)
-PASS 'onsuccess' in result is true
-PASS 'onerror' in result is true
-PASS 'readyState' in result is true
-An event should fire shortly...
-
-Success event fired:
-PASS 'result' in event is true
-PASS 'code' in event is false
-PASS 'message' in event is false
-PASS 'source' in event is true
-PASS event.source != null is true
-PASS 'onsuccess' in event.target is true
-PASS 'onerror' in event.target is true
-PASS 'readyState' in event.target is true
-PASS event.target.readyState is event.target.DONE
-
db.transaction()
store = transaction.objectStore('storeName')
store.get('key')
diff --git a/LayoutTests/storage/indexeddb/objectstore-removeobjectstore.html b/LayoutTests/storage/indexeddb/objectstore-removeobjectstore.html
index 7878c7f..c4418bc 100644
--- a/LayoutTests/storage/indexeddb/objectstore-removeobjectstore.html
+++ b/LayoutTests/storage/indexeddb/objectstore-removeobjectstore.html
@@ -10,36 +10,46 @@
<div id="console"></div>
<script>
-description("Test IndexedDB's IDBObjectStore.removeObjectStore().");
+description("Test IndexedDB's webkitIDBObjectStore.removeObjectStore().");
if (window.layoutTestController)
layoutTestController.waitUntilDone();
function test()
{
- result = evalAndLog("indexedDB.open('name', 'description')");
+ result = evalAndLog("webkitIndexedDB.open('name', 'description')");
verifyResult(result);
- result.onsuccess = createObjectStore;
+ result.onsuccess = startSetVersion;
result.onerror = unexpectedErrorCallback;
}
-function createObjectStore()
+function startSetVersion()
{
verifySuccessEvent(event);
db = evalAndLog("db = event.result");
- deleteAllObjectStores(db);
-
- result = evalAndLog("db.createObjectStore('storeName', null)");
+ result = evalAndLog("db.setVersion('new version')");
verifyResult(result);
- result.onsuccess = addValue;
+ result.onsuccess = deleteExisting;
result.onerror = unexpectedErrorCallback;
}
-function addValue()
+function deleteExisting()
{
verifySuccessEvent(event);
+ window.trans = evalAndLog("trans = event.result");
+ shouldBeTrue("trans !== null");
+
+ deleteAllObjectStores(db, createObjectStoreAndAddValue);
+}
+
+function createObjectStoreAndAddValue()
+{
+ store = evalAndLog("store = db.createObjectStore('storeName', null)");
- result = evalAndLog("event.result.add('value', 'key')");
+ window.index = evalAndLog("store.createIndex('indexName', '')");
+ shouldBeTrue("store.indexNames.contains('indexName')");
+
+ result = evalAndLog("store.add('value', 'key')");
verifyResult(result);
result.onsuccess = getValue;
result.onerror = unexpectedErrorCallback;
@@ -64,42 +74,31 @@ function addIndex()
verifySuccessEvent(event);
shouldBeEqualToString("event.result", "value");
- result = evalAndLog("event.source.createIndex('indexName', '')");
+ result = evalAndLog("db.setVersion('new version')");
verifyResult(result);
- result.onsuccess = commitTransaction;
+ result.onsuccess = removeObjectStore;
result.onerror = unexpectedErrorCallback;
}
-function commitTransaction()
+function removeObjectStore()
{
verifySuccessEvent(event);
- shouldBeTrue("event.source.indexNames.contains('indexName')");
- // Let the transaction commit.
- window.setTimeout('removeObjectStore()', 0);
-}
+ window.trans = evalAndLog("trans = event.result");
+ shouldBeTrue("trans !== null");
+ trans.onabort = unexpectedAbortCallback;
-function removeObjectStore()
-{
- result = evalAndLog("db.removeObjectStore('storeName')");
- verifyResult(result);
- result.onsuccess = createObjectStoreAgain;
- result.onerror = unexpectedErrorCallback;
+ evalAndLog("db.removeObjectStore('storeName')");
+ createObjectStoreAgain();
}
function createObjectStoreAgain()
{
- verifySuccessEvent(event);
-
- result = evalAndLog("db.createObjectStore('storeName', null)");
- verifyResult(result);
- result.onsuccess = getValueAgain;
- result.onerror = unexpectedErrorCallback;
+ evalAndLog("db.createObjectStore('storeName', null)");
+ getValueAgain();
}
function getValueAgain()
{
- verifySuccessEvent(event);
-
transaction = evalAndLog("db.transaction()");
transaction.onabort = unexpectedErrorCallback;
var store = evalAndLog("store = transaction.objectStore('storeName')");
diff --git a/LayoutTests/storage/indexeddb/open-cursor-expected.txt b/LayoutTests/storage/indexeddb/open-cursor-expected.txt
index bda103f..1bca527 100644
--- a/LayoutTests/storage/indexeddb/open-cursor-expected.txt
+++ b/LayoutTests/storage/indexeddb/open-cursor-expected.txt
@@ -3,7 +3,7 @@ Test IndexedDB's openCursor.
On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-indexedDB.open('name', 'description')
+webkitIndexedDB.open('name', 'description')
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
@@ -21,12 +21,13 @@ PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
db = event.result
-db.createObjectStore('test')
+db.setVersion('new version')
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
An event should fire shortly...
+setVersionSuccess():
Success event fired:
PASS 'result' in event is true
PASS 'code' in event is false
@@ -38,7 +39,10 @@ PASS 'onerror' in event.target is true
PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
-objectStore = event.result
+trans = event.result
+PASS trans !== null is true
+Deleted all object stores.
+objectStore = db.createObjectStore('test')
objectStore.add('myValue', 'myKey')
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
@@ -46,7 +50,7 @@ PASS 'readyState' in result is true
An event should fire shortly...
Opening cursor
-objectStore.openCursor(keyRange)
+event.source.openCursor(keyRange)
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
diff --git a/LayoutTests/storage/indexeddb/open-cursor.html b/LayoutTests/storage/indexeddb/open-cursor.html
index 03d1da0..ec62f2c 100644
--- a/LayoutTests/storage/indexeddb/open-cursor.html
+++ b/LayoutTests/storage/indexeddb/open-cursor.html
@@ -25,7 +25,7 @@ function emptyCursorSuccess()
function openEmptyCursor()
{
debug("Opening an empty cursor.");
- keyRange = IDBKeyRange.leftBound("InexistentKey");
+ keyRange = webkitIDBKeyRange.leftBound("InexistentKey");
result = evalAndLog("objectStore.openCursor(keyRange)");
verifyResult(result);
result.onsuccess = emptyCursorSuccess;
@@ -47,26 +47,31 @@ function cursorSuccess()
function openCursor()
{
debug("Opening cursor");
- keyRange = IDBKeyRange.leftBound("myKey");
- result = evalAndLog("objectStore.openCursor(keyRange)");
+ keyRange = webkitIDBKeyRange.leftBound("myKey");
+ result = evalAndLog("event.source.openCursor(keyRange)");
verifyResult(result);
result.onsuccess = cursorSuccess;
result.onerror = unexpectedErrorCallback;
-}
-
-function populateObjectStore(objectStore)
-{
+}
+
+function createAndPopulateObjectStore()
+{
+ var objectStore = evalAndLog("objectStore = db.createObjectStore('test')");
result = evalAndLog("objectStore.add('myValue', 'myKey')");
verifyResult(result);
result.onsuccess = openCursor;
result.onerror = unexpectedErrorCallback;
}
-function createObjectStoreSuccess()
+function setVersionSuccess()
{
+ debug("setVersionSuccess():");
verifySuccessEvent(event);
- var objectStore = evalAndLog("objectStore = event.result");
- populateObjectStore(objectStore);
+ window.trans = evalAndLog("trans = event.result");
+ shouldBeTrue("trans !== null");
+ trans.onabort = unexpectedAbortCallback;
+
+ deleteAllObjectStores(db, createAndPopulateObjectStore);
}
function openSuccess()
@@ -74,17 +79,15 @@ function openSuccess()
verifySuccessEvent(event);
var db = evalAndLog("db = event.result");
- deleteAllObjectStores(db);
-
- result = evalAndLog("db.createObjectStore('test')");
+ result = evalAndLog("db.setVersion('new version')");
verifyResult(result);
- result.onsuccess = createObjectStoreSuccess;
+ result.onsuccess = setVersionSuccess;
result.onerror = unexpectedErrorCallback;
}
function test()
{
- result = evalAndLog("indexedDB.open('name', 'description')");
+ result = evalAndLog("webkitIndexedDB.open('name', 'description')");
verifyResult(result);
result.onsuccess = openSuccess;
result.onerror = unexpectedErrorCallback;
diff --git a/LayoutTests/storage/indexeddb/queued-commands-expected.txt b/LayoutTests/storage/indexeddb/queued-commands-expected.txt
new file mode 100644
index 0000000..e2e20af
--- /dev/null
+++ b/LayoutTests/storage/indexeddb/queued-commands-expected.txt
@@ -0,0 +1,104 @@
+Verify that queuing up several commands works (and they all fire).
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+webkitIndexedDB.open('name', 'description')
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+db = event.result
+db.setVersion('new version')
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+setVersionSuccess():
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+trans = event.result
+PASS trans !== null is true
+Deleted all object stores.
+db.createObjectStore('storeName', null)
+store.createIndex('indexName', 'x')
+store.add({x: 'value', y: 'zzz'}, 'key')
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+store.add({x: 'value2', y: 'zzz2'}, 'key2')
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+store.put({x: 'valu2', y: 'zz2'}, 'ky2')
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+PASS 0 is 0
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+PASS 1 is 1
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+PASS 2 is 2
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/storage/indexeddb/queued-commands.html b/LayoutTests/storage/indexeddb/queued-commands.html
new file mode 100644
index 0000000..7dc94c3
--- /dev/null
+++ b/LayoutTests/storage/indexeddb/queued-commands.html
@@ -0,0 +1,87 @@
+<html>
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+<script src="../../fast/js/resources/js-test-post-function.js"></script>
+<script src="resources/shared.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+<script>
+
+description("Verify that queuing up several commands works (and they all fire).");
+if (window.layoutTestController)
+ layoutTestController.waitUntilDone();
+
+function test()
+{
+ result = evalAndLog("webkitIndexedDB.open('name', 'description')");
+ verifyResult(result);
+ result.onsuccess = setVersion;
+ result.onerror = unexpectedErrorCallback;
+}
+
+function setVersion()
+{
+ verifySuccessEvent(event);
+ db = evalAndLog("db = event.result");
+
+ result = evalAndLog("db.setVersion('new version')");
+ verifyResult(result);
+ result.onsuccess = deleteExisting;
+ result.onerror = unexpectedErrorCallback;
+}
+
+function deleteExisting()
+{
+ debug("setVersionSuccess():");
+ verifySuccessEvent(event);
+ window.trans = evalAndLog("trans = event.result");
+ shouldBeTrue("trans !== null");
+ trans.onabort = unexpectedAbortCallback;
+
+ deleteAllObjectStores(db, createIndex);
+}
+
+function createIndex()
+{
+ window.store = evalAndLog("db.createObjectStore('storeName', null)");
+ window.indexObject = evalAndLog("store.createIndex('indexName', 'x')");
+
+ result = evalAndLog("store.add({x: 'value', y: 'zzz'}, 'key')");
+ verifyResult(result);
+ result.onsuccess = function() { verifyAdd(0); };
+ result.onerror = unexpectedErrorCallback;
+
+ result = evalAndLog("store.add({x: 'value2', y: 'zzz2'}, 'key2')");
+ verifyResult(result);
+ result.onsuccess = function() { verifyAdd(1); };
+ result.onerror = unexpectedErrorCallback;
+
+ result = evalAndLog("store.put({x: 'valu2', y: 'zz2'}, 'ky2')");
+ verifyResult(result);
+ result.onsuccess = function() { verifyAdd(2); };
+ result.onerror = unexpectedErrorCallback;
+
+ window.addCount = 0;
+}
+
+function verifyAdd(expected)
+{
+ verifySuccessEvent(event);
+ shouldBe("" + addCount++, "" + expected);
+
+ if (addCount == 3)
+ done();
+ if (addCount > 3)
+ testFailed("Unexpected call to verifyAdd!");
+}
+
+test();
+
+var successfullyParsed = true;
+
+</script>
+</body>
+</html>
diff --git a/LayoutTests/storage/indexeddb/resources/shared.js b/LayoutTests/storage/indexeddb/resources/shared.js
index 65da3bf..01ec606 100644
--- a/LayoutTests/storage/indexeddb/resources/shared.js
+++ b/LayoutTests/storage/indexeddb/resources/shared.js
@@ -40,6 +40,12 @@ function verifyAbortEvent(event)
shouldBeEqualToString("event.type", "abort");
}
+function verifyCompleteEvent(event)
+{
+ debug("Complete event fired:");
+ shouldBeEqualToString("event.type", "complete");
+}
+
function verifyResult(result)
{
shouldBeTrue("'onsuccess' in result");
@@ -65,9 +71,28 @@ function unexpectedErrorCallback()
done();
}
-function deleteAllObjectStores(db)
+function unexpectedAbortCallback()
+{
+ testFailed("Abort function called unexpectedly!");
+ debug("");
+ verifyAbortEvent(event);
+ done();
+}
+
+function unexpectedCompleteCallback()
{
- objectStores = db.objectStores;
- for (var i = 0; i < objectStores.length; ++i)
- db.removeObjectStore(objectStores[i]);
+ testFailed("oncomplete function called unexpectedly!");
+ debug("");
+ verifyCompleteEvent(event);
+ done();
+}
+
+// FIXME: remove the onfinished parameter.
+function deleteAllObjectStores(db, onfinished)
+{
+ while (db.objectStores.length)
+ db.removeObjectStore(db.objectStores.item(0));
+
+ debug("Deleted all object stores.");
+ onfinished();
}
diff --git a/LayoutTests/storage/indexeddb/transaction-basics-expected.txt b/LayoutTests/storage/indexeddb/transaction-basics-expected.txt
index bba62f0..b493946 100644
--- a/LayoutTests/storage/indexeddb/transaction-basics-expected.txt
+++ b/LayoutTests/storage/indexeddb/transaction-basics-expected.txt
@@ -3,15 +3,15 @@ Test IndexedDB transaction basics.
On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-PASS 'indexedDB' in window is true
-PASS indexedDB == null is false
-indexedDB.open('name', 'description')
+PASS 'webkitIndexedDB' in window is true
+PASS webkitIndexedDB == null is false
+webkitIndexedDB.open('name', 'description')
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
An event should fire shortly...
-createObjectStoreCallback():
+openSuccess():
Success event fired:
PASS 'result' in event is true
PASS 'code' in event is false
@@ -24,12 +24,32 @@ PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
db = event.result
-db.createObjectStore('storeName', null)
+result = db.setVersion('version 1')
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+Deleted all object stores.
+PASS window.db.objectStores is []
+PASS window.db.objectStores.length is 0
+PASS window.db.objectStores.contains('storeFail') is false
+PASS window.db.objectStores is []
+PASS window.db.objectStores.length is 0
+PASS window.db.objectStores.contains('storeFail') is false
+result = startSetVersion('version fail')
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
An event should fire shortly...
+addRemoveIDBObjects():
Success event fired:
PASS 'result' in event is true
PASS 'code' in event is false
@@ -41,11 +61,125 @@ PASS 'onerror' in event.target is true
PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
+trans = event.result
+PASS trans !== null is true
+store = db.createObjectStore('storeFail', null)
+index = store.createIndex('indexFail', 'x', false)
+db.removeObjectStore('storeFail')
+store.removeIndex('indexFail')
+PASS window.db.objectStores is []
+PASS window.db.objectStores.length is 0
+PASS window.db.objectStores.contains('storeFail') is false
+result = startSetVersion('version fail')
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+addRemoveAddIDBObjects():
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+trans = event.result
+PASS trans !== null is true
+store = db.createObjectStore('storeFail', null)
+index = store.createIndex('indexFail', 'x', false)
+db.removeObjectStore('storeFail')
+store.removeIndex('indexFail')
+store = db.createObjectStore('storeFail', null)
+index = store.createIndex('indexFail', 'x', false)
+PASS window.db.objectStores is []
+PASS window.db.objectStores.length is 0
+PASS window.db.objectStores.contains('storeFail') is false
+result = startSetVersion('version fail')
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+addIDBObjects():
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+trans = event.result
+PASS trans !== null is true
+store = db.createObjectStore('storeFail', null)
+index = store.createIndex('indexFail', 'x', false)
+PASS db.objectStores is ['storeFail']
+PASS db.objectStores.length is 1
+PASS db.objectStores.contains('storeFail') is true
+result = startSetVersion('version fail')
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+removeIDBObjects():
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+trans = event.result
+PASS trans !== null is true
+store = trans.objectStore('storeFail')
+store.removeIndex('indexFail')
+db.removeObjectStore('storeFail')
+PASS db.objectStores is ['storeFail']
+PASS db.objectStores.length is 1
+PASS db.objectStores.contains('storeFail') is true
+db.setVersion('new version')
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+setVersionSuccess():
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+trans = event.result
+PASS trans !== null is true
+Deleted all object stores.
+db.createObjectStore('storeName', null)
db.transaction()
store = transaction.objectStore('storeName')
PASS store.name is "storeName"
Abort event fired:
PASS event.type is "abort"
+Complete event fired:
+PASS event.type is "complete"
+PASS oncomplete event had fired
PASS successfullyParsed is true
TEST COMPLETE
diff --git a/LayoutTests/storage/indexeddb/transaction-basics.html b/LayoutTests/storage/indexeddb/transaction-basics.html
index cea5d5d..07fc685 100644
--- a/LayoutTests/storage/indexeddb/transaction-basics.html
+++ b/LayoutTests/storage/indexeddb/transaction-basics.html
@@ -16,48 +16,239 @@ if (window.layoutTestController)
function test()
{
- shouldBeTrue("'indexedDB' in window");
- shouldBeFalse("indexedDB == null");
+ shouldBeTrue("'webkitIndexedDB' in window");
+ shouldBeFalse("webkitIndexedDB == null");
- result = evalAndLog("indexedDB.open('name', 'description')");
+ result = evalAndLog("webkitIndexedDB.open('name', 'description')");
verifyResult(result);
result.onsuccess = openSuccess;
result.onerror = unexpectedErrorCallback;
+}
+
+function openSuccess()
+{
+ debug("openSuccess():");
+ verifySuccessEvent(event);
+ window.db = evalAndLog("db = event.result");
+ result = evalAndLog("result = db.setVersion('version 1')");
+ result.onsuccess = cleanDatabase;
+ result.onerror = unexpectedErrorCallback;
+}
+
+function cleanDatabase()
+{
+ verifySuccessEvent(event);
+ deleteAllObjectStores(db, checkMetadataEmpty);
+ commitAndContinue(testSetVersionAbort1);
+}
+
+function testSetVersionAbort1()
+{
+ checkMetadataEmpty();
+ result = evalAndLog("result = startSetVersion('version fail')");
+ result.onsuccess = addRemoveIDBObjects;
+}
+
+function addRemoveIDBObjects()
+{
+ debug("addRemoveIDBObjects():");
+ verifySuccessEvent(event);
+ var trans = evalAndLog("trans = event.result");
+ shouldBeTrue("trans !== null");
+ trans.onabort = testSetVersionAbort2;
+ trans.oncomplete = unexpectedCompleteCallback;
+
+ var store = evalAndLog("store = db.createObjectStore('storeFail', null)");
+ var index = evalAndLog("index = store.createIndex('indexFail', 'x', false)");
+
+ evalAndLog("db.removeObjectStore('storeFail')");
+ evalAndLog("store.removeIndex('indexFail')");
+
+ trans.abort();
+}
+
+function testSetVersionAbort2()
+{
+ checkMetadataEmpty();
+ result = evalAndLog("result = startSetVersion('version fail')");
+ result.onsuccess = addRemoveAddIDBObjects;
+}
+
+function addRemoveAddIDBObjects()
+{
+ debug("addRemoveAddIDBObjects():");
+ verifySuccessEvent(event);
+ var trans = evalAndLog("trans = event.result");
+ shouldBeTrue("trans !== null");
+ trans.onabort = testSetVersionAbort3;
+ trans.oncomplete = unexpectedCompleteCallback;
+
+ var store = evalAndLog("store = db.createObjectStore('storeFail', null)");
+ var index = evalAndLog("index = store.createIndex('indexFail', 'x', false)");
+
+ evalAndLog("db.removeObjectStore('storeFail')");
+ evalAndLog("store.removeIndex('indexFail')");
+
+ var store = evalAndLog("store = db.createObjectStore('storeFail', null)");
+ var index = evalAndLog("index = store.createIndex('indexFail', 'x', false)");
+
+ trans.abort();
+}
+
+function testSetVersionAbort3()
+{
+ checkMetadataEmpty();
+ result = evalAndLog("result = startSetVersion('version fail')");
+ result.onsuccess = addIDBObjects;
+}
+
+function addIDBObjects()
+{
+ debug("addIDBObjects():");
+ verifySuccessEvent(event);
+ var trans = evalAndLog("trans = event.result");
+ shouldBeTrue("trans !== null");
+ trans.onabort = testSetVersionAbort4;
+ trans.oncomplete = unexpectedCompleteCallback;
+
+ var store = evalAndLog("store = db.createObjectStore('storeFail', null)");
+ var index = evalAndLog("index = store.createIndex('indexFail', 'x', false)");
+
+ trans.abort();
+}
+
+function testSetVersionAbort4()
+{
+ checkMetadataEmpty();
+ result = evalAndLog("result = startSetVersion('version fail')");
+ result.onsuccess = addIDBObjectsAndCommit;
+}
+
+function addIDBObjects()
+{
+ debug("addIDBObjects():");
+ verifySuccessEvent(event);
+ var trans = evalAndLog("trans = event.result");
+ shouldBeTrue("trans !== null");
+ trans.onabort = unexpectedAbortCallback;
+
+ var store = evalAndLog("store = db.createObjectStore('storeFail', null)");
+ var index = evalAndLog("index = store.createIndex('indexFail', 'x', false)");
+
+ commitAndContinue(testSetVersionAbort5);
+}
+
+function commitAndContinue(continueFunction)
+{
+ window.setTimeout(continueFunction, 0);
+}
+
+function testSetVersionAbort5()
+{
+ checkMetadataExistingObjectStore();
+ result = evalAndLog("result = startSetVersion('version fail')");
+ result.onsuccess = removeIDBObjects;
+}
+
+function removeIDBObjects()
+{
+ debug("removeIDBObjects():");
+ verifySuccessEvent(event);
+ var trans = evalAndLog("trans = event.result");
+ shouldBeTrue("trans !== null");
+ trans.onabort = testSetVersionAbort6;
+ trans.oncomplete = unexpectedCompleteCallback;
+
+ var store = evalAndLog("store = trans.objectStore('storeFail')");
+ evalAndLog("store.removeIndex('indexFail')");
+ evalAndLog("db.removeObjectStore('storeFail')");
+
+ trans.abort();
+}
+
+function testSetVersionAbort6()
+{
+ checkMetadataExistingObjectStore();
+ setNewVersion();
+}
+
+function startSetVersion(versionName)
+{
+ result = db.setVersion(versionName);
+ verifyResult(result);
+ result.onerror = unexpectedErrorCallback;
+ return result;
+}
+
+function checkMetadataEmpty()
+{
+ shouldBe("window.db.objectStores", "[]");
+ shouldBe("window.db.objectStores.length", "0");
+ shouldBe("window.db.objectStores.contains('storeFail')", "false");
+}
+
+function checkMetadataExistingObjectStore()
+{
+ shouldBe("db.objectStores", "['storeFail']");
+ shouldBe("db.objectStores.length", "1");
+ shouldBe("db.objectStores.contains('storeFail')", "true");
}
-function openSuccess()
+function setNewVersion()
{
- debug("createObjectStoreCallback():");
- verifySuccessEvent(event);
- db = evalAndLog("db = event.result");
-
- deleteAllObjectStores(db);
-
- result = evalAndLog("db.createObjectStore('storeName', null)");
+ result = evalAndLog("db.setVersion('new version')");
verifyResult(result);
- result.onsuccess = createSuccess;
+ result.onsuccess = setVersionSuccess;
result.onerror = unexpectedErrorCallback;
}
-function createSuccess()
+function setVersionSuccess()
{
+ debug("setVersionSuccess():");
verifySuccessEvent(event);
+ window.trans = evalAndLog("trans = event.result");
+ shouldBeTrue("trans !== null");
+ trans.onabort = unexpectedAbortCallback;
+ trans.oncomplete = completeCallback;
+ window.completeEventFired = false;
+
+ deleteAllObjectStores(db, createObjectStoreAndStartTransaction);
+}
+
+function createObjectStoreAndStartTransaction()
+{
+ evalAndLog("db.createObjectStore('storeName', null)");
transaction = evalAndLog("db.transaction()");
transaction.onabort = abortCallback;
var store = evalAndLog("store = transaction.objectStore('storeName')");
shouldBeEqualToString("store.name", "storeName");
}
+function completeCallback()
+{
+ verifyCompleteEvent(event);
+ window.completeEventFired = true;
+}
+
function abortCallback()
{
verifyAbortEvent(event);
- done();
+ checkForCompleteEvent();
}
-test();
+function checkForCompleteEvent()
+{
+ if (completeEventFired) {
+ testPassed("oncomplete event had fired");
+ done();
+ } else
+ setTimeout(checkForCompleteEvent, 1);
+}
var successfullyParsed = true;
+test();
+
</script>
</body>
</html>