45 lines
1.5 KiB
TypeScript
45 lines
1.5 KiB
TypeScript
import { describe, expect, it } from "bun:test";
|
|||
|
|
import { mkdirSync, readFileSync, rmSync, writeFileSync } from "fs";
|
||
|
|
import { join } from "path";
|
||
|
|
import { bunEnv, bunExe, tmpdirSync } from "../../harness.js";
|
||
|
|
|
||
|
|
describe.concurrent("issue/00631", () => {
|
||
|
|
it("JSON strings escaped properly", async () => {
|
||
|
|
const testDir = tmpdirSync();
|
||
|
|
|
||
|
|
// Clean up from prior runs if necessary
|
||
|
|
rmSync(testDir, { recursive: true, force: true });
|
||
|
|
|
||
|
|
// Create a directory with our test package file
|
||
|
|
mkdirSync(testDir, { recursive: true });
|
||
|
|
writeFileSync(join(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
|
||
|
|
await using proc = Bun.spawn({
|
||
|
|
cmd: [bunExe(), "add", "left-pad"],
|
||
|
|
env: bunEnv,
|
||
|
|
cwd: testDir,
|
||
|
|
stdout: "pipe",
|
||
|
|
stderr: "pipe",
|
||
|
|
});
|
||
|
|
const [stderr, exitCode] = await Promise.all([proc.stderr.text(), proc.exited]);
|
||
|
|
if (exitCode !== 0) {
|
||
|
|
console.log(stderr);
|
||
|
|
}
|
||
|
|
expect(exitCode).toBe(0);
|
||
|
|
|
||
|
|
const packageContents = readFileSync(join(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 });
|
||
|
|
});
|
||
|
|
});
|