diff --git a/Userland/Libraries/LibJS/Tests/program-non-strict.js b/Userland/Libraries/LibJS/Tests/program-non-strict.js new file mode 100644 index 0000000000..c66e298d73 --- /dev/null +++ b/Userland/Libraries/LibJS/Tests/program-non-strict.js @@ -0,0 +1,61 @@ +"do not use strict"; +"no really"; +// /\ Valid directives which should not trigger strict mode + +test("basic functionality", () => { + expect(isStrictMode()).toBeFalse(); + + (function () { + expect(isStrictMode()).toBeFalse(); + })(); + + (() => { + expect(isStrictMode()).toBeFalse(); + })(); + + (() => { + expect(isStrictMode()).toBeFalse(); + })(); + + function a() { + expect(isStrictMode()).toBeFalse(); + } + + a(); + + eval("expect(isStrictMode()).toBeFalse()"); +}); + +test("functions with strict mode", () => { + expect(isStrictMode()).toBeFalse(); + + function a() { + "this is allowed trust me"; + "use strict"; + expect(isStrictMode()).toBeTrue(); + } + + a(); + + expect(isStrictMode()).toBeFalse(); + + (() => { + "use strict"; + expect(isStrictMode()).toBeTrue(); + })(); + + function b() { + eval("expect(isStrictMode()).toBeFalse()"); + + function nested() { + "use strict"; + eval("expect(isStrictMode()).toBeTrue()"); + } + + nested(); + + eval("expect(isStrictMode()).toBeFalse()"); + } + + b(); +}); diff --git a/Userland/Libraries/LibJS/Tests/program-strict-mode.js b/Userland/Libraries/LibJS/Tests/program-strict-mode.js index d8f8941d0f..3bb885a49b 100644 --- a/Userland/Libraries/LibJS/Tests/program-strict-mode.js +++ b/Userland/Libraries/LibJS/Tests/program-strict-mode.js @@ -15,4 +15,12 @@ test("basic functionality", () => { "use strict"; expect(isStrictMode()).toBeTrue(); })(); + + function a() { + expect(isStrictMode()).toBeTrue(); + } + + a(); + + eval("expect(isStrictMode()).toBeTrue()"); });