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