idbversionchangeevent.any.js (2817B)
1 // META: title=IDBVersionChangeEvent 2 // META: global=window,worker 3 // META: script=resources/support.js 4 5 // Spec: https://w3c.github.io/IndexedDB/#events 6 7 'use strict'; 8 9 async_test(t => { 10 let db; 11 const dbname = location + '-' + t.name; 12 13 indexedDB.deleteDatabase(dbname); 14 15 const openrq = indexedDB.open(dbname, 3); 16 17 openrq.onupgradeneeded = t.step_func((e) => { 18 assert_equals(e.oldVersion, 0, 'old version (upgradeneeded)'); 19 assert_equals(e.newVersion, 3, 'new version (upgradeneeded)'); 20 assert_true( 21 e instanceof IDBVersionChangeEvent, 22 'upgradeneeded instanceof IDBVersionChangeEvent'); 23 }); 24 25 openrq.onsuccess = t.step_func((e) => { 26 db = e.target.result; 27 28 db.onversionchange = t.step_func((e) => { 29 assert_equals(e.oldVersion, 3, 'old version (versionchange)'); 30 assert_equals(e.newVersion, null, 'new version (versionchange)'); 31 assert_true( 32 e instanceof IDBVersionChangeEvent, 33 'versionchange instanceof IDBVersionChangeEvent'); 34 db.close(); 35 }); 36 37 // Errors 38 db.onerror = fail(t, 'db.error'); 39 db.onabort = fail(t, 'db.abort'); 40 41 setTimeout(t.step_func(deleteDB), 10); 42 }); 43 44 // Errors 45 openrq.onerror = fail(t, 'open.error'); 46 openrq.onblocked = fail(t, 'open.blocked'); 47 48 function deleteDB(e) { 49 const deleterq = indexedDB.deleteDatabase(dbname); 50 51 deleterq.onsuccess = t.step_func((e) => { 52 assert_equals( 53 e.result, undefined, 'result (delete.success for nonexistent db)'); 54 assert_equals(e.oldVersion, 3, 'old version (delete.success)'); 55 assert_equals(e.newVersion, null, 'new version (delete.success)'); 56 assert_true( 57 e instanceof IDBVersionChangeEvent, 58 'delete.success instanceof IDBVersionChangeEvent'); 59 60 setTimeout(deleteNonExistentDB, 10); 61 }); 62 63 // Errors 64 deleterq.onerror = fail(t, 'delete.error'); 65 deleterq.onblocked = fail(t, 'delete.blocked'); 66 } 67 68 function deleteNonExistentDB(e) { 69 const deleterq = indexedDB.deleteDatabase('db-does-not-exist'); 70 71 deleterq.onsuccess = t.step_func((e) => { 72 assert_equals( 73 e.result, undefined, 'result (delete.success for nonexistent db)'); 74 assert_equals( 75 e.oldVersion, 0, 'old version (delete.success for nonexistent db)'); 76 assert_equals( 77 e.newVersion, null, 78 'new version (delete.success for nonexistent db)'); 79 assert_true( 80 e instanceof IDBVersionChangeEvent, 81 'delete.success instanceof IDBVersionChangeEvent'); 82 83 setTimeout(function() { 84 t.done(); 85 }, 10); 86 }); 87 88 // Errors 89 deleterq.onerror = fail(t, 'delete.error'); 90 deleterq.onblocked = fail(t, 'delete.blocked'); 91 } 92 }, 'IDBVersionChangeEvent fired in upgradeneeded, versionchange and deleteDatabase');