124 lines
5.5 KiB
JavaScript
124 lines
5.5 KiB
JavaScript
// META: title=IndexedDB: aborting transactions reverts an object store's key generator state
|
|
// META: global=window,worker
|
|
// META: script=resources/support-promises.js
|
|
// META: script=resources/support.js
|
|
|
|
// Spec: https://w3c.github.io/IndexedDB/#abort-transaction
|
|
|
|
'use strict';
|
|
|
|
promise_test(
|
|
testCase => {
|
|
return createDatabase(
|
|
testCase,
|
|
(database, transaction) => {
|
|
createBooksStore(testCase, database);
|
|
})
|
|
.then(database => {
|
|
database.close();
|
|
})
|
|
.then(() => {
|
|
return new Promise((resolve, reject) => {
|
|
const request = indexedDB.open(databaseName(testCase), 2);
|
|
request.onupgradeneeded = testCase.step_func(event => {
|
|
const database = event.target.result;
|
|
const transaction = event.target.transaction;
|
|
const store = transaction.objectStore('books');
|
|
const request2 =
|
|
store.put({title: 'Bedrock Nights II', author: 'Barney'});
|
|
request2.onerror = testCase.unreached_func(
|
|
'IDBObjectStore.put() should not receive an error request');
|
|
request2.onsuccess = testCase.step_func(event => {
|
|
assert_equals(
|
|
event.target.result, 345679,
|
|
'The key generator\'s current number should be set by ' +
|
|
'the last put operation in the database creation ' +
|
|
'transaction');
|
|
|
|
request.onerror = event => {
|
|
event.preventDefault();
|
|
resolve(event);
|
|
};
|
|
request.onsuccess = () => reject(new Error(
|
|
'indexedDB.open should not succeed after the ' +
|
|
'versionchange transaction is aborted'));
|
|
|
|
transaction.abort();
|
|
});
|
|
});
|
|
request.onerror = event => reject(event.target.error);
|
|
request.onsuccess = () => reject(new Error(
|
|
'indexedDB.open should not succeed without creating a ' +
|
|
'versionchange transaction'));
|
|
});
|
|
})
|
|
.then(() => {
|
|
return openDatabase(testCase, 1);
|
|
})
|
|
.then(database => {
|
|
const transaction = database.transaction(['books'], 'readwrite');
|
|
const store = transaction.objectStore('books');
|
|
|
|
return checkStoreGenerator(
|
|
testCase, store, 345679,
|
|
'The key generator\'s current number should be reverted after the ' +
|
|
'transaction modifying it is aborted')
|
|
.then(() => database.close());
|
|
});
|
|
},
|
|
'The current number of a key generator is reverted when a versionchange ' +
|
|
'transaction aborts');
|
|
|
|
promise_test(
|
|
testCase => {
|
|
return createDatabase(
|
|
testCase,
|
|
(database, transaction) => {
|
|
createBooksStore(testCase, database);
|
|
})
|
|
.then(database => {
|
|
return new Promise((resolve, reject) => {
|
|
const transaction =
|
|
database.transaction(['books'], 'readwrite');
|
|
const store = transaction.objectStore('books');
|
|
const request = store.put(
|
|
{title: 'Bedrock Nights II', author: 'Barney'});
|
|
request.onerror = testCase.unreached_func(
|
|
'IDBObjectStore.put() should not receive an error request');
|
|
request.onsuccess = testCase.step_func(event => {
|
|
assert_equals(
|
|
event.target.result, 345679,
|
|
'The key generator\'s current number should be set by the ' +
|
|
'last put operation in the database creation transaction');
|
|
|
|
transaction.onabort = event => {
|
|
event.preventDefault();
|
|
resolve(event);
|
|
};
|
|
transaction.abort();
|
|
});
|
|
transaction.onabort = () => reject(new Error(
|
|
'The aborted readwrite transaction should not receive an ' +
|
|
'abort event before IDBTransaction.abort() is called'));
|
|
transaction.oncomplete = () => reject(new Error(
|
|
'The aborted readwrite transaction should not receive a ' +
|
|
'completed event'));
|
|
transaction.onerror = () => reject(new Error(
|
|
'The aborted readwrite transaction should not receive an ' +
|
|
'error event'));
|
|
})
|
|
.then(() => database);
|
|
})
|
|
.then(database => {
|
|
const transaction = database.transaction(['books'], 'readwrite');
|
|
const store = transaction.objectStore('books');
|
|
|
|
return checkStoreGenerator(
|
|
testCase, store, 345679,
|
|
'The key generator\'s current number should be reverted after the ' +
|
|
'transaction modifying it is aborted')
|
|
.then(() => database.close());
|
|
});
|
|
},
|
|
'The current number of a key generator is reverted when a readwrite ' +
|
|
'transaction aborts');
|