ab631857d61dfeba741c40b4fca0b84dc42bb8ed
[WebKit-https.git] / LayoutTests / imported / w3c / web-platform-tests / IndexedDB / idbobjectstore_getKey.html
1 <!doctype html>
2 <meta charset=utf-8>
3 <title>IndexedDB: Test IDBObjectStore.getKey()</title>
4 <script src="/resources/testharness.js"></script>
5 <script src="/resources/testharnessreport.js"></script>
6 <script>
7
8 function getkey_test(func, name) {
9     return async_test(function(t) {
10         var del = indexedDB.deleteDatabase(name);
11         del.onerror = t.unreached_func('deleteDatabase failed');
12         var open = indexedDB.open(name);
13         open.onerror = t.unreached_func('open failed');
14         open.onupgradeneeded = t.step_func(function() {
15             var db = open.result;
16
17             var basic = db.createObjectStore('basic');
18             var key_path_store = db.createObjectStore('key path',
19                 {keyPath: 'id'});
20             var key_generator_store = db.createObjectStore('key generator',
21                 {autoIncrement: true});
22             var key_generator_and_path_store = db.createObjectStore(
23                 'key generator and key path',
24                 {autoIncrement: true, key_path: 'id'});
25
26             for (var i = 1; i <= 10; ++i) {
27                 basic.put('value: ' + i, i);
28                 key_path_store.put({id: i});
29                 key_generator_store.put('value: ' + i);
30                 key_generator_and_path_store.put({});
31             }
32         });
33         open.onsuccess = t.step_func(function() {
34             var db = open.result;
35             func(t, db);
36         });
37     }, name);
38 }
39
40 getkey_test(function(t, db) {
41     var tx = db.transaction('basic');
42     var store = tx.objectStore('basic');
43     assert_throws(TypeError(), function() { store.getKey(); });
44     assert_throws({name: 'DataError'}, function() { store.getKey(null); });
45     assert_throws({name: 'DataError'}, function() { store.getKey({}); });
46     t.done();
47 }, 'IDBObjectStore.getKey() - invalid parameters');
48
49 [
50     'basic',
51     'key path',
52     'key generator',
53     'key generator and key path'
54 ].forEach(function(store_name) {
55
56     getkey_test(function(t, db) {
57         var tx = db.transaction(store_name);
58         var store = tx.objectStore(store_name);
59         var request = store.getKey(5);
60         request.onerror = t.unreached_func('request failed');
61         request.onsuccess = t.step_func(function() {
62             assert_equals(request.result, 5);
63         });
64         tx.onabort = t.unreached_func('transaction aborted');
65         tx.oncomplete = t.step_func(function() { t.done(); });
66     }, 'IDBObjectStore.getKey() - ' + store_name + ' - key');
67
68     getkey_test(function(t, db) {
69         var tx = db.transaction(store_name);
70         var store = tx.objectStore(store_name);
71         var request = store.getKey(IDBKeyRange.lowerBound(4.5));
72         request.onerror = t.unreached_func('request failed');
73         request.onsuccess = t.step_func(function() {
74             assert_equals(request.result, 5);
75         });
76         tx.onabort = t.unreached_func('transaction aborted');
77         tx.oncomplete = t.step_func(function() { t.done(); });
78     }, 'IDBObjectStore.getKey() - ' + store_name + ' - range');
79
80     getkey_test(function(t, db) {
81         var tx = db.transaction(store_name);
82         var store = tx.objectStore(store_name);
83         var request = store.getKey(11);
84         request.onerror = t.unreached_func('request failed');
85         request.onsuccess = t.step_func(function() {
86             assert_equals(request.result, undefined);
87         });
88         tx.onabort = t.unreached_func('transaction aborted');
89         tx.oncomplete = t.step_func(function() { t.done(); });
90     }, 'IDBObjectStore.getKey() - ' + store_name + ' - key - no match');
91
92     getkey_test(function(t, db) {
93         var tx = db.transaction(store_name);
94         var store = tx.objectStore(store_name);
95         var request = store.getKey(IDBKeyRange.lowerBound(11));
96         request.onerror = t.unreached_func('request failed');
97         request.onsuccess = t.step_func(function() {
98             assert_equals(request.result, undefined);
99         });
100         tx.onabort = t.unreached_func('transaction aborted');
101         tx.oncomplete = t.step_func(function() { t.done(); });
102     }, 'IDBObjectStore.getKey() - ' + store_name + ' - range - no match');
103 });
104
105 </script>