Skip to content

Commit

Permalink
Part 3: Add a manual test
Browse files Browse the repository at this point in the history
Differential Revision: https://phabricator.services.mozilla.com/D183585

bugzilla-url: https://bugzilla.mozilla.org/show_bug.cgi?id=1794475
gecko-commit: 0c549a545b3fa3314c8e73083e2cbb0e409d2480
gecko-reviewers: smaug
  • Loading branch information
saschanaz authored and moz-wptsync-bot committed Jul 19, 2023
1 parent 7bb3ac1 commit dede66b
Showing 1 changed file with 51 additions and 0 deletions.
51 changes: 51 additions & 0 deletions notifications/requireInteraction-manual.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>requireInteraction: true</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<p>
<button id="button">Push me to open a requireInteraction=true notification!</button>
<button id="finish">Push me if you are done</button>
</p>
Steps:
<ol>
<li>Make sure you didn't block the notification permission.</li>
<li>Allow the notification permission if the prompt opens.</li>
<li>Click the first button.</li>
<li>See whether the notification disappears from the screen without interaction. It must not.</li>
<li>If you are sure it's not disappearing, then click that second button.</li>
</ol>
Why this is manual? Because
<ol>
<li>
One need to wait for more than arbitrary platform-specific time to see
it really does not disappear automatically.
</li>
<li>There's simply no API to tell it's disappeared from the screen or not</li>
</ol>
<script>
setup({ explicit_timeout: true })

promise_test(async () => {
const permission = await Notification.requestPermission();
if (permission === "denied") {
throw new Error("Permission is denied, can't proceed");
}
await new Promise(r => button.onclick = r);
const n = new Notification("Test notification", { requireInteraction: true });
await new Promise((resolve, reject) => {
n.onshow = resolve;
n.onerror = () => reject(new Error(
"Notification failed, and there's no good error message. Maybe some permission issue?"
));
});
await Promise.race([
new Promise(r => finish.onclick = r),
new Promise((r, reject) => {
n.onclose = n.onclick = () => reject(new Error(
"Uh, you should finish the test before you interact with the notification."
));
}),
]);
});
</script>

0 comments on commit dede66b

Please sign in to comment.