|
1 /** |
|
2 * Any copyright is dedicated to the Public Domain. |
|
3 * http://creativecommons.org/publicdomain/zero/1.0/ |
|
4 */ |
|
5 |
|
6 var testGenerator = testSteps(); |
|
7 |
|
8 function testSteps() |
|
9 { |
|
10 const name = this.window ? window.location.pathname : "Splendid Test"; |
|
11 const START_DATA = "hi"; |
|
12 const END_DATA = "bye"; |
|
13 const objectStoreInfo = [ |
|
14 { name: "1", options: { keyPath: null }, key: 1, |
|
15 entry: { data: START_DATA } }, |
|
16 { name: "2", options: { keyPath: "foo" }, |
|
17 entry: { foo: 1, data: START_DATA } }, |
|
18 { name: "3", options: { keyPath: null, autoIncrement: true }, |
|
19 entry: { data: START_DATA } }, |
|
20 { name: "4", options: { keyPath: "foo", autoIncrement: true }, |
|
21 entry: { data: START_DATA } }, |
|
22 ]; |
|
23 |
|
24 for (let i = 0; i < objectStoreInfo.length; i++) { |
|
25 // Create our object stores. |
|
26 let info = objectStoreInfo[i]; |
|
27 |
|
28 ok(true, "1"); |
|
29 request = indexedDB.open(name, i + 1); |
|
30 request.onerror = errorHandler; |
|
31 request.onupgradeneeded = grabEventAndContinueHandler; |
|
32 event = yield undefined; |
|
33 |
|
34 let db = event.target.result; |
|
35 |
|
36 ok(true, "2"); |
|
37 let objectStore = info.hasOwnProperty("options") ? |
|
38 db.createObjectStore(info.name, info.options) : |
|
39 db.createObjectStore(info.name); |
|
40 |
|
41 // Create the indexes on 'data' on the object store. |
|
42 let index = objectStore.createIndex("data_index", "data", |
|
43 { unique: false }); |
|
44 let uniqueIndex = objectStore.createIndex("unique_data_index", "data", |
|
45 { unique: true }); |
|
46 // Populate the object store with one entry of data. |
|
47 request = info.hasOwnProperty("key") ? |
|
48 objectStore.add(info.entry, info.key) : |
|
49 objectStore.add(info.entry); |
|
50 request.onerror = errorHandler; |
|
51 request.onsuccess = grabEventAndContinueHandler; |
|
52 event = yield undefined; |
|
53 ok(true, "3"); |
|
54 |
|
55 // Use a cursor to update 'data' to END_DATA. |
|
56 request = objectStore.openCursor(); |
|
57 request.onerror = errorHandler; |
|
58 request.onsuccess = grabEventAndContinueHandler; |
|
59 event = yield undefined; |
|
60 ok(true, "4"); |
|
61 |
|
62 let cursor = request.result; |
|
63 let obj = cursor.value; |
|
64 obj.data = END_DATA; |
|
65 request = cursor.update(obj); |
|
66 request.onerror = errorHandler; |
|
67 request.onsuccess = grabEventAndContinueHandler; |
|
68 event = yield undefined; |
|
69 ok(true, "5"); |
|
70 |
|
71 // Check both indexes to make sure that they were updated. |
|
72 request = index.get(END_DATA); |
|
73 request.onerror = errorHandler; |
|
74 request.onsuccess = grabEventAndContinueHandler; |
|
75 event = yield undefined; |
|
76 ok(true, "6"); |
|
77 ok(obj.data, event.target.result.data, |
|
78 "Non-unique index was properly updated."); |
|
79 |
|
80 request = uniqueIndex.get(END_DATA); |
|
81 request.onerror = errorHandler; |
|
82 request.onsuccess = grabEventAndContinueHandler; |
|
83 event = yield undefined; |
|
84 |
|
85 ok(true, "7"); |
|
86 ok(obj.data, event.target.result.data, |
|
87 "Unique index was properly updated."); |
|
88 db.close(); |
|
89 } |
|
90 |
|
91 finishTest(); |
|
92 yield undefined; |
|
93 } |
|
94 |