test_deleteDatabase.js (3689B)
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 12 ok(indexedDB.deleteDatabase, "deleteDatabase function should exist!"); 13 14 let request = indexedDB.open(name, 10); 15 request.onerror = errorHandler; 16 request.onsuccess = unexpectedSuccessHandler; 17 request.onupgradeneeded = grabEventAndContinueHandler; 18 19 ok(request instanceof IDBOpenDBRequest, "Expect an IDBOpenDBRequest"); 20 21 let event = yield undefined; 22 23 is(event.type, "upgradeneeded", "Expect an upgradeneeded event"); 24 ok(event instanceof IDBVersionChangeEvent, "Expect a versionchange event"); 25 26 let db = event.target.result; 27 db.createObjectStore("stuff"); 28 29 request.onsuccess = grabEventAndContinueHandler; 30 31 event = yield undefined; 32 33 is(event.type, "success", "Expect a success event"); 34 is(event.target, request, "Event has right target"); 35 ok(event.target.result instanceof IDBDatabase, "Result should be a database"); 36 is(db.objectStoreNames.length, 1, "Expect an objectStore here"); 37 38 request = indexedDB.open(name, 10); 39 request.onerror = errorHandler; 40 request.onsuccess = grabEventAndContinueHandler; 41 42 event = yield undefined; 43 is(event.type, "success", "Expect a success event"); 44 is(event.target, request, "Event has right target"); 45 ok(event.target.result instanceof IDBDatabase, "Result should be a database"); 46 let db2 = event.target.result; 47 is(db2.objectStoreNames.length, 1, "Expect an objectStore here"); 48 49 var onversionchangecalled = false; 50 51 function closeDBs(event) { 52 onversionchangecalled = true; 53 ok(event instanceof IDBVersionChangeEvent, "expect a versionchange event"); 54 is(event.oldVersion, 10, "oldVersion should be 10"); 55 ok(event.newVersion === null, "newVersion should be null"); 56 ok(!(event.newVersion === undefined), "newVersion should be null"); 57 ok(!(event.newVersion === 0), "newVersion should be null"); 58 db.close(); 59 db2.close(); 60 db.onversionchange = unexpectedSuccessHandler; 61 db2.onversionchange = unexpectedSuccessHandler; 62 } 63 64 // The IDB spec doesn't guarantee the order that onversionchange will fire 65 // on the dbs. 66 db.onversionchange = closeDBs; 67 db2.onversionchange = closeDBs; 68 69 request = indexedDB.deleteDatabase(name); 70 request.onerror = errorHandler; 71 request.onsuccess = grabEventAndContinueHandler; 72 73 ok(request instanceof IDBOpenDBRequest, "Expect an IDBOpenDBRequest"); 74 75 event = yield undefined; 76 ok(onversionchangecalled, "Expected versionchange events"); 77 is(event.type, "success", "expect a success event"); 78 is(event.target, request, "event has right target"); 79 ok(event.target.result === undefined, "event should have no result"); 80 81 request = indexedDB.open(name, 1); 82 request.onerror = errorHandler; 83 request.onsuccess = grabEventAndContinueHandler; 84 85 event = yield undefined; 86 is(event.target.result.version, 1, "DB has proper version"); 87 is( 88 event.target.result.objectStoreNames.length, 89 0, 90 "DB should have no object stores" 91 ); 92 93 request = indexedDB.deleteDatabase("thisDatabaseHadBetterNotExist"); 94 request.onerror = errorHandler; 95 request.onsuccess = grabEventAndContinueHandler; 96 97 event = yield undefined; 98 ok(true, "deleteDatabase on a non-existent database succeeded"); 99 100 request = indexedDB.open("thisDatabaseHadBetterNotExist"); 101 request.onerror = errorHandler; 102 request.onsuccess = grabEventAndContinueHandler; 103 104 event = yield undefined; 105 ok(true, "after deleting a non-existent database, open should work"); 106 107 finishTest(); 108 }