mirror of https://github.com/tc39/test262.git
81 lines
2.1 KiB
JavaScript
81 lines
2.1 KiB
JavaScript
// Copyright (C) 2020 Salesforce.com. All rights reserved.
|
|
// This code is governed by the BSD license found in the LICENSE file.
|
|
|
|
/*---
|
|
esid: sec-try-statement-runtime-semantics-evaluation
|
|
description: >
|
|
Returns the correct completion values of try-catch-finally(Normal) in functions
|
|
info: |
|
|
TryStatement : try Block Catch Finally
|
|
|
|
Let B be the result of evaluating Block.
|
|
If B.[[Type]] is throw, let C be CatchClauseEvaluation of Catch with argument B.[[Value]].
|
|
Else, let C be B.
|
|
Let F be the result of evaluating Finally.
|
|
If F.[[Type]] is normal, set F to C.
|
|
Return Completion(UpdateEmpty(F, undefined)).
|
|
---*/
|
|
|
|
// 1: try Return, catch Return, finally Normal; Completion: try
|
|
var count = {
|
|
catch: 0,
|
|
finally: 0
|
|
};
|
|
|
|
var fn = function() {
|
|
try {
|
|
return 'try';
|
|
} catch(e) {
|
|
count.catch += 1;
|
|
return 'catch';
|
|
} finally {
|
|
count.finally += 1;
|
|
'normal';
|
|
}
|
|
return 'wat';
|
|
};
|
|
|
|
assert.sameValue(fn(), 'try', '1: try Return, catch Return, finally Normal; Completion: try');
|
|
assert.sameValue(count.catch, 0, '1');
|
|
assert.sameValue(count.finally, 1, '1');
|
|
|
|
// 2: try Abrupt, catch Return, finally Normal; Completion: catch
|
|
count.catch = 0;
|
|
count.finally = 0;
|
|
fn = function() {
|
|
try {
|
|
throw 'try';
|
|
} catch(e) {
|
|
count.catch += 1;
|
|
return 'catch';
|
|
} finally {
|
|
count.finally += 1;
|
|
'finally';
|
|
}
|
|
return 'wat';
|
|
};
|
|
|
|
assert.sameValue(fn(), 'catch', '2: try Abrupt, catch Return, finally Normal; Completion: catch');
|
|
assert.sameValue(count.catch, 1, '2: catch count');
|
|
assert.sameValue(count.finally, 1, '2: fiinally count');
|
|
|
|
// 3: try Abrupt, catch Abrupt, finally Normal; Completion: catch
|
|
count.catch = 0;
|
|
count.finally = 0;
|
|
fn = function() {
|
|
try {
|
|
throw 'try';
|
|
} catch(e) {
|
|
count.catch += 1;
|
|
throw new Test262Error('catch');
|
|
} finally {
|
|
count.finally += 1;
|
|
'finally';
|
|
}
|
|
return 'wat';
|
|
};
|
|
|
|
assert.throws(Test262Error, fn, '3: try Abrupt, catch Abrupt, finally Normal; Completion: catch');
|
|
assert.sameValue(count.catch, 1, '3: catch count');
|
|
assert.sameValue(count.finally, 1, '3: fiinally count');
|