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

Side by Side Diff: chrome/content/tests/notification.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.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 (function()
2 {
3 let testRunner = null;
4 let server = null;
5 let randomResult = 0.5;
6
7 let originalApplication;
8 let originalAddonVersion;
9 let info = require("info");
10
11 module("Notification",
12 {
13 setup: function()
14 {
15 testRunner = this;
16
17 preparePrefs.call(this);
18 setupVirtualTime.call(this, function(wrapTimer)
19 {
20 let NotificationModule = getModuleGlobal("notification");
21 NotificationModule.downloader._timer = wrapTimer(NotificationModule.down loader._timer);
22 }, "notification", "downloader");
23
24 server = new nsHttpServer();
25 server.start(1234);
26
27 originalApplication = info.application;
28 info.application = "chrome";
29 originalAddonVersion = info.addonVersion;
30 info.addonVersion = "1.4.1";
31
32 Prefs.notificationurl = "http://127.0.0.1:1234/notification.json";
33 Prefs.notificationdata = {};
34
35 // Replace Math.random() function
36 let DownloaderGlobal = Cu.getGlobalForObject(getModuleGlobal("downloader") );
37 this._origRandom = DownloaderGlobal.Math.random;
38 DownloaderGlobal.Math.random = function() randomResult;
39 randomResult = 0.5;
Felix Dahlke 2013/07/19 14:30:41 This seems redundant, looks like randomResult is a
Wladimir Palant 2013/07/19 14:58:49 Actually, the point here is to reset randomResult
40 },
41
42 teardown: function()
43 {
44 restorePrefs.call(this);
45 restoreVirtualTime.call(this);
46
47 stop();
48 server.stop(function()
49 {
50 server = null;
51 start();
52 });
53
54 info.application = originalApplication;
55 info.addonVersion = originalAddonVersion;
56
57 if (this._origRandom)
58 {
59 let DownloaderGlobal = Cu.getGlobalForObject(getModuleGlobal("downloader "));
60 DownloaderGlobal.Math.random = this._origRandom;
61 delete this._origRandom;
62 }
63
64 Notification.init();
65 }
66 });
67
68 function registerHandler(notifications)
69 {
70 server.registerPathHandler("/notification.json", function(metadata, response )
71 {
72 response.setStatusLine("1.1", "200", "OK");
73 response.setHeader("Content-Type", "application/json");
74
75 let notification = {
76 version: 55,
77 notifications: notifications
78 };
79
80 let result = JSON.stringify(notification);
81 response.bodyOutputStream.write(result, result.length);
82 });
83 }
84
85 function fixConstructors(object)
86 {
87 // deepEqual() expects that the constructors used in expected objects and
88 // the ones in the actual results are the same. That means that we actually
89 // have to construct our objects in the context of the notification module.
90 let JSON = Cu.getGlobalForObject(Notification).JSON;
91 return JSON.parse(JSON.stringify(object));
92 }
93
94 test("No data", 1, function()
95 {
96 equal(Notification.getNextToShow(), null, "null should be returned if there is no data");
97 });
98
99 test("Single notification", 2, function()
100 {
101 let information = fixConstructors({
102 timestamp: 1,
103 severity: "information",
104 message: {en: "Information"}
105 });
106
107 registerHandler([information]);
108 testRunner.runScheduledTasks(1);
109
110 deepEqual(Notification.getNextToShow(), information, "The notification is sh own");
111 equal(Notification.getNextToShow(), null, "Informational notifications aren' t shown more than once");
112 });
113
114 test("Information and critical", 2, function()
115 {
116 let information = fixConstructors({
117 timestamp: 1,
118 severity: "information",
119 message: {en: "Information"}
120 });
121 let critical = fixConstructors({
122 timestamp: 2,
123 severity: "critical",
124 message: {en: "Critical"}
125 });
126
127 registerHandler([information, critical]);
128 testRunner.runScheduledTasks(1);
129
130 deepEqual(Notification.getNextToShow(), critical, "The critical notification is given priority");
131 deepEqual(Notification.getNextToShow(), critical, "Critical notifications ca n be shown multiple times");
132 });
133
134 test("No severity", 2, function()
135 {
136 let information = fixConstructors({
137 timestamp: 1,
138 message: {en: "Information"}
139 });
140
141 registerHandler([information]);
142 testRunner.runScheduledTasks(1);
143
144 deepEqual(Notification.getNextToShow(), information, "The notification is sh own");
145 equal(Notification.getNextToShow(), null, "Notification is treated as severi ty information");
146 });
147
148 test("Different platforms", 2, function()
149 {
150 let information = fixConstructors({
151 timestamp: 1,
152 severity: "information",
153 message: {en: "Information"},
154 platforms: ["chrome", "firefox"]
155 });
156 let critical = fixConstructors({
157 timestamp: 2,
158 severity: "critical",
159 message: {en: "Critical"},
160 platforms: ["firefox"]
161 });
162
163 registerHandler([information, critical]);
164 testRunner.runScheduledTasks(1);
165
166 deepEqual(Notification.getNextToShow(), information, "Critical notification is ignored if platform doesn't match");
167 deepEqual(Notification.getNextToShow(), null, "Critical notification still i gnored even if no other notifications available");
168 });
169
170 test("Min version", 2, function()
171 {
172 let information = fixConstructors({
173 timestamp: 1,
174 severity: "information",
175 message: {en: "Information"},
176 minVersion: "1.4"
177 });
178 let critical = fixConstructors({
179 timestamp: 2,
180 severity: "critical",
181 message: {en: "Critical"},
182 minVersion: "1.5"
183 });
184
185 registerHandler([information, critical]);
186 testRunner.runScheduledTasks(1);
187
188 deepEqual(Notification.getNextToShow(), information, "Critical notification is ignored if minVersion doesn't match");
189 deepEqual(Notification.getNextToShow(), null, "Critical notification still i gnored even if no other notifications available");
190 });
191
192 test("Max version", 2, function()
193 {
194 let information = fixConstructors({
195 timestamp: 1,
196 severity: "information",
197 message: {en: "Information"},
198 maxVersion: "1.5"
199 });
200 let critical = fixConstructors({
201 timestamp: 2,
202 severity: "critical",
203 message: {en: "Critical"},
204 maxVersion: "1.4"
205 });
206
207 registerHandler([information, critical]);
208 testRunner.runScheduledTasks(1);
209
210 deepEqual(Notification.getNextToShow(), information, "Critical notification is ignored if maxVersion doesn't match");
211 deepEqual(Notification.getNextToShow(), null, "Critical notification still i gnored even if no other notifications available");
212 });
213 })();
OLDNEW

Powered by Google App Engine
This is Rietveld