test_prefs_tracker.js (3651B)
1 /* Any copyright is dedicated to the Public Domain. 2 http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 const { Service } = ChromeUtils.importESModule( 5 "resource://services-sync/service.sys.mjs" 6 ); 7 8 let prefsWithUserValue = new Set(); 9 add_setup(function record_prefsWithUserValue() { 10 for (const pref of Services.prefs.getChildList("")) { 11 if (Services.prefs.prefHasUserValue(pref)) { 12 prefsWithUserValue.add(pref); 13 } 14 } 15 }); 16 17 function clearValues() { 18 for (const pref of Services.prefs.getChildList("")) { 19 if (!prefsWithUserValue.has(pref)) { 20 Services.prefs.clearUserPref(pref); 21 } 22 } 23 } 24 25 add_task(async function run_test() { 26 let engine = Service.engineManager.get("prefs"); 27 let tracker = engine._tracker; 28 29 try { 30 _("tracker.modified corresponds to preference."); 31 // Assert preference is not defined. 32 Assert.equal( 33 Svc.PrefBranch.getPrefType("engine.prefs.modified"), 34 Ci.nsIPrefBranch.PREF_INVALID 35 ); 36 Assert.ok(!tracker.modified); 37 38 tracker.modified = true; 39 Assert.equal(Svc.PrefBranch.getBoolPref("engine.prefs.modified"), true); 40 Assert.ok(tracker.modified); 41 42 _("Engine's getChangedID() just returns the one GUID we have."); 43 let changedIDs = await engine.getChangedIDs(); 44 let ids = Object.keys(changedIDs); 45 Assert.equal(ids.length, 1); 46 Assert.equal(ids[0], CommonUtils.encodeBase64URL(Services.appinfo.ID)); 47 48 Svc.PrefBranch.setBoolPref("engine.prefs.modified", false); 49 Assert.ok(!tracker.modified); 50 51 _("No modified state, so no changed IDs."); 52 do_check_empty(await engine.getChangedIDs()); 53 54 _("Initial score is 0"); 55 Assert.equal(tracker.score, 0); 56 57 _("Test fixtures."); 58 Svc.PrefBranch.setBoolPref("prefs.sync.testing.int", true); 59 60 _( 61 "Test fixtures haven't upped the tracker score yet because it hasn't started tracking yet." 62 ); 63 Assert.equal(tracker.score, 0); 64 65 _("Tell the tracker to start tracking changes."); 66 tracker.start(); 67 Services.prefs.setIntPref("testing.int", 23); 68 await tracker.asyncObserver.promiseObserversComplete(); 69 Assert.equal(tracker.score, SCORE_INCREMENT_XLARGE); 70 Assert.equal(tracker.modified, true); 71 72 _("Clearing changed IDs reset modified status."); 73 await tracker.clearChangedIDs(); 74 Assert.equal(tracker.modified, false); 75 76 _("Resetting a pref ups the score, too."); 77 Services.prefs.clearUserPref("testing.int"); 78 await tracker.asyncObserver.promiseObserversComplete(); 79 Assert.equal(tracker.score, SCORE_INCREMENT_XLARGE * 2); 80 Assert.equal(tracker.modified, true); 81 await tracker.clearChangedIDs(); 82 83 _("So does changing a pref sync pref."); 84 Svc.PrefBranch.setBoolPref("prefs.sync.testing.int", false); 85 await tracker.asyncObserver.promiseObserversComplete(); 86 Assert.equal(tracker.score, SCORE_INCREMENT_XLARGE * 3); 87 Assert.equal(tracker.modified, true); 88 await tracker.clearChangedIDs(); 89 90 _( 91 "Now that the pref sync pref has been flipped, changes to it won't be picked up." 92 ); 93 Services.prefs.setIntPref("testing.int", 42); 94 await tracker.asyncObserver.promiseObserversComplete(); 95 Assert.equal(tracker.score, SCORE_INCREMENT_XLARGE * 3); 96 Assert.equal(tracker.modified, false); 97 await tracker.clearChangedIDs(); 98 99 _("Changing some other random pref won't do anything."); 100 Services.prefs.setStringPref("testing.other", "blergh"); 101 await tracker.asyncObserver.promiseObserversComplete(); 102 Assert.equal(tracker.score, SCORE_INCREMENT_XLARGE * 3); 103 Assert.equal(tracker.modified, false); 104 } finally { 105 await tracker.stop(); 106 clearValues(); 107 } 108 });