OLD | NEW |
1 if (this.importScripts) { | 1 if (this.importScripts) { |
2 importScripts('../../../resources/js-test.js'); | 2 importScripts('../../../resources/js-test.js'); |
3 importScripts('shared.js'); | 3 importScripts('shared.js'); |
4 } | 4 } |
5 | 5 |
6 description("Verify that a transaction with an error aborts unless preventDefaul
t() is called."); | 6 description("Verify that a transaction with an error aborts unless preventDefaul
t() is called."); |
7 | 7 |
8 indexedDBTest(prepareDatabase, addData); | 8 indexedDBTest(prepareDatabase, testDefaultPreventedDoesNotAbort); |
9 function prepareDatabase() | 9 function prepareDatabase() |
10 { | 10 { |
11 db = event.target.result; | 11 db = event.target.result; |
12 debug("setVersionSuccess():"); | 12 debug("setVersionSuccess():"); |
13 self.trans = evalAndLog("trans = event.target.transaction"); | 13 self.trans = evalAndLog("trans = event.target.transaction"); |
14 shouldBeNonNull("trans"); | 14 shouldBeNonNull("trans"); |
15 trans.onabort = unexpectedAbortCallback; | 15 trans.onabort = unexpectedAbortCallback; |
16 evalAndLog("db.createObjectStore('storeName', null)"); | 16 evalAndLog("db.createObjectStore('storeName', null)"); |
17 } | 17 } |
18 | 18 |
19 function addData() | 19 function testDefaultPreventedDoesNotAbort() |
20 { | 20 { |
| 21 debug(""); |
| 22 debug("Test: prevent the default event behavior prevents the transaction fro
m aborting"); |
21 trans = evalAndLog("trans = db.transaction(['storeName'], 'readwrite')"); | 23 trans = evalAndLog("trans = db.transaction(['storeName'], 'readwrite')"); |
22 evalAndLog("trans.onabort = unexpectedAbortCallback"); | 24 evalAndLog("trans.onabort = unexpectedAbortCallback"); |
23 evalAndLog("trans.oncomplete = transactionCompleted"); | 25 evalAndLog("trans.oncomplete = transactionCompleted"); |
24 store = evalAndLog("store = trans.objectStore('storeName')"); | 26 store = evalAndLog("store = trans.objectStore('storeName')"); |
25 request = evalAndLog("store.add({x: 'value', y: 'zzz'}, 'key')"); | 27 request = evalAndLog("store.add({x: 'value', y: 'zzz'}, 'key')"); |
26 request.onsuccess = addMore; | |
27 request.onerror = unexpectedErrorCallback; | 28 request.onerror = unexpectedErrorCallback; |
28 } | 29 request.onsuccess = function() { |
29 | 30 request = evalAndLog("event.target.source.add({x: 'value', y: 'zzz'}, 'k
ey')"); |
30 function addMore() | 31 request.onsuccess = unexpectedSuccessCallback; |
31 { | 32 request.addEventListener("error", preventTheDefault); |
32 | 33 }; |
33 request = evalAndLog("event.target.source.add({x: 'value', y: 'zzz'}, 'key')
"); | |
34 request.onsuccess = unexpectedSuccessCallback; | |
35 request.addEventListener("error", preventTheDefault); | |
36 } | 34 } |
37 | 35 |
38 function preventTheDefault() | 36 function preventTheDefault() |
39 { | 37 { |
40 evalAndLog("event.preventDefault()"); | 38 evalAndLog("event.preventDefault()"); |
41 } | 39 } |
42 | 40 |
43 function transactionCompleted() | 41 function transactionCompleted() |
44 { | 42 { |
45 testPassed("Transaction completed"); | 43 testPassed("Transaction completed"); |
| 44 testDefaultAllowedAborts(); |
| 45 } |
| 46 |
| 47 function testDefaultAllowedAborts() |
| 48 { |
46 debug(""); | 49 debug(""); |
47 debug(""); | 50 debug("Test: allowing the default event behavior, which aborts the transacti
on"); |
48 trans = evalAndLog("trans = db.transaction(['storeName'], 'readwrite')"); | 51 trans = evalAndLog("trans = db.transaction(['storeName'], 'readwrite')"); |
49 evalAndLog("trans.onabort = transactionAborted1"); | 52 evalAndLog("trans.onabort = transactionAborted1"); |
50 evalAndLog("trans.oncomplete = unexpectedCompleteCallback"); | 53 evalAndLog("trans.oncomplete = unexpectedCompleteCallback"); |
51 store = evalAndLog("store = trans.objectStore('storeName')"); | 54 store = evalAndLog("store = trans.objectStore('storeName')"); |
52 request = evalAndLog("store.add({x: 'value', y: 'zzz'}, 'key')"); | 55 request = evalAndLog("store.add({x: 'value', y: 'zzz'}, 'key')"); |
53 request.onsuccess = unexpectedSuccessCallback; | 56 request.onsuccess = unexpectedSuccessCallback; |
54 request.onerror = allowDefault; | 57 request.onerror = allowDefault; |
| 58 expectError(); |
55 } | 59 } |
56 | 60 |
57 function allowDefault() | 61 function allowDefault() |
58 { | 62 { |
59 debug("Doing nothing to prevent the default action..."); | 63 debug("Doing nothing to prevent the default action..."); |
60 } | 64 } |
61 | 65 |
62 function transactionAborted1() | 66 function transactionAborted1() |
63 { | 67 { |
64 testPassed("Transaction aborted"); | 68 testPassed("Transaction aborted"); |
| 69 testNoErrorHandlerAborts(); |
| 70 } |
| 71 |
| 72 function testNoErrorHandlerAborts() { |
65 debug(""); | 73 debug(""); |
66 debug(""); | 74 debug("Test: no error handler implicitly allows allowing the default event b
ehavior, which aborts the transaction"); |
67 trans = evalAndLog("trans = db.transaction(['storeName'], 'readwrite')"); | 75 trans = evalAndLog("trans = db.transaction(['storeName'], 'readwrite')"); |
68 evalAndLog("trans.onabort = transactionAborted2"); | 76 evalAndLog("trans.onabort = transactionAborted2"); |
69 evalAndLog("trans.oncomplete = unexpectedCompleteCallback"); | 77 evalAndLog("trans.oncomplete = unexpectedCompleteCallback"); |
70 store = evalAndLog("store = trans.objectStore('storeName')"); | 78 store = evalAndLog("store = trans.objectStore('storeName')"); |
71 request = evalAndLog("store.add({x: 'value', y: 'zzz'}, 'key')"); | 79 request = evalAndLog("store.add({x: 'value', y: 'zzz'}, 'key')"); |
72 request.onsuccess = unexpectedSuccessCallback; | 80 request.onsuccess = unexpectedSuccessCallback; |
73 debug("Omitting an onerror handler"); | 81 expectError(); |
| 82 debug("Omitting an onerror handler on request; transaction should abort"); |
74 } | 83 } |
75 | 84 |
76 function transactionAborted2() | 85 function transactionAborted2() |
77 { | 86 { |
78 testPassed("Transaction aborted"); | 87 testPassed("Transaction aborted"); |
79 finishJSTest(); | 88 finishJSTest(); |
80 } | 89 } |
OLD | NEW |