dom/settings/tests/test_settings_basics.html

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

     1 <!DOCTYPE html>
     2 <html>
     3 <!--
     4 https://bugzilla.mozilla.org/show_bug.cgi?id={678695}
     5 -->
     6 <head>
     7   <title>Test for Bug {678695} Settings API</title>
     8   <script type="text/javascript" src="/MochiKit/MochiKit.js"></script>
     9   <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
    10   <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
    11 </head>
    12 <body>
    14 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id={678695}">Mozilla Bug {678695}</a>
    15 <p id="display"></p>
    16 <div id="content" style="display: none">
    18 </div>
    19 <pre id="test">
    20 <script class="testbody" type="text/javascript">
    22 "use strict";
    24 if (SpecialPowers.isMainProcess()) {
    25   SpecialPowers.Cu.import("resource://gre/modules/SettingsChangeNotifier.jsm");
    26 }
    28 SpecialPowers.addPermission("settings-read", true, document);
    29 SpecialPowers.addPermission("settings-write", true, document);
    31 function onUnwantedSuccess() {
    32   ok(false, "onUnwantedSuccess: shouldn't get here");
    33 }
    35 function onFailure() {
    36   ok(false, "in on Failure!");
    37 }
    39 const wifi  = {"net3g.apn": "internet.mnc012.mcc345.gprs"};
    40 const wifi2 = {"net3g.apn": "internet.mnc012.mcc345.test"};
    41 var wifi3 = {"net3g.apn2": "internet.mnc012.mcc345.test3"};
    42 var wifiEnabled = {"wifi.enabled": true};
    43 var wifiDisabled = {"wifi.enabled": false};
    44 var screenBright = {"screen.brightness": 0.7};
    45 var screenBright2 = {"screen.brightness": 0.1};
    46 var wifiNetworks0 = { "wifi.networks[0]": { ssid: "myfreenetwork", mac: "01:23:45:67:89:ab", passwd: "secret"}};
    47 var wifiNetworks1 = { "wifi.networks[1]": { ssid: "myfreenetwork2", mac: "01:23:45:67:89:ab", passwd: "secret2"}};
    49 var combination = {
    50   "wifi.enabled": false,
    51   "screen.brightness": 0.7,
    52   "wifi.networks[0]": { ssid: "myfreenetwork", mac: "01:23:45:67:89:ab", passwd: "secret" },
    53   "test.test": true,
    54   "net3g.apn2": "internet.mnc012.mcc345.gprs"
    55 }
    57 function equals(o1, o2) {
    58   var k1 = Object.keys(o1).sort();
    59   var k2 = Object.keys(o2).sort();
    60   if (k1.length != k2.length) return false;
    61   return k1.zip(k2, function(keyPair) {
    62     if(typeof o1[keyPair[0]] == typeof o2[keyPair[1]] == "object"){
    63       return equals(o1[keyPair[0]], o2[keyPair[1]])
    64     } else {
    65       return o1[keyPair[0]] == o2[keyPair[1]];
    66     }
    67   }).all();
    68 };
    70 function observer1(setting) {
    71   is(setting.settingName, "screen.brightness", "Same settingName");
    72   is(setting.settingValue, "0.7", "Same settingvalue");
    73 };
    75 function observer2(setting) {
    76   is(setting.settingName, "screen.brightness", "Same settingName");
    77   is(setting.settingValue, "0.7", "Same settingvalue");
    78 };
    80 function observerWithNext(setting) {
    81   is(setting.settingName, "screen.brightness", "Same settingName");
    82   is(setting.settingValue, "0.7", "Same settingvalue");
    83   next();
    84 };
    86 function onsettingschangeWithNext(event) {
    87   is(event.settingName, "screen.brightness", "Same settingName");
    88   is(event.settingValue, "0.7", "Same settingvalue");
    89   next();
    90 };
    92 function check(o1, o2) {
    93   is(JSON.stringify(o1), JSON.stringify(o2), "same");
    94 }
    96 var req, req2, req3, req4, req5, req6;
    97 var index = 0;
    99 var mozSettings = navigator.mozSettings;
   101 var steps = [
   102   function () {
   103     ok(true, "Deleting database");
   104     var lock = mozSettings.createLock();
   105     req = lock.clear();
   106     req.onsuccess = function () {
   107       ok(true, "Deleted the database");
   108       next();
   109     };
   110   },
   111   function () {
   112     ok(true, "Setting wifi");
   113     var lock = mozSettings.createLock();
   114     req = lock.set(wifi);
   115     req.onsuccess = function () {
   116       ok(true, "set done");
   117     }
   118     req.onerror = onFailure;
   120     var lock2 = mozSettings.createLock();
   121     req2 = lock2.get("net3g.apn");
   122     req2.onsuccess = function () {
   123       is(Object.keys(req2.result).length, 1, "length 1");
   124       check(wifi, req2.result);
   125       ok(true, "Get net3g.apn Done");
   126       next();
   127     };
   128     req2.onerror = onFailure;
   129   },
   130   function () {
   131     ok(true, "Change wifi1");
   132     var lock = mozSettings.createLock();
   133     req = lock.set(wifi2);
   134     req.onsuccess = function () {
   135       ok(true, "Set Done");
   136     };
   137     req.onerror = onFailure;
   138     ok(true, "Get changed net3g.apn");
   139     req2 = lock.get("net3g.apn");
   140     req2.onsuccess = function () {
   141       is(Object.keys(req2.result).length, 1, "length 1");
   142       check(wifi2, req2.result);
   143       ok(true, "Get net3g.apn Done");
   144       next();
   145     };
   146     req2.onerror = onFailure;
   147   },
   148   function () {
   149     ok(true, "Set Combination");
   150     var lock = mozSettings.createLock();
   151     req3 = lock.set(combination);
   152     req3.onsuccess = function () {
   153       ok(true, "set done");
   154       req4 = lock.get("net3g.apn2");
   155       req4.onsuccess = function() {
   156         ok(true, "Done");
   157         check(combination["net3g.apn2"], req4.result["net3g.apn2"]);
   158         next();
   159       }
   160     }
   161     req3.onerror = onFailure;
   162   },
   163   function() {
   164     var lock = mozSettings.createLock();
   165     req4 = lock.get("net3g.apn2");
   166     req4.onsuccess = function() {
   167       ok(true, "Done");
   168       check(combination["net3g.apn2"], req4.result["net3g.apn2"]);
   169       next();
   170     }
   171     req4.onerror = onFailure;
   172   },
   173   function() {
   174     ok(true, "Get unknown key");
   175     var lock = mozSettings.createLock();
   176     req = lock.get("abc.def");
   177     req.onsuccess = function() {
   178       is(req.result["abc.def"], undefined, "no result");
   179       next();
   180     };
   181     req.onerror = onFailure;
   182   },
   183   function() {
   184     ok(true, "adding onsettingchange");
   185     navigator.mozSettings.onsettingchange = onsettingschangeWithNext;
   186     var lock = mozSettings.createLock();
   187     req2 = lock.get("screen.brightness");
   188     req2.onsuccess = function() {
   189       ok(true, "end adding onsettingchange");
   190       next();
   191     };
   192     req2.onerror = onFailure;
   193   },
   194   function() {
   195     ok(true, "Test onsettingchange");
   196     var lock = mozSettings.createLock();
   197     req = lock.set(screenBright);
   198     req.onsuccess = function () {
   199       ok(true, "set done, observer has to call next");
   200     }
   201     req.onerror = onFailure;
   202   },
   203   function() {
   204     ok(true, "delete onsettingschange");
   205     var lock = mozSettings.createLock();
   206     navigator.mozSettings.onsettingchange = null;
   207     req = lock.set(screenBright);
   208     req.onsuccess = function () {
   209       ok(true, "set done");
   210       next();
   211     }
   212     req.onerror = onFailure;
   213   },
   214   function () {
   215     ok(true, "Waiting for all set callbacks");
   216     var lock = mozSettings.createLock();
   217     req = lock.get("screen.brightness");
   218     req.onsuccess = function() {
   219       ok(true, "Done");
   220       next();
   221     }
   222     req.onerror = onFailure;
   223   },
   224   function() {
   225     ok(true, "adding Observers 1");
   226     navigator.mozSettings.addObserver("screen.brightness", observer1);
   227     navigator.mozSettings.addObserver("screen.brightness", observer1);
   228     navigator.mozSettings.addObserver("screen.brightness", observer2);
   229     navigator.mozSettings.addObserver("screen.brightness", observerWithNext);
   230     var lock = mozSettings.createLock();
   231     req2 = lock.get("screen.brightness");
   232     req2.onsuccess = function() {
   233       ok(true, "set observeSetting done!");
   234       next();
   235     };
   236     req2.onerror = onFailure;
   237   },
   238   function() {
   239     ok(true, "test observers");
   240     var lock = mozSettings.createLock();
   241     req = lock.set(screenBright);
   242     req.onsuccess = function () {
   243       ok(true, "set done");
   244     }
   245     req.onerror = onFailure;
   246   },
   247   function() {
   248     ok(true, "removing Event Listener");
   249     var lock = mozSettings.createLock();
   250     req = lock.set(screenBright);
   251     req.onsuccess = function () {
   252       ok(true, "set done");
   253       navigator.mozSettings.removeObserver("screen.brightness", observer2);
   254       navigator.mozSettings.removeObserver("screen.brightness", observer1);
   255     }
   256     req.onerror = onFailure;
   257   },
   258   function() {
   259     ok(true, "test Event Listener");
   260     var lock = mozSettings.createLock();
   261     req = lock.set(screenBright);
   262     req.onsuccess = function () {
   263       ok(true, "set done");
   264     }
   265     req.onerror = onFailure;
   266   },
   267   function() {
   268     ok(true, "removing Event Listener");
   269     var lock = mozSettings.createLock();
   270     navigator.mozSettings.removeObserver("screen.brightness", observerWithNext);
   271     req = lock.set(screenBright);
   272     req.onsuccess = function () {
   273       ok(true, "set done");
   274       navigator.mozSettings.removeObserver("screen.brightness", observer2);
   275       navigator.mozSettings.removeObserver("screen.brightness", observer1);
   276       next();
   277     }
   278     req.onerror = onFailure;
   279   },
   280   function() {
   281     ok(true, "removing Event Listener");
   282     var lock = mozSettings.createLock();
   283     req = lock.get("screen.brightness");
   284     req.onsuccess = function () {
   285       ok(true, "get done");
   286       next();
   287     }
   288     req.onerror = onFailure;
   289   },
   290   function () {
   291     ok(true, "Nested test");
   292     var lock = mozSettings.createLock();
   293     req = lock.get("screen.brightness");
   294     req.onsuccess = function () {
   295       req3 = lock.set({"screen.brightness": req.result["screen.brightness"] + 1})
   296       req3.onsuccess = function () {
   297         req4 = lock.get("screen.brightness");
   298         req4.onsuccess = function() {
   299           is(req4.result["screen.brightness"], 1.7, "same Value");
   300         }
   301         req4.onerror = onFailure;
   302       }
   303       req3.onerror = onFailure;
   304     };
   305     req.onerror = onFailure;
   307     req2 = lock.get("screen.brightness");
   308     req2.onsuccess = function () {
   309       is(req2.result["screen.brightness"], 0.7, "same Value");
   310     }
   311     req2.onerror = onFailure;
   313     var lock2 = mozSettings.createLock();
   314     req5 = lock2.get("screen.brightness");
   315     req5.onsuccess = function () {
   316       is(req5.result["screen.brightness"], 1.7, "same Value");
   317       next();
   318     }
   319     req5.onerror = onFailure;
   320   },
   321   function () {
   322     ok(true, "Deleting database");
   323     var lock = mozSettings.createLock();
   324     req = lock.clear();
   325     req.onsuccess = function () {
   326       ok(true, "Deleted the database");
   327     };
   328     req.onerror = onFailure;
   329     req2 = lock.set(wifi);
   330     req2.onsuccess = function () {
   331       ok(true, "set done");
   332     }
   333     req2.onerror = onFailure;
   335     ok(true, "Get all settings");
   336     var lock2 = mozSettings.createLock();
   337     req = lock2.get("*");
   338     req.onsuccess = function () {
   339       is(Object.keys(req.result).length, 1, "length 1");
   340       check(wifi, req.result);
   341       ok(true, JSON.stringify(req.result));
   342       ok(true, "Get all settings Done");
   343     };
   344     req.onerror = onFailure;
   346     req2 = lock2.get("net3g.apn");
   347     req2.onsuccess = function () {
   348       is(Object.keys(req2.result).length, 1, "length 1");
   349       check(wifi, req2.result);
   350       ok(true, "Get net3g.apn Done");
   351       next();
   352     };
   353     req2.onerror = onFailure;
   354   },
   355   function () {
   356     ok(true, "Change wifi1");
   357     var lock = mozSettings.createLock();
   358     req = lock.set(wifi2);
   359     req.onsuccess = function () {
   360       ok(true, "Set Done");
   361     };
   362     req.onerror = onFailure;
   364     ok(true, "Get changed net3g.apn");
   365     req2 = lock.get("net3g.apn");
   366     req2.onsuccess = function () {
   367       is(Object.keys(req2.result).length, 1, "length 1");
   368       check(wifi2, req2.result);
   369       ok(true, "Get net3g.apn Done");
   370       next();
   371     };
   372     req2.onerror = onFailure;
   373   },
   374   function () {
   375     ok(true, "Test locking");
   376     var lock = mozSettings.createLock();
   377     var lock2 = mozSettings.createLock();
   378     req = lock.set(wifiEnabled);
   379     req.onsuccess = function () {
   380       ok(true, "Test Locking Done");
   381     };
   382     req.onerror = onFailure;
   384     req2 = lock2.set(wifiDisabled);
   385     req2.onsuccess = function () {
   386       ok(true, "Set Done");
   387       next();
   388     };
   389     req2.onerror = onFailure;
   390   },
   391   function () {
   392     ok(true, "Test locking result");
   393     var lock = mozSettings.createLock();
   394     req = lock.get("wifi.enabled");
   395     req.onsuccess = function() {
   396       check(req.result, wifiDisabled);
   397       ok(true, "Test1 locking result done");
   398       next();
   399     }
   400     req.onerror = onFailure;
   401   },
   402   function () {
   403     ok(true, "Test locking heavy");
   404     for (var i=0; i<30; i++) {
   405       // only new locks!
   406       var lock = mozSettings.createLock();
   407       var obj = {};
   408       obj["wifi.enabled" + i] = true;
   409       req = lock.set( obj );
   410       req.onsuccess = function () {
   411         ok(true, "Set1 Done");
   412       };
   413       req.onerror = onFailure;
   414     };
   415     {
   416       var lock2 = mozSettings.createLock();
   417       req2 = lock2.get("*");
   418       req2.onsuccess = function () {
   419         is(Object.keys(req2.result).length, 32, "length 12");
   420         ok(true, JSON.stringify(req2.result));
   421         ok(true, "Get all settings Done");
   422       };
   423       req2.onerror = onFailure;
   424     }
   425     var lock2 = mozSettings.createLock();
   426     var obj = {};
   427     obj["wifi.enabled" + 30] = true;
   428     req3 = lock2.set( obj );
   429     req3.onsuccess = function () {
   430       ok(true, "Set12 Done");
   431     };
   432     req3.onerror = onFailure;
   434     var lock3 = mozSettings.createLock();
   435     // with one lock
   436     for (var i = 0; i < 30; i++) {
   437       req4 = lock3.get("wifi.enabled" + i);
   438       var testObj = {};
   439       testObj["wifi.enabled" + i] = true;
   440       req4.onsuccess = function () {
   441         check(this.request.result, this.testObj);
   442         ok(true, "Get1 Done");
   443       }.bind({testObj: testObj, request: req4});
   444       req4.onerror = onFailure;
   445     }
   447     ok(true, "start next2!");
   448     var lock4 = mozSettings.createLock();
   449     for (var i=0; i<30; i++) {
   450       var obj = {};
   451       obj["wifi.enabled" + i] = false;
   452       req4 = lock4.set( obj );
   453       req4.onsuccess = function () {
   454         ok(true, "Set2 Done");
   455       };
   456       req4.onerror = onFailure;
   457     }
   458     var lock5 = mozSettings.createLock();
   459     for (var i=0; i<30; i++) {
   460       req5 = lock5.get("wifi.enabled" + i);
   461       var testObj = {};
   462       testObj["wifi.enabled" + i] = false;
   463       req5.onsuccess = function () {
   464         check(this.request.result, this.testObj);
   465         ok(true, "Get2 Done");
   466       }.bind({testObj: testObj, request: req5});
   467       req5.onerror = onFailure;
   468     }
   470     var lock5 = mozSettings.createLock();
   471     req6 = lock5.clear();
   472     req6.onsuccess = function () {
   473       ok(true, "Deleted the database");
   474       next();
   475     };
   476     req6.onerror = onFailure;
   477   },
   478   function () {
   479     ok(true, "reverse Test locking");
   480     var lock2 = mozSettings.createLock();
   481     var lock = mozSettings.createLock();
   483     req = lock.set(wifiEnabled);
   484     req.onsuccess = function () {
   485       ok(true, "Test Locking Done");
   486       next();
   487     };
   488     req.onerror = onFailure;
   490     req2 = lock2.set(wifiDisabled);
   491     req2.onsuccess = function () {
   492       ok(true, "Set Done");
   493     };
   494     req2.onerror = onFailure;
   495   },
   496   function () {
   497     ok(true, "Test locking result");
   498     var lock = mozSettings.createLock();
   500     req = lock.get("wifi.enabled");
   501     req.onsuccess = function() {
   502       check(req.result, wifiEnabled);
   503       ok(true, "Test2 locking result done");
   504     }
   505     req.onerror = onFailure;
   507     req2 = lock.clear();
   508     req2.onsuccess = function () {
   509       ok(true, "Deleted the database");
   510     };
   511     req2.onerror = onFailure;
   513     req3 = lock.set(wifi);
   514     req3.onsuccess = function () {
   515       ok(true, "set done");
   516       next();
   517     }
   518     req3.onerror = onFailure;
   520   },
   521   function () {
   522     ok(true, "Get all settings");
   523     var lock = mozSettings.createLock();
   524     req = lock.get("*");
   525     req.onsuccess = function () {
   526       is(Object.keys(req.result).length, 1, "length 1");
   527       check(wifi, req.result);
   528       ok(true, "Get all settings Done");
   529       next();
   530     };
   531     req.onerror = onFailure;
   532   },
   533   function () {
   534     ok(true, "Get net3g.apn");
   535     var lock = mozSettings.createLock();
   536     req = lock.get("net3g.apn");
   537     req.onsuccess = function () {
   538       is(Object.keys(req.result).length, 1, "length 1");
   539       check(wifi, req.result);
   540       ok(true, "Get net3g.apn Done");
   541       next();
   542     };
   543     req.onerror = onFailure;
   544   },
   545   function () {
   546     ok(true, "Change wifi2");
   547     var lock = mozSettings.createLock();
   548     req = lock.set(wifi2);
   549     req.onsuccess = function () {
   550       ok(true, "Set Done");
   551       next();
   552     };
   553     req.onerror = onFailure;
   554   },
   555   function () {
   556     ok(true, "Get net3g.apn");
   557     var lock = mozSettings.createLock();
   558     req = lock.get("net3g.apn");
   559     req.onsuccess = function () {
   560       is(Object.keys(req.result).length, 1, "length 1");
   561       check(wifi2, req.result);
   562       ok(true, "Get net3g.apn Done");
   563       next();
   564     };
   565     req.onerror = onFailure;
   566   },
   567   function () {
   568     ok(true, "Add wifi.enabled");
   569     var lock = mozSettings.createLock();
   570     req = lock.set(wifiEnabled);
   571     req.onsuccess = function () {
   572       ok(true, "Set Done");
   573       next();
   574     };
   575     req.onerror = onFailure;
   576   },
   577   function () {
   578     ok(true, "Get Wifi Enabled");
   579     var lock = mozSettings.createLock();
   580     req = lock.get("wifi.enabled");
   581     req.onsuccess = function () {
   582       is(Object.keys(req.result).length, 1, "length 1");
   583       check(wifiEnabled, req.result);
   584       ok(true, "Get wifi.enabledDone");
   585       next();
   586     };
   587     req.onerror = onFailure;
   588   },
   589   function () {
   590     ok(true, "Get all");
   591     var lock = mozSettings.createLock();
   592     req = lock.get("*");
   593     req.onsuccess = function () {
   594       is(Object.keys(req.result).length, 2, "length 2");
   595       check(wifiEnabled["wifi.enabled"], req.result["wifi.enabled"]);
   596       check(wifi2["net3g.apn"], req.result["net3g.apn"]);
   597       ok(true, "Get all Done");
   598       next();
   599     };
   600     req.onerror = onFailure;
   601   },
   602   function () {
   603     ok(true, "Add wifiNetworks");
   604     var lock = mozSettings.createLock();
   605     req = lock.set(wifiNetworks0);
   606     req.onsuccess = function () {
   607       ok(true, "Set Done");
   608     };
   609     req.onerror = onFailure;
   611     req2 = lock.set(wifiNetworks1);
   612     req2.onsuccess = function () {
   613       ok(true, "Set Done");
   614       next();
   615     };
   616     req2.onerror = onFailure;
   617   },
   618   function () {
   619     ok(true, "Get Wifi Networks");
   620     var lock = mozSettings.createLock();
   621     req = lock.get("wifi.networks[0]");
   622     req.onsuccess = function () {
   623       is(Object.keys(req.result).length, 1, "length 1");
   624       check(wifiNetworks0, req.result);
   625       ok(true, "Get wifi.networks[0]");
   626       next();
   627     };
   628     req.onerror = onFailure;
   629   },
   630   function() {
   631     ok(true, "Clear DB, multiple locks");
   632     var lock4 = mozSettings.createLock();
   633     var lock3 = mozSettings.createLock();
   634     var lock2 = mozSettings.createLock();
   635     var lock = mozSettings.createLock();
   636     var lock6 = mozSettings.createLock();
   637     var lock7 = mozSettings.createLock();
   638     req = lock.clear();
   639     req.onsuccess = function () {
   640       ok(true, "Deleted the database");
   641       next();
   642     };
   643     req.onerror = onFailure;
   644   },
   645   function () {
   646     ok(true, "Add wifiNetworks");
   647     var lock = mozSettings.createLock();
   648     req = lock.set(wifiNetworks0);
   649     req.onsuccess = function () {
   650       ok(true, "Set Done");
   651       next();
   652     };
   653     req.onerror = onFailure;
   654   },
   655   function () {
   656     ok(true, "Test set after lock closed");
   657     var lockx = mozSettings.createLock();
   658     var cb = function() {
   659       var reqx = null;
   660       try {
   661         reqx = lockx.set(wifiNetworks0);
   662         ok(false, "should have thrown");
   663       } catch (ex) {
   664         ok(reqx == null, "request is still null");
   665         ok(true, "Caught Exception");
   666         next();
   667       }
   668     }
   669     SimpleTest.executeSoon(cb);
   670   },
   671   function() {
   672     ok(true, "Clear DB");
   673     var lock = mozSettings.createLock();
   674     req = lock.clear();
   675     req.onsuccess = function () {
   676       ok(true, "Deleted the database");
   677       next();
   678     };
   679     req.onerror = onFailure;
   680   },
   681   function() {
   682     ok(true, "Set with multiple arguments");
   683     var lock = mozSettings.createLock();
   684     req = lock.set(combination);
   685     req.onsuccess = function () {
   686       ok(true, "Set Done");
   687       next();
   688     };
   689     req.onerror = onFailure;
   690   },
   691   function() {
   692     ok(true, "request argument from multiple set");
   693     var lock = mozSettings.createLock();
   694     req = lock.get("screen.brightness");
   695     req.onsuccess = function () {
   696       check(req.result["screen.brightness"], 0.7, "get done");
   697       next();
   698     }
   699     req.onerror = onFailure;
   700   },
   701   function() {
   702     ok(true, "Test closed attribute on a valid lock");
   703     var lock = mozSettings.createLock();
   704     is(lock.closed, false, "closed attribute is false on creation");
   705     req = lock.get("screen.brightness");
   706     req.onsuccess = function () {
   707       is(lock.closed, false, "closed attribute is false on success callback");
   708       next();
   709     }
   710     req.onerror = onFailure;
   711   },
   712   function () {
   713     ok(true, "Test closed attribute on invalid lock");
   714     var lockx = mozSettings.createLock();
   715     var cb = function() {
   716       var reqx = null;
   717       try {
   718         reqx = lockx.set(wifiNetworks0);
   719         ok(false, "should have thrown");
   720       } catch (ex) {
   721         is(lockx.closed, true, "closed attribute is true");
   722         ok(true, "Caught Exception");
   723         next();
   724       }
   725     }
   726     SimpleTest.executeSoon(cb);
   727   },
   728   function() {
   729     ok(true, "Clear DB");
   730     var lock = mozSettings.createLock();
   731     req = lock.clear();
   732     req.onsuccess = function () {
   733       ok(true, "Deleted the database");
   734       next();
   735     };
   736     req.onerror = onFailure;
   737   },
   738   function() {
   739     ok(true, "Set object value");
   740     var lock = mozSettings.createLock();
   741     req = lock.set({"setting-obj": {foo: {bar: 23}}});
   742     req.onsuccess = function() {
   743       req2 = lock.get("setting-obj");
   744       req2.onsuccess = function(event) {
   745         var result = event.target.result["setting-obj"];
   746         ok(result, "Got valid result");
   747         ok(typeof result == "object", "Result is object");
   748         ok("foo" in result && "bar" in result.foo, "Result has properties");
   749         ok(result.foo.bar == 23, "Result properties are set");
   750         next();
   751       };
   752     };
   753   },
   754   function() {
   755     ok(true, "Clear DB");
   756     var lock = mozSettings.createLock();
   757     req = lock.clear();
   758     req.onsuccess = function () {
   759       ok(true, "Deleted the database");
   760       next();
   761     };
   762     req.onerror = onFailure;
   763   },
   764   function () {
   765     ok(true, "all done!\n");
   766     SimpleTest.finish();
   767   }
   768 ];
   770 function next() {
   771   ok(true, "Begin!");
   772   if (index >= steps.length) {
   773     ok(false, "Shouldn't get here!");
   774     return;
   775   }
   776   try {
   777     steps[index]();
   778   } catch(ex) {
   779     ok(false, "Caught exception", ex);
   780   }
   781   index += 1;
   782 }
   784 SimpleTest.waitForExplicitFinish();
   785 addLoadEvent(next);
   786 </script>
   787 </pre>
   788 </body>
   789 </html>

mercurial