aboutsummaryrefslogtreecommitdiff
typeof_evaluation: {
    options = {
        evaluate: true,
        typeofs: true,
    }
    input: {
        a = typeof 1;
        b = typeof 'test';
        c = typeof [];
        d = typeof {};
        e = typeof /./;
        f = typeof false;
        g = typeof function(){};
        h = typeof undefined;
    }
    expect: {
        a='number';
        b='string';
        c=typeof[];
        d=typeof{};
        e=typeof/./;
        f='boolean';
        g='function';
        h='undefined';
    }
}

typeof_in_boolean_context: {
    options = {
        booleans: true,
        conditionals: true,
        evaluate: true,
        side_effects: true,
    }
    input: {
        function f1(x) { return typeof x ? "yes" : "no"; }
        function f2() { return typeof g()? "Yes" : "No"; }
        typeof 0 ? foo() : bar();
        !typeof console.log(1);
        var a = !typeof console.log(2);
        if (typeof (1 + foo()));
    }
    expect: {
        function f1(x) { return "yes"; }
        function f2() { return g(), "Yes"; }
        foo();
        console.log(1);
        var a = !(console.log(2), 1);
        foo();
    }
}

issue_1668: {
    options = {
        booleans: true,
    }
    input: {
        if (typeof bar);
    }
    expect: {
        if (1);
    }
}

typeof_defun_1: {
    options = {
        evaluate: true,
        inline: true,
        passes: 2,
        reduce_vars: true,
        side_effects: true,
        toplevel: true,
        typeofs: true,
        unused: true,
    }
    input: {
        function f() {
            console.log("YES");
        }
        function g() {
            h = 42;
            console.log("NOPE");
        }
        function h() {
            console.log("YUP");
        }
        g = 42;
        "function" == typeof f && f();
        "function" == typeof g && g();
        "function" == typeof h && h();
    }
    expect: {
        function h() {
            console.log("YUP");
        }
        console.log("YES");
        h();
    }
    expect_stdout: [
        "YES",
        "YUP",
    ]
}

typeof_defun_2: {
    options = {
        evaluate: true,
        reduce_vars: true,
        toplevel: true,
        typeofs: true,
    }
    input: {
        var f = function() {
            console.log(x);
        };
        var x = 0;
        x++ < 2 && typeof f == "function" && f();
        x++ < 2 && typeof f == "function" && f();
        x++ < 2 && typeof f == "function" && f();
    }
    expect: {
        var f = function() {
            console.log(x);
        };
        var x = 0;
        x++ < 2 && f();
        x++ < 2 && f();
        x++ < 2 && f();
    }
    expect_stdout: [
        "1",
        "2",
    ]
}

duplicate_defun_arg_name: {
    options = {
        evaluate: true,
        reduce_vars: true,
        typeofs: true,
    }
    input: {
        function long_name(long_name) {
            return typeof long_name;
        }
        console.log(typeof long_name, long_name());
    }
    expect: {
        function long_name(long_name) {
            return typeof long_name;
        }
        console.log(typeof long_name, long_name());
    }
    expect_stdout: "function undefined"
}

duplicate_lambda_arg_name: {
    options = {
        evaluate: true,
        reduce_vars: true,
        typeofs: true,
    }
    input: {
        console.log(function long_name(long_name) {
            return typeof long_name;
        }());
    }
    expect: {
        console.log("undefined");
    }
    expect_stdout: "undefined"
}

issue_2728_1: {
    options = {
        evaluate: true,
        reduce_vars: true,
        typeofs: true,
    }
    input: {
        (function arguments() {
            console.log(typeof arguments);
        })();
    }
    expect: {
        (function arguments() {
            console.log(typeof arguments);
        })();
    }
    expect_stdout: "object"
}

issue_2728_2: {
    options = {
        evaluate: true,
        reduce_vars: true,
        typeofs: true,
    }
    input: {
        function arguments() {
            return typeof arguments;
        }
        console.log(typeof arguments, arguments());
    }
    expect: {
        function arguments() {
            return typeof arguments;
        }
        console.log(typeof arguments, arguments());
    }
    expect_stdout: "function object"
}

issue_2728_3: {
    options = {
        evaluate: true,
        reduce_vars: true,
        typeofs: true,
    }
    input: {
        (function() {
            function arguments() {
            }
            console.log(typeof arguments);
        })();
    }
    expect: {
        (function() {
            function arguments() {
            }
            console.log("function");
        })();
    }
    expect_stdout: "function"
}

issue_2728_4: {
    options = {
        evaluate: true,
        reduce_vars: true,
        toplevel: true,
        typeofs: true,
    }
    input: {
        function arguments() {
        }
        console.log(typeof arguments);
    }
    expect: {
        function arguments() {
        }
        console.log("function");
    }
    expect_stdout: "function"
}

issue_2728_5: {
    options = {
        evaluate: true,
        reduce_vars: true,
        typeofs: true,
    }
    input: {
        (function arguments(arguments) {
            console.log(typeof arguments);
        })();
    }
    expect: {
        (function arguments(arguments) {
            console.log(typeof arguments);
        })();
    }
    expect_stdout: "undefined"
}

issue_2728_6: {
    options = {
        evaluate: true,
        reduce_vars: true,
        typeofs: true,
    }
    input: {
        function arguments(arguments) {
            return typeof arguments;
        }
        console.log(typeof arguments, arguments());
    }
    expect: {
        function arguments(arguments) {
            return typeof arguments;
        }
        console.log(typeof arguments, arguments());
    }
    expect_stdout: "function undefined"
}

