Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Unified Diff: chrome/content/tests/synchronizer.js

Issue 11144022: Add tests for the Notification module (Closed)
Patch Set: Test downloading (changes by Wladimir) Created July 18, 2013, 5:58 p.m.
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/content/tests/synchronizer.js
===================================================================
--- a/chrome/content/tests/synchronizer.js
+++ b/chrome/content/tests/synchronizer.js
@@ -4,150 +4,34 @@
let server = null;
let randomResult = 0.5;
- const MILLIS_IN_SECOND = 1000;
- const MILLIS_IN_MINUTE = 60 * MILLIS_IN_SECOND;
- const MILLIS_IN_HOUR = 60 * MILLIS_IN_MINUTE;
- const MILLIS_IN_DAY = 24 * MILLIS_IN_HOUR;
-
module("Synchronizer", {
- QueryInterface: XPCOMUtils.generateQI([Ci.nsIObserver, Ci.nsISupportsWeakReference]),
-
setup: function()
{
testRunner = this;
prepareFilterComponents.call(this);
preparePrefs.call(this);
-
- let SynchronizerGlobal = Cu.getGlobalForObject(Synchronizer);
- let SynchronizerModule = getModuleGlobal("synchronizer");
- let DownloaderGlobal = Cu.getGlobalForObject(SynchronizerModule.downloader);
+ setupVirtualTime.call(this, function(wrapTimer)
+ {
+ let SynchronizerModule = getModuleGlobal("synchronizer");
+ SynchronizerModule.downloader._timer = wrapTimer(SynchronizerModule.downloader._timer);
+ }, "synchronizer", "downloader");
server = new nsHttpServer();
server.start(1234);
- let currentTime = 100000 * MILLIS_IN_HOUR;
- let startTime = currentTime;
- let scheduledTasks = [];
-
- // Replace Date.now() function
- this._origNow = SynchronizerGlobal.Date.now;
- SynchronizerGlobal.Date.now = DownloaderGlobal.Date.now = function() currentTime;
-
// Replace Math.random() function
+ let DownloaderGlobal = Cu.getGlobalForObject(getModuleGlobal("downloader"));
this._origRandom = DownloaderGlobal.Math.random;
DownloaderGlobal.Math.random = function() randomResult;
-
- // Replace global timer variable
- let timer = {__proto__: SynchronizerModule.downloader._timer, delay: 0.1 * MILLIS_IN_HOUR};
- let callback = timer.callback;
- timer.handler = function() { callback.notify(timer); };
- timer.nextExecution = currentTime + timer.delay;
- scheduledTasks.push(timer);
- SynchronizerModule.downloader._timer.cancel();
- SynchronizerModule.downloader._timer = timer;
-
- // Register observer to track outstanding requests
- this._outstandingRequests = 0;
- Services.obs.addObserver(this, "http-on-modify-request", true);
- Services.obs.addObserver(this, "http-on-examine-response", true);
-
- this.runScheduledTasks = function(maxHours, initial, skip)
- {
- if (typeof maxHours != "number")
- throw new Error("Numerical parameter expected");
- if (typeof initial != "number")
- initial = 0;
- if (typeof skip != "number")
- skip = 0;
-
- startTime = currentTime;
- if (initial >= 0)
- {
- this._runScheduledTasks(initial);
- maxHours -= initial;
- }
- if (skip)
- {
- this._skipTasks(skip);
- maxHours -= skip;
- }
- this._runScheduledTasks(maxHours);
- }
-
- this._runScheduledTasks = function(maxHours)
- {
- let endTime = currentTime + maxHours * MILLIS_IN_HOUR;
- while (true)
- {
- let nextTask = null;
- for each (let task in scheduledTasks)
- {
- if (!nextTask || nextTask.nextExecution > task.nextExecution)
- nextTask = task;
- }
- if (!nextTask || nextTask.nextExecution > endTime)
- break;
-
- currentTime = nextTask.nextExecution;
- nextTask.handler();
-
- // Let all asynchronous actions finish
- let thread = Services.tm.currentThread;
- let loopStartTime = Date.now();
-
- while (this._outstandingRequests > 0 || thread.hasPendingEvents())
- {
- thread.processNextEvent(true);
-
- if (Date.now() - loopStartTime > 5000)
- throw new Error("Synchronizer stuck downloading subscriptions");
- }
-
- if (nextTask.type == Components.interfaces.nsITimer.TYPE_ONE_SHOT)
- scheduledTasks = scheduledTasks.filter(function(task) task != nextTask);
- else
- nextTask.nextExecution = currentTime + nextTask.delay;
- }
-
- currentTime = endTime;
- }
-
- this._skipTasks = function(hours)
- {
- let newTasks = [];
- currentTime += hours * MILLIS_IN_HOUR;
- for each (let task in scheduledTasks)
- {
- if (task.nextExecution >= currentTime)
- newTasks.push(task);
- else if (task.type != Components.interfaces.nsITimer.TYPE_ONE_SHOT)
- {
- task.nextExecution = currentTime;
- newTasks.push(task);
- }
- }
- scheduledTasks = newTasks;
- }
-
- this.getTimeOffset = function() (currentTime - startTime) / MILLIS_IN_HOUR;
-
- this.__defineGetter__("currentTime", function() currentTime);
- },
-
- observe: function(subject, topic, data)
- {
- let orig = this._outstandingRequests;
- if (topic == "http-on-modify-request")
- this._outstandingRequests++;
- else if (topic == "http-on-examine-response")
- this._outstandingRequests--;
+ randomResult = 0.5;
Felix Dahlke 2013/07/19 14:30:41 As in notification.js - it looks like this is alwa
Wladimir Palant 2013/07/19 14:58:49 Not really, one of the tests changes it - and this
},
teardown: function()
{
restoreFilterComponents.call(this);
restorePrefs.call(this);
+ restoreVirtualTime.call(this);
stop();
server.stop(function()
@@ -156,19 +40,9 @@
start();
});
- if (this._origNow)
- {
- let SynchronizerGlobal = Cu.getGlobalForObject(Synchronizer);
- let SynchronizerModule = getModuleGlobal("synchronizer");
- let DownloaderGlobal = Cu.getGlobalForObject(SynchronizerModule.downloader);
- SynchronizerGlobal.Date.now = DownloaderGlobal.Date.now = this._origNow;
- delete this._origNow;
- }
-
if (this._origRandom)
{
- let SynchronizerModule = getModuleGlobal("synchronizer");
- let DownloaderGlobal = Cu.getGlobalForObject(SynchronizerModule.downloader);
+ let DownloaderGlobal = Cu.getGlobalForObject(getModuleGlobal("downloader"));
DownloaderGlobal.Math.random = this._origRandom;
delete this._origRandom;
}
@@ -192,9 +66,6 @@
test("Downloads of one subscription", function()
{
- // Always use average download interval
- randomResult = 0.5;
-
let subscription = Subscription.fromURL("http://127.0.0.1:1234/subscription");
FilterStorage.addSubscription(subscription);
@@ -222,9 +93,6 @@
test("Downloads of two subscriptions", function()
{
- // Always use average download interval
- randomResult = 0.5;
-
let subscription1 = Subscription.fromURL("http://127.0.0.1:1234/subscription1");
FilterStorage.addSubscription(subscription1);
@@ -262,9 +130,6 @@
test("Download result, various subscription headers", function()
{
- // Always use average download interval
- randomResult = 0.5;
-
let test;
let subscription = Subscription.fromURL("http://127.0.0.1:1234/subscription");
FilterStorage.addSubscription(subscription);
@@ -434,9 +299,6 @@
test("Checksum verification", function()
{
- // Always use average download interval
- randomResult = 0.5;
-
let subscription = Subscription.fromURL("http://127.0.0.1:1234/subscription");
FilterStorage.addSubscription(subscription);
@@ -475,9 +337,6 @@
test("Special comments", function()
{
- // Always use average download interval
- randomResult = 0.5;
-
let subscription = Subscription.fromURL("http://127.0.0.1:1234/subscription");
FilterStorage.addSubscription(subscription);
@@ -514,9 +373,6 @@
test("Redirects", function()
{
- // Always use average download interval
- randomResult = 0.5;
-
let subscription = Subscription.fromURL("http://127.0.0.1:1234/subscription");
FilterStorage.addSubscription(subscription);
@@ -574,9 +430,6 @@
test("Fallback", function()
{
- // Always use average download interval
- randomResult = 0.5;
-
Prefs.subscriptions_fallbackerrors = 3;
Prefs.subscriptions_fallbackurl = "http://127.0.0.1:1234/fallback?%SUBSCRIPTION%&%CHANNELSTATUS%&%RESPONSESTATUS%";
@@ -705,9 +558,6 @@
test("State fields", function()
{
- // Always use average download interval
- randomResult = 0.5;
-
let subscription = Subscription.fromURL("http://127.0.0.1:1234/subscription");
FilterStorage.addSubscription(subscription);
« chrome/content/tests/notification.js ('K') | « chrome/content/tests/notification.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld