test_setVersion_throw.js (1727B)
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 : "test_setVersion_throw"; 11 12 // This test requires two databases. The first needs to be a low version 13 // number that gets closed when a second higher version number database is 14 // created. Then the upgradeneeded event for the second database throws an 15 // exception and triggers an abort/close. 16 17 let request = indexedDB.open(name, 1); 18 request.onerror = errorHandler; 19 request.onsuccess = grabEventAndContinueHandler; 20 request.onupgradeneeded = function () { 21 info("Got upgradeneeded event for db 1"); 22 }; 23 let event = yield undefined; 24 25 is(event.type, "success", "Got success event for db 1"); 26 27 let db = event.target.result; 28 db.onversionchange = function (event) { 29 info("Got versionchange event for db 1"); 30 event.target.close(); 31 }; 32 33 executeSoon(continueToNextStepSync); 34 yield undefined; 35 36 request = indexedDB.open(name, 2); 37 request.onerror = grabEventAndContinueHandler; 38 request.onsuccess = unexpectedSuccessHandler; 39 request.onupgradeneeded = function () { 40 info("Got upgradeneeded event for db 2"); 41 expectUncaughtException(true); 42 // eslint-disable-next-line no-undef 43 trigger_js_exception_by_calling_a_nonexistent_function(); 44 }; 45 event = yield undefined; 46 47 event.preventDefault(); 48 49 is(event.type, "error", "Got an error event for db 2"); 50 ok(event.target.error instanceof DOMException, "Request has a DOMException"); 51 is(event.target.error.name, "AbortError", "Request has AbortError"); 52 53 finishTest(); 54 }