typeof_defined_1: {
    options = {
        side_effects: true,
        typeofs: true,
    }
    input: {
        "undefined" == typeof A && A;
        "undefined" != typeof A && A;
        "undefined" == typeof A || A;
        "undefined" != typeof A || A;
    }
    expect: {
        "undefined" == typeof A && A;
        "undefined" != typeof A || A;
    }
}

typeof_defined_2: {
    options = {
        side_effects: true,
        typeofs: true,
    }
    input: {
        "function" == typeof A && A;
        "function" != typeof A && A;
        "function" == typeof A || A;
        "function" != typeof A || A;
    }
    expect: {
        "function" != typeof A && A;
        "function" == typeof A || A;
    }
}

typeof_defined_3: {
    options = {
        side_effects: true,
        typeofs: true,
    }
    input: {
        "undefined" == typeof A && "undefined" == typeof B && (A, B);
        "undefined" == typeof A && "undefined" != typeof B && (A, B);
        "undefined" != typeof A && "undefined" == typeof B && (A, B);
        "undefined" != typeof A && "undefined" != typeof B && (A, B);
        "undefined" == typeof A && "undefined" == typeof B || (A, B);
        "undefined" == typeof A && "undefined" != typeof B || (A, B);
        "undefined" != typeof A && "undefined" == typeof B || (A, B);
        "undefined" != typeof A && "undefined" != typeof B || (A, B);
        "undefined" == typeof A || "undefined" == typeof B && (A, B);
        "undefined" == typeof A || "undefined" != typeof B && (A, B);
        "undefined" != typeof A || "undefined" == typeof B && (A, B);
        "undefined" != typeof A || "undefined" != typeof B && (A, B);
        "undefined" == typeof A || "undefined" == typeof B || (A, B);
        "undefined" == typeof A || "undefined" != typeof B || (A, B);
        "undefined" != typeof A || "undefined" == typeof B || (A, B);
        "undefined" != typeof A || "undefined" != typeof B || (A, B);
    }
    expect: {
        "undefined" == typeof A && "undefined" == typeof B && (A, B);
        "undefined" == typeof A && "undefined" != typeof B && A;
        "undefined" != typeof A && "undefined" == typeof B && B;
        "undefined" == typeof A && "undefined" == typeof B || (A, B);
        "undefined" == typeof A && "undefined" != typeof B || (A, B);
        "undefined" != typeof A && "undefined" == typeof B || (A, B);
        "undefined" != typeof A && "undefined" != typeof B || (A, B);
        "undefined" == typeof A || "undefined" == typeof B && B;
        "undefined" != typeof A || "undefined" == typeof B && (A, B);
        "undefined" != typeof A || "undefined" != typeof B && A;
        "undefined" == typeof A || "undefined" != typeof B || B;
        "undefined" != typeof A || "undefined" == typeof B || A;
        "undefined" != typeof A || "undefined" != typeof B || (A, B);
    }
}

typeof_defined_4: {
    options = {
        side_effects: true,
        typeofs: true,
    }
    input: {
        "object" == typeof A && "object" == typeof B && (A, B);
        "object" == typeof A && "object" != typeof B && (A, B);
        "object" != typeof A && "object" == typeof B && (A, B);
        "object" != typeof A && "object" != typeof B && (A, B);
        "object" == typeof A && "object" == typeof B || (A, B);
        "object" == typeof A && "object" != typeof B || (A, B);
        "object" != typeof A && "object" == typeof B || (A, B);
        "object" != typeof A && "object" != typeof B || (A, B);
        "object" == typeof A || "object" == typeof B && (A, B);
        "object" == typeof A || "object" != typeof B && (A, B);
        "object" != typeof A || "object" == typeof B && (A, B);
        "object" != typeof A || "object" != typeof B && (A, B);
        "object" == typeof A || "object" == typeof B || (A, B);
        "object" == typeof A || "object" != typeof B || (A, B);
        "object" != typeof A || "object" == typeof B || (A, B);
        "object" != typeof A || "object" != typeof B || (A, B);
    }
    expect: {
        "object" == typeof A && "object" != typeof B && B;
        "object" != typeof A && "object" == typeof B && A;
        "object" != typeof A && "object" != typeof B && (A, B);
        "object" == typeof A && "object" == typeof B || (A, B);
        "object" == typeof A && "object" != typeof B || (A, B);
        "object" != typeof A && "object" == typeof B || (A, B);
        "object" != typeof A && "object" != typeof B || (A, B);
        "object" == typeof A || "object" == typeof B && A;
        "object" == typeof A || "object" != typeof B && (A, B);
        "object" != typeof A || "object" != typeof B && B;
        "object" == typeof A || "object" == typeof B || (A, B);
        "object" == typeof A || "object" != typeof B || A;
        "object" != typeof A || "object" == typeof B || B;
    }
}

emberjs_global: {
    options = {
        comparisons: true,
        conditionals: true,
        if_return: true,
        passes: 2,
        side_effects: true,
        toplevel: true,
        typeofs: true,
        unused: true,
    }
    input: {
        var a;
        if (typeof A === "object") {
            a = A;
        } else if (typeof B === "object") {
            a = B;
        } else {
            throw new Error("PASS");
        }
    }
    expect: {
        if ("object" != typeof A && "object" != typeof B)
            throw new Error("PASS");
    }
    expect_stdout: Error("PASS")
}

issue_3817: {
    options = {
        comparisons: true,
        conditionals: true,
        passes: 2,
        typeofs: true,
    }
    input: {
        if ("A" == typeof A || !console.log("PASS")) switch (false) {
          case "undefined" == typeof A:
            console.log("FAIL");
        }
    }
    expect: {
        if ("A" == typeof A || !console.log("PASS")) switch (false) {
          case "undefined" == typeof A:
            console.log("FAIL");
        }
    }
    expect_stdout: "PASS"
}