aboutsummaryrefslogtreecommitdiff
path: root/integration/bunjs-only-snippets/transpiler.test.js
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-03-04 17:51:22 -0800
committerGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-03-04 17:51:22 -0800
commit4f5aa438d6799f24c7a112ca8dc0910466944f2e (patch)
treed859ea1467a7e8ae8e7ae20466d4bf16224ae55c /integration/bunjs-only-snippets/transpiler.test.js
parentbd2f818500be18523aede09df300ef9f3af9180e (diff)
downloadbun-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.js65
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(