michael@0: /** michael@0: * Any copyright is dedicated to the Public Domain. michael@0: * http://creativecommons.org/publicdomain/zero/1.0/ michael@0: */ michael@0: michael@0: var testGenerator = testSteps(); michael@0: michael@0: function testSteps() michael@0: { michael@0: const name = this.window ? window.location.pathname : "Splendid Test"; michael@0: michael@0: let requests = []; michael@0: function doOpen(version, errorCallback, upgradeNeededCallback, successCallback) { michael@0: let request = indexedDB.open(name, version); michael@0: request.onerror = errorCallback; michael@0: request.onupgradeneeded = upgradeNeededCallback; michael@0: request.onsuccess = successCallback; michael@0: requests.push(request); michael@0: } michael@0: michael@0: doOpen(1, errorHandler, grabEventAndContinueHandler, grabEventAndContinueHandler); michael@0: doOpen(2, errorHandler, unexpectedSuccessHandler, unexpectedSuccessHandler); michael@0: michael@0: let event = yield undefined; michael@0: is(event.type, "upgradeneeded", "expect an upgradeneeded event"); michael@0: is(event.target, requests[0], "fired at the right request"); michael@0: michael@0: let db = event.target.result; michael@0: db.createObjectStore("foo"); michael@0: michael@0: doOpen(3, errorHandler, unexpectedSuccessHandler, unexpectedSuccessHandler); michael@0: doOpen(2, errorHandler, unexpectedSuccessHandler, unexpectedSuccessHandler); michael@0: doOpen(3, errorHandler, unexpectedSuccessHandler, unexpectedSuccessHandler); michael@0: michael@0: event.target.transaction.oncomplete = grabEventAndContinueHandler; michael@0: michael@0: event = yield undefined; michael@0: is(event.type, "complete", "expect a complete event"); michael@0: is(event.target, requests[0].transaction, "expect it to be fired at the transaction"); michael@0: michael@0: event = yield undefined; michael@0: is(event.type, "success", "expect a success event"); michael@0: is(event.target, requests[0], "fired at the right request"); michael@0: event.target.result.close(); michael@0: michael@0: requests[1].onupgradeneeded = grabEventAndContinueHandler; michael@0: michael@0: event = yield undefined; michael@0: is(event.type, "upgradeneeded", "expect an upgradeneeded event"); michael@0: is(event.target, requests[1], "fired at the right request"); michael@0: michael@0: requests[1].onsuccess = grabEventAndContinueHandler; michael@0: michael@0: event = yield undefined; michael@0: is(event.type, "success", "expect a success event"); michael@0: is(event.target, requests[1], "fired at the right request"); michael@0: event.target.result.close(); michael@0: michael@0: requests[2].onupgradeneeded = grabEventAndContinueHandler; michael@0: michael@0: event = yield undefined; michael@0: is(event.type, "upgradeneeded", "expect an upgradeneeded event"); michael@0: is(event.target, requests[2], "fired at the right request"); michael@0: michael@0: requests[2].onsuccess = grabEventAndContinueHandler; michael@0: michael@0: event = yield undefined; michael@0: is(event.type, "success", "expect a success event"); michael@0: is(event.target, requests[2], "fired at the right request"); michael@0: event.target.result.close(); michael@0: michael@0: requests[3].onerror = null; michael@0: requests[3].addEventListener("error", new ExpectError("VersionError", true)); michael@0: michael@0: event = yield undefined; michael@0: michael@0: requests[4].onsuccess = grabEventAndContinueHandler; michael@0: michael@0: event = yield undefined; michael@0: is(event.type, "success", "expect a success event"); michael@0: is(event.target, requests[4], "fired at the right request"); michael@0: event.target.result.close(); michael@0: michael@0: finishTest(); michael@0: yield undefined; michael@0: } michael@0: