2021-11-24 11:43:18 +01:00

104 lines
3.5 KiB
JavaScript

import { parse } from "@babel/parser";
import generator from "@babel/generator";
import * as t from "@babel/types";
import optimizeCallExpression from "../lib/index.js";
function transformInput(input, thisIdentifier) {
const ast = parse(input);
const callExpression = ast.program.body[0].expression;
return generator(
optimizeCallExpression(
callExpression.callee,
thisIdentifier
? t.identifier(thisIdentifier)
: callExpression.callee.object,
callExpression.arguments,
callExpression.type === "OptionalCallExpression",
),
).code;
}
describe("@babel/helper-optimise-call-expression", () => {
test("optimizeCallExpression should work when thisNode is implied from callee", () => {
expect(transformInput("a.b(...arguments)")).toMatchInlineSnapshot(
`"a.b.apply(a, arguments)"`,
);
expect(transformInput("a[b](...arguments)")).toMatchInlineSnapshot(
`"a[b].apply(a, arguments)"`,
);
expect(transformInput("a.b?.(...arguments)")).toMatchInlineSnapshot(
`"a.b?.apply(a, arguments)"`,
);
expect(transformInput("a[b]?.(...arguments)")).toMatchInlineSnapshot(
`"a[b]?.apply(a, arguments)"`,
);
expect(transformInput("a.b(...args)")).toMatchInlineSnapshot(
`"a.b.call(a, ...args)"`,
);
expect(transformInput("a[b](...args)")).toMatchInlineSnapshot(
`"a[b].call(a, ...args)"`,
);
expect(transformInput("a.b?.(...args)")).toMatchInlineSnapshot(
`"a.b?.call(a, ...args)"`,
);
expect(transformInput("a[b]?.(...args)")).toMatchInlineSnapshot(
`"a[b]?.call(a, ...args)"`,
);
expect(transformInput("a.b(arg1, arg2)")).toMatchInlineSnapshot(
`"a.b.call(a, arg1, arg2)"`,
);
expect(transformInput("a[b](arg1, arg2)")).toMatchInlineSnapshot(
`"a[b].call(a, arg1, arg2)"`,
);
expect(transformInput("a.b?.(arg1, arg2)")).toMatchInlineSnapshot(
`"a.b?.call(a, arg1, arg2)"`,
);
expect(transformInput("a[b]?.(arg1, arg2)")).toMatchInlineSnapshot(
`"a[b]?.call(a, arg1, arg2)"`,
);
});
test("optimizeCallExpression should work when thisNode is provided", () => {
expect(transformInput("a.b(...arguments)", "c")).toMatchInlineSnapshot(
`"a.b.apply(c, arguments)"`,
);
expect(transformInput("a[b](...arguments)", "c")).toMatchInlineSnapshot(
`"a[b].apply(c, arguments)"`,
);
expect(transformInput("a.b?.(...arguments)", "c")).toMatchInlineSnapshot(
`"a.b?.apply(c, arguments)"`,
);
expect(transformInput("a[b]?.(...arguments)", "c")).toMatchInlineSnapshot(
`"a[b]?.apply(c, arguments)"`,
);
expect(transformInput("a.b(...args)", "c")).toMatchInlineSnapshot(
`"a.b.call(c, ...args)"`,
);
expect(transformInput("a[b](...args)", "c")).toMatchInlineSnapshot(
`"a[b].call(c, ...args)"`,
);
expect(transformInput("a.b?.(...args)", "c")).toMatchInlineSnapshot(
`"a.b?.call(c, ...args)"`,
);
expect(transformInput("a[b]?.(...args)", "c")).toMatchInlineSnapshot(
`"a[b]?.call(c, ...args)"`,
);
expect(transformInput("a.b(arg1, arg2)", "c")).toMatchInlineSnapshot(
`"a.b.call(c, arg1, arg2)"`,
);
expect(transformInput("a[b](arg1, arg2)", "c")).toMatchInlineSnapshot(
`"a[b].call(c, arg1, arg2)"`,
);
expect(transformInput("a.b?.(arg1, arg2)", "c")).toMatchInlineSnapshot(
`"a.b?.call(c, arg1, arg2)"`,
);
expect(transformInput("a[b]?.(arg1, arg2)", "c")).toMatchInlineSnapshot(
`"a[b]?.call(c, arg1, arg2)"`,
);
});
});