addon-sdk/source/test/test-indexed-db.js

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 /* This Source Code Form is subject to the terms of the Mozilla Public
     2  * License, v. 2.0. If a copy of the MPL was not distributed with this
     3  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     5 "use strict";
     7 let xulApp = require("sdk/system/xul-app");
     8 if (xulApp.versionInRange(xulApp.platformVersion, "16.0a1", "*")) {
     9 new function tests() {
    11 const { indexedDB, IDBKeyRange, DOMException
    12       } = require("sdk/indexed-db");
    14 exports["test indexedDB is frozen"] = function(assert){
    15   let original = indexedDB.open;
    16   let f = function(){};
    17   assert.throws(function(){indexedDB.open = f});
    18   assert.equal(indexedDB.open,original);
    19   assert.notEqual(indexedDB.open,f);
    21 };
    23 exports["test db variables"] = function(assert) {
    24   [ indexedDB, IDBKeyRange, DOMException
    25   ].forEach(function(value) {
    26     assert.notEqual(typeof(value), "undefined", "variable is defined");
    27   });
    28 }
    30 exports["test open"] = function(assert, done) {
    31   let request = indexedDB.open("MyTestDatabase");
    32   request.onerror = function(event) {
    33     assert.fail("Failed to open indexedDB")
    34     done();
    35   };
    36   request.onsuccess = function(event) {
    37     assert.pass("IndexedDB was open");
    38     done();
    39   };
    40 };
    42 exports["test dbname is unprefixed"] = function(assert, done) {
    43   // verify fixes in https://bugzilla.mozilla.org/show_bug.cgi?id=786688
    44   let dbName = "dbname-unprefixed";
    45   let request = indexedDB.open(dbName);
    46   request.onerror = function(event) {
    47     assert.fail("Failed to open db");
    48     done();
    49   };
    50   request.onsuccess = function(event) {
    51     assert.equal(request.result.name, dbName);
    52     done();
    53   };
    54 };
    56 exports["test structuring the database"] = function(assert, done) {
    57   // This is what our customer data looks like.
    58   let customerData = [
    59     { ssn: "444-44-4444", name: "Bill", age: 35, email: "bill@company.com" },
    60     { ssn: "555-55-5555", name: "Donna", age: 32, email: "donna@home.org" }
    61   ];
    62   let dbName = "the_name";
    63   let request = indexedDB.open(dbName, 2);
    64   request.onerror = function(event) {
    65     assert.fail("Failed to open db");
    66     done();
    67   };
    68   request.onsuccess = function(event) {
    69     assert.pass("transaction is complete");
    70     testRead(assert, done);
    71   }
    72   request.onupgradeneeded = function(event) {
    73     assert.pass("data base upgrade")
    75     var db = event.target.result;
    77     // Create an objectStore to hold information about our customers. We"re
    78     // going to use "ssn" as our key path because it"s guaranteed to be
    79     // unique.
    80     var objectStore = db.createObjectStore("customers", { keyPath: "ssn" });
    82     // Create an index to search customers by name. We may have duplicates
    83     // so we can"t use a unique index.
    84     objectStore.createIndex("name", "name", { unique: false });
    86     // Create an index to search customers by email. We want to ensure that
    87     // no two customers have the same email, so use a unique index.
    88     objectStore.createIndex("email", "email", { unique: true });
    90     // Store values in the newly created objectStore.
    91     customerData.forEach(function(data) {
    92       objectStore.add(data);
    93     });
    94     assert.pass("data added to object store");
    95   };
    96 };
    98 function testRead(assert, done) {
    99   let dbName = "the_name";
   100   let request = indexedDB.open(dbName, 2);
   101   request.onsuccess = function(event) {
   102     assert.pass("data opened")
   103     var db = event.target.result;
   104     let transaction = db.transaction(["customers"]);
   105     var objectStore = transaction.objectStore("customers");
   106     var request = objectStore.get("444-44-4444");
   107     request.onerror = function(event) {
   108       assert.fail("Failed to retrive data")
   109     };
   110     request.onsuccess = function(event) {
   111       // Do something with the request.result!
   112       assert.equal(request.result.name, "Bill", "Name is correct");
   113       done();
   114     };
   115   };
   116   request.onerror = function() {
   117     assert.fail("failed to open db");
   118   };
   119 };
   121 }
   122 } else {
   123   exports.testDB = function(assert) {
   124     assert.pass("IndexedDB is not implemented")
   125   }
   126 }
   128 require("test").run(exports);

mercurial