diff options
Diffstat (limited to 'LayoutTests/storage/indexeddb/request-event-propagation.html')
-rw-r--r-- | LayoutTests/storage/indexeddb/request-event-propagation.html | 272 |
1 files changed, 272 insertions, 0 deletions
diff --git a/LayoutTests/storage/indexeddb/request-event-propagation.html b/LayoutTests/storage/indexeddb/request-event-propagation.html new file mode 100644 index 0000000..87f6a2d --- /dev/null +++ b/LayoutTests/storage/indexeddb/request-event-propagation.html @@ -0,0 +1,272 @@ +<html> +<head> +<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css"> +<script src="../../fast/js/resources/js-test-pre.js"></script> +<script src="../../fast/js/resources/js-test-post-function.js"></script> +<script src="resources/shared.js"></script> +</head> +<body> +<p id="description"></p> +<div id="console"></div> +<script> + +description("Test event propogation on IDBRequest."); +if (window.layoutTestController) + layoutTestController.waitUntilDone(); + +function test() +{ + result = evalAndLog("webkitIndexedDB.open('name')"); + verifyResult(result); + result.onsuccess = setVersion; + result.onerror = unexpectedErrorCallback; +} + +function setVersion() +{ + verifySuccessEvent(event); + db = evalAndLog("db = event.result"); + + result = evalAndLog("db.setVersion('new version')"); + verifyResult(result); + result.onsuccess = deleteExisting; + result.onerror = unexpectedErrorCallback; +} + +function deleteExisting() +{ + debug("setVersionSuccess():"); + verifySuccessEvent(event); + window.trans = evalAndLog("trans = event.result"); + shouldBeTrue("trans !== null"); + trans.onabort = unexpectedAbortCallback; + evalAndLog("trans.oncomplete = startTest"); + + deleteAllObjectStores(db, createObjectStore); +} + +function createObjectStore() +{ + store = evalAndLog("store = db.createObjectStore('storeName', null)"); + result = evalAndLog("store.add({x: 'value', y: 'zzz'}, 'key')"); + result.onerror = unexpectedErrorCallback; +} + +function startTest() +{ + debug("Verify that handler fires and that not preventing default will result in an abort"); + trans = evalAndLog("trans = db.transaction([], webkitIDBTransaction.READ_WRITE)"); + evalAndLog("trans.onabort = transactionAborted"); + evalAndLog("trans.oncomplete = unexpectedCompleteCallback"); + evalAndLog("trans.onerror = allowDefault"); + store = evalAndLog("store = trans.objectStore('storeName')"); + result = evalAndLog("store.add({x: 'value', y: 'zzz'}, 'key')"); + result.onsuccess = unexpectedSuccessCallback; + handlerFired = false; +} + +function allowDefault() +{ + testPassed("Event handler fired"); + debug("Doing nothing to prevent the default action..."); + handlerFired = true; +} + +function transactionAborted() +{ + shouldBeTrue("handlerFired"); + debug(""); + debug("Verifing error"); + trans = evalAndLog("trans = db.transaction([], webkitIDBTransaction.READ_WRITE)"); + evalAndLog("trans.onabort = transactionAborted2"); + evalAndLog("trans.oncomplete = unexpectedAbortCallback"); + evalAndLog("trans.addEventListener('error', errorCaptureCallback, true)"); + evalAndLog("trans.addEventListener('error', errorBubbleCallback, false)"); + evalAndLog("trans.addEventListener('success', unexpectedSuccessCallback, true)"); + evalAndLog("trans.addEventListener('success', unexpectedSuccessCallback, false)"); + evalAndLog("db.addEventListener('error', dbErrorCaptureCallback, true)"); + evalAndLog("db.addEventListener('error', dbErrorBubbleCallback, false)"); + evalAndLog("db.addEventListener('success', unexpectedSuccessCallback, true)"); + evalAndLog("db.addEventListener('success', unexpectedSuccessCallback, false)"); + store = evalAndLog("store = trans.objectStore('storeName')"); + result = evalAndLog("store.add({x: 'value', y: 'zzz'}, 'key')"); + result.onsuccess = unexpectedSuccessCallback; + result.onerror = errorFiredCallback; + dbCaptureFired = false; + captureFired = false; + requestFired = false; + bubbleFired = false; + dbBubbleFired = false; +} + +function dbErrorCaptureCallback() +{ + debug(""); + debug("In IDBDatabase error capture"); + shouldBeFalse("dbCaptureFired"); + shouldBeFalse("captureFired"); + shouldBeFalse("requestFired"); + shouldBeFalse("bubbleFired"); + shouldBeFalse("dbBubbleFired"); + dbCaptureFired = true; +} + +function errorCaptureCallback() +{ + debug(""); + debug("In IDBTransaction error capture"); + shouldBeTrue("dbCaptureFired"); + shouldBeFalse("captureFired"); + shouldBeFalse("requestFired"); + shouldBeFalse("bubbleFired"); + shouldBeFalse("dbBubbleFired"); + captureFired = true; +} + +function errorFiredCallback() +{ + debug(""); + debug("In IDBRequest handler"); + shouldBeTrue("dbCaptureFired"); + shouldBeTrue("captureFired"); + shouldBeFalse("requestFired"); + shouldBeFalse("bubbleFired"); + shouldBeFalse("dbBubbleFired"); + requestFired = true; +} + +function errorBubbleCallback() +{ + debug(""); + debug("In IDBTransaction error bubble"); + shouldBeTrue("dbCaptureFired"); + shouldBeTrue("captureFired"); + shouldBeTrue("requestFired"); + shouldBeFalse("bubbleFired"); + shouldBeFalse("dbBubbleFired"); + bubbleFired = true; +} + +function dbErrorBubbleCallback() +{ + debug(""); + debug("In IDBDatabase error bubble"); + shouldBeTrue("dbCaptureFired"); + shouldBeTrue("captureFired"); + shouldBeTrue("requestFired"); + shouldBeTrue("bubbleFired"); + shouldBeFalse("dbBubbleFired"); + dbBubbleFired = true; +} + +function transactionAborted2() +{ + debug(""); + debug("Transaction aborted"); + shouldBeTrue("dbCaptureFired"); + shouldBeTrue("captureFired"); + shouldBeTrue("requestFired"); + shouldBeTrue("bubbleFired"); + shouldBeTrue("dbBubbleFired"); + debug(""); + debug("Verifing success."); + trans = evalAndLog("trans = db.transaction([], webkitIDBTransaction.READ_WRITE)"); + evalAndLog("trans.oncomplete = transactionComplete"); + evalAndLog("trans.onabort = unexpectedAbortCallback"); + evalAndLog("trans.addEventListener('success', successCaptureCallback, true)"); + evalAndLog("trans.addEventListener('success', successBubbleCallback, false)"); + evalAndLog("trans.addEventListener('error', unexpectedErrorCallback, true)"); + evalAndLog("trans.addEventListener('error', unexpectedErrorCallback, false)"); + evalAndLog("db.removeEventListener('error', dbErrorCaptureCallback, true)"); + evalAndLog("db.removeEventListener('error', dbErrorBubbleCallback, false)"); + evalAndLog("db.removeEventListener('success', unexpectedSuccessCallback, true)"); + evalAndLog("db.removeEventListener('success', unexpectedSuccessCallback, false)"); + evalAndLog("db.addEventListener('success', dbSuccessCaptureCallback, true)"); + evalAndLog("db.addEventListener('success', dbSuccessBubbleCallback, false)"); + evalAndLog("db.addEventListener('error', unexpectedErrorCallback, true)"); + evalAndLog("db.addEventListener('error', unexpectedErrorCallback, false)"); + store = evalAndLog("store = trans.objectStore('storeName')"); + result = evalAndLog("store.add({x: 'value', y: 'zzz'}, 'key2')"); + result.onerror = unexpectedErrorCallback; + result.onsuccess = successFiredCallback; + dbCaptureFired = false; + captureFired = false; + requestFired = false; + bubbleFired = false; + dbBubbleFired = false; +} + +function dbSuccessCaptureCallback() +{ + debug(""); + debug("In IDBDatabase success capture"); + shouldBeFalse("dbCaptureFired"); + shouldBeFalse("captureFired"); + shouldBeFalse("requestFired"); + shouldBeFalse("bubbleFired"); + shouldBeFalse("dbBubbleFired"); + dbCaptureFired = true; +} + +function successCaptureCallback() +{ + debug(""); + debug("In IDBTransaction success capture"); + shouldBeTrue("dbCaptureFired"); + shouldBeFalse("captureFired"); + shouldBeFalse("requestFired"); + shouldBeFalse("bubbleFired"); + shouldBeFalse("dbBubbleFired"); + captureFired = true; +} + +function successFiredCallback() +{ + debug(""); + debug("In IDBRequest handler"); + shouldBeTrue("dbCaptureFired"); + shouldBeTrue("captureFired"); + shouldBeFalse("requestFired"); + shouldBeFalse("bubbleFired"); + shouldBeFalse("dbBubbleFired"); + requestFired = true; +} + +function successBubbleCallback() +{ + debug(""); + debug("In IDBTransaction success bubble"); + testFailed("Success bubble callback should NOT fire"); + bubbleFired = true; +} + +function dbSuccessBubbleCallback() +{ + debug(""); + debug("In IDBDatabase success bubble"); + testFailed("Success bubble callback should NOT fire"); + dbBubbleFired = true; +} + +function transactionComplete() +{ + debug(""); + debug("Transaction completed"); + shouldBeTrue("dbCaptureFired"); + shouldBeTrue("captureFired"); + shouldBeTrue("requestFired"); + shouldBeFalse("bubbleFired"); + shouldBeFalse("dbBubbleFired"); + debug(""); + + done(); + return; +} + +test(); + +var successfullyParsed = true; + +</script> +</body> +</html> |