idbobjectstore_delete.any.js (6005B)
1 // META: global=window,worker 2 // META: title=IDBObjectStore.delete() 3 // META: script=resources/support.js 4 // @author Microsoft <https://www.microsoft.com> 5 'use strict'; 6 7 8 async_test(t => { 9 let db; 10 const record = { key: 1, property: "data" }; 11 12 const open_rq = createdb(t); 13 open_rq.onupgradeneeded = function(e) { 14 db = e.target.result; 15 16 const objStore = db.createObjectStore("test", { keyPath: "key" }); 17 objStore.add(record); 18 }; 19 20 open_rq.onsuccess = function(e) { 21 const delete_rq = db.transaction("test", "readwrite") 22 .objectStore("test") 23 .delete(record.key); 24 25 delete_rq.onsuccess = t.step_func(function(e) { 26 assert_equals(e.target.result, undefined); 27 28 e.target.transaction.oncomplete = t.step_func(VerifyRecordRemoved); 29 }); 30 }; 31 32 function VerifyRecordRemoved() { 33 const rq = db.transaction("test", "readonly") 34 .objectStore("test") 35 .get(record.key); 36 37 rq.onsuccess = t.step_func(function(e) { 38 assert_equals(e.target.result, undefined); 39 t.done(); 40 }); 41 } 42 }, 'delete() removes record (inline keys)'); 43 44 async_test(t => { 45 const open_rq = createdb(t); 46 open_rq.onupgradeneeded = function(e) { 47 const db = e.target.result; 48 49 const delete_rq = db.createObjectStore("test") 50 .delete(1); 51 52 delete_rq.onsuccess = t.step_func(function(e) { 53 assert_equals(e.target.result, undefined); 54 t.done(); 55 }); 56 }; 57 }, 'delete() key doesn\'t match any records'); 58 59 async_test(t => { 60 let db; 61 const record = { test: { obj: { key: 1 } }, property: "data" }; 62 63 const open_rq = createdb(t); 64 open_rq.onupgradeneeded = function(e) { 65 db = e.target.result; 66 67 const objStore = db.createObjectStore("test", 68 { keyPath: "test.obj.key" }); 69 objStore.add(record); 70 }; 71 72 open_rq.onsuccess = function(e) { 73 const delete_rq = db.transaction("test", "readwrite") 74 .objectStore("test") 75 .delete(record.test.obj.key); 76 77 delete_rq.onsuccess = t.step_func(function(e) { 78 assert_equals(e.target.result, undefined); 79 80 e.target.transaction.oncomplete = t.step_func(VerifyRecordRemoved); 81 }); 82 }; 83 84 function VerifyRecordRemoved() { 85 const rq = db.transaction("test", "readonly") 86 .objectStore("test") 87 .get(record.test.obj.key); 88 89 rq.onsuccess = t.step_func(function(e) { 90 assert_equals(e.target.result, undefined); 91 t.done(); 92 }); 93 } 94 }, 'Object store\'s key path is an object attribute'); 95 96 async_test(t => { 97 let db; 98 const key = 1; 99 const record = { property: "data" }; 100 101 const open_rq = createdb(t); 102 open_rq.onupgradeneeded = function(e) { 103 db = e.target.result; 104 105 const objStore = db.createObjectStore("test"); 106 objStore.add(record, key); 107 }; 108 109 open_rq.onsuccess = function(e) { 110 const delete_rq = db.transaction("test", "readwrite") 111 .objectStore("test") 112 .delete(key); 113 114 delete_rq.onsuccess = t.step_func(function(e) { 115 assert_equals(e.target.result, undefined); 116 117 e.target.transaction.oncomplete = t.step_func(VerifyRecordRemoved); 118 }); 119 }; 120 121 function VerifyRecordRemoved() { 122 const rq = db.transaction("test", "readonly") 123 .objectStore("test") 124 .get(key); 125 126 rq.onsuccess = t.step_func(function(e) { 127 assert_equals(e.target.result, undefined); 128 t.done(); 129 }); 130 } 131 }, 'delete() removes record (out-of-line keys)'); 132 133 async_test(t => { 134 let db; 135 const open_rq = createdb(t); 136 137 open_rq.onupgradeneeded = function(e) { 138 db = e.target.result; 139 const os = db.createObjectStore("store"); 140 141 for(let i = 0; i < 10; i++) 142 os.add("data" + i, i); 143 }; 144 145 open_rq.onsuccess = function (e) { 146 const os = db.transaction("store", "readwrite") 147 .objectStore("store"); 148 149 os.delete(IDBKeyRange.bound(3, 6)); 150 os.count().onsuccess = t.step_func(function(e) { 151 assert_equals(e.target.result, 6, "Count after deleting \ 152 3-6 from 10"); 153 t.done(); 154 }); 155 }; 156 }, 'delete() removes all of the records in the range'); 157 158 async_test(function(t) { 159 let db; 160 const records = [{ pKey: "primaryKey_0" }, { pKey: "primaryKey_1" }]; 161 162 const open_rq = createdb(t); 163 open_rq.onupgradeneeded = function(event) { 164 db = event.target.result; 165 const objStore = db.createObjectStore("store", { keyPath: "pKey" }); 166 for (let i = 0; i < records.length; i++) { 167 objStore.add(records[i]); 168 } 169 }; 170 171 open_rq.onsuccess = function(event) { 172 const txn = db.transaction("store", "readonly"); 173 const ostore = txn.objectStore("store"); 174 t.step(function() { 175 assert_throws_dom("ReadOnlyError", function() { 176 ostore.delete("primaryKey_0"); 177 }); 178 }); 179 t.done(); 180 }; 181 }, 'If the transaction this IDBObjectStore belongs to has its mode set to \ 182 readonly, throw ReadOnlyError'); 183 184 async_test(t => { 185 let ostore; 186 const records = [{ pKey: "primaryKey_0" }, { pKey: "primaryKey_1" }]; 187 188 const open_rq = createdb(t); 189 open_rq.onupgradeneeded = function(event) { 190 const db = event.target.result; 191 ostore = db.createObjectStore("store", { keyPath: "pKey" }); 192 db.deleteObjectStore("store"); 193 assert_throws_dom("InvalidStateError", function() { 194 ostore.delete("primaryKey_0"); 195 }); 196 t.done(); 197 }; 198 }, 'If the object store has been deleted, the implementation must throw a \ 199 DOMException of type InvalidStateError');