"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();
});