From df1e5e7d44030deefde2e7feab17b69d9e541a60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Bargull?= <andre.bargull@gmail.com> Date: Fri, 8 Dec 2017 13:23:24 -0800 Subject: [PATCH] Add more completion value tests for try-statements --- .../statements/try/cptn-catch-empty-break.js | 18 ++++++++++++++++++ .../try/cptn-catch-empty-continue.js | 18 ++++++++++++++++++ .../try/cptn-catch-finally-empty-break.js | 18 ++++++++++++++++++ .../try/cptn-catch-finally-empty-continue.js | 18 ++++++++++++++++++ .../statements/try/cptn-finally-empty-break.js | 18 ++++++++++++++++++ .../try/cptn-finally-empty-continue.js | 18 ++++++++++++++++++ 6 files changed, 108 insertions(+) create mode 100644 test/language/statements/try/cptn-catch-empty-break.js create mode 100644 test/language/statements/try/cptn-catch-empty-continue.js create mode 100644 test/language/statements/try/cptn-catch-finally-empty-break.js create mode 100644 test/language/statements/try/cptn-catch-finally-empty-continue.js create mode 100644 test/language/statements/try/cptn-finally-empty-break.js create mode 100644 test/language/statements/try/cptn-finally-empty-continue.js diff --git a/test/language/statements/try/cptn-catch-empty-break.js b/test/language/statements/try/cptn-catch-empty-break.js new file mode 100644 index 0000000000..d862d39713 --- /dev/null +++ b/test/language/statements/try/cptn-catch-empty-break.js @@ -0,0 +1,18 @@ +// Copyright (C) 2017 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-try-statement-runtime-semantics-evaluation +description: Abrupt completion from catch block calls UpdatEmpty() +info: | + 13.15.8 Runtime Semantics: Evaluation + TryStatement : try Block Catch + ... + 2. If B.[[Type]] is throw, let C be CatchClauseEvaluation of Catch with parameter B.[[Value]]. + ... + 4. Return Completion(UpdateEmpty(C, undefined)). +---*/ + +// Ensure the completion value from the first iteration ('bad completion') is not returned. +var completion = eval("for (var i = 0; i < 2; ++i) { if (i) { try { throw null; } catch (e) { break; } } 'bad completion'; }"); +assert.sameValue(completion, undefined); diff --git a/test/language/statements/try/cptn-catch-empty-continue.js b/test/language/statements/try/cptn-catch-empty-continue.js new file mode 100644 index 0000000000..d358695257 --- /dev/null +++ b/test/language/statements/try/cptn-catch-empty-continue.js @@ -0,0 +1,18 @@ +// Copyright (C) 2017 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-try-statement-runtime-semantics-evaluation +description: Abrupt completion from catch block calls UpdatEmpty() +info: | + 13.15.8 Runtime Semantics: Evaluation + TryStatement : try Block Catch + ... + 2. If B.[[Type]] is throw, let C be CatchClauseEvaluation of Catch with parameter B.[[Value]]. + ... + 4. Return Completion(UpdateEmpty(C, undefined)). +---*/ + +// Ensure the completion value from the first iteration ('bad completion') is not returned. +var completion = eval("for (var i = 0; i < 2; ++i) { if (i) { try { throw null; } catch (e) { continue; } } 'bad completion'; }"); +assert.sameValue(completion, undefined); diff --git a/test/language/statements/try/cptn-catch-finally-empty-break.js b/test/language/statements/try/cptn-catch-finally-empty-break.js new file mode 100644 index 0000000000..b34ba2e934 --- /dev/null +++ b/test/language/statements/try/cptn-catch-finally-empty-break.js @@ -0,0 +1,18 @@ +// Copyright (C) 2017 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-try-statement-runtime-semantics-evaluation +description: Abrupt completion from finally block calls UpdatEmpty() +info: | + 13.15.8 Runtime Semantics: Evaluation + TryStatement : try Block Catch Finally + ... + 4. Let F be the result of evaluating Finally. + ... + 6. Return Completion(UpdateEmpty(F, undefined)). +---*/ + +// Ensure the completion value from the first iteration ('bad completion') is not returned. +var completion = eval("for (var i = 0; i < 2; ++i) { if (i) { try { throw null; } catch (e) {} finally { break; } } 'bad completion'; }"); +assert.sameValue(completion, undefined); diff --git a/test/language/statements/try/cptn-catch-finally-empty-continue.js b/test/language/statements/try/cptn-catch-finally-empty-continue.js new file mode 100644 index 0000000000..da6641b982 --- /dev/null +++ b/test/language/statements/try/cptn-catch-finally-empty-continue.js @@ -0,0 +1,18 @@ +// Copyright (C) 2017 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-try-statement-runtime-semantics-evaluation +description: Abrupt completion from finally block calls UpdatEmpty() +info: | + 13.15.8 Runtime Semantics: Evaluation + TryStatement : try Block Catch Finally + ... + 4. Let F be the result of evaluating Finally. + ... + 6. Return Completion(UpdateEmpty(F, undefined)). +---*/ + +// Ensure the completion value from the first iteration ('bad completion') is not returned. +var completion = eval("for (var i = 0; i < 2; ++i) { if (i) { try { throw null; } catch (e) {} finally { continue; } } 'bad completion'; }"); +assert.sameValue(completion, undefined); diff --git a/test/language/statements/try/cptn-finally-empty-break.js b/test/language/statements/try/cptn-finally-empty-break.js new file mode 100644 index 0000000000..c32de4ef03 --- /dev/null +++ b/test/language/statements/try/cptn-finally-empty-break.js @@ -0,0 +1,18 @@ +// Copyright (C) 2017 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-try-statement-runtime-semantics-evaluation +description: Abrupt completion from finally block calls UpdatEmpty() +info: | + 13.15.8 Runtime Semantics: Evaluation + TryStatement : try Block Finally + ... + 2. Let F be the result of evaluating Finally. + ... + 4. Return Completion(UpdateEmpty(F, undefined)). +---*/ + +// Ensure the completion value from the first iteration ('bad completion') is not returned. +var completion = eval("for (var i = 0; i < 2; ++i) { if (i) { try {} finally { break; } } 'bad completion'; }"); +assert.sameValue(completion, undefined); diff --git a/test/language/statements/try/cptn-finally-empty-continue.js b/test/language/statements/try/cptn-finally-empty-continue.js new file mode 100644 index 0000000000..c11f33833d --- /dev/null +++ b/test/language/statements/try/cptn-finally-empty-continue.js @@ -0,0 +1,18 @@ +// Copyright (C) 2017 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-try-statement-runtime-semantics-evaluation +description: Abrupt completion from finally block calls UpdatEmpty() +info: | + 13.15.8 Runtime Semantics: Evaluation + TryStatement : try Block Finally + ... + 2. Let F be the result of evaluating Finally. + ... + 4. Return Completion(UpdateEmpty(F, undefined)). +---*/ + +// Ensure the completion value from the first iteration ('bad completion') is not returned. +var completion = eval("for (var i = 0; i < 2; ++i) { if (i) { try {} finally { continue; } } 'bad completion'; }"); +assert.sameValue(completion, undefined); -- GitLab