Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(173)

Unified Diff: third_party/WebKit/LayoutTests/http/tests/notifications/resources/notification-data-reflection-test.js

Issue 1656823002: Add layout tests for ServiceWorker's notificationclose event. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Refactored data reflection tests + nits Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/LayoutTests/http/tests/notifications/resources/notification-data-reflection-test.js
diff --git a/third_party/WebKit/LayoutTests/http/tests/notifications/resources/notification-data-reflection-test.js b/third_party/WebKit/LayoutTests/http/tests/notifications/resources/notification-data-reflection-test.js
new file mode 100644
index 0000000000000000000000000000000000000000..160483a3e8900ff50a1e25156bd930ba71fbdb58
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/http/tests/notifications/resources/notification-data-reflection-test.js
@@ -0,0 +1,70 @@
+// Tests that the notification available after the given operation is executed
+// accurately reflects the data attributes of several types with which the
+// notification was created in the document.
+function runNotificationDataReflectionTest(test, notificationOperation) {
+ var scope = 'resources/scope/' + location.pathname,
+ script = 'resources/instrumentation-service-worker.js';
+
+ // Set notification's data of several types to a structured clone of options's data.
+ var notificationDataList = new Array(
+ true, // Check Boolean type
+ 1024, // Check Number type
+ Number.NaN, // Check Number.NaN type
+ 'any data', // Check String type
+ null, // Check null
+ new Array('Saab', 'Volvo', 'BMW'), // Check Array type
+ { first: 'first', second: 'second' } // Check object
+ );
+
+ PermissionsHelper.setPermission('notifications', 'granted').then(function() {
+ getActiveServiceWorkerWithMessagePort(test, script, scope).then(function(workerInfo) {
+ // (1) Tell the Service Worker to display a Web Notification.
+ var assertNotificationDataReflects = function(pos) {
+ workerInfo.port.postMessage({
+ command: 'show',
+
+ title: scope,
+ options: {
+ title: scope,
+ tag: pos,
+ data: notificationDataList[pos]
+ }
+ });
+ };
+
+ workerInfo.port.addEventListener('message', function(event) {
+ if (typeof event.data != 'object' || !event.data.command) {
+ assert_unreached('Invalid message from the Service Worker.');
+ return;
+ }
+
+ // (2) Listen for confirmation from the Service Worker that the
+ // notification's display promise has been resolved.
+ if (event.data.command == 'show') {
+ assert_true(event.data.success, 'The notification must have been displayed.');
+ notificationOperation.run(scope);
+ return;
+ }
+
+ // (3) Listen for confirmation from the Service Worker that the
+ // notification has been closed. Make sure that all properties
+ // set on the Notification object are as expected.
+ assert_equals(event.data.command, notificationOperation.name, 'Notification was expected to receive different operation');
+
+ var pos = event.data.notification.tag;
+
+ if (typeof notificationDataList[pos] === 'object' && notificationDataList[pos] !== null)
+ assert_object_equals(event.data.notification.data, notificationDataList[pos], 'The data field must be the same.');
+ else
+ assert_equals(event.data.notification.data, notificationDataList[pos], 'The data field must be the same.');
+
+ if (++pos < notificationDataList.length)
+ assertNotificationDataReflects(pos);
+ else
+ test.done();
+ });
+
+ assertNotificationDataReflects(0);
+ }).catch(unreached_rejection(test));
+ });
+}

Powered by Google App Engine
This is Rietveld 408576698