michael@0: "use strict"; michael@0: michael@0: const Cu = Components.utils; michael@0: const Cc = Components.classes; michael@0: const Ci = Components.interfaces; michael@0: michael@0: Cu.import("resource://gre/modules/XPCOMUtils.jsm"); michael@0: Cu.import("resource://gre/modules/Services.jsm"); michael@0: michael@0: SimpleTest.waitForExplicitFinish(); michael@0: michael@0: XPCOMUtils.defineLazyServiceGetter(this, "SettingsService", michael@0: "@mozilla.org/settingsService;1", michael@0: "nsISettingsService"); michael@0: michael@0: let tests = [ michael@0: /* Callback tests */ michael@0: function() { michael@0: let callbackCount = 10; michael@0: michael@0: let callback = { michael@0: handle: function(name, result) { michael@0: switch (callbackCount) { michael@0: case 10: michael@0: case 9: michael@0: is(result, true, "result is true"); michael@0: break; michael@0: case 8: michael@0: case 7: michael@0: is(result, false, "result is false"); michael@0: break; michael@0: case 6: michael@0: case 5: michael@0: is(result, 9, "result is 9"); michael@0: break; michael@0: case 4: michael@0: case 3: michael@0: is(result, 9.4, "result is 9.4"); michael@0: break; michael@0: case 2: michael@0: is(result, false, "result is false"); michael@0: break; michael@0: case 1: michael@0: is(result, null, "result is null"); michael@0: break; michael@0: default: michael@0: ok(false, "Unexpected call: " + callbackCount); michael@0: } michael@0: michael@0: --callbackCount; michael@0: if (callbackCount === 0) { michael@0: next(); michael@0: } michael@0: }, michael@0: michael@0: handleError: function(name) { michael@0: ok(false, "error: " + name); michael@0: } michael@0: }; michael@0: michael@0: let lock = SettingsService.createLock(); michael@0: let lock1 = SettingsService.createLock(); michael@0: michael@0: lock.set("asdf", true, callback, null); michael@0: lock1.get("asdf", callback); michael@0: lock.get("asdf", callback); michael@0: lock.set("asdf", false, callback, null); michael@0: lock.get("asdf", callback); michael@0: lock.set("int", 9, callback, null); michael@0: lock.get("int", callback); michael@0: lock.set("doub", 9.4, callback, null); michael@0: lock.get("doub", callback); michael@0: lock1.get("asdfxxx", callback); michael@0: }, michael@0: michael@0: /* Observer tests */ michael@0: function() { michael@0: const XPCOM_SHUTDOWN = "xpcom-shutdown"; michael@0: const MOZSETTINGS_CHANGED = "mozsettings-changed"; michael@0: michael@0: const TEST_OBSERVER_KEY = "test.observer.key"; michael@0: const TEST_OBSERVER_VALUE = true; michael@0: const TEST_OBSERVER_MESSAGE = "test.observer.message"; michael@0: michael@0: let observerCount = 2; michael@0: michael@0: function observer(subject, topic, data) { michael@0: if (topic === XPCOM_SHUTDOWN) { michael@0: Services.obs.removeObserver(this, XPCOM_SHUTDOWN); michael@0: Services.obs.removeObserver(this, MOZSETTINGS_CHANGED); michael@0: return; michael@0: } michael@0: michael@0: if (topic !== MOZSETTINGS_CHANGED) { michael@0: ok(false, "Event is not mozsettings-changed."); michael@0: return; michael@0: } michael@0: michael@0: data = JSON.parse(data); michael@0: michael@0: function checkProp(name, type, value) { michael@0: ok(name in data, "data." + name + " is present"); michael@0: is(typeof data[name], type, "data." + name + " is " + type); michael@0: is(data[name], value, "data." + name + " is " + value); michael@0: } michael@0: michael@0: checkProp("key", "string", TEST_OBSERVER_KEY); michael@0: checkProp("value", "boolean", TEST_OBSERVER_VALUE); michael@0: if (observerCount === 2) { michael@0: checkProp("message", "object", null); michael@0: } else { michael@0: checkProp("message", "string", TEST_OBSERVER_MESSAGE); michael@0: } michael@0: --observerCount; michael@0: michael@0: if (observerCount === 0) { michael@0: next(); michael@0: } michael@0: } michael@0: michael@0: Services.obs.addObserver(observer, XPCOM_SHUTDOWN, false); michael@0: Services.obs.addObserver(observer, MOZSETTINGS_CHANGED, false); michael@0: michael@0: let lock = SettingsService.createLock(); michael@0: lock.set(TEST_OBSERVER_KEY, TEST_OBSERVER_VALUE, null, null); michael@0: lock.set(TEST_OBSERVER_KEY, TEST_OBSERVER_VALUE, null, TEST_OBSERVER_MESSAGE); michael@0: } michael@0: ]; michael@0: michael@0: function next() { michael@0: let step = tests.shift(); michael@0: if (step) { michael@0: try { michael@0: step(); michael@0: } catch(e) { michael@0: ok(false, "Test threw: " + e); michael@0: } michael@0: } else { michael@0: SimpleTest.finish(); michael@0: } michael@0: } michael@0: michael@0: next();