2 <script src="../../resources/js-test.js"></script>
3 <div id="description"></div>
4 <div id="console"></div>
6 // http://heycam.github.io/webidl/#es-operations
7 description('Operations that return a Promise type should handle exceptions ' +
8 'by returning a rejected Promise with the exception.')
10 window.jsTestIsAsync = true;
14 function shouldBeRejected(promise, message) {
15 return promise.then(function() {
16 testFailed('Resolved unexpectedly: ' + message);
19 testPassed('Rejected as expected: ' + message);
20 shouldBeTrue('reason instanceof Error');
25 function shouldBeResolved(promise, message) {
26 return promise.then(function() {
27 testPassed('Resolved as expected: ' + message);
29 testFailed('Rejected unexpectedly: ' + message);
31 shouldBeTrue('reason instanceof Error');
36 var check = internals.promiseCheck.bind(internals);
37 var check2 = internals.promiseCheckWithoutExceptionState.bind(internals);
38 var check3 = internals.promiseCheckRange.bind(internals);
40 Promise.resolve().then(function() {
41 return shouldBeRejected(check(), 'no arguments');
43 return shouldBeResolved(check(3, true, {}, '', ['']), 'valid arguments');
45 return shouldBeResolved(check(null, true, {}, '', []), 'convert(long)');
47 return shouldBeResolved(check(3, {}, {}, '', []), 'convert(boolean)');
49 return shouldBeRejected(check(3, true, 3, '', []), 'type error(Dictionary)');
51 return shouldBeResolved(check(3, true, {}, {}, []), 'convert(String)');
54 toString: function() {
55 throw Error('Thrown from toString');
58 return shouldBeRejected(check(3, true, {}, x, []), 'conversion error(toString)');
61 toString: function() {
62 throw Error('Thrown from toString');
65 return shouldBeRejected(check(3, true, {}, '', [x]), 'conversion error([String])');
67 return shouldBeRejected(check(3, false, {}, '', []), 'rejected by the impl');
69 return shouldBeRejected(check2(), 'no arguments');
71 return shouldBeResolved(check2({}, '', '', ''), 'valid arguments');
73 return shouldBeResolved(check2({}, ''), 'valid arguments');
75 return shouldBeRejected(check2(3, ''), 'type error(Dictionary)');
77 return shouldBeResolved(check2({}, '', {}, 3), 'convert(String...)');
80 toString: function() {
81 throw Error('Thrown from toString');
84 return shouldBeRejected(check2({}, '', '', x), 'conversion error(String...)');
86 return shouldBeRejected(check3(-1), 'range error(octet)');
87 }).then(undefined, function(e) {
88 testFailed('An exception is thrown from a method');
90 }).then(finishJSTest, finishJSTest);