1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/addon-sdk/source/test/test-indexed-db.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,128 @@ 1.4 +/* This Source Code Form is subject to the terms of the Mozilla Public 1.5 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.6 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.7 + 1.8 +"use strict"; 1.9 + 1.10 +let xulApp = require("sdk/system/xul-app"); 1.11 +if (xulApp.versionInRange(xulApp.platformVersion, "16.0a1", "*")) { 1.12 +new function tests() { 1.13 + 1.14 +const { indexedDB, IDBKeyRange, DOMException 1.15 + } = require("sdk/indexed-db"); 1.16 + 1.17 +exports["test indexedDB is frozen"] = function(assert){ 1.18 + let original = indexedDB.open; 1.19 + let f = function(){}; 1.20 + assert.throws(function(){indexedDB.open = f}); 1.21 + assert.equal(indexedDB.open,original); 1.22 + assert.notEqual(indexedDB.open,f); 1.23 + 1.24 +}; 1.25 + 1.26 +exports["test db variables"] = function(assert) { 1.27 + [ indexedDB, IDBKeyRange, DOMException 1.28 + ].forEach(function(value) { 1.29 + assert.notEqual(typeof(value), "undefined", "variable is defined"); 1.30 + }); 1.31 +} 1.32 + 1.33 +exports["test open"] = function(assert, done) { 1.34 + let request = indexedDB.open("MyTestDatabase"); 1.35 + request.onerror = function(event) { 1.36 + assert.fail("Failed to open indexedDB") 1.37 + done(); 1.38 + }; 1.39 + request.onsuccess = function(event) { 1.40 + assert.pass("IndexedDB was open"); 1.41 + done(); 1.42 + }; 1.43 +}; 1.44 + 1.45 +exports["test dbname is unprefixed"] = function(assert, done) { 1.46 + // verify fixes in https://bugzilla.mozilla.org/show_bug.cgi?id=786688 1.47 + let dbName = "dbname-unprefixed"; 1.48 + let request = indexedDB.open(dbName); 1.49 + request.onerror = function(event) { 1.50 + assert.fail("Failed to open db"); 1.51 + done(); 1.52 + }; 1.53 + request.onsuccess = function(event) { 1.54 + assert.equal(request.result.name, dbName); 1.55 + done(); 1.56 + }; 1.57 +}; 1.58 + 1.59 +exports["test structuring the database"] = function(assert, done) { 1.60 + // This is what our customer data looks like. 1.61 + let customerData = [ 1.62 + { ssn: "444-44-4444", name: "Bill", age: 35, email: "bill@company.com" }, 1.63 + { ssn: "555-55-5555", name: "Donna", age: 32, email: "donna@home.org" } 1.64 + ]; 1.65 + let dbName = "the_name"; 1.66 + let request = indexedDB.open(dbName, 2); 1.67 + request.onerror = function(event) { 1.68 + assert.fail("Failed to open db"); 1.69 + done(); 1.70 + }; 1.71 + request.onsuccess = function(event) { 1.72 + assert.pass("transaction is complete"); 1.73 + testRead(assert, done); 1.74 + } 1.75 + request.onupgradeneeded = function(event) { 1.76 + assert.pass("data base upgrade") 1.77 + 1.78 + var db = event.target.result; 1.79 + 1.80 + // Create an objectStore to hold information about our customers. We"re 1.81 + // going to use "ssn" as our key path because it"s guaranteed to be 1.82 + // unique. 1.83 + var objectStore = db.createObjectStore("customers", { keyPath: "ssn" }); 1.84 + 1.85 + // Create an index to search customers by name. We may have duplicates 1.86 + // so we can"t use a unique index. 1.87 + objectStore.createIndex("name", "name", { unique: false }); 1.88 + 1.89 + // Create an index to search customers by email. We want to ensure that 1.90 + // no two customers have the same email, so use a unique index. 1.91 + objectStore.createIndex("email", "email", { unique: true }); 1.92 + 1.93 + // Store values in the newly created objectStore. 1.94 + customerData.forEach(function(data) { 1.95 + objectStore.add(data); 1.96 + }); 1.97 + assert.pass("data added to object store"); 1.98 + }; 1.99 +}; 1.100 + 1.101 +function testRead(assert, done) { 1.102 + let dbName = "the_name"; 1.103 + let request = indexedDB.open(dbName, 2); 1.104 + request.onsuccess = function(event) { 1.105 + assert.pass("data opened") 1.106 + var db = event.target.result; 1.107 + let transaction = db.transaction(["customers"]); 1.108 + var objectStore = transaction.objectStore("customers"); 1.109 + var request = objectStore.get("444-44-4444"); 1.110 + request.onerror = function(event) { 1.111 + assert.fail("Failed to retrive data") 1.112 + }; 1.113 + request.onsuccess = function(event) { 1.114 + // Do something with the request.result! 1.115 + assert.equal(request.result.name, "Bill", "Name is correct"); 1.116 + done(); 1.117 + }; 1.118 + }; 1.119 + request.onerror = function() { 1.120 + assert.fail("failed to open db"); 1.121 + }; 1.122 +}; 1.123 + 1.124 +} 1.125 +} else { 1.126 + exports.testDB = function(assert) { 1.127 + assert.pass("IndexedDB is not implemented") 1.128 + } 1.129 +} 1.130 + 1.131 +require("test").run(exports);