diff options
Diffstat (limited to 'LayoutTests/storage/indexeddb')
8 files changed, 1150 insertions, 20 deletions
diff --git a/LayoutTests/storage/indexeddb/database-basics-expected.txt b/LayoutTests/storage/indexeddb/database-basics-expected.txt index 75c276d..1321f4d 100644 --- a/LayoutTests/storage/indexeddb/database-basics-expected.txt +++ b/LayoutTests/storage/indexeddb/database-basics-expected.txt @@ -24,10 +24,26 @@ PASS event.target.readyState is event.target.DONE db = event.result PASS db.name is "name" -PASS db.version is "" PASS db.objectStores is [] PASS db.objectStores.length is 0 PASS db.objectStores.contains('') is false + +Testing setVersion. +db.setVersion("version a") +PASS 'onsuccess' in result is true +PASS 'onerror' in result is true +PASS 'abort' in result is true +PASS 'readyState' in result is true +An event should fire shortly... + +db.setVersion("version b") +PASS 'onsuccess' in result is true +PASS 'onerror' in result is true +PASS 'abort' in result is true +PASS 'readyState' in result is true +An event should fire shortly... + +PASS db.version is "version b" PASS successfullyParsed is true TEST COMPLETE diff --git a/LayoutTests/storage/indexeddb/keyrange-expected.txt b/LayoutTests/storage/indexeddb/keyrange-expected.txt index fc61b2f..a510a80 100644 --- a/LayoutTests/storage/indexeddb/keyrange-expected.txt +++ b/LayoutTests/storage/indexeddb/keyrange-expected.txt @@ -14,7 +14,7 @@ PASS keyRange.flags is keyRange.SINGLE IDBKeyRange.leftBound(10,true) PASS keyRange.left is 10 PASS keyRange.right is null -PASS keyRange.flags is keyRange.LEFT_OPEN +PASS keyRange.flags is keyRange.LEFT_OPEN | keyRange.LEFT_BOUND IDBKeyRange.leftBound(11,false) PASS keyRange.left is 11 PASS keyRange.right is null @@ -26,7 +26,7 @@ PASS keyRange.flags is keyRange.LEFT_BOUND IDBKeyRange.leftBound('aa',true) PASS keyRange.left is 'aa' PASS keyRange.right is null -PASS keyRange.flags is keyRange.LEFT_OPEN +PASS keyRange.flags is keyRange.LEFT_OPEN | keyRange.LEFT_BOUND IDBKeyRange.leftBound('ab',false) PASS keyRange.left is 'ab' PASS keyRange.right is null @@ -38,7 +38,7 @@ PASS keyRange.flags is keyRange.LEFT_BOUND IDBKeyRange.rightBound(20,true) PASS keyRange.right is 20 PASS keyRange.left is null -PASS keyRange.flags is keyRange.RIGHT_OPEN +PASS keyRange.flags is keyRange.RIGHT_OPEN | keyRange.RIGHT_BOUND IDBKeyRange.rightBound(21,false) PASS keyRange.right is 21 PASS keyRange.left is null @@ -50,7 +50,7 @@ PASS keyRange.flags is keyRange.RIGHT_BOUND IDBKeyRange.rightBound('ba',true) PASS keyRange.right is 'ba' PASS keyRange.left is null -PASS keyRange.flags is keyRange.RIGHT_OPEN +PASS keyRange.flags is keyRange.RIGHT_OPEN | keyRange.RIGHT_BOUND IDBKeyRange.rightBound('bb',false) PASS keyRange.right is 'bb' PASS keyRange.left is null @@ -73,17 +73,17 @@ IDBKeyRange.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 +PASS rightFlags is keyRange.RIGHT_OPEN | keyRange.RIGHT_BOUND IDBKeyRange.bound(33,43,true,false) PASS keyRange.left is 33 PASS keyRange.right is 43 -PASS leftFlags is keyRange.LEFT_OPEN +PASS leftFlags is keyRange.LEFT_OPEN | keyRange.LEFT_BOUND PASS rightFlags is keyRange.RIGHT_BOUND IDBKeyRange.bound(34,44,true,true) PASS keyRange.left is 34 PASS keyRange.right is 44 -PASS leftFlags is keyRange.LEFT_OPEN -PASS rightFlags is keyRange.RIGHT_OPEN +PASS leftFlags is keyRange.LEFT_OPEN | keyRange.LEFT_BOUND +PASS rightFlags is keyRange.RIGHT_OPEN | keyRange.RIGHT_BOUND IDBKeyRange.bound('aaa','aba',false,false) PASS keyRange.left is 'aaa' PASS keyRange.right is 'aba' @@ -103,17 +103,17 @@ IDBKeyRange.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 +PASS rightFlags is keyRange.RIGHT_OPEN | keyRange.RIGHT_BOUND IDBKeyRange.bound('aae','abe',true,false) PASS keyRange.left is 'aae' PASS keyRange.right is 'abe' -PASS leftFlags is keyRange.LEFT_OPEN +PASS leftFlags is keyRange.LEFT_OPEN | keyRange.LEFT_BOUND PASS rightFlags is keyRange.RIGHT_BOUND IDBKeyRange.bound('aaf','abf',true,true) PASS keyRange.left is 'aaf' PASS keyRange.right is 'abf' -PASS leftFlags is keyRange.LEFT_OPEN -PASS rightFlags is keyRange.RIGHT_OPEN +PASS leftFlags is keyRange.LEFT_OPEN | keyRange.LEFT_BOUND +PASS rightFlags is keyRange.RIGHT_OPEN | keyRange.RIGHT_BOUND PASS successfullyParsed is true TEST COMPLETE diff --git a/LayoutTests/storage/indexeddb/objectstore-cursor-expected.txt b/LayoutTests/storage/indexeddb/objectstore-cursor-expected.txt new file mode 100644 index 0000000..ce5514a --- /dev/null +++ b/LayoutTests/storage/indexeddb/objectstore-cursor-expected.txt @@ -0,0 +1,886 @@ +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') +PASS 'onsuccess' in result is true +PASS 'onerror' in result is true +PASS 'abort' 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 'abort' in event.target is true +PASS 'readyState' in event.target is true +PASS event.target.readyState is event.target.DONE + +db = event.result +db.createObjectStore('someObjectStore') +PASS 'onsuccess' in result is true +PASS 'onerror' in result is true +PASS 'abort' 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 'abort' 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 'abort' in event.target is true +PASS 'readyState' in event.target is true +PASS event.target.readyState is event.target.DONE + +objectStore.add('', testData[nextToAdd]) +PASS 'onsuccess' in result is true +PASS 'onerror' in result is true +PASS 'abort' 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 'abort' in event.target is true +PASS 'readyState' in event.target is true +PASS event.target.readyState is event.target.DONE + +objectStore.add('', testData[nextToAdd]) +PASS 'onsuccess' in result is true +PASS 'onerror' in result is true +PASS 'abort' 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 'abort' in event.target is true +PASS 'readyState' in event.target is true +PASS event.target.readyState is event.target.DONE + +objectStore.add('', testData[nextToAdd]) +PASS 'onsuccess' in result is true +PASS 'onerror' in result is true +PASS 'abort' 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 'abort' in event.target is true +PASS 'readyState' in event.target is true +PASS event.target.readyState is event.target.DONE + +objectStore.add('', testData[nextToAdd]) +PASS 'onsuccess' in result is true +PASS 'onerror' in result is true +PASS 'abort' 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 'abort' in event.target is true +PASS 'readyState' in event.target is true +PASS event.target.readyState is event.target.DONE + +objectStore.add('', testData[nextToAdd]) +PASS 'onsuccess' in result is true +PASS 'onerror' in result is true +PASS 'abort' 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 'abort' in event.target is true +PASS 'readyState' in event.target is true +PASS event.target.readyState is event.target.DONE + +objectStore.add('', testData[nextToAdd]) +PASS 'onsuccess' in result is true +PASS 'onerror' in result is true +PASS 'abort' 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 'abort' in event.target is true +PASS 'readyState' in event.target is true +PASS event.target.readyState is event.target.DONE + +objectStore.add('', testData[nextToAdd]) +PASS 'onsuccess' in result is true +PASS 'onerror' in result is true +PASS 'abort' in result is true +PASS 'readyState' in result is true +An event should fire shortly... + +Scheduling tests... +Running tests... + +Next test: lower open bound is 0; sorted ascending. +PASS event.result.key is testData[1] +PASS event.result.key is testData[2] +PASS event.result.key is testData[3] +PASS event.result.key is testData[4] +PASS event.result.key is testData[5] +PASS event.result.key is testData[6] +PASS event.result is null + +Next test: lower bound is 0; sorted ascending. +PASS event.result.key is testData[0] +PASS event.result.key is testData[1] +PASS event.result.key is testData[2] +PASS event.result.key is testData[3] +PASS event.result.key is testData[4] +PASS event.result.key is testData[5] +PASS event.result.key is testData[6] +PASS event.result is null + +Next test: upper open bound is 0; sorted ascending. +PASS event.result is null + +Next test: upper bound is 0; sorted ascending. +PASS event.result.key is testData[0] +PASS event.result is null + +Next test: lower open bound is 0; sorted descending. +PASS event.result.key is testData[6] +PASS event.result.key is testData[5] +PASS event.result.key is testData[4] +PASS event.result.key is testData[3] +PASS event.result.key is testData[2] +PASS event.result.key is testData[1] +PASS event.result is null + +Next test: lower bound is 0; sorted descending. +PASS event.result.key is testData[6] +PASS event.result.key is testData[5] +PASS event.result.key is testData[4] +PASS event.result.key is testData[3] +PASS event.result.key is testData[2] +PASS event.result.key is testData[1] +PASS event.result.key is testData[0] +PASS event.result is null + +Next test: upper open bound is 0; sorted descending. +PASS event.result is null + +Next test: upper bound is 0; sorted descending. +PASS event.result.key is testData[0] +PASS event.result is null + +Next test: lower open bound is 0; upper open bound is 6; sorted ascending. +PASS event.result.key is testData[1] +PASS event.result.key is testData[2] +PASS event.result.key is testData[3] +PASS event.result.key is testData[4] +PASS event.result.key is testData[5] +PASS event.result is null + +Next test: lower open bound is 0; upper bound is 6; sorted ascending. +PASS event.result.key is testData[1] +PASS event.result.key is testData[2] +PASS event.result.key is testData[3] +PASS event.result.key is testData[4] +PASS event.result.key is testData[5] +PASS event.result.key is testData[6] +PASS event.result is null + +Next test: lower bound is 0; upper open bound is 6; sorted ascending. +PASS event.result.key is testData[0] +PASS event.result.key is testData[1] +PASS event.result.key is testData[2] +PASS event.result.key is testData[3] +PASS event.result.key is testData[4] +PASS event.result.key is testData[5] +PASS event.result is null + +Next test: lower bound is 0; upper bound is 6; sorted ascending. +PASS event.result.key is testData[0] +PASS event.result.key is testData[1] +PASS event.result.key is testData[2] +PASS event.result.key is testData[3] +PASS event.result.key is testData[4] +PASS event.result.key is testData[5] +PASS event.result.key is testData[6] +PASS event.result is null + +Next test: lower open bound is 0; upper open bound is 6; sorted descending. +PASS event.result.key is testData[5] +PASS event.result.key is testData[4] +PASS event.result.key is testData[3] +PASS event.result.key is testData[2] +PASS event.result.key is testData[1] +PASS event.result is null + +Next test: lower open bound is 0; upper bound is 6; sorted descending. +PASS event.result.key is testData[6] +PASS event.result.key is testData[5] +PASS event.result.key is testData[4] +PASS event.result.key is testData[3] +PASS event.result.key is testData[2] +PASS event.result.key is testData[1] +PASS event.result is null + +Next test: lower bound is 0; upper open bound is 6; sorted descending. +PASS event.result.key is testData[5] +PASS event.result.key is testData[4] +PASS event.result.key is testData[3] +PASS event.result.key is testData[2] +PASS event.result.key is testData[1] +PASS event.result.key is testData[0] +PASS event.result is null + +Next test: lower bound is 0; upper bound is 6; sorted descending. +PASS event.result.key is testData[6] +PASS event.result.key is testData[5] +PASS event.result.key is testData[4] +PASS event.result.key is testData[3] +PASS event.result.key is testData[2] +PASS event.result.key is testData[1] +PASS event.result.key is testData[0] +PASS event.result is null + +Next test: lower open bound is 1; sorted ascending. +PASS event.result.key is testData[2] +PASS event.result.key is testData[3] +PASS event.result.key is testData[4] +PASS event.result.key is testData[5] +PASS event.result.key is testData[6] +PASS event.result is null + +Next test: lower bound is 1; sorted ascending. +PASS event.result.key is testData[1] +PASS event.result.key is testData[2] +PASS event.result.key is testData[3] +PASS event.result.key is testData[4] +PASS event.result.key is testData[5] +PASS event.result.key is testData[6] +PASS event.result is null + +Next test: upper open bound is 1; sorted ascending. +PASS event.result.key is testData[0] +PASS event.result is null + +Next test: upper bound is 1; sorted ascending. +PASS event.result.key is testData[0] +PASS event.result.key is testData[1] +PASS event.result is null + +Next test: lower open bound is 1; sorted descending. +PASS event.result.key is testData[6] +PASS event.result.key is testData[5] +PASS event.result.key is testData[4] +PASS event.result.key is testData[3] +PASS event.result.key is testData[2] +PASS event.result is null + +Next test: lower bound is 1; sorted descending. +PASS event.result.key is testData[6] +PASS event.result.key is testData[5] +PASS event.result.key is testData[4] +PASS event.result.key is testData[3] +PASS event.result.key is testData[2] +PASS event.result.key is testData[1] +PASS event.result is null + +Next test: upper open bound is 1; sorted descending. +PASS event.result.key is testData[0] +PASS event.result is null + +Next test: upper bound is 1; sorted descending. +PASS event.result.key is testData[1] +PASS event.result.key is testData[0] +PASS event.result is null + +Next test: lower open bound is 1; upper open bound is 6; sorted ascending. +PASS event.result.key is testData[2] +PASS event.result.key is testData[3] +PASS event.result.key is testData[4] +PASS event.result.key is testData[5] +PASS event.result is null + +Next test: lower open bound is 1; upper bound is 6; sorted ascending. +PASS event.result.key is testData[2] +PASS event.result.key is testData[3] +PASS event.result.key is testData[4] +PASS event.result.key is testData[5] +PASS event.result.key is testData[6] +PASS event.result is null + +Next test: lower bound is 1; upper open bound is 6; sorted ascending. +PASS event.result.key is testData[1] +PASS event.result.key is testData[2] +PASS event.result.key is testData[3] +PASS event.result.key is testData[4] +PASS event.result.key is testData[5] +PASS event.result is null + +Next test: lower bound is 1; upper bound is 6; sorted ascending. +PASS event.result.key is testData[1] +PASS event.result.key is testData[2] +PASS event.result.key is testData[3] +PASS event.result.key is testData[4] +PASS event.result.key is testData[5] +PASS event.result.key is testData[6] +PASS event.result is null + +Next test: lower open bound is 1; upper open bound is 6; sorted descending. +PASS event.result.key is testData[5] +PASS event.result.key is testData[4] +PASS event.result.key is testData[3] +PASS event.result.key is testData[2] +PASS event.result is null + +Next test: lower open bound is 1; upper bound is 6; sorted descending. +PASS event.result.key is testData[6] +PASS event.result.key is testData[5] +PASS event.result.key is testData[4] +PASS event.result.key is testData[3] +PASS event.result.key is testData[2] +PASS event.result is null + +Next test: lower bound is 1; upper open bound is 6; sorted descending. +PASS event.result.key is testData[5] +PASS event.result.key is testData[4] +PASS event.result.key is testData[3] +PASS event.result.key is testData[2] +PASS event.result.key is testData[1] +PASS event.result is null + +Next test: lower bound is 1; upper bound is 6; sorted descending. +PASS event.result.key is testData[6] +PASS event.result.key is testData[5] +PASS event.result.key is testData[4] +PASS event.result.key is testData[3] +PASS event.result.key is testData[2] +PASS event.result.key is testData[1] +PASS event.result is null + +Next test: lower open bound is 2; sorted ascending. +PASS event.result.key is testData[3] +PASS event.result.key is testData[4] +PASS event.result.key is testData[5] +PASS event.result.key is testData[6] +PASS event.result is null + +Next test: lower bound is 2; sorted ascending. +PASS event.result.key is testData[2] +PASS event.result.key is testData[3] +PASS event.result.key is testData[4] +PASS event.result.key is testData[5] +PASS event.result.key is testData[6] +PASS event.result is null + +Next test: upper open bound is 2; sorted ascending. +PASS event.result.key is testData[0] +PASS event.result.key is testData[1] +PASS event.result is null + +Next test: upper bound is 2; sorted ascending. +PASS event.result.key is testData[0] +PASS event.result.key is testData[1] +PASS event.result.key is testData[2] +PASS event.result is null + +Next test: lower open bound is 2; sorted descending. +PASS event.result.key is testData[6] +PASS event.result.key is testData[5] +PASS event.result.key is testData[4] +PASS event.result.key is testData[3] +PASS event.result is null + +Next test: lower bound is 2; sorted descending. +PASS event.result.key is testData[6] +PASS event.result.key is testData[5] +PASS event.result.key is testData[4] +PASS event.result.key is testData[3] +PASS event.result.key is testData[2] +PASS event.result is null + +Next test: upper open bound is 2; sorted descending. +PASS event.result.key is testData[1] +PASS event.result.key is testData[0] +PASS event.result is null + +Next test: upper bound is 2; sorted descending. +PASS event.result.key is testData[2] +PASS event.result.key is testData[1] +PASS event.result.key is testData[0] +PASS event.result is null + +Next test: lower open bound is 2; upper open bound is 6; sorted ascending. +PASS event.result.key is testData[3] +PASS event.result.key is testData[4] +PASS event.result.key is testData[5] +PASS event.result is null + +Next test: lower open bound is 2; upper bound is 6; sorted ascending. +PASS event.result.key is testData[3] +PASS event.result.key is testData[4] +PASS event.result.key is testData[5] +PASS event.result.key is testData[6] +PASS event.result is null + +Next test: lower bound is 2; upper open bound is 6; sorted ascending. +PASS event.result.key is testData[2] +PASS event.result.key is testData[3] +PASS event.result.key is testData[4] +PASS event.result.key is testData[5] +PASS event.result is null + +Next test: lower bound is 2; upper bound is 6; sorted ascending. +PASS event.result.key is testData[2] +PASS event.result.key is testData[3] +PASS event.result.key is testData[4] +PASS event.result.key is testData[5] +PASS event.result.key is testData[6] +PASS event.result is null + +Next test: lower open bound is 2; upper open bound is 6; sorted descending. +PASS event.result.key is testData[5] +PASS event.result.key is testData[4] +PASS event.result.key is testData[3] +PASS event.result is null + +Next test: lower open bound is 2; upper bound is 6; sorted descending. +PASS event.result.key is testData[6] +PASS event.result.key is testData[5] +PASS event.result.key is testData[4] +PASS event.result.key is testData[3] +PASS event.result is null + +Next test: lower bound is 2; upper open bound is 6; sorted descending. +PASS event.result.key is testData[5] +PASS event.result.key is testData[4] +PASS event.result.key is testData[3] +PASS event.result.key is testData[2] +PASS event.result is null + +Next test: lower bound is 2; upper bound is 6; sorted descending. +PASS event.result.key is testData[6] +PASS event.result.key is testData[5] +PASS event.result.key is testData[4] +PASS event.result.key is testData[3] +PASS event.result.key is testData[2] +PASS event.result is null + +Next test: lower open bound is 3; sorted ascending. +PASS event.result.key is testData[4] +PASS event.result.key is testData[5] +PASS event.result.key is testData[6] +PASS event.result is null + +Next test: lower bound is 3; sorted ascending. +PASS event.result.key is testData[3] +PASS event.result.key is testData[4] +PASS event.result.key is testData[5] +PASS event.result.key is testData[6] +PASS event.result is null + +Next test: upper open bound is 3; sorted ascending. +PASS event.result.key is testData[0] +PASS event.result.key is testData[1] +PASS event.result.key is testData[2] +PASS event.result is null + +Next test: upper bound is 3; sorted ascending. +PASS event.result.key is testData[0] +PASS event.result.key is testData[1] +PASS event.result.key is testData[2] +PASS event.result.key is testData[3] +PASS event.result is null + +Next test: lower open bound is 3; sorted descending. +PASS event.result.key is testData[6] +PASS event.result.key is testData[5] +PASS event.result.key is testData[4] +PASS event.result is null + +Next test: lower bound is 3; sorted descending. +PASS event.result.key is testData[6] +PASS event.result.key is testData[5] +PASS event.result.key is testData[4] +PASS event.result.key is testData[3] +PASS event.result is null + +Next test: upper open bound is 3; sorted descending. +PASS event.result.key is testData[2] +PASS event.result.key is testData[1] +PASS event.result.key is testData[0] +PASS event.result is null + +Next test: upper bound is 3; sorted descending. +PASS event.result.key is testData[3] +PASS event.result.key is testData[2] +PASS event.result.key is testData[1] +PASS event.result.key is testData[0] +PASS event.result is null + +Next test: lower open bound is 3; upper open bound is 6; sorted ascending. +PASS event.result.key is testData[4] +PASS event.result.key is testData[5] +PASS event.result is null + +Next test: lower open bound is 3; upper bound is 6; sorted ascending. +PASS event.result.key is testData[4] +PASS event.result.key is testData[5] +PASS event.result.key is testData[6] +PASS event.result is null + +Next test: lower bound is 3; upper open bound is 6; sorted ascending. +PASS event.result.key is testData[3] +PASS event.result.key is testData[4] +PASS event.result.key is testData[5] +PASS event.result is null + +Next test: lower bound is 3; upper bound is 6; sorted ascending. +PASS event.result.key is testData[3] +PASS event.result.key is testData[4] +PASS event.result.key is testData[5] +PASS event.result.key is testData[6] +PASS event.result is null + +Next test: lower open bound is 3; upper open bound is 6; sorted descending. +PASS event.result.key is testData[5] +PASS event.result.key is testData[4] +PASS event.result is null + +Next test: lower open bound is 3; upper bound is 6; sorted descending. +PASS event.result.key is testData[6] +PASS event.result.key is testData[5] +PASS event.result.key is testData[4] +PASS event.result is null + +Next test: lower bound is 3; upper open bound is 6; sorted descending. +PASS event.result.key is testData[5] +PASS event.result.key is testData[4] +PASS event.result.key is testData[3] +PASS event.result is null + +Next test: lower bound is 3; upper bound is 6; sorted descending. +PASS event.result.key is testData[6] +PASS event.result.key is testData[5] +PASS event.result.key is testData[4] +PASS event.result.key is testData[3] +PASS event.result is null + +Next test: lower open bound is 4; sorted ascending. +PASS event.result.key is testData[5] +PASS event.result.key is testData[6] +PASS event.result is null + +Next test: lower bound is 4; sorted ascending. +PASS event.result.key is testData[4] +PASS event.result.key is testData[5] +PASS event.result.key is testData[6] +PASS event.result is null + +Next test: upper open bound is 4; sorted ascending. +PASS event.result.key is testData[0] +PASS event.result.key is testData[1] +PASS event.result.key is testData[2] +PASS event.result.key is testData[3] +PASS event.result is null + +Next test: upper bound is 4; sorted ascending. +PASS event.result.key is testData[0] +PASS event.result.key is testData[1] +PASS event.result.key is testData[2] +PASS event.result.key is testData[3] +PASS event.result.key is testData[4] +PASS event.result is null + +Next test: lower open bound is 4; sorted descending. +PASS event.result.key is testData[6] +PASS event.result.key is testData[5] +PASS event.result is null + +Next test: lower bound is 4; sorted descending. +PASS event.result.key is testData[6] +PASS event.result.key is testData[5] +PASS event.result.key is testData[4] +PASS event.result is null + +Next test: upper open bound is 4; sorted descending. +PASS event.result.key is testData[3] +PASS event.result.key is testData[2] +PASS event.result.key is testData[1] +PASS event.result.key is testData[0] +PASS event.result is null + +Next test: upper bound is 4; sorted descending. +PASS event.result.key is testData[4] +PASS event.result.key is testData[3] +PASS event.result.key is testData[2] +PASS event.result.key is testData[1] +PASS event.result.key is testData[0] +PASS event.result is null + +Next test: lower open bound is 4; upper open bound is 6; sorted ascending. +PASS event.result.key is testData[5] +PASS event.result is null + +Next test: lower open bound is 4; upper bound is 6; sorted ascending. +PASS event.result.key is testData[5] +PASS event.result.key is testData[6] +PASS event.result is null + +Next test: lower bound is 4; upper open bound is 6; sorted ascending. +PASS event.result.key is testData[4] +PASS event.result.key is testData[5] +PASS event.result is null + +Next test: lower bound is 4; upper bound is 6; sorted ascending. +PASS event.result.key is testData[4] +PASS event.result.key is testData[5] +PASS event.result.key is testData[6] +PASS event.result is null + +Next test: lower open bound is 4; upper open bound is 6; sorted descending. +PASS event.result.key is testData[5] +PASS event.result is null + +Next test: lower open bound is 4; upper bound is 6; sorted descending. +PASS event.result.key is testData[6] +PASS event.result.key is testData[5] +PASS event.result is null + +Next test: lower bound is 4; upper open bound is 6; sorted descending. +PASS event.result.key is testData[5] +PASS event.result.key is testData[4] +PASS event.result is null + +Next test: lower bound is 4; upper bound is 6; sorted descending. +PASS event.result.key is testData[6] +PASS event.result.key is testData[5] +PASS event.result.key is testData[4] +PASS event.result is null + +Next test: lower open bound is 5; sorted ascending. +PASS event.result.key is testData[6] +PASS event.result is null + +Next test: lower bound is 5; sorted ascending. +PASS event.result.key is testData[5] +PASS event.result.key is testData[6] +PASS event.result is null + +Next test: upper open bound is 5; sorted ascending. +PASS event.result.key is testData[0] +PASS event.result.key is testData[1] +PASS event.result.key is testData[2] +PASS event.result.key is testData[3] +PASS event.result.key is testData[4] +PASS event.result is null + +Next test: upper bound is 5; sorted ascending. +PASS event.result.key is testData[0] +PASS event.result.key is testData[1] +PASS event.result.key is testData[2] +PASS event.result.key is testData[3] +PASS event.result.key is testData[4] +PASS event.result.key is testData[5] +PASS event.result is null + +Next test: lower open bound is 5; sorted descending. +PASS event.result.key is testData[6] +PASS event.result is null + +Next test: lower bound is 5; sorted descending. +PASS event.result.key is testData[6] +PASS event.result.key is testData[5] +PASS event.result is null + +Next test: upper open bound is 5; sorted descending. +PASS event.result.key is testData[4] +PASS event.result.key is testData[3] +PASS event.result.key is testData[2] +PASS event.result.key is testData[1] +PASS event.result.key is testData[0] +PASS event.result is null + +Next test: upper bound is 5; sorted descending. +PASS event.result.key is testData[5] +PASS event.result.key is testData[4] +PASS event.result.key is testData[3] +PASS event.result.key is testData[2] +PASS event.result.key is testData[1] +PASS event.result.key is testData[0] +PASS event.result is null + +Next test: lower open bound is 5; upper open bound is 6; sorted ascending. +PASS event.result is null + +Next test: lower open bound is 5; upper bound is 6; sorted ascending. +PASS event.result.key is testData[6] +PASS event.result is null + +Next test: lower bound is 5; upper open bound is 6; sorted ascending. +PASS event.result.key is testData[5] +PASS event.result is null + +Next test: lower bound is 5; upper bound is 6; sorted ascending. +PASS event.result.key is testData[5] +PASS event.result.key is testData[6] +PASS event.result is null + +Next test: lower open bound is 5; upper open bound is 6; sorted descending. +PASS event.result is null + +Next test: lower open bound is 5; upper bound is 6; sorted descending. +PASS event.result.key is testData[6] +PASS event.result is null + +Next test: lower bound is 5; upper open bound is 6; sorted descending. +PASS event.result.key is testData[5] +PASS event.result is null + +Next test: lower bound is 5; upper bound is 6; sorted descending. +PASS event.result.key is testData[6] +PASS event.result.key is testData[5] +PASS event.result is null + +Next test: lower open bound is 6; sorted ascending. +PASS event.result is null + +Next test: lower bound is 6; sorted ascending. +PASS event.result.key is testData[6] +PASS event.result is null + +Next test: upper open bound is 6; sorted ascending. +PASS event.result.key is testData[0] +PASS event.result.key is testData[1] +PASS event.result.key is testData[2] +PASS event.result.key is testData[3] +PASS event.result.key is testData[4] +PASS event.result.key is testData[5] +PASS event.result is null + +Next test: upper bound is 6; sorted ascending. +PASS event.result.key is testData[0] +PASS event.result.key is testData[1] +PASS event.result.key is testData[2] +PASS event.result.key is testData[3] +PASS event.result.key is testData[4] +PASS event.result.key is testData[5] +PASS event.result.key is testData[6] +PASS event.result is null + +Next test: lower open bound is 6; sorted descending. +PASS event.result is null + +Next test: lower bound is 6; sorted descending. +PASS event.result.key is testData[6] +PASS event.result is null + +Next test: upper open bound is 6; sorted descending. +PASS event.result.key is testData[5] +PASS event.result.key is testData[4] +PASS event.result.key is testData[3] +PASS event.result.key is testData[2] +PASS event.result.key is testData[1] +PASS event.result.key is testData[0] +PASS event.result is null + +Next test: upper bound is 6; sorted descending. +PASS event.result.key is testData[6] +PASS event.result.key is testData[5] +PASS event.result.key is testData[4] +PASS event.result.key is testData[3] +PASS event.result.key is testData[2] +PASS event.result.key is testData[1] +PASS event.result.key is testData[0] +PASS event.result is null + +Next test: lower open bound is 6; upper open bound is 6; sorted ascending. +PASS event.result is null + +Next test: lower open bound is 6; upper bound is 6; sorted ascending. +PASS event.result is null + +Next test: lower bound is 6; upper open bound is 6; sorted ascending. +PASS event.result is null + +Next test: lower bound is 6; upper bound is 6; sorted ascending. +PASS event.result.key is testData[6] +PASS event.result is null + +Next test: lower open bound is 6; upper open bound is 6; sorted descending. +PASS event.result is null + +Next test: lower open bound is 6; upper bound is 6; sorted descending. +PASS event.result is null + +Next test: lower bound is 6; upper open bound is 6; sorted descending. +PASS event.result is null + +Next test: lower bound is 6; upper bound is 6; sorted descending. +PASS event.result.key is testData[6] +PASS event.result is null +PASS successfullyParsed is true + +TEST COMPLETE + diff --git a/LayoutTests/storage/indexeddb/objectstore-cursor.html b/LayoutTests/storage/indexeddb/objectstore-cursor.html new file mode 100644 index 0000000..bc69b43 --- /dev/null +++ b/LayoutTests/storage/indexeddb/objectstore-cursor.html @@ -0,0 +1,209 @@ +<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("Test IndexedDB's objectStore.openCursor + the cursor it produces in depth."); +if (window.layoutTestController) + layoutTestController.waitUntilDone(); + +// In order of how it should be sorted by IndexedDB. +window.testData = [ + null, + 2, + 3, + 10, + // FIXME: Dates. + "A bigger string", + "The biggest", + "a low string" +]; + +function openDatabase() +{ + result = evalAndLog("indexedDB.open('someDB', 'some description')"); + verifyResult(result); + result.onsuccess = openObjectStore; + result.onerror = unexpectedErrorCallback; +} + +function openObjectStore() +{ + verifySuccessEvent(event); + window.db = evalAndLog("db = event.result"); + + deleteAllObjectStores(db); + + result = evalAndLog("db.createObjectStore('someObjectStore')"); + verifyResult(result); + result.onsuccess = startAddingData; + result.onerror = unexpectedErrorCallback; +} + +function startAddingData() +{ + verifySuccessEvent(event); + window.objectStore = evalAndLog("objectStore = event.result"); + + 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); + + result = evalAndLog("objectStore.add('', testData[nextToAdd])"); + verifyResult(result); + result.onsuccess = ++window.nextToAdd < testData.length ? addData : scheduleTests; +} + +function scheduleTests() +{ + debug("Scheduling tests..."); + window.scheduledTests = []; + for (var i = 0; i < testData.length; ++i) { + /* left bound, is open, right bound, is open, ascending */ + scheduledTests.unshift([i, true, null, null, true]); + scheduledTests.unshift([i, false, null, null, true]); + scheduledTests.unshift([null, null, i, true, true]); + scheduledTests.unshift([null, null, i, false, true]); + scheduledTests.unshift([i, true, null, null, false]); + scheduledTests.unshift([i, false, null, null, false]); + scheduledTests.unshift([null, null, i, true, false]); + scheduledTests.unshift([null, null, i, false, false]); + for (var j = 6; j < testData.length; ++j) { + scheduledTests.unshift([i, true, j, true, true]); + scheduledTests.unshift([i, true, j, false, true]); + scheduledTests.unshift([i, false, j, true, true]); + scheduledTests.unshift([i, false, j, false, true]); + scheduledTests.unshift([i, true, j, true, false]); + scheduledTests.unshift([i, true, j, false, false]); + scheduledTests.unshift([i, false, j, true, false]); + scheduledTests.unshift([i, false, j, false, false]); + } + } + + debug("Running tests..."); + setTimeout(runNextTest, 0); +} + +function runNextTest() +{ + if (!scheduledTests.length) { + done(); + return; + } + + var test = scheduledTests.pop(); + window.lower = test[0]; + window.lowerIsOpen = test[1]; + window.upper = test[2]; + window.upperIsOpen = test[3]; + window.ascending = test[4]; + + str = "Next test: "; + if (lower !== null) { + str += "lower "; + if (lowerIsOpen) + str += "open "; + str += "bound is " + lower + "; "; + } + if (upper !== null) { + str += "upper "; + if (upperIsOpen) + str += "open "; + str += "bound is " + upper + "; "; + } + if (ascending) + str += "sorted ascending."; + else + str += "sorted descending."; + + debug(""); + debug(str); + + if (ascending) { + if (lower !== null) { + if (!lowerIsOpen) + window.expectedIndex = lower; + else + window.expectedIndex = lower+1; + } else + window.expectedIndex = 0; + } else { + if (upper !== null) { + if (!upperIsOpen) + window.expectedIndex = upper; + else + window.expectedIndex = upper-1; + } else + window.expectedIndex = testData.length-1; + } + testWithinBounds(); + + var keyRange; + if (lower !== null && upper !== null) + keyRange = IDBKeyRange.bound(testData[lower], testData[upper], lowerIsOpen, upperIsOpen); + else if (lower !== null) + keyRange = IDBKeyRange.leftBound(testData[lower], lowerIsOpen); + else + keyRange = IDBKeyRange.rightBound(testData[upper], upperIsOpen); + + // FIXME: Should be IDBCursor.NEXT : IDBCursor.PREV, but we can't do that yet. + var request = objectStore.openCursor(keyRange, ascending ? 0 : 2); + request.onsuccess = cursorIteration; + request.onerror = unexpectedErrorCallback; +} + +function testWithinBounds() +{ + if (expectedIndex < 0 || testData.length <= expectedIndex) + window.expectedIndex = null; + if (lower !== null && expectedIndex < lower) + window.expectedIndex = null; + if (upper !== null && upper < expectedIndex) + window.expectedIndex = null; + if (lower !== null && lowerIsOpen && expectedIndex <= lower) + window.expectedIndex = null; + if (upper !== null && upperIsOpen && upper <= expectedIndex) + window.expectedIndex = null; +} + +function cursorIteration() +{ + if (expectedIndex === null) { + shouldBeNull("event.result"); + setTimeout(runNextTest, 0); + return; + } + if (event.result === null) { + testFailed("Event.result should not be null.") + setTimeout(runNextTest, 0); + return; + } + + shouldBe("event.result.key", "testData[" + expectedIndex + "]"); + window.expectedIndex = ascending ? expectedIndex+1 : expectedIndex-1; + testWithinBounds(); + + request = event.result.continue(); + // FIXME: The spec says we should not return an IDBRequest and instead re-use the original request. + request.onsuccess = cursorIteration; + request.onerror = unexpectedErrorCallback; +} + +openDatabase(); // The first step. +var successfullyParsed = true; + +</script> +</body> +</html> diff --git a/LayoutTests/storage/indexeddb/open-cursor-expected.txt b/LayoutTests/storage/indexeddb/open-cursor-expected.txt index ac58785..e4ddc69 100644 --- a/LayoutTests/storage/indexeddb/open-cursor-expected.txt +++ b/LayoutTests/storage/indexeddb/open-cursor-expected.txt @@ -96,7 +96,6 @@ PASS 'abort' in event.target is true PASS 'readyState' in event.target is true PASS event.target.readyState is event.target.DONE -PASS event.result is null PASS successfullyParsed is true TEST COMPLETE diff --git a/LayoutTests/storage/indexeddb/script-tests/database-basics.js b/LayoutTests/storage/indexeddb/script-tests/database-basics.js index a07c684..04ebbd3 100644 --- a/LayoutTests/storage/indexeddb/script-tests/database-basics.js +++ b/LayoutTests/storage/indexeddb/script-tests/database-basics.js @@ -8,7 +8,6 @@ function openSuccess() var db = evalAndLog("db = event.result"); shouldBeEqualToString("db.name", "name"); - shouldBeEqualToString("db.version", ""); shouldBe("db.objectStores", "[]"); shouldBe("db.objectStores.length", "0"); shouldBe("db.objectStores.contains('')", "false"); @@ -16,6 +15,26 @@ function openSuccess() // FIXME: Test the other properties of IDBDatabase as they're written. + debug(""); + debug("Testing setVersion."); + result = evalAndLog('db.setVersion("version a")'); + verifyResult(result); + result.onsuccess = setVersionAgain; + result.onError = unexpectedErrorCallback; +} + +function setVersionAgain() +{ + result = evalAndLog('db.setVersion("version b")'); + verifyResult(result); + result.onsuccess = checkVersion; + result.onError = unexpectedErrorCallback; +} + +function checkVersion() +{ + shouldBeEqualToString("db.version", "version b"); + done(); } diff --git a/LayoutTests/storage/indexeddb/script-tests/keyrange.js b/LayoutTests/storage/indexeddb/script-tests/keyrange.js index 26d283f..907d817 100644 --- a/LayoutTests/storage/indexeddb/script-tests/keyrange.js +++ b/LayoutTests/storage/indexeddb/script-tests/keyrange.js @@ -15,7 +15,7 @@ function checkLeftBoundKeyRange(value, open) keyRange = evalAndLog("IDBKeyRange.leftBound(" + value + "," + open + ")"); shouldBe("keyRange.left", "" + value); shouldBeNull("keyRange.right"); - shouldBe("keyRange.flags", open ? "keyRange.LEFT_OPEN" : "keyRange.LEFT_BOUND"); + shouldBe("keyRange.flags", open ? "keyRange.LEFT_OPEN | keyRange.LEFT_BOUND" : "keyRange.LEFT_BOUND"); } function checkRightBoundKeyRange(value, open) @@ -23,7 +23,7 @@ function checkRightBoundKeyRange(value, open) keyRange = evalAndLog("IDBKeyRange.rightBound(" + value + "," + open + ")"); shouldBe("keyRange.right", "" + value); shouldBeNull("keyRange.left"); - shouldBe("keyRange.flags", open ? "keyRange.RIGHT_OPEN" : "keyRange.RIGHT_BOUND"); + shouldBe("keyRange.flags", open ? "keyRange.RIGHT_OPEN | keyRange.RIGHT_BOUND" : "keyRange.RIGHT_BOUND"); } function checkBoundKeyRange(left, right, openLeft, openRight) @@ -32,9 +32,9 @@ function checkBoundKeyRange(left, right, openLeft, openRight) shouldBe("keyRange.left", "" + left); shouldBe("keyRange.right", "" + right); leftFlags = keyRange.flags & (keyRange.LEFT_OPEN | keyRange.LEFT_BOUND); - shouldBe("leftFlags", openLeft ? "keyRange.LEFT_OPEN" : "keyRange.LEFT_BOUND"); + shouldBe("leftFlags", openLeft ? "keyRange.LEFT_OPEN | keyRange.LEFT_BOUND" : "keyRange.LEFT_BOUND"); rightFlags = keyRange.flags & (keyRange.RIGHT_OPEN | keyRange.RIGHT_BOUND); - shouldBe("rightFlags", openRight ? "keyRange.RIGHT_OPEN" : "keyRange.RIGHT_BOUND"); + shouldBe("rightFlags", openRight ? "keyRange.RIGHT_OPEN | keyRange.RIGHT_BOUND" : "keyRange.RIGHT_BOUND"); } function test() diff --git a/LayoutTests/storage/indexeddb/script-tests/open-cursor.js b/LayoutTests/storage/indexeddb/script-tests/open-cursor.js index ff0b711..53ea96b 100644 --- a/LayoutTests/storage/indexeddb/script-tests/open-cursor.js +++ b/LayoutTests/storage/indexeddb/script-tests/open-cursor.js @@ -7,7 +7,6 @@ function emptyCursorSuccess() debug("Empty cursor opened successfully.") verifySuccessEvent(event); // FIXME: check that we can iterate the cursor. - shouldBe("event.result", "null"); done(); } @@ -18,6 +17,7 @@ function openEmptyCursor() result = evalAndLog("objectStore.openCursor(keyRange)"); verifyResult(result); result.onsuccess = emptyCursorSuccess; + result.onerror = unexpectedErrorCallback; } function cursorSuccess() @@ -39,6 +39,7 @@ function openCursor() result = evalAndLog("objectStore.openCursor(keyRange)"); verifyResult(result); result.onsuccess = cursorSuccess; + result.onerror = unexpectedErrorCallback; } function populateObjectStore(objectStore) |