diff options
-rw-r--r-- | test/cli/install/bun-install.test.ts | 590 |
1 files changed, 327 insertions, 263 deletions
diff --git a/test/cli/install/bun-install.test.ts b/test/cli/install/bun-install.test.ts index bf095f6e4..3c70f8a8c 100644 --- a/test/cli/install/bun-install.test.ts +++ b/test/cli/install/bun-install.test.ts @@ -5436,16 +5436,30 @@ it("should handle installing packages from inside a workspace with `*`", async ( }); it("should handle installing packages inside workspaces with difference versions", async () => { - await writeFile( - join(package_dir, "package.json"), + let package_jsons = [ JSON.stringify({ name: "main", workspaces: ["packages/*"], private: true, }), - ); + JSON.stringify({ + name: "main", + private: true, + workspaces: [ + "packages/package1", + "packages/package2", + "packages/package3", + "packages/package4", + "packages/package5", + ], + }), + ]; + await mkdir(join(package_dir, "packages", "package1"), { recursive: true }); + await mkdir(join(package_dir, "packages", "package2")); + await mkdir(join(package_dir, "packages", "package3")); + await mkdir(join(package_dir, "packages", "package4")); + await mkdir(join(package_dir, "packages", "package5")); { - await mkdir(join(package_dir, "packages", "package1"), { recursive: true }); const package1 = JSON.stringify({ name: "package1", version: "0.0.2", @@ -5453,7 +5467,6 @@ it("should handle installing packages inside workspaces with difference versions await writeFile(join(package_dir, "packages", "package1", "package.json"), package1); } { - await mkdir(join(package_dir, "packages", "package2")); const package2 = JSON.stringify({ name: "package2", version: "0.0.1", @@ -5464,7 +5477,6 @@ it("should handle installing packages inside workspaces with difference versions await writeFile(join(package_dir, "packages", "package2", "package.json"), package2); } { - await mkdir(join(package_dir, "packages", "package3")); const package3 = JSON.stringify({ name: "package3", version: "0.0.1", @@ -5475,7 +5487,6 @@ it("should handle installing packages inside workspaces with difference versions await writeFile(join(package_dir, "packages", "package3", "package.json"), package3); } { - await mkdir(join(package_dir, "packages", "package4")); const package4 = JSON.stringify({ name: "package4", version: "0.0.1", @@ -5486,7 +5497,6 @@ it("should handle installing packages inside workspaces with difference versions await writeFile(join(package_dir, "packages", "package4", "package.json"), package4); } { - await mkdir(join(package_dir, "packages", "package5")); const package5 = JSON.stringify({ name: "package5", version: "0.0.1", @@ -5496,274 +5506,328 @@ it("should handle installing packages inside workspaces with difference versions }); await writeFile(join(package_dir, "packages", "package5", "package.json"), package5); } + for (const package_json of package_jsons) { + await writeFile(join(package_dir, "package.json"), package_json); - const { - stdout: stdout1, - stderr: stderr1, - exited: exited1, - } = spawn({ - cmd: [bunExe(), "install"], - cwd: join(package_dir, "packages", "package2"), - stdout: null, - stdin: "pipe", - stderr: "pipe", - env, - }); - expect(stderr1).toBeDefined(); - const err1 = await new Response(stderr1).text(); - expect(err1).toContain("Saved lockfile"); - const out1 = await new Response(stdout1).text(); - expect(out1.replace(/\s*\[[0-9\.]+m?s\]\s*$/, "").split(/\r?\n/)).toEqual([ - " + package1@workspace:packages/package1", - " + package2@workspace:packages/package2", - " + package3@workspace:packages/package3", - " + package4@workspace:packages/package4", - " + package5@workspace:packages/package5", - "", - " 5 packages installed", - ]); - expect(await exited1).toBe(0); - expect(requested).toBe(0); - await access(join(package_dir, "bun.lockb")); - - var urls: string[] = []; - setHandler(dummyRegistry(urls)); - - const { - stdout: stdout1_2, - stderr: stderr1_2, - exited: exited1_2, - } = spawn({ - cmd: [bunExe(), "install", "bar"], - cwd: join(package_dir, "packages", "package2"), - stdout: null, - stdin: "pipe", - stderr: "pipe", - env, - }); - expect(stderr1_2).toBeDefined(); - expect(stderr1_2).toBeDefined(); - const err1_2 = await new Response(stderr1_2).text(); - expect(err1_2).toContain("Saved lockfile"); - expect(stdout1_2).toBeDefined(); - const out1_2 = await new Response(stdout1_2).text(); - expect(out1_2).toContain("installed bar"); - expect(await exited1_2).toBe(0); - expect(urls.sort()).toEqual([`${root_url}/bar`, `${root_url}/bar-0.0.2.tgz`]); - await access(join(package_dir, "bun.lockb")); + { + const package1 = JSON.stringify({ + name: "package1", + version: "0.0.2", + }); + await writeFile(join(package_dir, "packages", "package1", "package.json"), package1); + } + { + const package2 = JSON.stringify({ + name: "package2", + version: "0.0.1", + dependencies: { + package1: "workspace:*", + }, + }); + await writeFile(join(package_dir, "packages", "package2", "package.json"), package2); + } + { + const package3 = JSON.stringify({ + name: "package3", + version: "0.0.1", + dependencies: { + package1: "workspace:^", + }, + }); + await writeFile(join(package_dir, "packages", "package3", "package.json"), package3); + } + { + const package4 = JSON.stringify({ + name: "package4", + version: "0.0.1", + dependencies: { + package1: "workspace:../package1", + }, + }); + await writeFile(join(package_dir, "packages", "package4", "package.json"), package4); + } + { + const package5 = JSON.stringify({ + name: "package5", + version: "0.0.1", + dependencies: { + package1: "workspace:0.0.2", + }, + }); + await writeFile(join(package_dir, "packages", "package5", "package.json"), package5); + } - await rm(join(package_dir, "node_modules"), { force: true, recursive: true }); - await rm(join(package_dir, "bun.lockb"), { force: true, recursive: true }); + const { + stdout: stdout1, + stderr: stderr1, + exited: exited1, + } = spawn({ + cmd: [bunExe(), "install"], + cwd: join(package_dir, "packages", "package2"), + stdout: null, + stdin: "pipe", + stderr: "pipe", + env, + }); + expect(stderr1).toBeDefined(); + const err1 = await new Response(stderr1).text(); + expect(err1).toContain("Saved lockfile"); + const out1 = await new Response(stdout1).text(); + expect(out1.replace(/\s*\[[0-9\.]+m?s\]\s*$/, "").split(/\r?\n/)).toEqual([ + " + package1@workspace:packages/package1", + " + package2@workspace:packages/package2", + " + package3@workspace:packages/package3", + " + package4@workspace:packages/package4", + " + package5@workspace:packages/package5", + "", + " 5 packages installed", + ]); + expect(await exited1).toBe(0); + await access(join(package_dir, "bun.lockb")); - const { - stdout: stdout2, - stderr: stderr2, - exited: exited2, - } = spawn({ - cmd: [bunExe(), "install"], - cwd: join(package_dir, "packages", "package3"), - stdout: null, - stdin: "pipe", - stderr: "pipe", - env, - }); - expect(stderr2).toBeDefined(); - const err2 = await new Response(stderr2).text(); - expect(err2).toContain("Saved lockfile"); - expect(stdout2).toBeDefined(); - const out2 = await new Response(stdout2).text(); - expect(out2.replace(/\s*\[[0-9\.]+m?s\]\s*$/, "").split(/\r?\n/)).toEqual([ - " + package1@workspace:packages/package1", - " + package2@workspace:packages/package2", - " + package3@workspace:packages/package3", - " + package4@workspace:packages/package4", - " + package5@workspace:packages/package5", - "", - " 6 packages installed", - ]); - expect(await exited2).toBe(0); + var urls: string[] = []; + setHandler(dummyRegistry(urls)); - const { - stdout: stdout2_2, - stderr: stderr2_2, - exited: exited2_2, - } = spawn({ - cmd: [bunExe(), "install", "bar"], - cwd: join(package_dir, "packages", "package3"), - stdout: null, - stdin: "pipe", - stderr: "pipe", - env, - }); - expect(stderr2_2).toBeDefined(); - expect(stderr2_2).toBeDefined(); - const err2_2 = await new Response(stderr2_2).text(); - expect(err2_2).toContain("Saved lockfile"); - expect(stdout2_2).toBeDefined(); - const out2_2 = await new Response(stdout2_2).text(); - expect(out2_2).toContain("installed bar"); - expect(await exited2_2).toBe(0); - await access(join(package_dir, "bun.lockb")); + const { + stdout: stdout1_2, + stderr: stderr1_2, + exited: exited1_2, + } = spawn({ + cmd: [bunExe(), "install", "bar"], + cwd: join(package_dir, "packages", "package2"), + stdout: null, + stdin: "pipe", + stderr: "pipe", + env, + }); + expect(stderr1_2).toBeDefined(); + expect(stderr1_2).toBeDefined(); + const err1_2 = await new Response(stderr1_2).text(); + expect(err1_2).toContain("Saved lockfile"); + expect(stdout1_2).toBeDefined(); + const out1_2 = await new Response(stdout1_2).text(); + expect(out1_2).toContain("installed bar"); + expect(await exited1_2).toBe(0); + expect(urls.sort()).toEqual([`${root_url}/bar`, `${root_url}/bar-0.0.2.tgz`]); + await access(join(package_dir, "bun.lockb")); - await rm(join(package_dir, "node_modules"), { force: true, recursive: true }); - await rm(join(package_dir, "bun.lockb"), { force: true, recursive: true }); + await rm(join(package_dir, "node_modules"), { force: true, recursive: true }); + await rm(join(package_dir, "bun.lockb"), { force: true, recursive: true }); - const { - stdout: stdout3, - stderr: stderr3, - exited: exited3, - } = spawn({ - cmd: [bunExe(), "install"], - cwd: join(package_dir, "packages", "package4"), - stdout: null, - stdin: "pipe", - stderr: "pipe", - env, - }); - expect(stderr2).toBeDefined(); - const err3 = await new Response(stderr3).text(); - expect(err3).toContain("Saved lockfile"); - expect(stdout3).toBeDefined(); - const out3 = await new Response(stdout3).text(); - expect(out3.replace(/\s*\[[0-9\.]+m?s\]\s*$/, "").split(/\r?\n/)).toEqual([ - " + package1@workspace:packages/package1", - " + package2@workspace:packages/package2", - " + package3@workspace:packages/package3", - " + package4@workspace:packages/package4", - " + package5@workspace:packages/package5", - "", - " 6 packages installed", - ]); - expect(await exited3).toBe(0); + const { + stdout: stdout2, + stderr: stderr2, + exited: exited2, + } = spawn({ + cmd: [bunExe(), "install"], + cwd: join(package_dir, "packages", "package3"), + stdout: null, + stdin: "pipe", + stderr: "pipe", + env, + }); + expect(stderr2).toBeDefined(); + const err2 = await new Response(stderr2).text(); + expect(err2).toContain("Saved lockfile"); + expect(stdout2).toBeDefined(); + const out2 = await new Response(stdout2).text(); + expect(out2.replace(/\s*\[[0-9\.]+m?s\]\s*$/, "").split(/\r?\n/)).toEqual([ + " + package1@workspace:packages/package1", + " + package2@workspace:packages/package2", + " + package3@workspace:packages/package3", + " + package4@workspace:packages/package4", + " + package5@workspace:packages/package5", + "", + " 6 packages installed", + ]); + expect(await exited2).toBe(0); + + const { + stdout: stdout2_2, + stderr: stderr2_2, + exited: exited2_2, + } = spawn({ + cmd: [bunExe(), "install", "bar"], + cwd: join(package_dir, "packages", "package3"), + stdout: null, + stdin: "pipe", + stderr: "pipe", + env, + }); + expect(stderr2_2).toBeDefined(); + expect(stderr2_2).toBeDefined(); + const err2_2 = await new Response(stderr2_2).text(); + expect(err2_2).toContain("Saved lockfile"); + expect(stdout2_2).toBeDefined(); + const out2_2 = await new Response(stdout2_2).text(); + expect(out2_2).toContain("installed bar"); + expect(await exited2_2).toBe(0); + await access(join(package_dir, "bun.lockb")); - const { - stdout: stdout3_2, - stderr: stderr3_2, - exited: exited3_2, - } = spawn({ - cmd: [bunExe(), "install", "bar"], - cwd: join(package_dir, "packages", "package4"), - stdout: null, - stdin: "pipe", - stderr: "pipe", - env, - }); - expect(stderr3_2).toBeDefined(); - expect(stderr3_2).toBeDefined(); - const err3_2 = await new Response(stderr3_2).text(); - expect(err3_2).toContain("Saved lockfile"); - expect(stdout3_2).toBeDefined(); - const out3_2 = await new Response(stdout3_2).text(); - expect(out3_2).toContain("installed bar"); - expect(await exited3_2).toBe(0); - await access(join(package_dir, "bun.lockb")); + await rm(join(package_dir, "node_modules"), { force: true, recursive: true }); + await rm(join(package_dir, "bun.lockb"), { force: true, recursive: true }); - await rm(join(package_dir, "node_modules"), { force: true, recursive: true }); - await rm(join(package_dir, "bun.lockb"), { force: true, recursive: true }); + const { + stdout: stdout3, + stderr: stderr3, + exited: exited3, + } = spawn({ + cmd: [bunExe(), "install"], + cwd: join(package_dir, "packages", "package4"), + stdout: null, + stdin: "pipe", + stderr: "pipe", + env, + }); + expect(stderr2).toBeDefined(); + const err3 = await new Response(stderr3).text(); + expect(err3).toContain("Saved lockfile"); + expect(stdout3).toBeDefined(); + const out3 = await new Response(stdout3).text(); + expect(out3.replace(/\s*\[[0-9\.]+m?s\]\s*$/, "").split(/\r?\n/)).toEqual([ + " + package1@workspace:packages/package1", + " + package2@workspace:packages/package2", + " + package3@workspace:packages/package3", + " + package4@workspace:packages/package4", + " + package5@workspace:packages/package5", + "", + " 6 packages installed", + ]); + expect(await exited3).toBe(0); + + const { + stdout: stdout3_2, + stderr: stderr3_2, + exited: exited3_2, + } = spawn({ + cmd: [bunExe(), "install", "bar"], + cwd: join(package_dir, "packages", "package4"), + stdout: null, + stdin: "pipe", + stderr: "pipe", + env, + }); + expect(stderr3_2).toBeDefined(); + expect(stderr3_2).toBeDefined(); + const err3_2 = await new Response(stderr3_2).text(); + expect(err3_2).toContain("Saved lockfile"); + expect(stdout3_2).toBeDefined(); + const out3_2 = await new Response(stdout3_2).text(); + expect(out3_2).toContain("installed bar"); + expect(await exited3_2).toBe(0); + await access(join(package_dir, "bun.lockb")); - const { - stdout: stdout4, - stderr: stderr4, - exited: exited4, - } = spawn({ - cmd: [bunExe(), "install"], - cwd: join(package_dir, "packages", "package5"), - stdout: null, - stdin: "pipe", - stderr: "pipe", - env, - }); - expect(stderr4).toBeDefined(); - const err4 = await new Response(stderr4).text(); - expect(err4).toContain("Saved lockfile"); - expect(stdout4).toBeDefined(); - const out4 = await new Response(stdout4).text(); - expect(out4.replace(/\s*\[[0-9\.]+m?s\]\s*$/, "").split(/\r?\n/)).toEqual([ - " + package1@workspace:packages/package1", - " + package2@workspace:packages/package2", - " + package3@workspace:packages/package3", - " + package4@workspace:packages/package4", - " + package5@workspace:packages/package5", - "", - " 6 packages installed", - ]); - expect(await exited4).toBe(0); + await rm(join(package_dir, "node_modules"), { force: true, recursive: true }); + await rm(join(package_dir, "bun.lockb"), { force: true, recursive: true }); - const { - stdout: stdout4_2, - stderr: stderr4_2, - exited: exited4_2, - } = spawn({ - cmd: [bunExe(), "install", "bar"], - cwd: join(package_dir, "packages", "package5"), - stdout: null, - stdin: "pipe", - stderr: "pipe", - env, - }); - expect(stderr4_2).toBeDefined(); - expect(stderr4_2).toBeDefined(); - const err4_2 = await new Response(stderr4_2).text(); - expect(err4_2).toContain("Saved lockfile"); - expect(stdout4_2).toBeDefined(); - const out4_2 = await new Response(stdout4_2).text(); - expect(out4_2).toContain("installed bar"); - expect(await exited4_2).toBe(0); - await access(join(package_dir, "bun.lockb")); + const { + stdout: stdout4, + stderr: stderr4, + exited: exited4, + } = spawn({ + cmd: [bunExe(), "install"], + cwd: join(package_dir, "packages", "package5"), + stdout: null, + stdin: "pipe", + stderr: "pipe", + env, + }); + expect(stderr4).toBeDefined(); + const err4 = await new Response(stderr4).text(); + expect(err4).toContain("Saved lockfile"); + expect(stdout4).toBeDefined(); + const out4 = await new Response(stdout4).text(); + expect(out4.replace(/\s*\[[0-9\.]+m?s\]\s*$/, "").split(/\r?\n/)).toEqual([ + " + package1@workspace:packages/package1", + " + package2@workspace:packages/package2", + " + package3@workspace:packages/package3", + " + package4@workspace:packages/package4", + " + package5@workspace:packages/package5", + "", + " 6 packages installed", + ]); + expect(await exited4).toBe(0); + + const { + stdout: stdout4_2, + stderr: stderr4_2, + exited: exited4_2, + } = spawn({ + cmd: [bunExe(), "install", "bar"], + cwd: join(package_dir, "packages", "package5"), + stdout: null, + stdin: "pipe", + stderr: "pipe", + env, + }); + expect(stderr4_2).toBeDefined(); + expect(stderr4_2).toBeDefined(); + const err4_2 = await new Response(stderr4_2).text(); + expect(err4_2).toContain("Saved lockfile"); + expect(stdout4_2).toBeDefined(); + const out4_2 = await new Response(stdout4_2).text(); + expect(out4_2).toContain("installed bar"); + expect(await exited4_2).toBe(0); + await access(join(package_dir, "bun.lockb")); - // from the root - await rm(join(package_dir, "node_modules"), { force: true, recursive: true }); - await rm(join(package_dir, "bun.lockb"), { force: true, recursive: true }); + // from the root + await rm(join(package_dir, "node_modules"), { force: true, recursive: true }); + await rm(join(package_dir, "bun.lockb"), { force: true, recursive: true }); - const { - stdout: stdout5, - stderr: stderr5, - exited: exited5, - } = spawn({ - cmd: [bunExe(), "install"], - cwd: join(package_dir), - stdout: null, - stdin: "pipe", - stderr: "pipe", - env, - }); - expect(stderr5).toBeDefined(); - const err5 = await new Response(stderr5).text(); - expect(err5).toContain("Saved lockfile"); - expect(stdout5).toBeDefined(); - const out5 = await new Response(stdout5).text(); - expect(out5.replace(/\s*\[[0-9\.]+m?s\]\s*$/, "").split(/\r?\n/)).toEqual([ - " + package1@workspace:packages/package1", - " + package2@workspace:packages/package2", - " + package3@workspace:packages/package3", - " + package4@workspace:packages/package4", - " + package5@workspace:packages/package5", - "", - " 6 packages installed", - ]); - expect(await exited5).toBe(0); + const { + stdout: stdout5, + stderr: stderr5, + exited: exited5, + } = spawn({ + cmd: [bunExe(), "install"], + cwd: join(package_dir), + stdout: null, + stdin: "pipe", + stderr: "pipe", + env, + }); + expect(stderr5).toBeDefined(); + const err5 = await new Response(stderr5).text(); + expect(err5).toContain("Saved lockfile"); + expect(stdout5).toBeDefined(); + const out5 = await new Response(stdout5).text(); + expect(out5.replace(/\s*\[[0-9\.]+m?s\]\s*$/, "").split(/\r?\n/)).toEqual([ + " + package1@workspace:packages/package1", + " + package2@workspace:packages/package2", + " + package3@workspace:packages/package3", + " + package4@workspace:packages/package4", + " + package5@workspace:packages/package5", + "", + " 6 packages installed", + ]); + expect(await exited5).toBe(0); + + const { + stdout: stdout5_2, + stderr: stderr5_2, + exited: exited5_2, + } = spawn({ + cmd: [bunExe(), "install", "bar"], + cwd: join(package_dir), + stdout: null, + stdin: "pipe", + stderr: "pipe", + env, + }); + expect(stderr5_2).toBeDefined(); + expect(stderr5_2).toBeDefined(); + const err5_2 = await new Response(stderr5_2).text(); + expect(err5_2).toContain("Saved lockfile"); + expect(stdout5_2).toBeDefined(); + const out5_2 = await new Response(stdout5_2).text(); + expect(out5_2).toContain("installed bar"); + expect(await exited5_2).toBe(0); + await access(join(package_dir, "bun.lockb")); - const { - stdout: stdout5_2, - stderr: stderr5_2, - exited: exited5_2, - } = spawn({ - cmd: [bunExe(), "install", "bar"], - cwd: join(package_dir), - stdout: null, - stdin: "pipe", - stderr: "pipe", - env, - }); - expect(stderr5_2).toBeDefined(); - expect(stderr5_2).toBeDefined(); - const err5_2 = await new Response(stderr5_2).text(); - expect(err5_2).toContain("Saved lockfile"); - expect(stdout5_2).toBeDefined(); - const out5_2 = await new Response(stdout5_2).text(); - expect(out5_2).toContain("installed bar"); - expect(await exited5_2).toBe(0); - await access(join(package_dir, "bun.lockb")); + await rm(join(package_dir, "node_modules"), { force: true, recursive: true }); + await rm(join(package_dir, "bun.lockb"), { force: true, recursive: true }); + await rm(join(package_dir, "package.json")); + } }); it("should override npm dependency by matching workspace", async () => { |