| // META: global=window,worker |
| // META: title=IDBIndex.openCursor() |
| // META: script=resources/support.js |
| |
| 'use_strict'; |
| |
| async_test(t => { |
| const open_rq = createdb(t); |
| |
| open_rq.onupgradeneeded = t.step_func(e => { |
| const db = e.target.result; |
| const store = db.createObjectStore('store', {keyPath: 'key'}); |
| const index = store.createIndex('index', 'indexedProperty'); |
| |
| store.add({key: 1, indexedProperty: 'data'}); |
| store.deleteIndex('index'); |
| |
| assert_throws_dom('InvalidStateError', () => { |
| index.openCursor(); |
| }); |
| t.done(); |
| }); |
| }, 'If the index is deleted, throw InvalidStateError'); |
| |
| async_test(t => { |
| let db; |
| const open_rq = createdb(t); |
| |
| open_rq.onupgradeneeded = t.step_func(e => { |
| db = e.target.result; |
| const store = db.createObjectStore('store', {keyPath: 'key'}); |
| store.createIndex('index', 'indexedProperty'); |
| store.add({key: 1, indexedProperty: 'data'}); |
| }); |
| |
| open_rq.onsuccess = t.step_func(e => { |
| db = e.target.result; |
| const tx = db.transaction('store', 'readonly'); |
| const index = tx.objectStore('store').index('index'); |
| tx.abort(); |
| |
| assert_throws_dom('TransactionInactiveError', () => { |
| index.openCursor(); |
| }); |
| t.done(); |
| }); |
| }, 'If the transaction has been aborted, throw TransactionInactiveError'); |
| |
| async_test(t => { |
| const open_rq = createdb(t); |
| |
| open_rq.onupgradeneeded = t.step_func(e => { |
| const db = e.target.result; |
| const store = db.createObjectStore('store', {keyPath: 'key'}); |
| const index = store.createIndex('index', 'indexedProperty'); |
| store.add({key: 1, indexedProperty: 'data'}); |
| |
| e.target.transaction.abort(); |
| |
| assert_throws_dom('InvalidStateError', () => { |
| index.openCursor(); |
| }); |
| t.done(); |
| }); |
| }, 'If the index is deleted by an aborted upgrade, throw InvalidStateError'); |