123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- /* 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);
|