833e6b863de77652806b71e478d0835ffb7bac81
[WebKit-https.git] / LayoutTests / storage / indexeddb / resources / transaction-abort.js
1 if (this.importScripts) {
2     importScripts('../../../fast/js/resources/js-test-pre.js');
3     importScripts('shared.js');
4 }
5
6 description("Test transaction aborts send the proper onabort messages..");
7
8 function test()
9 {
10     removeVendorPrefixes();
11
12     request = evalAndLog("indexedDB.open('name')");
13     request.onsuccess = setVersion;
14     request.onerror = unexpectedErrorCallback;
15 }
16
17 function setVersion()
18 {
19     db = evalAndLog("db = event.target.result");
20
21     request = evalAndLog("db.setVersion('new version')");
22     request.onsuccess = deleteExisting;
23     request.onerror = unexpectedErrorCallback;
24 }
25
26 function deleteExisting()
27 {
28     debug("setVersionSuccess():");
29     self.trans = evalAndLog("trans = event.target.result");
30     shouldBeNonNull("trans");
31     trans.onabort = unexpectedAbortCallback;
32     evalAndLog("trans.oncomplete = startTest");
33
34     deleteAllObjectStores(db);
35
36     store = evalAndLog("store = db.createObjectStore('storeName', null)");
37     request = evalAndLog("store.add({x: 'value', y: 'zzz'}, 'key')");
38     request.onerror = unexpectedErrorCallback;
39 }
40
41 function startTest()
42 {
43     trans = evalAndLog("trans = db.transaction(['storeName'], 'readwrite')");
44     evalAndLog("trans.onabort = transactionAborted");
45     evalAndLog("trans.oncomplete = unexpectedCompleteCallback");
46     store = evalAndLog("store = trans.objectStore('storeName')");
47     request = evalAndLog("store.add({x: 'value2', y: 'zzz2'}, 'key2')");
48     request.onerror = firstAdd;
49     request.onsuccess = unexpectedSuccessCallback;
50     request = evalAndLog("store.add({x: 'value3', y: 'zzz3'}, 'key3')");
51     request.onerror = secondAdd;
52     trans.abort();
53
54     firstError = false;
55     secondError = false;
56     abortFired = false;
57 }
58
59 function firstAdd()
60 {
61     shouldBe("event.target.errorCode", "DOMException.ABORT_ERR");
62     shouldBe("event.target.error.name", "'AbortError'");
63     firstDOMError = event.target.error;
64     // FIXME: Ambiguous spec. See: https://www.w3.org/Bugs/Public/show_bug.cgi?id=17236
65     evalAndExpectException("trans.error", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
66
67     shouldBeFalse("firstError");
68     shouldBeFalse("secondError");
69     shouldBeFalse("abortFired");
70     firstError = true;
71
72     evalAndExpectException("store.add({x: 'value4', y: 'zzz4'}, 'key4')", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR", "'TransactionInactiveError'");
73 }
74
75 function secondAdd()
76 {
77     shouldBe("event.target.errorCode", "DOMException.ABORT_ERR");
78     shouldBe("event.target.error.name", "'AbortError'");
79     // FIXME: Ambiguous spec. See: https://www.w3.org/Bugs/Public/show_bug.cgi?id=17236
80     evalAndExpectException("trans.error", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
81     shouldBeTrue("firstError");
82     shouldBeFalse("secondError");
83     shouldBeFalse("abortFired");
84     secondError = true;
85 }
86
87 function transactionAborted()
88 {
89     shouldBeTrue("firstError");
90     shouldBeTrue("secondError");
91     shouldBeFalse("abortFired");
92     shouldBe("trans.error", "firstDOMError");
93     abortFired = true;
94
95     evalAndExpectException("store.add({x: 'value5', y: 'zzz5'}, 'key5')", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR", "'TransactionInactiveError'");
96     finishJSTest();
97 }
98
99 test();