8a394584e1daa98229312c2f60a6c00a0bfa40bf
[WebKit-https.git] / LayoutTests / http / wpt / service-workers / fetchEvent.https.html
1 <!DOCTYPE html>
2 <title>Service Worker Fetch Event</title>
3 <script src="/resources/testharness.js"></script>
4 <script src="/resources/testharnessreport.js"></script>
5 <script src="/WebKit/resources/gc.js"></script>
6 <script>
7 // FIXME: Should be run on a service worker.
8 test(() => {
9     var event = new FetchEvent('FetchEvent', { request : new Request('') });
10     event.respondWith(undefined);
11     assert_throws('InvalidStateError', () => event.respondWith(undefined));
12 }, "FetchEvent respondWith should throw if called twice");
13
14 test(() => {
15     var event = new FetchEvent('FetchEvent', { request : new Request('test') });
16     event.request.value = 1;
17     gc();
18     assert_equals(event.request.value, 1);
19 }, "FetchEvent request is SameObject");
20
21 promise_test(async t => {
22     if (!window.internals)
23           return Promise.reject("test require internals");
24     var event = new FetchEvent('FetchEvent', { request : new Request('') });
25     var promise = internals.waitForFetchEventToFinish(event);
26     event.respondWith(undefined);
27     return promise_rejects(t, new TypeError, promise);
28 }, "FetchEvent should be in error if responding with undefined");
29
30 promise_test(async t => {
31     if (!window.internals)
32         return Promise.reject("test require internals");
33     var event = new FetchEvent('FetchEvent', { request : new Request('') });
34     var promise = internals.waitForFetchEventToFinish(event);
35     event.respondWith(new Request(''));
36     return promise_rejects(t, new TypeError, promise);
37 }, "FetchEvent should be in error if not responding with a Response");
38
39 promise_test(async t => {
40     if (!window.internals)
41         return Promise.reject("test require internals");
42     var event = new FetchEvent('FetchEvent', { request : new Request('') });
43     var promise = internals.waitForFetchEventToFinish(event);
44     event.respondWith(new Promise((resolve, reject) => {
45         resolve(new Request(''));
46     }));
47     return promise_rejects(t, new TypeError, promise);
48 }, "FetchEvent should be in error if responding with a Promise that does not resolve to a Response");
49
50 promise_test(async t => {
51     if (!window.internals)
52         return Promise.reject("test require internals");
53     var event = new FetchEvent('FetchEvent', { request : new Request('') });
54     var promise = internals.waitForFetchEventToFinish(event);
55     event.respondWith(new Promise((resolve, reject) => {
56         reject('not good');
57     }));
58     return promise_rejects(t, new TypeError, promise);
59 }, "FetchEvent should be in error if responding with a Promise that rejects");
60
61 promise_test(async t => {
62     if (!window.internals)
63          return Promise.reject("test require internals");
64     var event = new FetchEvent('FetchEvent', { request : new Request('') });
65     var response = new Response;
66     event.respondWith(response);
67     assert_true(response === await internals.waitForFetchEventToFinish(event));
68 }, "FetchEvent should resolve when responding with a Response");
69
70 // Duplicate test from WPT. To be removed once WPT service worker tests are active.
71 test(function() {
72     var req = new Request('http://localhost:8800/',
73                           {method: 'POST',
74                            headers: [['Content-Type', 'Text/Html']]});
75     assert_equals(
76       new ExtendableEvent('ExtendableEvent').type,
77       'ExtendableEvent', 'Type of ExtendableEvent should be ExtendableEvent');
78     assert_throws(new TypeError, function() {
79         new FetchEvent('FetchEvent');
80     }, 'FetchEvent constructor with one argument throws');
81     assert_throws(new TypeError, function() {
82         new FetchEvent('FetchEvent', {});
83     }, 'FetchEvent constructor with empty init dict throws');
84     assert_throws(new TypeError, function() {
85         new FetchEvent('FetchEvent', {request: null});
86     }, 'FetchEvent constructor with null request member throws');
87     assert_equals(
88       new FetchEvent('FetchEvent', {request: req}).type,
89       'FetchEvent', 'Type of FetchEvent should be FetchEvent');
90     assert_equals(
91       new FetchEvent('FetchEvent', {request: req}).cancelable,
92       false, 'Default FetchEvent.cancelable should be false');
93     assert_equals(
94       new FetchEvent('FetchEvent', {request: req}).bubbles,
95       false, 'Default FetchEvent.bubbles should be false');
96     assert_equals(
97       new FetchEvent('FetchEvent', {request: req, cancelable: false}).cancelable,
98       false, 'FetchEvent.cancelable should be false');
99     assert_equals(
100       new FetchEvent('FetchEvent', {request: req, clientId : 'test-client-id'}).clientId, 'test-client-id',
101       'FetchEvent.clientId with option {clientId : "test-client-id"} should be "test-client-id"');
102     assert_equals(
103       new FetchEvent('FetchEvent', {request : req, isReload : true}).request.url,
104       'http://localhost:8800/',
105       'FetchEvent.request.url should return the value it was initialized to');
106   }, 'Event constructors');
107 </script>