/services/sync/tests/unit/test_engine.js

http://github.com/zpao/v8monkey · JavaScript · 170 lines · 142 code · 25 blank · 3 comment · 0 complexity · 3db02783b3b002cf79391f0433830fb1 MD5 · raw file

  1. Cu.import("resource://services-sync/engines.js");
  2. Cu.import("resource://services-sync/ext/Observers.js");
  3. Cu.import("resource://services-sync/util.js");
  4. function SteamStore() {
  5. Store.call(this, "Steam");
  6. this.wasWiped = false;
  7. }
  8. SteamStore.prototype = {
  9. __proto__: Store.prototype,
  10. wipe: function() {
  11. this.wasWiped = true;
  12. }
  13. };
  14. function SteamTracker() {
  15. Tracker.call(this, "Steam");
  16. }
  17. SteamTracker.prototype = {
  18. __proto__: Tracker.prototype
  19. };
  20. function SteamEngine() {
  21. Engine.call(this, "Steam");
  22. this.wasReset = false;
  23. this.wasSynced = false;
  24. }
  25. SteamEngine.prototype = {
  26. __proto__: Engine.prototype,
  27. _storeObj: SteamStore,
  28. _trackerObj: SteamTracker,
  29. _resetClient: function () {
  30. this.wasReset = true;
  31. },
  32. _sync: function () {
  33. this.wasSynced = true;
  34. }
  35. };
  36. let engineObserver = {
  37. topics: [],
  38. observe: function(subject, topic, data) {
  39. do_check_eq(data, "steam");
  40. this.topics.push(topic);
  41. },
  42. reset: function() {
  43. this.topics = [];
  44. }
  45. };
  46. Observers.add("weave:engine:reset-client:start", engineObserver);
  47. Observers.add("weave:engine:reset-client:finish", engineObserver);
  48. Observers.add("weave:engine:wipe-client:start", engineObserver);
  49. Observers.add("weave:engine:wipe-client:finish", engineObserver);
  50. Observers.add("weave:engine:sync:start", engineObserver);
  51. Observers.add("weave:engine:sync:finish", engineObserver);
  52. function test_members() {
  53. _("Engine object members");
  54. let engine = new SteamEngine();
  55. do_check_eq(engine.Name, "Steam");
  56. do_check_eq(engine.prefName, "steam");
  57. do_check_true(engine._store instanceof SteamStore);
  58. do_check_true(engine._tracker instanceof SteamTracker);
  59. }
  60. function test_score() {
  61. _("Engine.score corresponds to tracker.score and is readonly");
  62. let engine = new SteamEngine();
  63. do_check_eq(engine.score, 0);
  64. engine._tracker.score += 5;
  65. do_check_eq(engine.score, 5);
  66. try {
  67. engine.score = 10;
  68. } catch(ex) {
  69. // Setting an attribute that has a getter produces an error in
  70. // Firefox <= 3.6 and is ignored in later versions. Either way,
  71. // the attribute's value won't change.
  72. }
  73. do_check_eq(engine.score, 5);
  74. }
  75. function test_resetClient() {
  76. _("Engine.resetClient calls _resetClient");
  77. let engine = new SteamEngine();
  78. do_check_false(engine.wasReset);
  79. engine.resetClient();
  80. do_check_true(engine.wasReset);
  81. do_check_eq(engineObserver.topics[0], "weave:engine:reset-client:start");
  82. do_check_eq(engineObserver.topics[1], "weave:engine:reset-client:finish");
  83. engine.wasReset = false;
  84. engineObserver.reset();
  85. }
  86. function test_wipeClient() {
  87. _("Engine.wipeClient calls resetClient, wipes store, clears changed IDs");
  88. let engine = new SteamEngine();
  89. do_check_false(engine.wasReset);
  90. do_check_false(engine._store.wasWiped);
  91. do_check_true(engine._tracker.addChangedID("a-changed-id"));
  92. do_check_true("a-changed-id" in engine._tracker.changedIDs);
  93. engine.wipeClient();
  94. do_check_true(engine.wasReset);
  95. do_check_true(engine._store.wasWiped);
  96. do_check_eq(JSON.stringify(engine._tracker.changedIDs), "{}");
  97. do_check_eq(engineObserver.topics[0], "weave:engine:wipe-client:start");
  98. do_check_eq(engineObserver.topics[1], "weave:engine:reset-client:start");
  99. do_check_eq(engineObserver.topics[2], "weave:engine:reset-client:finish");
  100. do_check_eq(engineObserver.topics[3], "weave:engine:wipe-client:finish");
  101. engine.wasReset = false;
  102. engine._store.wasWiped = false;
  103. engineObserver.reset();
  104. }
  105. function test_enabled() {
  106. _("Engine.enabled corresponds to preference");
  107. let engine = new SteamEngine();
  108. try {
  109. do_check_false(engine.enabled);
  110. Svc.Prefs.set("engine.steam", true);
  111. do_check_true(engine.enabled);
  112. engine.enabled = false;
  113. do_check_false(Svc.Prefs.get("engine.steam"));
  114. } finally {
  115. Svc.Prefs.resetBranch("");
  116. }
  117. }
  118. function test_sync() {
  119. let engine = new SteamEngine();
  120. try {
  121. _("Engine.sync doesn't call _sync if it's not enabled");
  122. do_check_false(engine.enabled);
  123. do_check_false(engine.wasSynced);
  124. engine.sync();
  125. do_check_false(engine.wasSynced);
  126. _("Engine.sync calls _sync if it's enabled");
  127. engine.enabled = true;
  128. engine.sync();
  129. do_check_true(engine.wasSynced);
  130. do_check_eq(engineObserver.topics[0], "weave:engine:sync:start");
  131. do_check_eq(engineObserver.topics[1], "weave:engine:sync:finish");
  132. } finally {
  133. Svc.Prefs.resetBranch("");
  134. engine.wasSynced = false;
  135. engineObserver.reset();
  136. }
  137. }
  138. function run_test() {
  139. test_members();
  140. test_score();
  141. test_resetClient();
  142. test_wipeClient();
  143. test_enabled();
  144. test_sync();
  145. }