diff options
author | Ben Murdoch <benm@google.com> | 2010-10-22 13:02:20 +0100 |
---|---|---|
committer | Ben Murdoch <benm@google.com> | 2010-10-26 15:21:41 +0100 |
commit | a94275402997c11dd2e778633dacf4b7e630a35d (patch) | |
tree | e66f56c67e3b01f22c9c23cd932271ee9ac558ed /LayoutTests/storage | |
parent | 09e26c78506587b3f5d930d7bc72a23287ffbec0 (diff) | |
download | external_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')
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> |