From 9338f2290865a6edaab164800ec7835a46ce5280 Mon Sep 17 00:00:00 2001 From: Leo Balter Date: Mon, 18 May 2020 10:19:28 -0700 Subject: [PATCH] Add tests for direct eval calls in strict context Fixes #2623 --- .../direct/strict-caller-function-context.js | 17 ++++++++++++++ .../eval-code/direct/strict-caller-global.js | 23 +++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 test/language/eval-code/direct/strict-caller-function-context.js create mode 100644 test/language/eval-code/direct/strict-caller-global.js diff --git a/test/language/eval-code/direct/strict-caller-function-context.js b/test/language/eval-code/direct/strict-caller-function-context.js new file mode 100644 index 0000000000..87a5dd36a6 --- /dev/null +++ b/test/language/eval-code/direct/strict-caller-function-context.js @@ -0,0 +1,17 @@ +// Copyright (C) 2020 Leo Balter. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +esid: sec-performeval +description: Script will be script if strictCaller is true, inside a function context +info: | + ... + 10. If strictCaller is true, let strictEval be true. + ... + 12. Let runningContext be the running execution context. + ... +---*/ + +assert.throws(SyntaxError, function() { + 'use strict'; + eval('var public = 1;'); +}); diff --git a/test/language/eval-code/direct/strict-caller-global.js b/test/language/eval-code/direct/strict-caller-global.js new file mode 100644 index 0000000000..7ef2c1c3db --- /dev/null +++ b/test/language/eval-code/direct/strict-caller-global.js @@ -0,0 +1,23 @@ +// Copyright (C) 2020 Leo Balter. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +esid: sec-performeval +description: Script will be script if strictCaller is true +info: | + ... + 10. If strictCaller is true, let strictEval be true. + ... + 12. Let runningContext be the running execution context. + ... +negative: + phase: runtime + type: SyntaxError +flags: [onlyStrict] +---*/ + +// Although the `try` statement is a more precise mechanism for detecting +// runtime errors, the behavior under test is only observable for a direct eval +// call when the call is made from the global scope. This forces the use of +// the more coarse-grained `negative` frontmatter to assert the expected error. + +eval('var public = 1;');