137 lines
4.4 KiB
JavaScript
137 lines
4.4 KiB
JavaScript
// META: title=IDBRequest onupgradeneeded tests
|
|
// META: global=window,worker
|
|
|
|
'use strict';
|
|
|
|
function upgradeneeded_test(
|
|
upgrade_func, success_func, error_func, description) {
|
|
async_test(function(t) {
|
|
let dbName = 'db' + self.location.pathname + '-' + description;
|
|
let delete_request = indexedDB.deleteDatabase(dbName);
|
|
delete_request.onerror = t.unreached_func('deleteDatabase should not fail');
|
|
delete_request.onsuccess = t.step_func(function() {
|
|
let 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() {
|
|
let order = [];
|
|
upgradeneeded_test(
|
|
function upgrade(t, request) {
|
|
order.push('Upgrade');
|
|
let db = request.result;
|
|
let 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) {
|
|
let db = request.result;
|
|
db.close();
|
|
order.push('Open Success');
|
|
},
|
|
null, 'indexedDB.delete called from upgradeneeded handler');
|
|
}());
|
|
|
|
(function() {
|
|
let order = [];
|
|
upgradeneeded_test(
|
|
function upgrade(t, request) {
|
|
order.push('Upgrade');
|
|
request.transaction.abort();
|
|
order.push('Upgrade Transaction Aborted');
|
|
let db = request.result;
|
|
let 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() {
|
|
let order = [];
|
|
upgradeneeded_test(
|
|
function upgrade(t, request) {
|
|
order.push('Upgrade');
|
|
let db = request.result;
|
|
let 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() {
|
|
let order = [];
|
|
upgradeneeded_test(
|
|
function upgrade(t, request) {
|
|
order.push('Upgrade');
|
|
let db = request.result;
|
|
db.createObjectStore('store');
|
|
request.transaction.oncomplete = t.step_func(function() {
|
|
order.push('Upgrade transaction complete');
|
|
let txn = db.transaction('store', 'readwrite');
|
|
let 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');
|
|
}());
|