Left: | ||
Right: |
LEFT | RIGHT |
---|---|
1 (function() | 1 (function() |
2 { | 2 { |
3 let testRunner = null; | |
4 let server = null; | |
5 let randomResult = 0.5; | |
6 | |
3 let originalApplication; | 7 let originalApplication; |
4 let originalAddonVersion; | 8 let originalAddonVersion; |
5 let info = require("info"); | 9 let info = require("info"); |
6 let {Notification} = require("notification"); | |
7 | 10 |
8 module("Notification", | 11 module("Notification", |
9 { | 12 { |
10 setup: function() | 13 setup: function() |
11 { | 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 | |
12 originalApplication = info.application; | 27 originalApplication = info.application; |
13 info.application = "chrome"; | 28 info.application = "chrome"; |
14 originalAddonVersion = info.addonVersion; | 29 originalAddonVersion = info.addonVersion; |
15 info.addonVersion = "1.4.1"; | 30 info.addonVersion = "1.4.1"; |
16 Prefs.shownNotifications = null; | 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
| |
17 }, | 40 }, |
41 | |
18 teardown: function() | 42 teardown: function() |
19 { | 43 { |
44 restorePrefs.call(this); | |
45 restoreVirtualTime.call(this); | |
46 | |
47 stop(); | |
48 server.stop(function() | |
49 { | |
50 server = null; | |
51 start(); | |
52 }); | |
53 | |
20 info.application = originalApplication; | 54 info.application = originalApplication; |
21 info.addonVersion = originalAddonVersion; | 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(); | |
22 } | 65 } |
23 }); | 66 }); |
24 | 67 |
25 test("Single notification", 1, function() | 68 function registerHandler(notifications) |
Wladimir Palant
2013/07/19 08:18:29
I would rather not specify the number of checks ex
Felix Dahlke
2013/07/19 14:30:40
Agreed, that was a misconception on my side. You a
| |
26 { | 69 { |
27 let information = { | 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({ | |
28 timestamp: 1, | 102 timestamp: 1, |
29 severity: "information", | 103 severity: "information", |
30 message: {en: "Information"} | 104 message: {en: "Information"} |
31 }; | 105 }); |
32 let notification = Notification.getNextToShow([information]); | 106 |
33 equal(notification, information); | 107 registerHandler([information]); |
34 }); | 108 testRunner.runScheduledTasks(1); |
35 | 109 |
36 test("Information and critical", 1, function() | 110 deepEqual(Notification.getNextToShow(), information, "The notification is sh own"); |
37 { | 111 equal(Notification.getNextToShow(), null, "Informational notifications aren' t shown more than once"); |
38 let information = { | 112 }); |
113 | |
114 test("Information and critical", 2, function() | |
115 { | |
116 let information = fixConstructors({ | |
39 timestamp: 1, | 117 timestamp: 1, |
40 severity: "information", | 118 severity: "information", |
41 message: {en: "Information"} | 119 message: {en: "Information"} |
42 }; | 120 }); |
43 let critical = { | 121 let critical = fixConstructors({ |
44 timestamp: 2, | 122 timestamp: 2, |
45 severity: "critical", | 123 severity: "critical", |
46 message: {en: "Critical"} | 124 message: {en: "Critical"} |
47 }; | 125 }); |
48 let notification = Notification.getNextToShow([information, critical]); | 126 |
49 equal(notification, critical); | 127 registerHandler([information, critical]); |
50 }); | 128 testRunner.runScheduledTasks(1); |
51 | 129 |
52 test("Different platforms", 1, function() | 130 deepEqual(Notification.getNextToShow(), critical, "The critical notification is given priority"); |
53 { | 131 deepEqual(Notification.getNextToShow(), critical, "Critical notifications ca n be shown multiple times"); |
54 let information = { | 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({ | |
55 timestamp: 1, | 151 timestamp: 1, |
56 severity: "information", | 152 severity: "information", |
57 message: {en: "Information"}, | 153 message: {en: "Information"}, |
58 platforms: ["chrome", "firefox"] | 154 platforms: ["chrome", "firefox"] |
59 }; | 155 }); |
60 let critical = { | 156 let critical = fixConstructors({ |
61 timestamp: 2, | 157 timestamp: 2, |
62 severity: "critical", | 158 severity: "critical", |
63 message: {en: "Critical"}, | 159 message: {en: "Critical"}, |
64 platforms: ["firefox"] | 160 platforms: ["firefox"] |
65 }; | 161 }); |
66 let notification = Notification.getNextToShow([information, critical]); | 162 |
67 equal(notification, information); | 163 registerHandler([information, critical]); |
68 }); | 164 testRunner.runScheduledTasks(1); |
69 | 165 |
70 test("Min version", 1, function() | 166 deepEqual(Notification.getNextToShow(), information, "Critical notification is ignored if platform doesn't match"); |
71 { | 167 deepEqual(Notification.getNextToShow(), null, "Critical notification still i gnored even if no other notifications available"); |
72 let information = { | 168 }); |
169 | |
170 test("Min version", 2, function() | |
171 { | |
172 let information = fixConstructors({ | |
73 timestamp: 1, | 173 timestamp: 1, |
74 severity: "information", | 174 severity: "information", |
75 message: {en: "Information"}, | 175 message: {en: "Information"}, |
76 minVersion: "1.4" | 176 minVersion: "1.4" |
77 }; | 177 }); |
78 let critical = { | 178 let critical = fixConstructors({ |
79 timestamp: 2, | 179 timestamp: 2, |
80 severity: "critical", | 180 severity: "critical", |
81 message: {en: "Critical"}, | 181 message: {en: "Critical"}, |
82 minVersion: "1.5" | 182 minVersion: "1.5" |
83 }; | 183 }); |
84 let notification = Notification.getNextToShow([information, critical]); | 184 |
85 equal(notification, information); | 185 registerHandler([information, critical]); |
86 }); | 186 testRunner.runScheduledTasks(1); |
87 | 187 |
88 test("Max version", 1, function() | 188 deepEqual(Notification.getNextToShow(), information, "Critical notification is ignored if minVersion doesn't match"); |
89 { | 189 deepEqual(Notification.getNextToShow(), null, "Critical notification still i gnored even if no other notifications available"); |
90 let information = { | 190 }); |
191 | |
192 test("Max version", 2, function() | |
193 { | |
194 let information = fixConstructors({ | |
91 timestamp: 1, | 195 timestamp: 1, |
92 severity: "information", | 196 severity: "information", |
93 message: {en: "Information"}, | 197 message: {en: "Information"}, |
94 maxVersion: "1.5" | 198 maxVersion: "1.5" |
95 }; | 199 }); |
96 let critical = { | 200 let critical = fixConstructors({ |
97 timestamp: 2, | 201 timestamp: 2, |
98 severity: "critical", | 202 severity: "critical", |
99 message: {en: "Critical"}, | 203 message: {en: "Critical"}, |
100 maxVersion: "1.4" | 204 maxVersion: "1.4" |
101 }; | 205 }); |
102 let notification = Notification.getNextToShow([information, critical]); | 206 |
103 equal(notification, information); | 207 registerHandler([information, critical]); |
104 }); | 208 testRunner.runScheduledTasks(1); |
105 | 209 |
106 test("Information notifications appear just once", 2, function() | 210 deepEqual(Notification.getNextToShow(), information, "Critical notification is ignored if maxVersion doesn't match"); |
107 { | 211 deepEqual(Notification.getNextToShow(), null, "Critical notification still i gnored even if no other notifications available"); |
108 let information = { | |
109 timestamp: 1, | |
110 severity: "information", | |
111 message: {en: "Information"} | |
112 }; | |
113 let notification = Notification.getNextToShow([information]); | |
114 equal(notification, information); | |
115 notification = Notification.getNextToShow([information]); | |
116 ok(!notification, "Notification shouldn't be shown twice"); | |
117 }); | |
118 | |
119 test("Critical notifications appear every time", 2, function() | |
120 { | |
121 let critical = { | |
122 timestamp: 1, | |
123 severity: "critical", | |
124 message: {en: "Critical"} | |
125 }; | |
126 let notification = Notification.getNextToShow([critical]); | |
127 equal(notification, critical); | |
128 notification = Notification.getNextToShow([critical]); | |
129 equal(notification, critical); | |
130 }); | 212 }); |
131 })(); | 213 })(); |
LEFT | RIGHT |