<!DOCTYPE html> <html> <!-- https://bugzilla.mozilla.org/show_bug.cgi?id=678695 --> <head> <title>Test for Bug 678695 Settings API</title> <script type="text/javascript" src="/MochiKit/MochiKit.js"></script> <script type="text/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css" /> </head> <body> <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=678695">Mozilla Bug 678695</a> <p id="display"></p> <div id="content" style="display: none"> </div> <pre id="test"> <script class="testbody" type="text/javascript"> "use strict"; var url = SimpleTest.getTestFileURL("file_loadserver.js"); var script = SpecialPowers.loadChromeScript(url); var screenBright = {"screen.brightness": 0.7}; function onFailure() { ok(false, "in on Failure!"); } function observer1(setting) { dump("observer 1 called!\n"); is(setting.settingName, "screen.brightness", "Same settingName"); is(setting.settingValue, 0.7, "Same settingvalue"); }; function observer2(setting) { dump("observer 2 called!\n"); is(setting.settingName, "screen.brightness", "Same settingName"); is(setting.settingValue, 0.7, "Same settingvalue"); }; var calls = 0; function observerOnlyCalledOnce(setting) { is(++calls, 1, "Observer only called once!"); }; function observerWithNext(setting) { dump("observer with next called!\n"); is(setting.settingName, "screen.brightness", "Same settingName"); is(setting.settingValue, 0.7, "Same settingvalue"); next(); }; function onsettingschangeWithNext(event) { dump("onsettingschangewithnext called!\n"); is(event.settingName, "screen.brightness", "Same settingName"); is(event.settingValue, 0.7, "Same settingvalue"); next(); }; var cset = {'a':'b','c':[{'d':'e'}]}; function onComplexSettingschangeWithNext(event) { is(event.settingName, "test.key", "Same settingName"); is(event.settingValue['a'], "b", "Same settingvalue"); var c = event.settingValue['c']; ok(Array.isArray(c), "c is array!"); is(c[0]['d'], 'e', "Right settingValue!"); next(); }; var req, req2; var index = 0; var steps = [ function () { ok(true, "Deleting database"); var lock = navigator.mozSettings.createLock(); req = lock.clear(); req.onsuccess = function () { ok(true, "Deleted the database"); next(); }; req.onerror = onFailure; }, function () { var lock = navigator.mozSettings.createLock(); req2 = lock.set(screenBright); req2.onsuccess = function () { ok(true, "set done"); navigator.mozSettings.onsettingchange = onsettingschangeWithNext; next(); } req2.onerror = onFailure; }, function() { ok(true, "testing"); var lock = navigator.mozSettings.createLock(); req2 = lock.set(screenBright); req2.onsuccess = function() { ok(true, "end adding onsettingchange"); }; req2.onerror = onFailure; }, function() { ok(true, "test observers"); var lock = navigator.mozSettings.createLock(); req = lock.get("screen.brightness"); req.onsuccess = function () { ok(true, "get done"); next(); } req.onerror = onFailure; }, function() { ok(true, "adding Observers 1"); navigator.mozSettings.addObserver("screen.brightness", observer1); navigator.mozSettings.addObserver("screen.brightness", observer1); navigator.mozSettings.addObserver("screen.brightness", observer2); navigator.mozSettings.addObserver("screen.brightness", observerOnlyCalledOnce); var lock = navigator.mozSettings.createLock(); req2 = lock.get("screen.brightness"); req2.onsuccess = function() { ok(true, "set observeSetting done!"); next(); }; req2.onerror = onFailure; }, function() { ok(true, "test observers"); var lock = navigator.mozSettings.createLock(); req = lock.set(screenBright); req.onsuccess = function () { ok(true, "set1 done"); } req.onerror = onFailure; }, function() { ok(true, "test observers"); var lock = navigator.mozSettings.createLock(); req = lock.get("screen.brightness"); navigator.mozSettings.removeObserver("screen.brightness", observerOnlyCalledOnce); req.onsuccess = function () { ok(true, "set1 done"); } req.onerror = onFailure; }, function() { ok(true, "removing Event Listener"); var lock = navigator.mozSettings.createLock(); req = lock.set(screenBright); req.onsuccess = function () { ok(true, "set2 done"); navigator.mozSettings.removeObserver("screen.brightness", observer2); navigator.mozSettings.removeObserver("screen.brightness", observer1); navigator.mozSettings.removeObserver("screen.brightness", observer1); } req.onerror = onFailure; }, function() { ok(true, "delete onsettingschange"); var lock = navigator.mozSettings.createLock(); navigator.mozSettings.onsettingchange = null; req = lock.set(screenBright); req.onsuccess = function () { ok(true, "set0 done"); next(); } req.onerror = onFailure; }, function () { ok(true, "Waiting for all set callbacks"); var lock = navigator.mozSettings.createLock(); req = lock.get("screen.brightness"); req.onsuccess = function() { ok(true, "Done"); next(); } req.onerror = onFailure; }, function() { ok(true, "adding Observers 1"); navigator.mozSettings.addObserver("screen.brightness", observer1); navigator.mozSettings.addObserver("screen.brightness", observer1); navigator.mozSettings.addObserver("screen.brightness", observer2); navigator.mozSettings.addObserver("screen.brightness", observerWithNext); var lock = navigator.mozSettings.createLock(); req2 = lock.get("screen.brightness"); req2.onsuccess = function() { ok(true, "set observeSetting done!"); next(); }; req2.onerror = onFailure; }, function() { ok(true, "test observers"); var lock = navigator.mozSettings.createLock(); req = lock.set(screenBright); req.onsuccess = function () { ok(true, "set1 done"); } req.onerror = onFailure; }, function() { ok(true, "removing Event Listener"); var lock = navigator.mozSettings.createLock(); req = lock.set(screenBright); req.onsuccess = function () { ok(true, "set2 done"); navigator.mozSettings.removeObserver("screen.brightness", observer2); navigator.mozSettings.removeObserver("screen.brightness", observer1); } req.onerror = onFailure; }, function() { ok(true, "test Event Listener"); var lock = navigator.mozSettings.createLock(); req = lock.set(screenBright); req.onsuccess = function () { ok(true, "set3 done"); } req.onerror = onFailure; }, function() { ok(true, "removing Event Listener"); var lock = navigator.mozSettings.createLock(); navigator.mozSettings.removeObserver("screen.brightness", observerWithNext); req = lock.set(screenBright); req.onsuccess = function () { ok(true, "set4 done"); navigator.mozSettings.removeObserver("screen.brightness", observer2); navigator.mozSettings.removeObserver("screen.brightness", observer1); next(); } req.onerror = onFailure; }, function() { ok(true, "removing Event Listener"); var lock = navigator.mozSettings.createLock(); req = lock.get("screen.brightness"); req.onsuccess = function () { ok(true, "get5 done"); next(); } req.onerror = onFailure; }, function() { ok(true, "Clear DB"); var lock = navigator.mozSettings.createLock(); req = lock.clear(); req.onsuccess = function () { ok(true, "Deleted the database"); next(); }; req.onerror = onFailure; }, function () { ok(true, "Deleting database"); var lock = navigator.mozSettings.createLock(); req = lock.clear(); req.onsuccess = function () { ok(true, "Deleted the database"); next(); }; req.onerror = onFailure; }, function () { var lock = navigator.mozSettings.createLock(); navigator.mozSettings.onsettingchange = onComplexSettingschangeWithNext; req2 = navigator.mozSettings.createLock().set({'test.key': cset}); req2.onsuccess = function () { ok(true, "set done"); } req2.onerror = onFailure; }, function () { ok(true, "all done!\n"); SimpleTest.finish(); } ]; function next() { ok(true, "Begin!"); if (index >= steps.length) { ok(false, "Shouldn't get here!"); return; } try { steps[index](); } catch(ex) { ok(false, "Caught exception", ex); } index += 1; } SimpleTest.waitForExplicitFinish(); addLoadEvent(next); </script> </pre> </body> </html>