Chromium Code Reviews| Index: LayoutTests/fast/js/Promise-bindings-check-exception.html |
| diff --git a/LayoutTests/fast/js/Promise-bindings-check-exception.html b/LayoutTests/fast/js/Promise-bindings-check-exception.html |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..d363ce581a1783510a44cde5017d1a972396a9b9 |
| --- /dev/null |
| +++ b/LayoutTests/fast/js/Promise-bindings-check-exception.html |
| @@ -0,0 +1,89 @@ |
| +<!DOCTYPE html> |
| +<html> |
|
Nils Barth (inactive)
2014/04/10 10:02:47
nit: <html>, <head>, and <body> can all be omitted
yhirano
2014/04/11 10:19:04
Done.
|
| +<head> |
| +<script src="../../resources/js-test.js"></script> |
| +</head> |
| +<body> |
| +<div id="description"></div> |
| +<div id="console"></div> |
| +<script> |
| +description('Test whether the generated code handles exceptions correctly.'); |
|
Nils Barth (inactive)
2014/04/10 10:02:47
generated *bindings* ?
Also, perhaps linking to th
yhirano
2014/04/11 10:19:04
Done.
|
| + |
| +window.jsTestIsAsync = true; |
| + |
| +var reason; |
| + |
| +function shouldBeRejected(promise, message) { |
| + return promise.then(function() { |
|
eroman
2014/04/10 09:28:15
nit; should the javascript indentation be 4 spaces
yhirano
2014/04/11 10:19:04
Done.
|
| + testFailed('Resolved unexpectedly: ' + message); |
| + }, function(e) { |
| + reason = e; |
| + testPassed('Rejected as expected: ' + message); |
| + shouldBeTrue('reason instanceof Error'); |
| + debug(e); |
| + }); |
| +} |
| + |
| +function shouldBeResolved(promise, message) { |
| + return promise.then(function() { |
| + testPassed('Resolved as expected: ' + message); |
| + }, function(e) { |
| + testFailed('Rejected unexpectedly: ' + message); |
| + reason = e; |
| + shouldBeTrue('reason instanceof Error'); |
| + debug(e); |
| + }); |
| +} |
| + |
| +var check = internals.promiseCheck.bind(internals); |
| +var check2 = internals.promiseCheckWithoutExceptionState.bind(internals); |
| +var check3 = internals.promiseCheckRange.bind(internals); |
| + |
| +Promise.resolve().then(function() { |
| + return shouldBeRejected(check(), 'no arguments'); |
| +}).then(function() { |
| + return shouldBeResolved(check(3, true, {}, ''), 'valid arguments'); |
| +}).then(function() { |
| + return shouldBeResolved(check(null, true, {}, ''), 'convert(long)'); |
| +}).then(function() { |
| + return shouldBeResolved(check(3, {}, {}, ''), 'convert(boolean)'); |
| +}).then(function() { |
| + return shouldBeRejected(check(3, true, 3, ''), 'type error(Dictionary)'); |
| +}).then(function() { |
| + return shouldBeResolved(check(3, true, {}, {}), 'convert(String)'); |
| +}).then(function() { |
| + var x = { |
| + toString: function() { |
| + throw Error('Thrown from toString'); |
| + } |
| + }; |
| + return shouldBeRejected(check(3, true, {}, x), 'conversion error(toString)'); |
| +}).then(function() { |
| + return shouldBeRejected(check(3, false, {}, ''), 'rejected by the impl'); |
| +}).then(function() { |
| + return shouldBeRejected(check2(), 'no arguments'); |
| +}).then(function() { |
| + return shouldBeResolved(check2({}, '', '', ''), 'valid arguments'); |
| +}).then(function() { |
| + return shouldBeResolved(check2({}, ''), 'valid arguments'); |
| +}).then(function() { |
| + return shouldBeRejected(check2(3, ''), 'type error(Dictionary)'); |
| +}).then(function() { |
| + return shouldBeResolved(check2({}, '', {}, 3), 'convert(String...)'); |
| +}).then(function() { |
| + var x = { |
| + toString: function() { |
| + throw Error('Thrown from toString'); |
| + } |
| + }; |
| + return shouldBeRejected(check2({}, '', '', x), 'conversion error(String...)'); |
| +}).then(function() { |
| + return shouldBeRejected(check3(-1), 'range error(octet)'); |
| +}).then(undefined, function(e) { |
| + testFailed('An exception is thrown from a method'); |
| + debug(e); |
| +}).then(finishJSTest, finishJSTest); |
| + |
|
Nils Barth (inactive)
2014/04/10 10:02:47
? Trailing newline ?
yhirano
2014/04/11 10:19:04
Done.
|
| +</script> |
| +</body> |
| +</html> |