test_transaction_error.js (4000B)
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 dbName = this.window 11 ? window.location.pathname 12 : "test_transaction_error"; 13 const dbVersion = 1; 14 const objectStoreName = "foo"; 15 const data = {}; 16 const dataKey = 1; 17 const expectedError = "ConstraintError"; 18 19 let request = indexedDB.open(dbName, dbVersion); 20 request.onerror = errorHandler; 21 request.onupgradeneeded = grabEventAndContinueHandler; 22 request.onsuccess = unexpectedSuccessHandler; 23 24 let event = yield undefined; 25 26 info("Creating database"); 27 28 let db = event.target.result; 29 let objectStore = db.createObjectStore(objectStoreName); 30 objectStore.add(data, dataKey); 31 32 request.onupgradeneeded = unexpectedSuccessHandler; 33 request.onsuccess = grabEventAndContinueHandler; 34 35 event = yield undefined; 36 37 db = event.target.result; 38 39 try { 40 db.transaction(objectStoreName, "versionchange"); 41 ok(false, "TypeError shall be thrown if transaction mode is wrong."); 42 } catch (e) { 43 ok(e instanceof TypeError, "got a database exception"); 44 is(e.name, "TypeError", "correct error"); 45 } 46 47 let transaction = db.transaction(objectStoreName, "readwrite"); 48 transaction.onerror = grabEventAndContinueHandler; 49 transaction.oncomplete = grabEventAndContinueHandler; 50 51 objectStore = transaction.objectStore(objectStoreName); 52 53 info("Adding duplicate entry with preventDefault()"); 54 55 request = objectStore.add(data, dataKey); 56 request.onsuccess = unexpectedSuccessHandler; 57 request.onerror = grabEventAndContinueHandler; 58 event = yield undefined; 59 60 is(event.type, "error", "Got an error event"); 61 is(event.target, request, "Error event targeted request"); 62 is(event.currentTarget, request, "Got request error first"); 63 is( 64 event.currentTarget.error.name, 65 expectedError, 66 "Request has correct error" 67 ); 68 event.preventDefault(); 69 70 event = yield undefined; 71 72 is(event.type, "error", "Got an error event"); 73 is(event.target, request, "Error event targeted request"); 74 is(event.currentTarget, transaction, "Got transaction error second"); 75 is(event.currentTarget.error, null, "Transaction has null error"); 76 77 event = yield undefined; 78 79 is(event.type, "complete", "Got a complete event"); 80 is(event.target, transaction, "Complete event targeted transaction"); 81 is( 82 event.currentTarget, 83 transaction, 84 "Complete event only targeted transaction" 85 ); 86 is(event.currentTarget.error, null, "Transaction has null error"); 87 88 // Try again without preventDefault(). 89 90 transaction = db.transaction(objectStoreName, "readwrite"); 91 transaction.onerror = grabEventAndContinueHandler; 92 transaction.onabort = grabEventAndContinueHandler; 93 94 objectStore = transaction.objectStore(objectStoreName); 95 96 info("Adding duplicate entry without preventDefault()"); 97 98 request = objectStore.add(data, dataKey); 99 request.onsuccess = unexpectedSuccessHandler; 100 request.onerror = grabEventAndContinueHandler; 101 event = yield undefined; 102 103 is(event.type, "error", "Got an error event"); 104 is(event.target, request, "Error event targeted request"); 105 is(event.currentTarget, request, "Got request error first"); 106 is( 107 event.currentTarget.error.name, 108 expectedError, 109 "Request has correct error" 110 ); 111 112 event = yield undefined; 113 114 is(event.type, "error", "Got an error event"); 115 is(event.target, request, "Error event targeted request"); 116 is(event.currentTarget, transaction, "Got transaction error second"); 117 is(event.currentTarget.error, null, "Transaction has null error"); 118 119 event = yield undefined; 120 121 is(event.type, "abort", "Got an abort event"); 122 is(event.target, transaction, "Abort event targeted transaction"); 123 is(event.currentTarget, transaction, "Abort event only targeted transaction"); 124 is( 125 event.currentTarget.error.name, 126 expectedError, 127 "Transaction has correct error" 128 ); 129 130 finishTest(); 131 }