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
|
import { expect, it } from "bun:test";
import { bunExe } from "./bunExe.ts";
import { bunEnv } from "./bunEnv.ts";
import { mkdirSync, rmSync, writeFileSync, readFileSync } from "fs";
it("JSON strings escaped properly", async () => {
const testDir = import.meta.dir + "/repro_631/";
// Clean up from prior runs if necessary
rmSync(testDir, { recursive: true });
// Create a directory with our test package file
mkdirSync(testDir);
writeFileSync(testDir + "package.json", String.raw`{"testRegex":"\\a\n\\b\\"}`);
// Attempt to add a package, causing the package file to be parsed, modified,
// written, and reparsed. This verifies that escaped backslashes in JSON
// survive the roundtrip
const {exitCode, stderr} = Bun.spawnSync({
cmd: [bunExe(), "add", "left-pad"],
env: bunEnv,
cwd: testDir
});
console.log(stderr.toString());
expect(exitCode).toBe(0);
const packageContents = readFileSync(testDir + "package.json", { encoding: "utf8" });
expect(packageContents).toBe(String.raw
`{
"testRegex": "\\a\n\\b\\",
"dependencies": {
"left-pad": "^1.3.0"
}
}`);
//// If successful clean up test artifacts
rmSync(testDir, { recursive: true });
})
|