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

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

Issue 29356056: Issue 4223 - Remove more tests migrated to adblockpluscore (Closed) Base URL: https://hg.adblockplus.org/adblockplustests
Patch Set: Created Oct. 6, 2016, 8:20 a.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 | « chrome/content/tests/filterStorage_readwrite.js ('k') | chrome/content/tests/synchronizer.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/content/tests/notification.js
===================================================================
deleted file mode 100644
--- a/chrome/content/tests/notification.js
+++ /dev/null
@@ -1,486 +0,0 @@
-(function()
-{
- let testRunner = null;
- let randomResult = 0.5;
-
- let originalInfo;
- let info = require("info");
-
- function showNotifications(url)
- {
- let shownNotifications = [];
- function showListener(notification)
- {
- shownNotifications.push(notification);
- Notification.markAsShown(notification.id);
- }
- Notification.addShowListener(showListener);
- Notification.showNext(url);
- Notification.removeShowListener(showListener);
- return shownNotifications;
- }
-
- module("Notification handling",
- {
- setup: function()
- {
- testRunner = this;
-
- preparePrefs.call(this);
- setupVirtualTime.call(this, function(wrapTimer)
- {
- let NotificationModule = getModuleGlobal("notification");
- NotificationModule.downloader._timer = wrapTimer(NotificationModule.downloader._timer);
- }, "notification", "downloader");
- setupVirtualXMLHttp.call(this, "notification", "downloader");
-
- originalInfo = {};
- for (let key in info)
- originalInfo[key] = info[key];
-
- info.addonName = "adblockpluschrome";
- info.addonVersion = "1.4.1";
- info.application = "chrome";
- info.applicationVersion = "27.0";
- info.platform = "chromium";
- info.platformVersion = "12.0";
-
- Prefs.notificationurl = "http://example.com/notification.json";
- Prefs.notificationdata = {};
- Prefs.notifications_ignoredcategories = [];
-
- // Replace Math.random() function
- let DownloaderGlobal = Cu.getGlobalForObject(getModuleGlobal("downloader"));
- this._origRandom = DownloaderGlobal.Math.random;
- DownloaderGlobal.Math.random = () => randomResult;
- randomResult = 0.5;
-
- let NotificationGlobal = getModuleGlobal("notification");
- this._origShowListeners = NotificationGlobal.showListeners;
- NotificationGlobal.showListeners = [];
- },
-
- teardown: function()
- {
- restorePrefs.call(this);
- restoreVirtualTime.call(this);
- restoreVirtualXMLHttp.call(this);
-
- 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;
- }
-
- if (this._origShowListeners)
- {
- let NotificationGlobal = getModuleGlobal("notification");
- NotificationGlobal.showListeners = this._origShowListeners;
- delete this._origShowListeners;
- }
-
- Notification.init();
- }
- });
-
- function registerHandler(notifications, checkCallback)
- {
- testRunner.registerHandler("/notification.json", function(metadata)
- {
- if (checkCallback)
- checkCallback(metadata);
-
- let notification = {
- version: 55,
- notifications: notifications
- };
-
- return [Cr.NS_OK, 200, JSON.stringify(notification)];
- });
- }
-
- function fixConstructors(object)
- {
- // deepEqual() expects that the constructors used in expected objects and
- // the ones in the actual results are the same. That means that we actually
- // have to construct our objects in the context of the notification module.
- let JSON = Cu.getGlobalForObject(Notification).JSON;
- return JSON.parse(JSON.stringify(object));
- }
-
- test("No data", function()
- {
- deepEqual(showNotifications(), [], "No notifications should be returned if there is no data");
- });
-
- test("Single notification", function()
- {
- let information = fixConstructors({
- id: 1,
- type: "information",
- message: {"en-US": "Information"}
- });
-
- registerHandler([information]);
- testRunner.runScheduledTasks(1);
-
- deepEqual(showNotifications(), [information], "The notification is shown");
- deepEqual(showNotifications(), [], "Informational notifications aren't shown more than once");
- });
-
- test("Information and critical", function()
- {
- let information = fixConstructors({
- id: 1,
- type: "information",
- message: {"en-US": "Information"}
- });
- let critical = fixConstructors({
- id: 2,
- type: "critical",
- message: {"en-US": "Critical"}
- });
-
- registerHandler([information, critical]);
- testRunner.runScheduledTasks(1);
-
- deepEqual(showNotifications(), [critical], "The critical notification is given priority");
- deepEqual(showNotifications(), [critical], "Critical notifications can be shown multiple times");
- });
-
- test("No type", function()
- {
- let information = fixConstructors({
- id: 1,
- message: {"en-US": "Information"}
- });
-
- registerHandler([information]);
- testRunner.runScheduledTasks(1);
-
- deepEqual(showNotifications(), [information], "The notification is shown");
- deepEqual(showNotifications(), [], "Notification is treated as type information");
- });
-
- test("Target selection", function()
- {
- 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],
- ];
-
- for (let [propName, value, result] of targets)
- {
- let targetInfo = {};
- targetInfo[propName] = value;
-
- let information = fixConstructors({
- id: 1,
- type: "information",
- message: {"en-US": "Information"},
- targets: [targetInfo]
- });
-
- Prefs.notificationdata = {};
- registerHandler([information]);
- testRunner.runScheduledTasks(1);
-
- let expected = (result ? [information] : []);
- deepEqual(showNotifications(), expected, "Selected notification for " + JSON.stringify(information.targets));
- deepEqual(showNotifications(), [], "No notification on second call");
- }
- });
-
- test("Multiple targets", function()
- {
- let targets = [
- ["extension", "adblockpluschrome", true],
- ["extension", "adblockplus", false],
- ["extensionMinVersion", "1.4", true],
- ["extensionMinVersion", "1.5", false],
- ["application", "chrome", true],
- ["application", "firefox", false],
- ["applicationMinVersion", "27", true],
- ["applicationMinVersion", "28", false],
- ["platform", "chromium", true],
- ["platform", "gecko", false],
- ["platformMinVersion", "12", true],
- ["platformMinVersion", "13", false],
- ];
-
- function pairs(array)
- {
- for (let element1 of array)
- for (let element2 of array)
- if (element1 != element2)
- yield [element1, element2];
- }
-
- for (let [[propName1, value1, result1], [propName2, value2, result2]] in pairs(targets))
- {
- let targetInfo1 = {};
- targetInfo1[propName1] = value1;
- let targetInfo2 = {};
- targetInfo2[propName2] = value2;
-
- let information = fixConstructors({
- id: 1,
- type: "information",
- message: {"en-US": "Information"},
- targets: [targetInfo1, targetInfo2]
- });
-
- Prefs.notificationdata = {};
- registerHandler([information]);
- testRunner.runScheduledTasks(1);
-
- let expected = (result1 || result2 ? [information] : [])
- deepEqual(showNotifications(), expected, "Selected notification for " + JSON.stringify(information.targets));
- }
- });
-
- test("Parameters sent", function()
- {
- Prefs.notificationdata = {
- data: {
- version: "3"
- },
- };
-
- let parameters = null;
- registerHandler([], function(metadata)
- {
- parameters = decodeURI(metadata.queryString);
- });
- testRunner.runScheduledTasks(1);
-
- equal(parameters,
- "addonName=adblockpluschrome&addonVersion=1.4.1&application=chrome&applicationVersion=27.0&platform=chromium&platformVersion=12.0&lastVersion=3&downloadCount=0",
- "The correct parameters are sent to the server");
- });
-
- test("Expiration interval", function()
- {
- let initialDelay = 1 / 60;
- let tests = [
- {
- randomResult: 0.5,
- requests: [initialDelay, initialDelay + 24, initialDelay + 48]
- },
- {
- randomResult: 0, // Changes interval by factor 0.8 (19.2 hours)
- requests: [initialDelay, initialDelay + 20, initialDelay + 40]
- },
- {
- randomResult: 1, // Changes interval by factor 1.2 (28.8 hours)
- requests: [initialDelay, initialDelay + 29, initialDelay + 58]
- },
- {
- randomResult: 0.25, // Changes interval by factor 0.9 (21.6 hours)
- requests: [initialDelay, initialDelay + 22, initialDelay + 44]
- },
- {
- randomResult: 0.5,
- skipAfter: initialDelay + 5,
- skip: 10, // Short break should not increase soft expiration
- requests: [initialDelay, initialDelay + 24]
- },
- {
- randomResult: 0.5,
- skipAfter: initialDelay + 5,
- skip: 30, // Long break should increase soft expiration, hitting hard expiration
- requests: [initialDelay, initialDelay + 48]
- }
- ];
-
- let requests = [];
- registerHandler([], (metadata) => requests.push(testRunner.getTimeOffset()));
- for (let test of tests)
- {
- Prefs.notificationdata = {};
- requests = [];
- randomResult = test.randomResult;
-
- let maxHours = Math.round(Math.max.apply(null, test.requests)) + 1;
- testRunner.runScheduledTasks(maxHours, test.skipAfter, test.skip);
-
- let skipAddendum = (typeof test.skip != "number" ? "" : " skipping " + test.skip + " hours after " + test.skipAfter + " hours");
- deepEqual(requests, test.requests, "Requests with Math.random() returning " + randomResult + skipAddendum);
- }
- });
-
- test("Uses severity instead of type", 3, function()
- {
- let severityNotification = {
- id: 1,
- severity: "information",
- message: {"en-US": "Information"}
- };
-
- function listener(name)
- {
- if (name !== "notificationdata")
- return;
-
- Prefs.removeListener(listener);
- let notification = Prefs.notificationdata.data.notifications[0];
- ok(!("severity" in notification), "Severity property was removed");
- ok("type" in notification, "Type property was added");
- equal(notification.type, severityNotification.severity, "Type property has correct value");
- }
- Prefs.addListener(listener);
-
- let responseText = JSON.stringify({
- notifications: [severityNotification]
- });
- Notification._onDownloadSuccess({}, responseText, function() {}, function() {});
- });
-
- test("URL-specific notification", function()
- {
- let withURLFilterFoo = fixConstructors({
- id: 1,
- urlFilters: ["foo.com$document"]
- });
- let withoutURLFilter = fixConstructors({
- id: 2
- });
- let withURLFilterBar = fixConstructors({
- id: 3,
- urlFilters: ["bar.com$document"]
- });
- let subdomainURLFilter = fixConstructors({
- id: 4,
- urlFilters: ["||example.com$document"]
- });
-
- registerHandler([
- withURLFilterFoo,
- withoutURLFilter,
- withURLFilterBar,
- subdomainURLFilter
- ]);
- testRunner.runScheduledTasks(1);
-
- deepEqual(showNotifications(), [withoutURLFilter], "URL-specific notifications are skipped");
- deepEqual(showNotifications("http://foo.com"), [withURLFilterFoo], "URL-specific notification is retrieved");
- deepEqual(showNotifications("http://foo.com"), [], "URL-specific notification is not retrieved");
- deepEqual(showNotifications("http://www.example.com"), [subdomainURLFilter], "URL-specific notification matches subdomain");
- });
-
- test("Global opt-out", function()
- {
- Notification.toggleIgnoreCategory("*", true);
- ok(Prefs.notifications_ignoredcategories.indexOf("*") != -1, "Force enable global opt-out");
- Notification.toggleIgnoreCategory("*", true);
- ok(Prefs.notifications_ignoredcategories.indexOf("*") != -1, "Force enable global opt-out (again)");
- Notification.toggleIgnoreCategory("*", false);
- ok(Prefs.notifications_ignoredcategories.indexOf("*") == -1, "Force disable global opt-out");
- Notification.toggleIgnoreCategory("*", false);
- ok(Prefs.notifications_ignoredcategories.indexOf("*") == -1, "Force disable global opt-out (again)");
- Notification.toggleIgnoreCategory("*");
- ok(Prefs.notifications_ignoredcategories.indexOf("*") != -1, "Toggle enable global opt-out");
- Notification.toggleIgnoreCategory("*");
- ok(Prefs.notifications_ignoredcategories.indexOf("*") == -1, "Toggle disable global opt-out");
-
- Prefs.notifications_showui = false;
- Notification.toggleIgnoreCategory("*", false);
- ok(!Prefs.notifications_showui, "Opt-out UI will not be shown if global opt-out hasn't been enabled yet");
- Notification.toggleIgnoreCategory("*", true);
- ok(Prefs.notifications_showui, "Opt-out UI will be shown after enabling global opt-out");
- Notification.toggleIgnoreCategory("*", false);
- ok(Prefs.notifications_showui, "Opt-out UI will be shown after enabling global opt-out even if it got disabled again");
-
- let information = fixConstructors({
- id: 1,
- type: "information"
- });
- let critical = fixConstructors({
- id: 2,
- type: "critical"
- });
-
- Notification.toggleIgnoreCategory("*", true);
- registerHandler([information]);
- testRunner.runScheduledTasks(1);
-
- deepEqual(showNotifications(), [], "Information notifications are ignored after enabling global opt-out");
- Notification.toggleIgnoreCategory("*", false);
- deepEqual(showNotifications(), [information], "Information notifications are shown after disabling global opt-out");
-
- Notification.toggleIgnoreCategory("*", true);
- Prefs.notificationdata = {};
- registerHandler([critical]);
- testRunner.runScheduledTasks(1);
-
- deepEqual(showNotifications(), [critical], "Critical notifications are not ignored");
- });
-
- module("Notification localization");
-
- test("Message without localization", function()
- {
- let notification = {message: "non-localized"};
- let texts = Notification.getLocalizedTexts(notification, "en-US");
- equal(texts.message, "non-localized");
- });
-
- test("Language only", function()
- {
- let notification = {message: {fr: "fr"}};
- let texts = Notification.getLocalizedTexts(notification, "fr");
- equal(texts.message, "fr");
- texts = Notification.getLocalizedTexts(notification, "fr-CA");
- equal(texts.message, "fr");
- });
-
- test("Language and country", function()
- {
- let notification = {message: {fr: "fr", "fr-CA": "fr-CA"}};
- let texts = Notification.getLocalizedTexts(notification, "fr-CA");
- equal(texts.message, "fr-CA");
- texts = Notification.getLocalizedTexts(notification, "fr");
- equal(texts.message, "fr");
- });
-
- test("Missing translation", function()
- {
- let notification = {message: {"en-US": "en-US"}};
- let texts = Notification.getLocalizedTexts(notification, "fr");
- equal(texts.message, "en-US");
- });
-})();
« no previous file with comments | « chrome/content/tests/filterStorage_readwrite.js ('k') | chrome/content/tests/synchronizer.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld