-
-
Notifications
You must be signed in to change notification settings - Fork 563
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Support optional catch binding (#900)
- Loading branch information
Showing
132 changed files
with
575 additions
and
164 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
using Xunit; | ||
|
||
namespace Jint.Tests.Test262.Language.Statements | ||
{ | ||
public class TryTests : Test262Test | ||
{ | ||
[Theory(DisplayName = "language\\statements\\try")] | ||
[MemberData(nameof(SourceFiles), "language\\statements\\try", false)] | ||
[MemberData(nameof(SourceFiles), "language\\statements\\try", true, Skip = "Skipped")] | ||
protected void For(SourceFile sourceFile) | ||
{ | ||
RunTestInternal(sourceFile); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
79 changes: 79 additions & 0 deletions
79
Jint.Tests.Test262/test/language/statements/try/completion-values-fn-finally-abrupt.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,79 @@ | ||
// 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(Abrupt) 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)). | ||
---*/ | ||
|
||
var fn, count = {}; | ||
|
||
// 1: try Abrupt, catch Abrupt, finally Abrupt; Completion: finally | ||
count.catch = 0; | ||
count.finally = 0; | ||
fn = function() { | ||
try { | ||
throw 'try'; | ||
} catch(e) { | ||
count.catch += 1; | ||
throw 'catch'; | ||
} finally { | ||
count.finally += 1; | ||
throw new Test262Error('finally'); // If F.[[Type]] is normal, set F to C. | ||
} | ||
return 'wat'; | ||
}; | ||
|
||
assert.throws(Test262Error, fn, '1: try Abrupt, catch Abrupt, finally Abrupt; Completion: finally'); | ||
assert.sameValue(count.catch, 1, '1: catch count'); | ||
assert.sameValue(count.finally, 1, '1: finally count'); | ||
|
||
// 2: try Abrupt, catch Return, finally Abrupt; Completion: finally | ||
count.catch = 0; | ||
count.finally = 0; | ||
fn = function() { | ||
try { | ||
throw 'try'; | ||
} catch(e) { | ||
count.catch += 1; | ||
return 'catch'; | ||
} finally { | ||
count.finally += 1; | ||
throw new Test262Error('finally'); // If F.[[Type]] is normal, set F to C. | ||
} | ||
return 'wat'; | ||
}; | ||
|
||
assert.throws(Test262Error, fn, '2: try Abrupt, catch Return, finally Abrupt; Completion: finally'); | ||
assert.sameValue(count.catch, 1, '2: catch count'); | ||
assert.sameValue(count.finally, 1, '2: fiinally count'); | ||
|
||
// 3: try Return, catch Return, finally Abrupt; Completion: finally | ||
count.catch = 0; | ||
count.finally = 0; | ||
fn = function() { | ||
try { | ||
return 'try'; | ||
} catch(e) { | ||
count.catch += 1; | ||
return 'catch'; | ||
} finally { | ||
count.finally += 1; | ||
throw new Test262Error('finally'); // If F.[[Type]] is normal, set F to C. | ||
} | ||
return 'wat'; | ||
}; | ||
|
||
assert.throws(Test262Error, fn, '3: try Normal, catch Normal, finally Abrupt; Completion: finally'); | ||
assert.sameValue(count.catch, 0, '3: catch count'); | ||
assert.sameValue(count.finally, 1, '3: fiinally count'); |
80 changes: 80 additions & 0 deletions
80
Jint.Tests.Test262/test/language/statements/try/completion-values-fn-finally-normal.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,80 @@ | ||
// 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'); |
Oops, something went wrong.