summaryrefslogtreecommitdiffstats
path: root/dom/notification/test/mochitest/NotificationTest.js
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 09:22:09 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 09:22:09 +0000
commit43a97878ce14b72f0981164f87f2e35e14151312 (patch)
tree620249daf56c0258faa40cbdcf9cfba06de2a846 /dom/notification/test/mochitest/NotificationTest.js
parentInitial commit. (diff)
downloadfirefox-upstream.tar.xz
firefox-upstream.zip
Adding upstream version 110.0.1.upstream/110.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'dom/notification/test/mochitest/NotificationTest.js')
-rw-r--r--dom/notification/test/mochitest/NotificationTest.js152
1 files changed, 152 insertions, 0 deletions
diff --git a/dom/notification/test/mochitest/NotificationTest.js b/dom/notification/test/mochitest/NotificationTest.js
new file mode 100644
index 0000000000..8034ee6be2
--- /dev/null
+++ b/dom/notification/test/mochitest/NotificationTest.js
@@ -0,0 +1,152 @@
+var NotificationTest = (function() {
+ "use strict";
+
+ function info(msg, name) {
+ SimpleTest.info("::Notification Tests::" + (name || ""), msg);
+ }
+
+ function setup_testing_env() {
+ SimpleTest.waitForExplicitFinish();
+ // turn on testing pref (used by notification.cpp, and mock the alerts
+ return SpecialPowers.setBoolPref("notification.prompt.testing", true);
+ }
+
+ async function teardown_testing_env() {
+ await SpecialPowers.clearUserPref("notification.prompt.testing");
+ await SpecialPowers.clearUserPref("notification.prompt.testing.allow");
+
+ SimpleTest.finish();
+ }
+
+ function executeTests(tests, callback) {
+ // context is `this` object in test functions
+ // it can be used to track data between tests
+ var context = {};
+
+ (function executeRemainingTests(remainingTests) {
+ if (!remainingTests.length) {
+ callback();
+ return;
+ }
+
+ var nextTest = remainingTests.shift();
+ var finishTest = executeRemainingTests.bind(null, remainingTests);
+ var startTest = nextTest.call.bind(nextTest, context, finishTest);
+
+ try {
+ startTest();
+ // if no callback was defined for test function,
+ // we must manually invoke finish to continue
+ if (nextTest.length === 0) {
+ finishTest();
+ }
+ } catch (e) {
+ ok(false, "Test threw exception!");
+ finishTest();
+ }
+ })(tests);
+ }
+
+ var fakeCustomData = (function() {
+ var buffer = new ArrayBuffer(2);
+ new DataView(buffer).setInt16(0, 42, true);
+ var canvas = document.createElement("canvas");
+ canvas.width = canvas.height = 100;
+ var context = canvas.getContext("2d");
+
+ var map = new Map();
+ var set = new Set();
+ map.set("test", 42);
+ set.add(4);
+ set.add(2);
+
+ return {
+ primitives: {
+ a: 123,
+ b: "test",
+ c: true,
+ d: [1, 2, 3],
+ },
+ date: new Date(2013, 2, 1, 1, 10),
+ regexp: new RegExp("[^.]+"),
+ arrayBuffer: buffer,
+ imageData: context.createImageData(100, 100),
+ map,
+ set,
+ };
+ })();
+
+ // NotificationTest API
+ return {
+ run(tests, callback) {
+ let ready = setup_testing_env();
+
+ addLoadEvent(async function() {
+ await ready;
+ executeTests(tests, function() {
+ teardown_testing_env();
+ callback && callback();
+ });
+ });
+ },
+
+ allowNotifications() {
+ return SpecialPowers.setBoolPref(
+ "notification.prompt.testing.allow",
+ true
+ );
+ },
+
+ denyNotifications() {
+ return SpecialPowers.setBoolPref(
+ "notification.prompt.testing.allow",
+ false
+ );
+ },
+
+ clickNotification(notification) {
+ // TODO: how??
+ },
+
+ fireCloseEvent(title) {
+ window.dispatchEvent(
+ new CustomEvent("mock-notification-close-event", {
+ detail: {
+ title,
+ },
+ })
+ );
+ },
+
+ info,
+
+ customDataMatches(dataObj) {
+ var url = "http://www.domain.com";
+ try {
+ return (
+ JSON.stringify(dataObj.primitives) ===
+ JSON.stringify(fakeCustomData.primitives) &&
+ dataObj.date.toDateString() === fakeCustomData.date.toDateString() &&
+ dataObj.regexp.exec(url)[0].substr(7) === "www" &&
+ new Int16Array(dataObj.arrayBuffer)[0] === 42 &&
+ JSON.stringify(dataObj.imageData.data) ===
+ JSON.stringify(fakeCustomData.imageData.data) &&
+ dataObj.map.get("test") == 42 &&
+ dataObj.set.has(4) &&
+ dataObj.set.has(2)
+ );
+ } catch (e) {
+ return false;
+ }
+ },
+
+ payload: {
+ body: "Body",
+ tag: "fakeTag",
+ icon: "icon.jpg",
+ lang: "en-US",
+ dir: "ltr",
+ data: fakeCustomData,
+ },
+ };
+})();