diff options
author | 2022-03-04 17:51:22 -0800 | |
---|---|---|
committer | 2022-03-04 17:51:22 -0800 | |
commit | 4f5aa438d6799f24c7a112ca8dc0910466944f2e (patch) | |
tree | d859ea1467a7e8ae8e7ae20466d4bf16224ae55c /integration/bunjs-only-snippets/transpiler.test.js | |
parent | bd2f818500be18523aede09df300ef9f3af9180e (diff) | |
download | bun-4f5aa438d6799f24c7a112ca8dc0910466944f2e.tar.gz bun-4f5aa438d6799f24c7a112ca8dc0910466944f2e.tar.zst bun-4f5aa438d6799f24c7a112ca8dc0910466944f2e.zip |
[JS Parser] Support JSX prop punning
Diffstat (limited to 'integration/bunjs-only-snippets/transpiler.test.js')
-rw-r--r-- | integration/bunjs-only-snippets/transpiler.test.js | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/integration/bunjs-only-snippets/transpiler.test.js b/integration/bunjs-only-snippets/transpiler.test.js index 2859c2b02..5553c1cc6 100644 --- a/integration/bunjs-only-snippets/transpiler.test.js +++ b/integration/bunjs-only-snippets/transpiler.test.js @@ -47,6 +47,71 @@ describe("Bun.Transpiler", () => { `; + it("JSX", () => { + var bun = new Bun.Transpiler({ + loader: "jsx", + }); + expect(bun.transformSync("export var foo = <div foo />")).toBe( + `export var foo = jsx("div", { + foo: true +}, undefined, false, undefined, this); +` + ); + expect(bun.transformSync("export var foo = <div foo={foo} />")).toBe( + `export var foo = jsx("div", { + foo +}, undefined, false, undefined, this); +` + ); + expect(bun.transformSync("export var foo = <div {...foo} />")).toBe( + `export var foo = jsx("div", { + ...foo +}, undefined, false, undefined, this); +` + ); + expect(bun.transformSync("export var hi = <div {foo} />")).toBe( + `export var hi = jsx("div", { + foo +}, undefined, false, undefined, this); +` + ); + try { + bun.transformSync("export var hi = <div {foo}={foo}= />"); + throw new Error("Expected error"); + } catch (e) { + expect(e.errors[0].message.includes('Expected ">"')).toBe(true); + } + + expect( + bun.transformSync("export var hi = <div {Foo}><Foo></Foo></div>") + ).toBe( + `export var hi = jsx("div", { + Foo, + children: jsx(Foo, {}, undefined, false, undefined, this) +}, undefined, false, undefined, this); +` + ); + expect( + bun.transformSync("export var hi = <div {Foo}><Foo></Foo></div>") + ).toBe( + `export var hi = jsx("div", { + Foo, + children: jsx(Foo, {}, undefined, false, undefined, this) +}, undefined, false, undefined, this); +` + ); + + expect(bun.transformSync("export var hi = <div>{123}}</div>").trim()).toBe( + `export var hi = jsx("div", { + children: [ + 123, + "}" + ] +}, undefined, true, undefined, this); + `.trim() + ); + }); + it("require with a dynamic non-string expression", () => { var nodeTranspiler = new Bun.Transpiler({ platform: "node" }); expect(nodeTranspiler.transformSync("require('hi' + bar)")).toBe( |