Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add promise rejection tracking tests #2388

Merged
merged 6 commits into from
Feb 15, 2017
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<!DOCTYPE html>
<meta charset="utf-8">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/cors/support.js?pipe=sub"></script>
<link rel="help" href="https://html.spec.whatwg.org/#unhandled-promise-rejections">
<link rel="help" href="https://html.spec.whatwg.org/#muted-errors">

<body>
<script>
'use strict';
async_test(function(t) {
addEventListener('unhandledrejection', t.step_func(function(e) {
assert_equals(e.reason, 42, 'reason should be the one given by the script');
t.done();
}));
}, 'Promise rejection event should be received for the cross-origin CORS script');

(function() {
var scriptEl = document.createElement('script');
scriptEl.src = CROSSDOMAIN + 'support/promise-access-control.py?allow=true';
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

add scriptEl.crossOrigin = 'anonymous'; - otherwise CORS won't be used.

document.body.appendChild(scriptEl);
}());
</script>
</body>
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
<!DOCTYPE html>
<meta charset="utf-8">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/cors/support.js?pipe=sub"></script>
<link rel="help" href="https://html.spec.whatwg.org/#unhandled-promise-rejections">
<link rel="help" href="https://html.spec.whatwg.org/#muted-errors">

<body>
<script>
'use strict';

(function() {
var resolveLoaded;
var loadedPromise = new Promise(function(resolve) { resolveLoaded = resolve; });

async_test(function(t) {
addEventListener('unhandledrejection', t.unreached_func('unhandledrejection event should never be triggered'));
addEventListener('rejectionhandled', t.unreached_func('rejectionhandled event should never be triggered'));

loadedPromise.then(t.step_func(function() {
t.step_timeout(function() {
t.done();
}, 1000);
}));
}, 'Promise rejection event should be muted for cross-origin non-CORS script');

var scriptEl = document.createElement('script');
scriptEl.src = CROSSDOMAIN + 'support/promise-access-control.py?allow=false';
scriptEl.onload = resolveLoaded;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same here.

document.body.appendChild(scriptEl);
}());
</script>
</body>
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
<!DOCTYPE html>
<meta charset="utf-8">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<link rel="help" href="https://html.spec.whatwg.org/#the-promiserejectionevent-interface">
<script>
'use strict';

test(function() {
var p = new Promise(function(resolve, reject) {});

// No custom options are passed (besides required promise).
assert_equals(new PromiseRejectionEvent('eventType', { promise: p }).bubbles, false);
assert_equals(new PromiseRejectionEvent('eventType', { promise: p }).cancelable, false);
assert_equals(new PromiseRejectionEvent('eventType', { promise: p }).promise, p);
assert_equals(new PromiseRejectionEvent('eventType', { promise: p }).reason, undefined);

// No promise is passed.
assert_throws(new TypeError(),
function() {
new PromiseRejectionEvent('eventType', { bubbles: false });
},
'Cannot construct PromiseRejectionEventInit without promise');

// bubbles is passed.
assert_equals(new PromiseRejectionEvent('eventType', { bubbles: false, promise: p }).bubbles, false);
assert_equals(new PromiseRejectionEvent('eventType', { bubbles: true, promise: p }).bubbles, true);

// cancelable is passed.
assert_equals(new PromiseRejectionEvent('eventType', { cancelable: false, promise: p }).cancelable, false);
assert_equals(new PromiseRejectionEvent('eventType', { cancelable: true, promise: p }).cancelable, true);

// reason is passed.
var r = new Error();
assert_equals(new PromiseRejectionEvent('eventType', { promise: p, reason: r }).reason, r);


// All initializers are passed.
assert_equals(new PromiseRejectionEvent('eventType', { bubbles: true, cancelable: true, promise: p, reason: r }).bubbles, true);
assert_equals(new PromiseRejectionEvent('eventType', { bubbles: true, cancelable: true, promise: p, reason: r }).cancelable, true);
assert_equals(new PromiseRejectionEvent('eventType', { bubbles: true, cancelable: true, promise: p, reason: r }).promise, p);
assert_equals(new PromiseRejectionEvent('eventType', { bubbles: true, cancelable: true, promise: p, reason: r }).reason, r);
}, "This tests the constructor for the PromiseRejectionEvent DOM class.");
</script>
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<!DOCTYPE html>
<meta charset="utf-8">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<link rel="help" href="https://html.spec.whatwg.org/#unhandled-promise-rejections">
<script>
'use strict';
setup({
allow_uncaught_exception: true
});
async_test(function(t) {
var e = new Error('e');
var p = Promise.reject(e);

window.onunhandledrejection = function(evt) {
t.step(function() {
assert_equals(evt.promise, p);
assert_equals(evt.reason, e);
});
var unreached = t.unreached_func('promise should not be fulfilled');
p.then(unreached, function(reason) {
t.step(function() {
assert_equals(reason, e);
});
t.step_timeout(function() { t.done(); }, 10);
});
};

window.onrejectionhandled = t.unreached_func('rejectionhandled event should not be invoked');
}, 'Attaching a handler in unhandledrejection should not trigger rejectionhandled.');
</script>
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
<!DOCTYPE html>
<meta charset="utf-8">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<link rel="help" href="https://html.spec.whatwg.org/#runtime-script-errors">
<link rel="help" href="https://html.spec.whatwg.org/#unhandled-promise-rejections">
<script>
'use strict';
setup({
allow_uncaught_exception: true
});
async_test(function(t) {
var e = new Error('e');
var e2 = new Error('e2');

window.onerror = function (msg, url, line, col, error) {
t.step(function() {
assert_equals(msg, 'Uncaught Error: e2');
assert_equals(error, e2);
});
t.done();
};

window.onrejectionhandled = function() {
// This should cause onerror
throw e2;
};

var p = Promise.reject(e);
setTimeout(t.step_func(function() {
// This will cause onrejectionhandled
p.catch(function() {});
}), 1);
}, 'Throwing inside an unhandledrejection handler invokes the error handler.');
</script>
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>Promise rejection events tests: in a Window context</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<link rel="help" href="https://html.spec.whatwg.org/#unhandled-promise-rejections">

<script src="support/promise-rejection-events.js"></script>
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>Promise rejection events tests: in a service worker context</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/service-workers/service-worker/resources/test-helpers.sub.js"></script>
<link rel="help" href="https://html.spec.whatwg.org/#unhandled-promise-rejections">

<script>
'use strict';
service_worker_test('support/promise-rejection-events.js', 'Service worker setup');
</script>
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>Promise rejection events tests: in a shared worker context</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<link rel="help" href="https://html.spec.whatwg.org/#unhandled-promise-rejections">

<script>
'use strict';
fetch_tests_from_worker(new SharedWorker('support/promise-rejection-events.js'));
</script>
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>Promise rejection events tests: in a dedicated worker context</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<link rel="help" href="https://html.spec.whatwg.org/#unhandled-promise-rejections">

<script>
'use strict';
fetch_tests_from_worker(new Worker('support/promise-rejection-events.js'));
</script>
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
def main(request, response):
allow = request.GET.first("allow", "false")

headers = [("Content-Type", "application/javascript")]
if allow != "false":
headers.append(("Access-Control-Allow-Origin", "*"))

body = "new Promise(function(resolve, reject) { reject(42); })"

return headers, body
Loading