Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(363)

Side by Side Diff: LayoutTests/storage/indexeddb/idbcursor_continueprimarykey.html

Issue 1188343002: IndexedDB: Disallow continuePrimaryKey on unique cursors (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | Source/modules/indexeddb/IDBCursor.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 <!DOCTYPE html> 1 <!DOCTYPE html>
2 <title>IndexedDB: IDBCursor continuePrimaryKey() method</title> 2 <title>IndexedDB: IDBCursor continuePrimaryKey() method</title>
3 <script src="../../resources/testharness.js"></script> 3 <script src="../../resources/testharness.js"></script>
4 <script src="../../resources/testharnessreport.js"></script> 4 <script src="../../resources/testharnessreport.js"></script>
5 <script> 5 <script>
6 6
7 async_test(function(t) { 7 async_test(function(t) {
8 var dbname = document.location + '-' + t.name; 8 var dbname = document.location + '-' + t.name;
9 var del = indexedDB.deleteDatabase(dbname); 9 var del = indexedDB.deleteDatabase(dbname);
10 del.onerror = t.unreached_func('deleteDatabase should succeed'); 10 del.onerror = t.unreached_func('deleteDatabase should succeed');
11 var open = indexedDB.open(dbname); 11 var open = indexedDB.open(dbname);
12 open.onerror = t.unreached_func('open should succeed'); 12 open.onerror = t.unreached_func('open should succeed');
13 13
14 open.onupgradeneeded = t.step_func(function() { 14 open.onupgradeneeded = t.step_func(function() {
15 var db = open.result; 15 var db = open.result;
16 var store = db.createObjectStore('store'); 16 var store = db.createObjectStore('store');
17 store.put('a', 1).onerror = t.unreached_func('put should not fail'); 17 store.put('a', 1).onerror = t.unreached_func('put should not fail');
18 var request = store.openCursor(); 18 var request = store.openCursor();
19 request.onerror = t.unreached_func('openCursor should not fail'); 19 request.onerror = t.unreached_func('openCursor should not fail');
20 request.onsuccess = function() { 20 request.onsuccess = t.step_func(function() {
21 var cursor = request.result; 21 var cursor = request.result;
22 assert_class_string(cursor, 'IDBCursorWithValue', 22 assert_class_string(cursor, 'IDBCursorWithValue',
23 'result should be a cursor'); 23 'result should be a cursor');
24 24
25 assert_throws('InvalidAccessError', function() { 25 assert_throws('InvalidAccessError', function() {
26 cursor.continuePrimaryKey(2, 2); 26 cursor.continuePrimaryKey(2, 2);
27 }, 'continuePrimaryKey() should throw if source is not an index'); 27 }, 'continuePrimaryKey() should throw if source is not an index');
28 }; 28 });
29 }); 29 });
30 30
31 open.onsuccess = t.step_func(function() { 31 open.onsuccess = t.step_func(function() {
32 var db = open.result; 32 var db = open.result;
33 db.close(); 33 db.close();
34 t.done(); 34 t.done();
35 }); 35 });
36 36
37 }, 'IDBCursor continuePrimaryKey() on object store cursor'); 37 }, 'IDBCursor continuePrimaryKey() on object store cursor');
38 38
39 [
40 {
41 direction: 'nextunique',
42 expected_key: 1, expected_primaryKey: 'a',
43 continue_key: 2, continue_primaryKey: 'a'
44 },
45 {
46 direction: 'prevunique',
47 expected_key: 3, expected_primaryKey: 'a',
48 continue_key: 2, continue_primaryKey: 'a'
49 }
50 ].forEach(function(testcase) {
51 async_test(function(t) {
52 var dbname = document.location + '-' + t.name;
53 var del = indexedDB.deleteDatabase(dbname);
54 del.onerror = t.unreached_func('deleteDatabase should succeed');
55 var open = indexedDB.open(dbname);
56 open.onerror = t.unreached_func('open should succeed');
57
58 open.onupgradeneeded = t.step_func(function() {
59 var db = open.result;
60 var store = db.createObjectStore('store', {keyPath: 'pk'});
61 var index = store.createIndex('index', 'ik', {multiEntry: true});
62 store.put({pk: 'a', ik: [1,2,3]}).onerror =
63 t.unreached_func('put should not fail');
64 store.put({pk: 'b', ik: [1,2,3]}).onerror =
65 t.unreached_func('put should not fail');
66 var request = index.openKeyCursor(null, testcase.direction);
67 request.onerror = t.unreached_func('openCursor should not fail');
68 request.onsuccess = t.step_func(function() {
69 var cursor = request.result;
70 assert_class_string(cursor, 'IDBCursor',
71 'result should be a cursor');
72 assert_equals(cursor.direction, testcase.direction,
73 'direction should be as specified');
74 assert_equals(cursor.key, testcase.expected_key,
75 'key should match');
76 assert_equals(cursor.primaryKey, testcase.expected_primaryKey,
77 '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.
78
79 assert_throws('InvalidAccessError', function() {
80 cursor.continuePrimaryKey(
81 testcase.continue_key,
82 testcase.continue_primaryKey);
83 }, 'continuePrimaryKey() should throw if direction is unique');
84 });
85 });
86
87 open.onsuccess = t.step_func(function() {
88 var db = open.result;
89 db.close();
90 t.done();
91 });
92
93 }, 'IDBCursor continuePrimaryKey() on "' + testcase.direction + '" cursor');
94 });
95
39 </script> 96 </script>
OLDNEW
« no previous file with comments | « no previous file | Source/modules/indexeddb/IDBCursor.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698