1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/dom/settings/tests/test_settings_service.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,143 @@ 1.4 +"use strict"; 1.5 + 1.6 +const Cu = Components.utils; 1.7 +const Cc = Components.classes; 1.8 +const Ci = Components.interfaces; 1.9 + 1.10 +Cu.import("resource://gre/modules/XPCOMUtils.jsm"); 1.11 +Cu.import("resource://gre/modules/Services.jsm"); 1.12 + 1.13 +SimpleTest.waitForExplicitFinish(); 1.14 + 1.15 +XPCOMUtils.defineLazyServiceGetter(this, "SettingsService", 1.16 + "@mozilla.org/settingsService;1", 1.17 + "nsISettingsService"); 1.18 + 1.19 +let tests = [ 1.20 + /* Callback tests */ 1.21 + function() { 1.22 + let callbackCount = 10; 1.23 + 1.24 + let callback = { 1.25 + handle: function(name, result) { 1.26 + switch (callbackCount) { 1.27 + case 10: 1.28 + case 9: 1.29 + is(result, true, "result is true"); 1.30 + break; 1.31 + case 8: 1.32 + case 7: 1.33 + is(result, false, "result is false"); 1.34 + break; 1.35 + case 6: 1.36 + case 5: 1.37 + is(result, 9, "result is 9"); 1.38 + break; 1.39 + case 4: 1.40 + case 3: 1.41 + is(result, 9.4, "result is 9.4"); 1.42 + break; 1.43 + case 2: 1.44 + is(result, false, "result is false"); 1.45 + break; 1.46 + case 1: 1.47 + is(result, null, "result is null"); 1.48 + break; 1.49 + default: 1.50 + ok(false, "Unexpected call: " + callbackCount); 1.51 + } 1.52 + 1.53 + --callbackCount; 1.54 + if (callbackCount === 0) { 1.55 + next(); 1.56 + } 1.57 + }, 1.58 + 1.59 + handleError: function(name) { 1.60 + ok(false, "error: " + name); 1.61 + } 1.62 + }; 1.63 + 1.64 + let lock = SettingsService.createLock(); 1.65 + let lock1 = SettingsService.createLock(); 1.66 + 1.67 + lock.set("asdf", true, callback, null); 1.68 + lock1.get("asdf", callback); 1.69 + lock.get("asdf", callback); 1.70 + lock.set("asdf", false, callback, null); 1.71 + lock.get("asdf", callback); 1.72 + lock.set("int", 9, callback, null); 1.73 + lock.get("int", callback); 1.74 + lock.set("doub", 9.4, callback, null); 1.75 + lock.get("doub", callback); 1.76 + lock1.get("asdfxxx", callback); 1.77 + }, 1.78 + 1.79 + /* Observer tests */ 1.80 + function() { 1.81 + const XPCOM_SHUTDOWN = "xpcom-shutdown"; 1.82 + const MOZSETTINGS_CHANGED = "mozsettings-changed"; 1.83 + 1.84 + const TEST_OBSERVER_KEY = "test.observer.key"; 1.85 + const TEST_OBSERVER_VALUE = true; 1.86 + const TEST_OBSERVER_MESSAGE = "test.observer.message"; 1.87 + 1.88 + let observerCount = 2; 1.89 + 1.90 + function observer(subject, topic, data) { 1.91 + if (topic === XPCOM_SHUTDOWN) { 1.92 + Services.obs.removeObserver(this, XPCOM_SHUTDOWN); 1.93 + Services.obs.removeObserver(this, MOZSETTINGS_CHANGED); 1.94 + return; 1.95 + } 1.96 + 1.97 + if (topic !== MOZSETTINGS_CHANGED) { 1.98 + ok(false, "Event is not mozsettings-changed."); 1.99 + return; 1.100 + } 1.101 + 1.102 + data = JSON.parse(data); 1.103 + 1.104 + function checkProp(name, type, value) { 1.105 + ok(name in data, "data." + name + " is present"); 1.106 + is(typeof data[name], type, "data." + name + " is " + type); 1.107 + is(data[name], value, "data." + name + " is " + value); 1.108 + } 1.109 + 1.110 + checkProp("key", "string", TEST_OBSERVER_KEY); 1.111 + checkProp("value", "boolean", TEST_OBSERVER_VALUE); 1.112 + if (observerCount === 2) { 1.113 + checkProp("message", "object", null); 1.114 + } else { 1.115 + checkProp("message", "string", TEST_OBSERVER_MESSAGE); 1.116 + } 1.117 + --observerCount; 1.118 + 1.119 + if (observerCount === 0) { 1.120 + next(); 1.121 + } 1.122 + } 1.123 + 1.124 + Services.obs.addObserver(observer, XPCOM_SHUTDOWN, false); 1.125 + Services.obs.addObserver(observer, MOZSETTINGS_CHANGED, false); 1.126 + 1.127 + let lock = SettingsService.createLock(); 1.128 + lock.set(TEST_OBSERVER_KEY, TEST_OBSERVER_VALUE, null, null); 1.129 + lock.set(TEST_OBSERVER_KEY, TEST_OBSERVER_VALUE, null, TEST_OBSERVER_MESSAGE); 1.130 + } 1.131 +]; 1.132 + 1.133 +function next() { 1.134 + let step = tests.shift(); 1.135 + if (step) { 1.136 + try { 1.137 + step(); 1.138 + } catch(e) { 1.139 + ok(false, "Test threw: " + e); 1.140 + } 1.141 + } else { 1.142 + SimpleTest.finish(); 1.143 + } 1.144 +} 1.145 + 1.146 +next();