mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-07 20:17:37 +00:00
dda86cd70e
--HG-- extra : rebase_source : d635a4f39c587d4d381b486dd63de747865b77a2
123 lines
3.6 KiB
JavaScript
123 lines
3.6 KiB
JavaScript
var databaseName = "database";
|
|
var databaseVersion = 1;
|
|
|
|
if (!window.indexedDB)
|
|
{
|
|
if (window.msIndexedDB)
|
|
{
|
|
window.indexedDB = window.msIndexedDB;
|
|
}
|
|
else if (window.mozIndexedDB)
|
|
{
|
|
window.indexedDB = window.mozIndexedDB;
|
|
}
|
|
else if (window.webkitIndexedDB)
|
|
{
|
|
window.indexedDB = webkitIndexedDB;
|
|
IDBCursor = webkitIDBCursor;
|
|
IDBDatabaseException = webkitIDBDatabaseException;
|
|
IDBIndex = webkitIDBIndex;
|
|
IDBObjectStore = webkitIDBObjectStore;
|
|
IDBRequest = webkitIDBRequest;
|
|
IDBKeyRange = webkitIDBKeyRange;
|
|
IDBTransaction = webkitIDBTransaction;
|
|
}
|
|
}
|
|
|
|
/* Delete created databases
|
|
*
|
|
* Go through each finished test, see if it has an associated database. Close
|
|
* that and delete the database. */
|
|
add_completion_callback(function(tests)
|
|
{
|
|
for (var i in tests)
|
|
{
|
|
if(tests[i].db)
|
|
{
|
|
tests[i].db.close();
|
|
window.indexedDB.deleteDatabase(tests[i].db.name);
|
|
}
|
|
}
|
|
});
|
|
|
|
function fail(test, desc) {
|
|
return test.step_func(function(e) {
|
|
if (e && e.message && e.target.error)
|
|
assert_unreached(desc + " (" + e.target.error.name + ": " + e.message + ")");
|
|
else if (e && e.message)
|
|
assert_unreached(desc + " (" + e.message + ")");
|
|
else if (e && e.target.readyState === 'done' && e.target.error)
|
|
assert_unreached(desc + " (" + e.target.error.name + ")");
|
|
else
|
|
assert_unreached(desc);
|
|
});
|
|
}
|
|
|
|
function createdb(test, dbname, version)
|
|
{
|
|
var rq_open = createdb_for_multiple_tests(dbname, version);
|
|
return rq_open.setTest(test);
|
|
}
|
|
|
|
function createdb_for_multiple_tests(dbname, version) {
|
|
var rq_open,
|
|
fake_open = {},
|
|
test = null,
|
|
dbname = (dbname ? dbname : "testdb-" + new Date().getTime() + Math.random() );
|
|
|
|
if (version)
|
|
rq_open = window.indexedDB.open(dbname, version);
|
|
else
|
|
rq_open = window.indexedDB.open(dbname);
|
|
|
|
function auto_fail(evt, current_test) {
|
|
/* Fail handlers, if we haven't set on/whatever/, don't
|
|
* expect to get event whatever. */
|
|
rq_open.manually_handled = {}
|
|
|
|
rq_open.addEventListener(evt, function(e) {
|
|
if (current_test !== test) {
|
|
return;
|
|
}
|
|
|
|
test.step(function() {
|
|
if (!rq_open.manually_handled[evt]) {
|
|
assert_unreached("unexpected open." + evt + " event");
|
|
}
|
|
|
|
if (e.target.result + "" == "[object IDBDatabase]" && !this.db) {
|
|
this.db = e.target.result;
|
|
|
|
this.db.onerror = fail(test, "unexpected db.error");
|
|
this.db.onabort = fail(test, "unexpected db.abort");
|
|
this.db.onversionchange = fail(test, "unexpected db.versionchange");
|
|
}
|
|
})
|
|
})
|
|
rq_open.__defineSetter__("on" + evt, function(h) {
|
|
rq_open.manually_handled[evt] = true;
|
|
if (!h)
|
|
rq_open.addEventListener(evt, function() {});
|
|
else
|
|
rq_open.addEventListener(evt, test.step_func(h));
|
|
})
|
|
}
|
|
|
|
// add a .setTest method to the DB object
|
|
Object.defineProperty(rq_open, 'setTest', {
|
|
enumerable: false,
|
|
value: function(t) {
|
|
test = t;
|
|
|
|
auto_fail("upgradeneeded", test);
|
|
auto_fail("success", test);
|
|
auto_fail("blocked", test);
|
|
auto_fail("error", test);
|
|
|
|
return this;
|
|
}
|
|
});
|
|
|
|
return rq_open;
|
|
}
|