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

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

Issue 11127037: Notifications: implemented better target checks - unit tests (Closed)
Patch Set: Created July 19, 2013, 2:42 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
« no previous file with comments | « .hgsubstate ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/content/tests/notification.js
===================================================================
--- a/chrome/content/tests/notification.js
+++ b/chrome/content/tests/notification.js
@@ -1,16 +1,15 @@
(function()
{
let testRunner = null;
let server = null;
let randomResult = 0.5;
- let originalApplication;
- let originalAddonVersion;
+ let originalInfo;
let info = require("info");
module("Notification",
{
setup: function()
{
testRunner = this;
@@ -19,20 +18,26 @@
{
let NotificationModule = getModuleGlobal("notification");
NotificationModule.downloader._timer = wrapTimer(NotificationModule.downloader._timer);
}, "notification", "downloader");
server = new nsHttpServer();
server.start(1234);
- originalApplication = info.application;
+ originalInfo = {};
+ for (let key in info)
+ originalInfo[key] = info[key];
+
+ info.addonName = "adblockpluschrome";
+ info.addonVersion = "1.4.1";
info.application = "chrome";
- originalAddonVersion = info.addonVersion;
- info.addonVersion = "1.4.1";
+ info.applicationVersion = "27.0";
+ info.platform = "chromium";
+ info.platformVersion = "12.0";
Prefs.notificationurl = "http://127.0.0.1:1234/notification.json";
Prefs.notificationdata = {};
// Replace Math.random() function
let DownloaderGlobal = Cu.getGlobalForObject(getModuleGlobal("downloader"));
this._origRandom = DownloaderGlobal.Math.random;
DownloaderGlobal.Math.random = function() randomResult;
@@ -46,18 +51,18 @@
stop();
server.stop(function()
{
server = null;
start();
});
- info.application = originalApplication;
- info.addonVersion = originalAddonVersion;
+ for (let key in originalInfo)
+ info[key] = originalInfo[key];
if (this._origRandom)
{
let DownloaderGlobal = Cu.getGlobalForObject(getModuleGlobal("downloader"));
DownloaderGlobal.Math.random = this._origRandom;
delete this._origRandom;
}
@@ -140,74 +145,118 @@
registerHandler([information]);
testRunner.runScheduledTasks(1);
deepEqual(Notification.getNextToShow(), information, "The notification is shown");
equal(Notification.getNextToShow(), null, "Notification is treated as severity information");
});
- test("Different platforms", function()
+ test("Target selection", function()
{
- let information = fixConstructors({
- id: 1,
- severity: "information",
- message: {en: "Information"},
- platforms: ["chrome", "firefox"]
- });
- let critical = fixConstructors({
- id: 2,
- severity: "critical",
- message: {en: "Critical"},
- platforms: ["firefox"]
- });
+ let targets = [
+ ["extension", "adblockpluschrome", true],
+ ["extension", "adblockplus", false],
+ ["extension", "adblockpluschrome2", false],
+ ["extensionMinVersion", "1.4", true],
+ ["extensionMinVersion", "1.4.1", true],
+ ["extensionMinVersion", "1.5", false],
+ ["extensionMaxVersion", "1.5", true],
+ ["extensionMaxVersion", "1.4.1", true],
+ ["extensionMaxVersion", "1.4.*", true],
+ ["extensionMaxVersion", "1.4", false],
+ ["application", "chrome", true],
+ ["application", "firefox", false],
+ ["applicationMinVersion", "27.0", true],
+ ["applicationMinVersion", "27", true],
+ ["applicationMinVersion", "26", true],
+ ["applicationMinVersion", "28", false],
+ ["applicationMinVersion", "27.1", false],
+ ["applicationMaxVersion", "27.0", true],
+ ["applicationMaxVersion", "27", true],
+ ["applicationMaxVersion", "28", true],
+ ["applicationMaxVersion", "26", false],
+ ["platform", "chromium", true],
+ ["platform", "gecko", false],
+ ["platformMinVersion", "12.0", true],
+ ["platformMinVersion", "12", true],
+ ["platformMinVersion", "11", true],
+ ["platformMinVersion", "13", false],
+ ["platformMinVersion", "12.1", false],
+ ["platformMaxVersion", "12.0", true],
+ ["platformMaxVersion", "12", true],
+ ["platformMaxVersion", "13", true],
+ ["platformMaxVersion", "11", false],
+ ];
- registerHandler([information, critical]);
- testRunner.runScheduledTasks(1);
+ for each (let [propName, value, result] in targets)
+ {
+ let targetInfo = {};
+ targetInfo[propName] = value;
- deepEqual(Notification.getNextToShow(), information, "Critical notification is ignored if platform doesn't match");
- deepEqual(Notification.getNextToShow(), null, "Critical notification still ignored even if no other notifications available");
- });
+ let information = fixConstructors({
+ id: 1,
+ severity: "information",
+ message: {en: "Information"},
+ targets: [targetInfo]
+ });
- test("Min version", function()
- {
- let information = fixConstructors({
- id: 1,
- severity: "information",
- message: {en: "Information"},
- minVersion: "1.4"
- });
- let critical = fixConstructors({
- id: 2,
- severity: "critical",
- message: {en: "Critical"},
- minVersion: "1.5"
- });
+ Prefs.notificationdata = {};
+ registerHandler([information]);
+ testRunner.runScheduledTasks(1);
- registerHandler([information, critical]);
- testRunner.runScheduledTasks(1);
+ let expected = (result ? information : null);
+ deepEqual(Notification.getNextToShow(), expected, "Selected notification for " + JSON.stringify(information.targets));
+ deepEqual(Notification.getNextToShow(), null, "No notification on second call");
+ }
- deepEqual(Notification.getNextToShow(), information, "Critical notification is ignored if minVersion doesn't match");
- deepEqual(Notification.getNextToShow(), null, "Critical notification still ignored even if no other notifications available");
- });
+ function allPairs(array)
+ {
+ var pairs = [];
Felix Dahlke 2013/07/25 10:22:04 Why not use let here and below?
Wladimir Palant 2013/07/25 10:58:07 Because that's copy&paste from your code in Chrome
+ for (var i = 0; i < array.length - 1; i++)
+ for (var j = i + 1; j < array.length; j++)
+ pairs.push([array[i], array[j]]);
+ return pairs;
+ }
+ for each (let [[propName1, value1, result1], [propName2, value2, result2]] in allPairs(targets))
+ {
+ let targetInfo1 = {};
+ targetInfo1[propName1] = value1;
+ let targetInfo2 = {};
+ targetInfo2[propName2] = value2;
- test("Max version", function()
- {
- let information = fixConstructors({
- id: 1,
- severity: "information",
- message: {en: "Information"},
- maxVersion: "1.5"
- });
- let critical = fixConstructors({
- id: 2,
- severity: "critical",
- message: {en: "Critical"},
- maxVersion: "1.4"
- });
+ let information = fixConstructors({
+ id: 1,
+ severity: "information",
+ message: {en: "Information"},
+ targets: [targetInfo1, targetInfo2]
+ });
- registerHandler([information, critical]);
- testRunner.runScheduledTasks(1);
+ Prefs.notificationdata = {};
+ registerHandler([information]);
+ testRunner.runScheduledTasks(1);
- deepEqual(Notification.getNextToShow(), information, "Critical notification is ignored if maxVersion doesn't match");
- deepEqual(Notification.getNextToShow(), null, "Critical notification still ignored even if no other notifications available");
+ let expected = (result1 || result2 ? information : null)
+ deepEqual(Notification.getNextToShow(), expected, "Selected notification for " + JSON.stringify(information.targets));
+ deepEqual(Notification.getNextToShow(), null, "No notification on second call");
+
+ information = fixConstructors({
+ id: 1,
+ severity: "information",
+ message: {en: "Information"},
+ targets: [targetInfo1]
+ });
+ let critical = fixConstructors({
+ id: 2,
+ severity: "critical",
+ message: {en: "Critical"},
+ targets: [targetInfo2]
+ });
+
+ Prefs.notificationdata = {};
+ registerHandler([information, critical]);
+ testRunner.runScheduledTasks(1);
+
+ expected = (result2 ? critical : (result1 ? information : null));
+ deepEqual(Notification.getNextToShow(), expected, "Selected notification for information with " + JSON.stringify(information.targets) + " and critical with " + JSON.stringify(critical.targets));
+ }
});
})();
« no previous file with comments | « .hgsubstate ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld