1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
|
import { spawn } from "bun";
import { afterEach, beforeEach, expect, it } from "bun:test";
import { bunExe, bunEnv as env } from "harness";
import { mkdtemp, realpath, rm, writeFile } from "fs/promises";
import { tmpdir } from "os";
import { join } from "path";
import { readdirSorted } from "./dummy.registry";
let x_dir: string;
beforeEach(async () => {
x_dir = await realpath(await mkdtemp(join(tmpdir(), "bun-x.test")));
});
afterEach(async () => {
await rm(x_dir, { force: true, recursive: true });
});
it("should install and run default (latest) version", async () => {
const { stdout, stderr, exited } = spawn({
cmd: [bunExe(), "x", "uglify-js", "--compress"],
cwd: x_dir,
stdout: null,
stdin: new TextEncoder().encode("console.log(6 * 7);"),
stderr: "pipe",
env,
});
expect(stderr).toBeDefined();
const err = await new Response(stderr).text();
expect(err).not.toContain("error");
expect(stdout).toBeDefined();
const out = await new Response(stdout).text();
expect(out.split(/\r?\n/)).toEqual(["console.log(42);", ""]);
expect(await exited).toBe(0);
});
it("should install and run specified version", async () => {
const { stdout, stderr, exited } = spawn({
cmd: [bunExe(), "x", "uglify-js@3.14.1", "-v"],
cwd: x_dir,
stdout: null,
stdin: "pipe",
stderr: "pipe",
env,
});
expect(stderr).toBeDefined();
const err = await new Response(stderr).text();
expect(err).not.toContain("error");
expect(stdout).toBeDefined();
const out = await new Response(stdout).text();
expect(out.split(/\r?\n/)).toEqual(["uglify-js 3.14.1", ""]);
expect(await exited).toBe(0);
});
it("should output usage if no arguments are passed", async () => {
const { stdout, stderr, exited } = spawn({
cmd: [bunExe(), "x"],
cwd: x_dir,
stdout: null,
stdin: "pipe",
stderr: "pipe",
env,
});
expect(stderr).toBeDefined();
const err = await new Response(stderr).text();
expect(err).toContain("usage: ");
expect(stdout).toBeDefined();
const out = await new Response(stdout).text();
expect(out).toHaveLength(0);
expect(await exited).toBe(1);
});
it("should work for @scoped packages", async () => {
await rm(join(await realpath(tmpdir()), "@withfig"), { force: true, recursive: true });
// without cache
const withoutCache = spawn({
cmd: [bunExe(), "x", "@withfig/autocomplete-tools", "--help"],
cwd: x_dir,
stdout: null,
stdin: "pipe",
stderr: "pipe",
env,
});
expect(withoutCache.stderr).toBeDefined();
let err = await new Response(withoutCache.stderr).text();
expect(err).not.toContain("error");
expect(withoutCache.stdout).toBeDefined();
let out = await new Response(withoutCache.stdout).text();
expect(out.trim()).toContain("Usage: @withfig/autocomplete-tool");
expect(await withoutCache.exited).toBe(0);
// cached
const cached = spawn({
cmd: [bunExe(), "x", "@withfig/autocomplete-tools", "--help"],
cwd: x_dir,
stdout: null,
stdin: "pipe",
stderr: "pipe",
env,
});
expect(cached.stderr).toBeDefined();
err = await new Response(cached.stderr).text();
expect(err).not.toContain("error");
expect(cached.stdout).toBeDefined();
out = await new Response(cached.stdout).text();
expect(out.trim()).toContain("Usage: @withfig/autocomplete-tool");
expect(await cached.exited).toBe(0);
});
it("should execute from current working directory", async () => {
await writeFile(
join(x_dir, "test.js"),
`
console.log(
6
*
7
)`,
);
const { stdout, stderr, exited } = spawn({
cmd: [bunExe(), "--bun", "x", "uglify-js", "test.js", "--compress"],
cwd: x_dir,
stdout: null,
stdin: "pipe",
stderr: "pipe",
env,
});
expect(stderr).toBeDefined();
const err = await new Response(stderr).text();
expect(err).not.toContain("error");
expect(stdout).toBeDefined();
const out = await new Response(stdout).text();
expect(out.split(/\r?\n/)).toEqual(["console.log(42);", ""]);
expect(await exited).toBe(0);
expect(await readdirSorted(x_dir)).toEqual(["test.js"]);
});
|