From 86a6c0840425c9a0071819c0b172637ead5bfb27 Mon Sep 17 00:00:00 2001 From: Mike Pennisi Date: Sun, 10 Jun 2018 18:58:23 -0400 Subject: [PATCH 1/7] Rename tests for clarity --- .../{10.1.1-21-s.js => func-decl-final-runtime.js} | 0 .../{10.1.1-15-s.js => func-decl-inside-func-decl-runtime.js} | 0 .../{10.1.1-20-s.js => func-decl-not-first-runtime.js} | 0 .../directive-prologue/{10.1.1-19-s.js => func-decl-runtime.js} | 0 .../{10.1.1-24-s.js => func-expr-final-runtime.js} | 0 .../{10.1.1-16-s.js => func-expr-inside-func-decl-runtime.js} | 0 .../{10.1.1-2-s.js => func-expr-no-semi-runtime.js} | 0 .../{10.1.1-23-s.js => func-expr-not-first-runtime.js} | 0 .../directive-prologue/{10.1.1-22-s.js => func-expr-runtime.js} | 0 .../{10.1.1-17-s.js => get-accsr-inside-func-expr-runtime.js} | 0 .../{10.1.1-27-s.js => get-accsr-not-first-runtime.js} | 0 .../directive-prologue/{10.1.1-25-s.js => get-accsr-runtime.js} | 0 .../{10.1.1-18-s.js => set-accsr-inside-func-expr-runtime.js} | 0 .../{10.1.1-26-s.js => set-accsr-not-first-runtime.js} | 0 14 files changed, 0 insertions(+), 0 deletions(-) rename test/language/directive-prologue/{10.1.1-21-s.js => func-decl-final-runtime.js} (100%) rename test/language/directive-prologue/{10.1.1-15-s.js => func-decl-inside-func-decl-runtime.js} (100%) rename test/language/directive-prologue/{10.1.1-20-s.js => func-decl-not-first-runtime.js} (100%) rename test/language/directive-prologue/{10.1.1-19-s.js => func-decl-runtime.js} (100%) rename test/language/directive-prologue/{10.1.1-24-s.js => func-expr-final-runtime.js} (100%) rename test/language/directive-prologue/{10.1.1-16-s.js => func-expr-inside-func-decl-runtime.js} (100%) rename test/language/directive-prologue/{10.1.1-2-s.js => func-expr-no-semi-runtime.js} (100%) rename test/language/directive-prologue/{10.1.1-23-s.js => func-expr-not-first-runtime.js} (100%) rename test/language/directive-prologue/{10.1.1-22-s.js => func-expr-runtime.js} (100%) rename test/language/directive-prologue/{10.1.1-17-s.js => get-accsr-inside-func-expr-runtime.js} (100%) rename test/language/directive-prologue/{10.1.1-27-s.js => get-accsr-not-first-runtime.js} (100%) rename test/language/directive-prologue/{10.1.1-25-s.js => get-accsr-runtime.js} (100%) rename test/language/directive-prologue/{10.1.1-18-s.js => set-accsr-inside-func-expr-runtime.js} (100%) rename test/language/directive-prologue/{10.1.1-26-s.js => set-accsr-not-first-runtime.js} (100%) diff --git a/test/language/directive-prologue/10.1.1-21-s.js b/test/language/directive-prologue/func-decl-final-runtime.js similarity index 100% rename from test/language/directive-prologue/10.1.1-21-s.js rename to test/language/directive-prologue/func-decl-final-runtime.js diff --git a/test/language/directive-prologue/10.1.1-15-s.js b/test/language/directive-prologue/func-decl-inside-func-decl-runtime.js similarity index 100% rename from test/language/directive-prologue/10.1.1-15-s.js rename to test/language/directive-prologue/func-decl-inside-func-decl-runtime.js diff --git a/test/language/directive-prologue/10.1.1-20-s.js b/test/language/directive-prologue/func-decl-not-first-runtime.js similarity index 100% rename from test/language/directive-prologue/10.1.1-20-s.js rename to test/language/directive-prologue/func-decl-not-first-runtime.js diff --git a/test/language/directive-prologue/10.1.1-19-s.js b/test/language/directive-prologue/func-decl-runtime.js similarity index 100% rename from test/language/directive-prologue/10.1.1-19-s.js rename to test/language/directive-prologue/func-decl-runtime.js diff --git a/test/language/directive-prologue/10.1.1-24-s.js b/test/language/directive-prologue/func-expr-final-runtime.js similarity index 100% rename from test/language/directive-prologue/10.1.1-24-s.js rename to test/language/directive-prologue/func-expr-final-runtime.js diff --git a/test/language/directive-prologue/10.1.1-16-s.js b/test/language/directive-prologue/func-expr-inside-func-decl-runtime.js similarity index 100% rename from test/language/directive-prologue/10.1.1-16-s.js rename to test/language/directive-prologue/func-expr-inside-func-decl-runtime.js diff --git a/test/language/directive-prologue/10.1.1-2-s.js b/test/language/directive-prologue/func-expr-no-semi-runtime.js similarity index 100% rename from test/language/directive-prologue/10.1.1-2-s.js rename to test/language/directive-prologue/func-expr-no-semi-runtime.js diff --git a/test/language/directive-prologue/10.1.1-23-s.js b/test/language/directive-prologue/func-expr-not-first-runtime.js similarity index 100% rename from test/language/directive-prologue/10.1.1-23-s.js rename to test/language/directive-prologue/func-expr-not-first-runtime.js diff --git a/test/language/directive-prologue/10.1.1-22-s.js b/test/language/directive-prologue/func-expr-runtime.js similarity index 100% rename from test/language/directive-prologue/10.1.1-22-s.js rename to test/language/directive-prologue/func-expr-runtime.js diff --git a/test/language/directive-prologue/10.1.1-17-s.js b/test/language/directive-prologue/get-accsr-inside-func-expr-runtime.js similarity index 100% rename from test/language/directive-prologue/10.1.1-17-s.js rename to test/language/directive-prologue/get-accsr-inside-func-expr-runtime.js diff --git a/test/language/directive-prologue/10.1.1-27-s.js b/test/language/directive-prologue/get-accsr-not-first-runtime.js similarity index 100% rename from test/language/directive-prologue/10.1.1-27-s.js rename to test/language/directive-prologue/get-accsr-not-first-runtime.js diff --git a/test/language/directive-prologue/10.1.1-25-s.js b/test/language/directive-prologue/get-accsr-runtime.js similarity index 100% rename from test/language/directive-prologue/10.1.1-25-s.js rename to test/language/directive-prologue/get-accsr-runtime.js diff --git a/test/language/directive-prologue/10.1.1-18-s.js b/test/language/directive-prologue/set-accsr-inside-func-expr-runtime.js similarity index 100% rename from test/language/directive-prologue/10.1.1-18-s.js rename to test/language/directive-prologue/set-accsr-inside-func-expr-runtime.js diff --git a/test/language/directive-prologue/10.1.1-26-s.js b/test/language/directive-prologue/set-accsr-not-first-runtime.js similarity index 100% rename from test/language/directive-prologue/10.1.1-26-s.js rename to test/language/directive-prologue/set-accsr-not-first-runtime.js From 172c494dc2fa347f9f1b6e4086bf40c3e73444c5 Mon Sep 17 00:00:00 2001 From: Mike Pennisi Date: Sun, 10 Jun 2018 19:07:05 -0400 Subject: [PATCH 2/7] Normalize coverage Promote consistency in coverage by adding new tests that correspond to those that were authored previously. --- .../func-decl-no-semi-runtime.js | 19 +++++++++++++++ .../directive-prologue/set-accsr-runtime.js | 24 +++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 test/language/directive-prologue/func-decl-no-semi-runtime.js create mode 100644 test/language/directive-prologue/set-accsr-runtime.js diff --git a/test/language/directive-prologue/func-decl-no-semi-runtime.js b/test/language/directive-prologue/func-decl-no-semi-runtime.js new file mode 100644 index 00000000000..44d7cf8df9b --- /dev/null +++ b/test/language/directive-prologue/func-decl-no-semi-runtime.js @@ -0,0 +1,19 @@ +// Copyright (c) 2012 Ecma International. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +es5id: 10.1.1-2-s +description: > + Strict Mode - Use Strict Directive Prologue is ''use strict'' + which lost the last character ';' +flags: [noStrict] +---*/ + +function fun() { + "use strict" + eval("var public = 1;"); +} + +assert.throws(SyntaxError, function() { + fun(); +}); diff --git a/test/language/directive-prologue/set-accsr-runtime.js b/test/language/directive-prologue/set-accsr-runtime.js new file mode 100644 index 00000000000..631e93c68ed --- /dev/null +++ b/test/language/directive-prologue/set-accsr-runtime.js @@ -0,0 +1,24 @@ +// Copyright (c) 2012 Ecma International. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +es5id: 10.1.1-25-s +description: > + Strict Mode - Function code of Accessor PropertyAssignment + contains Use Strict Directive which appears at the start of the + block(getter) +flags: [noStrict] +---*/ + + +assert.throws(SyntaxError, function() { + var obj = {}; + Object.defineProperty(obj, "accProperty", { + set: function () { + "use strict"; + eval("var public = 1;"); + return 11; + } + }); + obj.accProperty = "overrideData"; +}); From cd2ffd2233275c30878171dd859222cea5790cd4 Mon Sep 17 00:00:00 2001 From: Mike Pennisi Date: Sun, 10 Jun 2018 19:21:12 -0400 Subject: [PATCH 3/7] Simplify tests for runtime semantics Verify runtime semantics through assignment to an unresolvable reference, reducing the complexity of tests that previously relied on the semantics of the `eval` function. --- test/language/directive-prologue/func-decl-final-runtime.js | 4 ++-- .../directive-prologue/func-decl-inside-func-decl-runtime.js | 4 ++-- test/language/directive-prologue/func-decl-no-semi-runtime.js | 4 ++-- .../directive-prologue/func-decl-not-first-runtime.js | 4 ++-- test/language/directive-prologue/func-decl-runtime.js | 4 ++-- test/language/directive-prologue/func-expr-final-runtime.js | 4 ++-- .../directive-prologue/func-expr-inside-func-decl-runtime.js | 4 ++-- test/language/directive-prologue/func-expr-no-semi-runtime.js | 4 ++-- .../directive-prologue/func-expr-not-first-runtime.js | 4 ++-- test/language/directive-prologue/func-expr-runtime.js | 4 ++-- .../directive-prologue/get-accsr-inside-func-expr-runtime.js | 4 ++-- .../directive-prologue/get-accsr-not-first-runtime.js | 4 ++-- test/language/directive-prologue/get-accsr-runtime.js | 4 ++-- .../directive-prologue/set-accsr-inside-func-expr-runtime.js | 4 ++-- .../directive-prologue/set-accsr-not-first-runtime.js | 4 ++-- test/language/directive-prologue/set-accsr-runtime.js | 4 ++-- 16 files changed, 32 insertions(+), 32 deletions(-) diff --git a/test/language/directive-prologue/func-decl-final-runtime.js b/test/language/directive-prologue/func-decl-final-runtime.js index 0aee78cf846..60b0b8b6656 100644 --- a/test/language/directive-prologue/func-decl-final-runtime.js +++ b/test/language/directive-prologue/func-decl-final-runtime.js @@ -9,8 +9,8 @@ description: > flags: [noStrict] ---*/ function fun() { - eval("var public = 1;"); - assert.sameValue(public, 1); + test262unresolvable = null; + assert.sameValue(test262unresolvable, null); "use strict"; } fun(); diff --git a/test/language/directive-prologue/func-decl-inside-func-decl-runtime.js b/test/language/directive-prologue/func-decl-inside-func-decl-runtime.js index 00a10fab71b..470eae0bee1 100644 --- a/test/language/directive-prologue/func-decl-inside-func-decl-runtime.js +++ b/test/language/directive-prologue/func-decl-inside-func-decl-runtime.js @@ -13,10 +13,10 @@ flags: [noStrict] function testcase() { "use strict"; function fun() { - eval("var public = 1;"); + test262unresolvable = null; } - assert.throws(SyntaxError, function() { + assert.throws(ReferenceError, function() { fun(); }); } diff --git a/test/language/directive-prologue/func-decl-no-semi-runtime.js b/test/language/directive-prologue/func-decl-no-semi-runtime.js index 44d7cf8df9b..c1ed808e9a5 100644 --- a/test/language/directive-prologue/func-decl-no-semi-runtime.js +++ b/test/language/directive-prologue/func-decl-no-semi-runtime.js @@ -11,9 +11,9 @@ flags: [noStrict] function fun() { "use strict" - eval("var public = 1;"); + test262unresolvable = null; } -assert.throws(SyntaxError, function() { +assert.throws(ReferenceError, function() { fun(); }); diff --git a/test/language/directive-prologue/func-decl-not-first-runtime.js b/test/language/directive-prologue/func-decl-not-first-runtime.js index be917dff80c..27826a85af3 100644 --- a/test/language/directive-prologue/func-decl-not-first-runtime.js +++ b/test/language/directive-prologue/func-decl-not-first-runtime.js @@ -10,8 +10,8 @@ flags: [noStrict] ---*/ function fun() { - eval("var public = 1;"); + test262unresolvable = null; "use strict"; - assert.sameValue(public, 1); + assert.sameValue(test262unresolvable, null); } fun(); diff --git a/test/language/directive-prologue/func-decl-runtime.js b/test/language/directive-prologue/func-decl-runtime.js index 44aefe2fa03..b9dbd353ebf 100644 --- a/test/language/directive-prologue/func-decl-runtime.js +++ b/test/language/directive-prologue/func-decl-runtime.js @@ -12,9 +12,9 @@ flags: [noStrict] function fun() { "use strict"; - eval("var public = 1;"); + test262unresolvable = null; } -assert.throws(SyntaxError, function() { +assert.throws(ReferenceError, function() { fun(); }); diff --git a/test/language/directive-prologue/func-expr-final-runtime.js b/test/language/directive-prologue/func-expr-final-runtime.js index d74d1944cc5..1a437bce312 100644 --- a/test/language/directive-prologue/func-expr-final-runtime.js +++ b/test/language/directive-prologue/func-expr-final-runtime.js @@ -10,8 +10,8 @@ flags: [noStrict] ---*/ (function () { - eval("var public = 1;"); + test262unresolvable = null; "use strict"; - assert.sameValue(public, 1); + assert.sameValue(test262unresolvable, null); }) (); diff --git a/test/language/directive-prologue/func-expr-inside-func-decl-runtime.js b/test/language/directive-prologue/func-expr-inside-func-decl-runtime.js index a55007a16a3..e6f66c589f8 100644 --- a/test/language/directive-prologue/func-expr-inside-func-decl-runtime.js +++ b/test/language/directive-prologue/func-expr-inside-func-decl-runtime.js @@ -13,8 +13,8 @@ flags: [noStrict] function testcase() { "use strict"; - assert.throws(SyntaxError, function() { - eval("var public = 1;"); + assert.throws(ReferenceError, function() { + test262unresolvable = null; }); } testcase(); diff --git a/test/language/directive-prologue/func-expr-no-semi-runtime.js b/test/language/directive-prologue/func-expr-no-semi-runtime.js index da0ba589e49..0c16990b8c8 100644 --- a/test/language/directive-prologue/func-expr-no-semi-runtime.js +++ b/test/language/directive-prologue/func-expr-no-semi-runtime.js @@ -9,8 +9,8 @@ description: > flags: [noStrict] ---*/ -assert.throws(SyntaxError, function() { +assert.throws(ReferenceError, function() { "use strict" - eval("var public = 1;"); + test262unresolvable = null; }); diff --git a/test/language/directive-prologue/func-expr-not-first-runtime.js b/test/language/directive-prologue/func-expr-not-first-runtime.js index 98a4f1914c8..aaf2bb17874 100644 --- a/test/language/directive-prologue/func-expr-not-first-runtime.js +++ b/test/language/directive-prologue/func-expr-not-first-runtime.js @@ -10,7 +10,7 @@ flags: [noStrict] ---*/ (function () { - eval("var public = 1;"); - assert.sameValue(public, 1); + test262unresolvable = null; + assert.sameValue(test262unresolvable, null); "use strict"; }) (); diff --git a/test/language/directive-prologue/func-expr-runtime.js b/test/language/directive-prologue/func-expr-runtime.js index fbfd7790b14..2b982cc6c7a 100644 --- a/test/language/directive-prologue/func-expr-runtime.js +++ b/test/language/directive-prologue/func-expr-runtime.js @@ -9,8 +9,8 @@ description: > flags: [noStrict] ---*/ -assert.throws(SyntaxError, function () { +assert.throws(ReferenceError, function () { "use strict"; - eval("var public = 1;"); + test262unresolvable = null; }); diff --git a/test/language/directive-prologue/get-accsr-inside-func-expr-runtime.js b/test/language/directive-prologue/get-accsr-inside-func-expr-runtime.js index f3a448869b9..e9a02beb085 100644 --- a/test/language/directive-prologue/get-accsr-inside-func-expr-runtime.js +++ b/test/language/directive-prologue/get-accsr-inside-func-expr-runtime.js @@ -10,12 +10,12 @@ description: > flags: [noStrict] ---*/ -assert.throws(SyntaxError, function() { +assert.throws(ReferenceError, function() { "use strict"; var obj = {}; Object.defineProperty(obj, "accProperty", { get: function () { - eval("public = 1;"); + test262unresolvable = null; return 11; } }); diff --git a/test/language/directive-prologue/get-accsr-not-first-runtime.js b/test/language/directive-prologue/get-accsr-not-first-runtime.js index 23ad02baec8..96e94074fbc 100644 --- a/test/language/directive-prologue/get-accsr-not-first-runtime.js +++ b/test/language/directive-prologue/get-accsr-not-first-runtime.js @@ -13,11 +13,11 @@ flags: [noStrict] var obj = {}; Object.defineProperty(obj, "accProperty", { get: function () { - eval("public = 1;"); + test262unresolvable = null; "use strict"; return 11; } }); assert.sameValue(obj.accProperty, 11, 'obj.accProperty'); -assert.sameValue(public, 1, 'public'); +assert.sameValue(test262unresolvable, null); diff --git a/test/language/directive-prologue/get-accsr-runtime.js b/test/language/directive-prologue/get-accsr-runtime.js index e726cd7f813..cf2d42f5531 100644 --- a/test/language/directive-prologue/get-accsr-runtime.js +++ b/test/language/directive-prologue/get-accsr-runtime.js @@ -11,12 +11,12 @@ flags: [noStrict] ---*/ -assert.throws(SyntaxError, function() { +assert.throws(ReferenceError, function() { var obj = {}; Object.defineProperty(obj, "accProperty", { get: function () { "use strict"; - eval("var public = 1;"); + test262unresolvable = null; return 11; } }); diff --git a/test/language/directive-prologue/set-accsr-inside-func-expr-runtime.js b/test/language/directive-prologue/set-accsr-inside-func-expr-runtime.js index e10da762e72..aac40333a8e 100644 --- a/test/language/directive-prologue/set-accsr-inside-func-expr-runtime.js +++ b/test/language/directive-prologue/set-accsr-inside-func-expr-runtime.js @@ -12,13 +12,13 @@ flags: [noStrict] var data = "data"; -assert.throws(SyntaxError, function() { +assert.throws(ReferenceError, function() { "use strict"; var obj = {}; Object.defineProperty(obj, "accProperty", { set: function (value) { - eval("var public = 1;"); + test262unresolvable = null; data = value; } }); diff --git a/test/language/directive-prologue/set-accsr-not-first-runtime.js b/test/language/directive-prologue/set-accsr-not-first-runtime.js index 103fed211c8..2d5dc25c1a9 100644 --- a/test/language/directive-prologue/set-accsr-not-first-runtime.js +++ b/test/language/directive-prologue/set-accsr-not-first-runtime.js @@ -12,12 +12,12 @@ flags: [noStrict] var data = "data"; -assert.throws(SyntaxError, function() { +assert.throws(ReferenceError, function() { var obj = {}; Object.defineProperty(obj, "accProperty", { set: function (value) { "use strict"; - eval("var public = 1;"); + test262unresolvable = null; data = value; } }); diff --git a/test/language/directive-prologue/set-accsr-runtime.js b/test/language/directive-prologue/set-accsr-runtime.js index 631e93c68ed..3a46914402f 100644 --- a/test/language/directive-prologue/set-accsr-runtime.js +++ b/test/language/directive-prologue/set-accsr-runtime.js @@ -11,12 +11,12 @@ flags: [noStrict] ---*/ -assert.throws(SyntaxError, function() { +assert.throws(ReferenceError, function() { var obj = {}; Object.defineProperty(obj, "accProperty", { set: function () { "use strict"; - eval("var public = 1;"); + test262unresolvable = null; return 11; } }); From e95c75b6ae5a622c7266df784f4a28572c67c30d Mon Sep 17 00:00:00 2001 From: Mike Pennisi Date: Sun, 10 Jun 2018 19:34:56 -0400 Subject: [PATCH 4/7] Add tests for parsing behavior Test262 already includes tests to ensure the correct runtime semantics for these forms. Add equivalent tests designed to verify that the equivalent parsing behavior is also observed. --- .../func-decl-inside-func-decl-parse.js | 21 +++++++++++++++++++ .../func-decl-no-semi-parse.js | 18 ++++++++++++++++ .../directive-prologue/func-decl-parse.js | 18 ++++++++++++++++ .../func-expr-inside-func-decl-parse.js | 19 +++++++++++++++++ .../func-expr-no-semi-parse.js | 19 +++++++++++++++++ .../directive-prologue/func-expr-parse.js | 19 +++++++++++++++++ 6 files changed, 114 insertions(+) create mode 100644 test/language/directive-prologue/func-decl-inside-func-decl-parse.js create mode 100644 test/language/directive-prologue/func-decl-no-semi-parse.js create mode 100644 test/language/directive-prologue/func-decl-parse.js create mode 100644 test/language/directive-prologue/func-expr-inside-func-decl-parse.js create mode 100644 test/language/directive-prologue/func-expr-no-semi-parse.js create mode 100644 test/language/directive-prologue/func-expr-parse.js diff --git a/test/language/directive-prologue/func-decl-inside-func-decl-parse.js b/test/language/directive-prologue/func-decl-inside-func-decl-parse.js new file mode 100644 index 00000000000..3313dd1ea5c --- /dev/null +++ b/test/language/directive-prologue/func-decl-inside-func-decl-parse.js @@ -0,0 +1,21 @@ +// Copyright (c) 2018 Mike Pennisi. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +es5id: 10.1.1-15-s +description: > + Strict Mode - Function code that is part of a FunctionDeclaration + is strict function code if FunctionDeclaration is contained in use + strict +negative: + phase: early + type: SyntaxError +flags: [noStrict] +---*/ + +function testcase() { + "use strict"; + function fun() { + var static; + } +} diff --git a/test/language/directive-prologue/func-decl-no-semi-parse.js b/test/language/directive-prologue/func-decl-no-semi-parse.js new file mode 100644 index 00000000000..608c9fa6b0b --- /dev/null +++ b/test/language/directive-prologue/func-decl-no-semi-parse.js @@ -0,0 +1,18 @@ +// Copyright (c) 2018 Mike Pennisi. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +es5id: 10.1.1-2-s +description: > + Strict Mode - Use Strict Directive Prologue is ''use strict'' + which lost the last character ';' +negative: + phase: early + type: SyntaxError +flags: [noStrict] +---*/ + +function fun() { + "use strict" + var static; +} diff --git a/test/language/directive-prologue/func-decl-parse.js b/test/language/directive-prologue/func-decl-parse.js new file mode 100644 index 00000000000..dd3587f36b6 --- /dev/null +++ b/test/language/directive-prologue/func-decl-parse.js @@ -0,0 +1,18 @@ +// Copyright (c) 2018 Mike Pennisi. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +es5id: 10.1.1-19-s +description: > + Strict Mode - Function code of a FunctionDeclaration contains Use + Strict Directive which appears at the start of the block +negative: + phase: early + type: SyntaxError +flags: [noStrict] +---*/ + +function fun() { + "use strict"; + var static; +} diff --git a/test/language/directive-prologue/func-expr-inside-func-decl-parse.js b/test/language/directive-prologue/func-expr-inside-func-decl-parse.js new file mode 100644 index 00000000000..0aadbb1c37e --- /dev/null +++ b/test/language/directive-prologue/func-expr-inside-func-decl-parse.js @@ -0,0 +1,19 @@ +// Copyright (c) 2018 Mike Pennisi. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +es5id: 10.1.1-16-s +description: > + Strict Mode - Function code that is part of a FunctionExpression + is strict function code if FunctionExpression is contained in use + strict +negative: + phase: early + type: SyntaxError +flags: [noStrict] +---*/ + +function testcase() { + "use strict"; + var static; +} diff --git a/test/language/directive-prologue/func-expr-no-semi-parse.js b/test/language/directive-prologue/func-expr-no-semi-parse.js new file mode 100644 index 00000000000..7dfe1d7aa92 --- /dev/null +++ b/test/language/directive-prologue/func-expr-no-semi-parse.js @@ -0,0 +1,19 @@ +// Copyright (c) 2018 Mike Pennisi. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +es5id: 10.1.1-2-s +description: > + Strict Mode - Use Strict Directive Prologue is ''use strict'' + which lost the last character ';' +negative: + phase: early + type: SyntaxError +flags: [noStrict] +---*/ + +(function() { + "use strict" + + var static; +}); diff --git a/test/language/directive-prologue/func-expr-parse.js b/test/language/directive-prologue/func-expr-parse.js new file mode 100644 index 00000000000..92d59a411a7 --- /dev/null +++ b/test/language/directive-prologue/func-expr-parse.js @@ -0,0 +1,19 @@ +// Copyright (c) 2018 Mike Pennisi. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +es5id: 10.1.1-22-s +description: > + Strict Mode - Function code of a FunctionExpression contains Use + Strict Directive which appears at the start of the block +negative: + phase: early + type: SyntaxError +flags: [noStrict] +---*/ + +(function() { + "use strict"; + + var static; +}); From d8c5d23965a54a63060d6bbd7270097605bd1d51 Mon Sep 17 00:00:00 2001 From: Mike Pennisi Date: Sun, 17 Jun 2018 20:34:27 -0400 Subject: [PATCH 5/7] Extend metadata with `esid` --- test/language/directive-prologue/func-decl-final-runtime.js | 1 + .../directive-prologue/func-decl-inside-func-decl-runtime.js | 1 + test/language/directive-prologue/func-decl-not-first-runtime.js | 1 + test/language/directive-prologue/func-decl-runtime.js | 1 + test/language/directive-prologue/func-expr-final-runtime.js | 1 + .../directive-prologue/func-expr-inside-func-decl-runtime.js | 1 + test/language/directive-prologue/func-expr-no-semi-runtime.js | 1 + test/language/directive-prologue/func-expr-not-first-runtime.js | 1 + test/language/directive-prologue/func-expr-runtime.js | 1 + .../directive-prologue/get-accsr-inside-func-expr-runtime.js | 1 + test/language/directive-prologue/get-accsr-not-first-runtime.js | 1 + test/language/directive-prologue/get-accsr-runtime.js | 1 + .../directive-prologue/set-accsr-inside-func-expr-runtime.js | 1 + test/language/directive-prologue/set-accsr-not-first-runtime.js | 1 + 14 files changed, 14 insertions(+) diff --git a/test/language/directive-prologue/func-decl-final-runtime.js b/test/language/directive-prologue/func-decl-final-runtime.js index 60b0b8b6656..9cbc7431468 100644 --- a/test/language/directive-prologue/func-decl-final-runtime.js +++ b/test/language/directive-prologue/func-decl-final-runtime.js @@ -2,6 +2,7 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- +esid: use-strict-directive es5id: 10.1.1-21-s description: > Strict Mode - Function code of a FunctionDeclaration contains Use diff --git a/test/language/directive-prologue/func-decl-inside-func-decl-runtime.js b/test/language/directive-prologue/func-decl-inside-func-decl-runtime.js index 470eae0bee1..59313153f1a 100644 --- a/test/language/directive-prologue/func-decl-inside-func-decl-runtime.js +++ b/test/language/directive-prologue/func-decl-inside-func-decl-runtime.js @@ -2,6 +2,7 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- +esid: use-strict-directive es5id: 10.1.1-15-s description: > Strict Mode - Function code that is part of a FunctionDeclaration diff --git a/test/language/directive-prologue/func-decl-not-first-runtime.js b/test/language/directive-prologue/func-decl-not-first-runtime.js index 27826a85af3..d6504be257f 100644 --- a/test/language/directive-prologue/func-decl-not-first-runtime.js +++ b/test/language/directive-prologue/func-decl-not-first-runtime.js @@ -2,6 +2,7 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- +esid: use-strict-directive es5id: 10.1.1-20-s description: > Strict Mode - Function code of a FunctionDeclaration contains Use diff --git a/test/language/directive-prologue/func-decl-runtime.js b/test/language/directive-prologue/func-decl-runtime.js index b9dbd353ebf..d3dbfb611b5 100644 --- a/test/language/directive-prologue/func-decl-runtime.js +++ b/test/language/directive-prologue/func-decl-runtime.js @@ -2,6 +2,7 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- +esid: use-strict-directive es5id: 10.1.1-19-s description: > Strict Mode - Function code of a FunctionDeclaration contains Use diff --git a/test/language/directive-prologue/func-expr-final-runtime.js b/test/language/directive-prologue/func-expr-final-runtime.js index 1a437bce312..b5fa0a49f3d 100644 --- a/test/language/directive-prologue/func-expr-final-runtime.js +++ b/test/language/directive-prologue/func-expr-final-runtime.js @@ -2,6 +2,7 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- +esid: use-strict-directive es5id: 10.1.1-24-s description: > Strict Mode - Function code of a FunctionExpression contains Use diff --git a/test/language/directive-prologue/func-expr-inside-func-decl-runtime.js b/test/language/directive-prologue/func-expr-inside-func-decl-runtime.js index e6f66c589f8..467fb5d6534 100644 --- a/test/language/directive-prologue/func-expr-inside-func-decl-runtime.js +++ b/test/language/directive-prologue/func-expr-inside-func-decl-runtime.js @@ -2,6 +2,7 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- +esid: use-strict-directive es5id: 10.1.1-16-s description: > Strict Mode - Function code that is part of a FunctionExpression diff --git a/test/language/directive-prologue/func-expr-no-semi-runtime.js b/test/language/directive-prologue/func-expr-no-semi-runtime.js index 0c16990b8c8..3885d3194d6 100644 --- a/test/language/directive-prologue/func-expr-no-semi-runtime.js +++ b/test/language/directive-prologue/func-expr-no-semi-runtime.js @@ -2,6 +2,7 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- +esid: use-strict-directive es5id: 10.1.1-2-s description: > Strict Mode - Use Strict Directive Prologue is ''use strict'' diff --git a/test/language/directive-prologue/func-expr-not-first-runtime.js b/test/language/directive-prologue/func-expr-not-first-runtime.js index aaf2bb17874..4aae5cc8a47 100644 --- a/test/language/directive-prologue/func-expr-not-first-runtime.js +++ b/test/language/directive-prologue/func-expr-not-first-runtime.js @@ -2,6 +2,7 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- +esid: use-strict-directive es5id: 10.1.1-23-s description: > Strict Mode - Function code of a FunctionExpression contains Use diff --git a/test/language/directive-prologue/func-expr-runtime.js b/test/language/directive-prologue/func-expr-runtime.js index 2b982cc6c7a..9ad085997a8 100644 --- a/test/language/directive-prologue/func-expr-runtime.js +++ b/test/language/directive-prologue/func-expr-runtime.js @@ -2,6 +2,7 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- +esid: use-strict-directive es5id: 10.1.1-22-s description: > Strict Mode - Function code of a FunctionExpression contains Use diff --git a/test/language/directive-prologue/get-accsr-inside-func-expr-runtime.js b/test/language/directive-prologue/get-accsr-inside-func-expr-runtime.js index e9a02beb085..11e4628d85d 100644 --- a/test/language/directive-prologue/get-accsr-inside-func-expr-runtime.js +++ b/test/language/directive-prologue/get-accsr-inside-func-expr-runtime.js @@ -2,6 +2,7 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- +esid: use-strict-directive es5id: 10.1.1-17-s description: > Strict Mode - Function code that is part of a Accessor diff --git a/test/language/directive-prologue/get-accsr-not-first-runtime.js b/test/language/directive-prologue/get-accsr-not-first-runtime.js index 96e94074fbc..8f2d9bc5ff9 100644 --- a/test/language/directive-prologue/get-accsr-not-first-runtime.js +++ b/test/language/directive-prologue/get-accsr-not-first-runtime.js @@ -2,6 +2,7 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- +esid: use-strict-directive es5id: 10.1.1-27-s description: > Strict Mode - Function code of Accessor PropertyAssignment diff --git a/test/language/directive-prologue/get-accsr-runtime.js b/test/language/directive-prologue/get-accsr-runtime.js index cf2d42f5531..47e6893b808 100644 --- a/test/language/directive-prologue/get-accsr-runtime.js +++ b/test/language/directive-prologue/get-accsr-runtime.js @@ -2,6 +2,7 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- +esid: use-strict-directive es5id: 10.1.1-25-s description: > Strict Mode - Function code of Accessor PropertyAssignment diff --git a/test/language/directive-prologue/set-accsr-inside-func-expr-runtime.js b/test/language/directive-prologue/set-accsr-inside-func-expr-runtime.js index aac40333a8e..1038aa05854 100644 --- a/test/language/directive-prologue/set-accsr-inside-func-expr-runtime.js +++ b/test/language/directive-prologue/set-accsr-inside-func-expr-runtime.js @@ -2,6 +2,7 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- +esid: use-strict-directive es5id: 10.1.1-18-s description: > Strict Mode - Function code that is part of a Accessor diff --git a/test/language/directive-prologue/set-accsr-not-first-runtime.js b/test/language/directive-prologue/set-accsr-not-first-runtime.js index 2d5dc25c1a9..3a460656222 100644 --- a/test/language/directive-prologue/set-accsr-not-first-runtime.js +++ b/test/language/directive-prologue/set-accsr-not-first-runtime.js @@ -2,6 +2,7 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- +esid: use-strict-directive es5id: 10.1.1-26-s description: > Strict Mode - Function code of Accessor PropertyAssignment From c90f799f638b4d108b80a0618460b59918da93b9 Mon Sep 17 00:00:00 2001 From: Mike Pennisi Date: Sun, 17 Jun 2018 20:35:28 -0400 Subject: [PATCH 6/7] fixup! Normalize coverage --- test/language/directive-prologue/func-decl-no-semi-runtime.js | 1 + test/language/directive-prologue/set-accsr-runtime.js | 1 + 2 files changed, 2 insertions(+) diff --git a/test/language/directive-prologue/func-decl-no-semi-runtime.js b/test/language/directive-prologue/func-decl-no-semi-runtime.js index c1ed808e9a5..24062671600 100644 --- a/test/language/directive-prologue/func-decl-no-semi-runtime.js +++ b/test/language/directive-prologue/func-decl-no-semi-runtime.js @@ -2,6 +2,7 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- +esid: use-strict-directive es5id: 10.1.1-2-s description: > Strict Mode - Use Strict Directive Prologue is ''use strict'' diff --git a/test/language/directive-prologue/set-accsr-runtime.js b/test/language/directive-prologue/set-accsr-runtime.js index 3a46914402f..e282c89ec98 100644 --- a/test/language/directive-prologue/set-accsr-runtime.js +++ b/test/language/directive-prologue/set-accsr-runtime.js @@ -2,6 +2,7 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- +esid: use-strict-directive es5id: 10.1.1-25-s description: > Strict Mode - Function code of Accessor PropertyAssignment From 90c667afd147c8d78b79ea12699be3008e85f4ab Mon Sep 17 00:00:00 2001 From: Mike Pennisi Date: Sun, 17 Jun 2018 20:36:55 -0400 Subject: [PATCH 7/7] fixup! Add tests for parsing behavior --- .../directive-prologue/func-decl-inside-func-decl-parse.js | 1 + test/language/directive-prologue/func-decl-no-semi-parse.js | 1 + test/language/directive-prologue/func-decl-parse.js | 1 + .../directive-prologue/func-expr-inside-func-decl-parse.js | 1 + test/language/directive-prologue/func-expr-no-semi-parse.js | 1 + test/language/directive-prologue/func-expr-parse.js | 1 + 6 files changed, 6 insertions(+) diff --git a/test/language/directive-prologue/func-decl-inside-func-decl-parse.js b/test/language/directive-prologue/func-decl-inside-func-decl-parse.js index 3313dd1ea5c..d540118e430 100644 --- a/test/language/directive-prologue/func-decl-inside-func-decl-parse.js +++ b/test/language/directive-prologue/func-decl-inside-func-decl-parse.js @@ -2,6 +2,7 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- +esid: use-strict-directive es5id: 10.1.1-15-s description: > Strict Mode - Function code that is part of a FunctionDeclaration diff --git a/test/language/directive-prologue/func-decl-no-semi-parse.js b/test/language/directive-prologue/func-decl-no-semi-parse.js index 608c9fa6b0b..9135ff4b911 100644 --- a/test/language/directive-prologue/func-decl-no-semi-parse.js +++ b/test/language/directive-prologue/func-decl-no-semi-parse.js @@ -2,6 +2,7 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- +esid: use-strict-directive es5id: 10.1.1-2-s description: > Strict Mode - Use Strict Directive Prologue is ''use strict'' diff --git a/test/language/directive-prologue/func-decl-parse.js b/test/language/directive-prologue/func-decl-parse.js index dd3587f36b6..2740f3546eb 100644 --- a/test/language/directive-prologue/func-decl-parse.js +++ b/test/language/directive-prologue/func-decl-parse.js @@ -2,6 +2,7 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- +esid: use-strict-directive es5id: 10.1.1-19-s description: > Strict Mode - Function code of a FunctionDeclaration contains Use diff --git a/test/language/directive-prologue/func-expr-inside-func-decl-parse.js b/test/language/directive-prologue/func-expr-inside-func-decl-parse.js index 0aadbb1c37e..22e48b2a1f6 100644 --- a/test/language/directive-prologue/func-expr-inside-func-decl-parse.js +++ b/test/language/directive-prologue/func-expr-inside-func-decl-parse.js @@ -2,6 +2,7 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- +esid: use-strict-directive es5id: 10.1.1-16-s description: > Strict Mode - Function code that is part of a FunctionExpression diff --git a/test/language/directive-prologue/func-expr-no-semi-parse.js b/test/language/directive-prologue/func-expr-no-semi-parse.js index 7dfe1d7aa92..404e1ac3088 100644 --- a/test/language/directive-prologue/func-expr-no-semi-parse.js +++ b/test/language/directive-prologue/func-expr-no-semi-parse.js @@ -2,6 +2,7 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- +esid: use-strict-directive es5id: 10.1.1-2-s description: > Strict Mode - Use Strict Directive Prologue is ''use strict'' diff --git a/test/language/directive-prologue/func-expr-parse.js b/test/language/directive-prologue/func-expr-parse.js index 92d59a411a7..b1239d2d49c 100644 --- a/test/language/directive-prologue/func-expr-parse.js +++ b/test/language/directive-prologue/func-expr-parse.js @@ -2,6 +2,7 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- +esid: use-strict-directive es5id: 10.1.1-22-s description: > Strict Mode - Function code of a FunctionExpression contains Use