From 43a97878ce14b72f0981164f87f2e35e14151312 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 11:22:09 +0200 Subject: Adding upstream version 110.0.1. Signed-off-by: Daniel Baumann --- .../test/mochitest/NotificationTest.js | 152 +++++++++++++++++++++ 1 file changed, 152 insertions(+) create mode 100644 dom/notification/test/mochitest/NotificationTest.js (limited to 'dom/notification/test/mochitest/NotificationTest.js') 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, + }, + }; +})(); -- cgit v1.2.3