summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/IndexedDB/idbrequest-onupgradeneeded.htm
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/IndexedDB/idbrequest-onupgradeneeded.htm')
-rw-r--r--testing/web-platform/tests/IndexedDB/idbrequest-onupgradeneeded.htm146
1 files changed, 146 insertions, 0 deletions
diff --git a/testing/web-platform/tests/IndexedDB/idbrequest-onupgradeneeded.htm b/testing/web-platform/tests/IndexedDB/idbrequest-onupgradeneeded.htm
new file mode 100644
index 0000000000..c156dba619
--- /dev/null
+++ b/testing/web-platform/tests/IndexedDB/idbrequest-onupgradeneeded.htm
@@ -0,0 +1,146 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>IndexedDB: UpgradeNeeded Tests</title>
+<meta name="help" href="https://w3c.github.io/IndexedDB/#commit-transaction">
+<meta name="help" href="https://w3c.github.io/IndexedDB/#dom-idbfactory-open">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+
+function upgradeneeded_test(upgrade_func, success_func, error_func, description) {
+ async_test(function(t) {
+ var dbName = 'db' + self.location.pathname + '-' + description;
+ var delete_request = indexedDB.deleteDatabase(dbName);
+ delete_request.onerror = t.unreached_func('deleteDatabase should not fail');
+ delete_request.onsuccess = t.step_func(function() {
+ var open_request = indexedDB.open(dbName);
+
+ open_request.onupgradeneeded = t.step_func(function() {
+ t.add_cleanup(function() {
+ if (open_request.result) {
+ open_request.result.close(),
+ indexedDB.deleteDatabase(dbName);
+ }
+ });
+ upgrade_func(t, open_request);
+ });
+ open_request.onsuccess = t.step_func(function() {
+ success_func(t, open_request);
+ });
+ if (error_func) {
+ open_request.onerror = function() { error_func(t, open_request); };
+ } else {
+ open_request.onerror = t.unreached_func('open failed');
+ }
+ });
+ }, description);
+}
+
+(function() {
+ var order = [];
+ upgradeneeded_test(
+ function upgrade(t, request) {
+ order.push('Upgrade');
+ var db = request.result;
+ var deleteRequest = indexedDB.deleteDatabase(db.name);
+ deleteRequest.onsuccess = t.step_func(function() {
+ assert_array_equals(order, ['Upgrade', 'Open Success']);
+ t.done();
+ });
+ deleteRequest.onerror = t.unreached_func('delete failed');
+ },
+ function success(t, request) {
+ var db = request.result;
+ db.close();
+ order.push('Open Success');
+ },
+ null,
+ 'indexedDB.delete called from upgradeneeded handler'
+ );
+}());
+
+(function() {
+ var order = [];
+ upgradeneeded_test(
+ function upgrade(t, request) {
+ order.push('Upgrade');
+ request.transaction.abort();
+ order.push('Upgrade Transaction Aborted');
+ var db = request.result;
+ var deleteRequest = indexedDB.deleteDatabase(db.name);
+ deleteRequest.onsuccess = t.step_func(function() {
+ assert_array_equals(
+ order, ['Upgrade', 'Upgrade Transaction Aborted', 'Open Error']);
+ t.done();
+ });
+ deleteRequest.onerror = t.unreached_func('delete failed');
+ },
+ function success(t, request) {
+ t.unreached_func('open should not succeed');
+ },
+ function error_func(t, request) {
+ assert_array_equals(order, ['Upgrade', 'Upgrade Transaction Aborted']);
+ order.push('Open Error');
+ },
+ 'Abort transaction before deleting database in upgradeneeded handler'
+ );
+}());
+
+(function() {
+ var order = [];
+ upgradeneeded_test(
+ function upgrade(t, request) {
+ order.push('Upgrade');
+ var db = request.result;
+ var deleteRequest = indexedDB.deleteDatabase(db.name);
+ request.transaction.abort();
+ order.push('Upgrade Transaction Aborted');
+ deleteRequest.onsuccess = t.step_func(function() {
+ assert_array_equals(
+ order, ['Upgrade', 'Upgrade Transaction Aborted', 'Open Error']);
+ t.done();
+ });
+ deleteRequest.onerror = t.unreached_func('delete failed');
+ },
+ function success(t, request) {
+ t.unreached_func('open should not succeed');
+ },
+ function error_func(t, request) {
+ assert_array_equals(order, ['Upgrade', 'Upgrade Transaction Aborted']);
+ order.push('Open Error');
+ },
+ 'Abort transaction after deleting database in upgradeneeded event handler'
+ );
+}());
+
+(function() {
+ var order = [];
+ upgradeneeded_test(
+ function upgrade(t, request) {
+ order.push('Upgrade');
+ var db = request.result;
+ db.createObjectStore('store');
+ request.transaction.oncomplete = t.step_func(function() {
+ order.push('Upgrade transaction complete');
+ var txn = db.transaction('store', 'readwrite', {durability: 'relaxed'});
+ var store = txn.objectStore('store');
+ store.put('value', 'key');
+ txn.oncomplete = t.step_func(function() {
+ assert_array_equals(
+ order,
+ ['Upgrade', 'Upgrade transaction complete', 'Open Success']);
+ t.done();
+ });
+ txn.onerror = t.unreached_func('error on transaction');
+ txn.onabort = t.unreached_func('aborting transaction');
+ });
+ },
+ function success(t, request) {
+ order.push('Open Success');
+ },
+ null,
+ 'transaction oncomplete ordering relative to open request onsuccess'
+ );
+}());
+
+</script>