Index: LayoutTests/storage/indexeddb/idbcursor_continueprimarykey.html |
diff --git a/LayoutTests/storage/indexeddb/idbcursor_continueprimarykey.html b/LayoutTests/storage/indexeddb/idbcursor_continueprimarykey.html |
index 186ac4d697c608254cd38ca90942fde363e15f49..7d228bfe2de04a3d0e915f674874554e74baa966 100644 |
--- a/LayoutTests/storage/indexeddb/idbcursor_continueprimarykey.html |
+++ b/LayoutTests/storage/indexeddb/idbcursor_continueprimarykey.html |
@@ -17,7 +17,7 @@ async_test(function(t) { |
store.put('a', 1).onerror = t.unreached_func('put should not fail'); |
var request = store.openCursor(); |
request.onerror = t.unreached_func('openCursor should not fail'); |
- request.onsuccess = function() { |
+ request.onsuccess = t.step_func(function() { |
var cursor = request.result; |
assert_class_string(cursor, 'IDBCursorWithValue', |
'result should be a cursor'); |
@@ -25,7 +25,7 @@ async_test(function(t) { |
assert_throws('InvalidAccessError', function() { |
cursor.continuePrimaryKey(2, 2); |
}, 'continuePrimaryKey() should throw if source is not an index'); |
- }; |
+ }); |
}); |
open.onsuccess = t.step_func(function() { |
@@ -36,4 +36,61 @@ async_test(function(t) { |
}, 'IDBCursor continuePrimaryKey() on object store cursor'); |
+[ |
+ { |
+ direction: 'nextunique', |
+ expected_key: 1, expected_primaryKey: 'a', |
+ continue_key: 2, continue_primaryKey: 'a' |
+ }, |
+ { |
+ direction: 'prevunique', |
+ expected_key: 3, expected_primaryKey: 'a', |
+ continue_key: 2, continue_primaryKey: 'a' |
+ } |
+].forEach(function(testcase) { |
+ async_test(function(t) { |
+ var dbname = document.location + '-' + t.name; |
+ var del = indexedDB.deleteDatabase(dbname); |
+ del.onerror = t.unreached_func('deleteDatabase should succeed'); |
+ var open = indexedDB.open(dbname); |
+ open.onerror = t.unreached_func('open should succeed'); |
+ |
+ open.onupgradeneeded = t.step_func(function() { |
+ var db = open.result; |
+ var store = db.createObjectStore('store', {keyPath: 'pk'}); |
+ var index = store.createIndex('index', 'ik', {multiEntry: true}); |
+ store.put({pk: 'a', ik: [1,2,3]}).onerror = |
+ t.unreached_func('put should not fail'); |
+ store.put({pk: 'b', ik: [1,2,3]}).onerror = |
+ t.unreached_func('put should not fail'); |
+ var request = index.openKeyCursor(null, testcase.direction); |
+ request.onerror = t.unreached_func('openCursor should not fail'); |
+ request.onsuccess = t.step_func(function() { |
+ var cursor = request.result; |
+ assert_class_string(cursor, 'IDBCursor', |
+ 'result should be a cursor'); |
+ assert_equals(cursor.direction, testcase.direction, |
+ 'direction should be as specified'); |
+ assert_equals(cursor.key, testcase.expected_key, |
+ 'key should match'); |
+ assert_equals(cursor.primaryKey, testcase.expected_primaryKey, |
+ 'key should match'); |
cmumford
2015/06/17 21:58:32
differentiate message from one above as testharnes
jsbell
2015/06/18 00:26:22
Oops, yeah. done.
|
+ |
+ assert_throws('InvalidAccessError', function() { |
+ cursor.continuePrimaryKey( |
+ testcase.continue_key, |
+ testcase.continue_primaryKey); |
+ }, 'continuePrimaryKey() should throw if direction is unique'); |
+ }); |
+ }); |
+ |
+ open.onsuccess = t.step_func(function() { |
+ var db = open.result; |
+ db.close(); |
+ t.done(); |
+ }); |
+ |
+ }, 'IDBCursor continuePrimaryKey() on "' + testcase.direction + '" cursor'); |
+}); |
+ |
</script> |