1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
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);
}
// 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,
payload: {
body: "Body",
tag: "fakeTag",
icon: "icon.jpg",
lang: "en-US",
dir: "ltr",
},
};
})();
|