diff -r 000000000000 -r 6474c204b198 addon-sdk/source/test/test-indexed-db.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/addon-sdk/source/test/test-indexed-db.js Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,128 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +"use strict"; + +let xulApp = require("sdk/system/xul-app"); +if (xulApp.versionInRange(xulApp.platformVersion, "16.0a1", "*")) { +new function tests() { + +const { indexedDB, IDBKeyRange, DOMException + } = require("sdk/indexed-db"); + +exports["test indexedDB is frozen"] = function(assert){ + let original = indexedDB.open; + let f = function(){}; + assert.throws(function(){indexedDB.open = f}); + assert.equal(indexedDB.open,original); + assert.notEqual(indexedDB.open,f); + +}; + +exports["test db variables"] = function(assert) { + [ indexedDB, IDBKeyRange, DOMException + ].forEach(function(value) { + assert.notEqual(typeof(value), "undefined", "variable is defined"); + }); +} + +exports["test open"] = function(assert, done) { + let request = indexedDB.open("MyTestDatabase"); + request.onerror = function(event) { + assert.fail("Failed to open indexedDB") + done(); + }; + request.onsuccess = function(event) { + assert.pass("IndexedDB was open"); + done(); + }; +}; + +exports["test dbname is unprefixed"] = function(assert, done) { + // verify fixes in https://bugzilla.mozilla.org/show_bug.cgi?id=786688 + let dbName = "dbname-unprefixed"; + let request = indexedDB.open(dbName); + request.onerror = function(event) { + assert.fail("Failed to open db"); + done(); + }; + request.onsuccess = function(event) { + assert.equal(request.result.name, dbName); + done(); + }; +}; + +exports["test structuring the database"] = function(assert, done) { + // This is what our customer data looks like. + let customerData = [ + { ssn: "444-44-4444", name: "Bill", age: 35, email: "bill@company.com" }, + { ssn: "555-55-5555", name: "Donna", age: 32, email: "donna@home.org" } + ]; + let dbName = "the_name"; + let request = indexedDB.open(dbName, 2); + request.onerror = function(event) { + assert.fail("Failed to open db"); + done(); + }; + request.onsuccess = function(event) { + assert.pass("transaction is complete"); + testRead(assert, done); + } + request.onupgradeneeded = function(event) { + assert.pass("data base upgrade") + + var db = event.target.result; + + // Create an objectStore to hold information about our customers. We"re + // going to use "ssn" as our key path because it"s guaranteed to be + // unique. + var objectStore = db.createObjectStore("customers", { keyPath: "ssn" }); + + // Create an index to search customers by name. We may have duplicates + // so we can"t use a unique index. + objectStore.createIndex("name", "name", { unique: false }); + + // Create an index to search customers by email. We want to ensure that + // no two customers have the same email, so use a unique index. + objectStore.createIndex("email", "email", { unique: true }); + + // Store values in the newly created objectStore. + customerData.forEach(function(data) { + objectStore.add(data); + }); + assert.pass("data added to object store"); + }; +}; + +function testRead(assert, done) { + let dbName = "the_name"; + let request = indexedDB.open(dbName, 2); + request.onsuccess = function(event) { + assert.pass("data opened") + var db = event.target.result; + let transaction = db.transaction(["customers"]); + var objectStore = transaction.objectStore("customers"); + var request = objectStore.get("444-44-4444"); + request.onerror = function(event) { + assert.fail("Failed to retrive data") + }; + request.onsuccess = function(event) { + // Do something with the request.result! + assert.equal(request.result.name, "Bill", "Name is correct"); + done(); + }; + }; + request.onerror = function() { + assert.fail("failed to open db"); + }; +}; + +} +} else { + exports.testDB = function(assert) { + assert.pass("IndexedDB is not implemented") + } +} + +require("test").run(exports);