var request = indexedDB.open(getFakeTestName());
request.onupgradeneeded = function(e) {
var db = e.target.result;
var store = db.createObjectStore('store', {keyPath: 'key'});
for (var i = 0; i < 10; i++) {
store.add({key: i, content: 'test' + i});
}
};
var started = [];
var completed = [];
function startTx(db, mode, desc) {
var tx = db.transaction('store', mode);
tx.objectStore('store').get(1).onsuccess = function () {
// If this is one of the readwrite transactions or the first readonly after a readwrite, make sure we waited for all active transactions to finish before starting a new one
if (mode === 'readwrite' || started.length === 7) {
expect(started.length).equal(completed.length);
}
started.push(desc);
//console.log('start', desc);
tx.objectStore('store').get(2).onsuccess = function () {
tx.objectStore('store').get(3).onsuccess = function () {
tx.objectStore('store').get(4).onsuccess = function () {
tx.objectStore('store').get(5).onsuccess = function () {
tx.objectStore('store').get(6);
};
};
};
};
};
tx.oncomplete = function () {
completed.push(desc);
//console.log('done', desc);
if (completed.length >= 12) {
done();
}
};
}
request.onsuccess = function (e) {
var db = e.target.result;
var i;
for (i = 0; i < 5; i++) {
startTx(db, 'readonly', '1-' + i);
}
startTx(db, 'readwrite', 2);
startTx(db, 'readwrite', 3);
for (i = 0; i < 5; i++) {
startTx(db, 'readonly', '4-' + i);
}
};
var request = indexedDB.open(getFakeTestName());
request.onupgradeneeded = function(e) {
var db = e.target.result;
var store = db.createObjectStore('store', {autoIncrement: true});
for (var i = 0; i < 10; i++) {
store.add({content: 'test' + (i + 1)});
}
};
request.onsuccess = function (e) {
var db = e.target.result;
var tx = db.transaction('store', 'readwrite');
tx.objectStore('store').count().onsuccess = function (e) {
expect(e.target.result).equal(10);
tx.objectStore('store').add({content: 'SHOULD BE ROLLED BACK'});
tx.objectStore('store').get(11).onsuccess = function (e) {
expect(e.target.result.content).equal('SHOULD BE ROLLED BACK');
tx.abort();
};
};
var tx2 = db.transaction('store', 'readwrite');
tx2.objectStore('store').count().onsuccess = function (e) {
expect(e.target.result).equal(10);
tx2.objectStore('store').add({content: 'SHOULD BE 11TH RECORD'}); // add would fail if SHOULD BE ROLLED BACK was still there
tx2.objectStore('store').count().onsuccess = function (e) {
expect(e.target.result).equal(11);
};
tx2.objectStore('store').get(11).onsuccess = function (e) {
expect(e.target.result.content).equal('SHOULD BE 11TH RECORD');
};
};
tx2.oncomplete = function () { done(); };
};
var request = indexedDB.open(getFakeTestName());
request.onupgradeneeded = function(e) {
var db = e.target.result;
var store = db.createObjectStore('store', {autoIncrement: true});
for (var i = 0; i < 10; i++) {
store.add({content: 'test' + (i + 1)});
}
};
request.onsuccess = function (e) {
var db = e.target.result;
var tx = db.transaction('store', 'readwrite');
tx.objectStore('store').clear().onsuccess = function () {
tx.objectStore('store').count().onsuccess = function (e) {
expect(e.target.result).equal(0);
tx.abort();
};
};
var tx2 = db.transaction('store', 'readwrite');
tx2.objectStore('store').count().onsuccess = function (e) {
expect(e.target.result).equal(10);
};
tx2.oncomplete = function () { done(); };
};
var request = indexedDB.open(getFakeTestName());
request.onupgradeneeded = function(e) {
var db = e.target.result;
var store = db.createObjectStore('store', {autoIncrement: true});
for (var i = 0; i < 10; i++) {
store.add({content: 'test' + (i + 1)});
}
};
request.onsuccess = function (e) {
var db = e.target.result;
var tx = db.transaction('store', 'readwrite');
tx.objectStore('store').delete(2).onsuccess = function () {
tx.objectStore('store').count().onsuccess = function (e) {
expect(e.target.result).equal(9);
tx.abort();
};
};
var tx2 = db.transaction('store', 'readwrite');
tx2.objectStore('store').count().onsuccess = function (e) {
expect(e.target.result).equal(10);
};
tx2.oncomplete = function () { done(); };
};
var request = indexedDB.open(getFakeTestName());
request.onupgradeneeded = function(e) {
var db = e.target.result;
var store = db.createObjectStore('store', {autoIncrement: true});
for (var i = 0; i < 10; i++) {
store.add({content: 'test' + (i + 1)});
}
};
request.onsuccess = function (e) {
var db = e.target.result;
var tx = db.transaction('store', 'readwrite');
tx.objectStore('store').put({content: 'SHOULD BE ROLLED BACK'}, 10);
tx.objectStore('store').get(10).onsuccess = function (e) {
expect(e.target.result.content).equal('SHOULD BE ROLLED BACK');
tx.abort();
};
var tx2 = db.transaction('store', 'readwrite');
tx2.objectStore('store').get(10).onsuccess = function (e) {
expect(e.target.result.content).equal('test10');
};
tx2.oncomplete = function () { done(); };
};
var request = indexedDB.open(getFakeTestName());
request.onupgradeneeded = function(e) {
var db = e.target.result;
var store = db.createObjectStore('store', {autoIncrement: true});
for (var i = 0; i < 10; i++) {
store.add({content: 'test' + (i + 1)});
}
};
request.onsuccess = function (e) {
var db = e.target.result;
var tx = db.transaction('store', 'readwrite');
tx.objectStore('store').openCursor(3).onsuccess = function (e) {
var cursor = e.target.result;
var obj = cursor.value;
obj.content = 'SHOULD BE ROLLED BACK';
cursor.delete();
tx.objectStore('store').get(3).onsuccess = function (e) {
expect(e.target.result).equal(undefined);
tx.abort();
};
};
var tx2 = db.transaction('store', 'readwrite');
tx2.objectStore('store').get(3).onsuccess = function (e) {
expect(e.target.result.content).equal('test3');
};
tx2.oncomplete = function () { done(); };
};