diff options
Diffstat (limited to 'test/js/bun/resolve/resolve.test.ts')
-rw-r--r-- | test/js/bun/resolve/resolve.test.ts | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/test/js/bun/resolve/resolve.test.ts b/test/js/bun/resolve/resolve.test.ts new file mode 100644 index 000000000..1b66f711f --- /dev/null +++ b/test/js/bun/resolve/resolve.test.ts @@ -0,0 +1,135 @@ +import { it, expect } from "bun:test"; +import { mkdirSync, writeFileSync, existsSync, rmSync, copyFileSync } from "fs"; +import { join } from "path"; +import { bunExe, bunEnv, tempDirWithFiles } from "harness"; + +it("spawn test file", () => { + writePackageJSONImportsFixture(); + writePackageJSONExportsFixture(); + + copyFileSync(join(import.meta.dir, "resolve-test.js"), join(import.meta.dir, "resolve-test.test.js")); + + const { exitCode } = Bun.spawnSync({ + cmd: [bunExe(), "test", "resolve-test.test.js"], + env: bunEnv, + cwd: import.meta.dir, + }); + + expect(exitCode).toBe(0); + + rmSync(join(import.meta.dir, "resolve-test.test.js")); + expect(existsSync(join(import.meta.dir, "resolve-test.test.js"))).toBe(false); +}); + +function writePackageJSONExportsFixture() { + try { + mkdirSync(join(import.meta.dir, "./node_modules/package-json-exports/foo"), { + recursive: true, + }); + } catch (exception) {} + writeFileSync(join(import.meta.dir, "./node_modules/package-json-exports/foo/bar.js"), "export const bar = 1;"); + writeFileSync( + join(import.meta.dir, "./node_modules/package-json-exports/foo/references-baz.js"), + "export {bar} from 'package-json-exports/baz';", + ); + writeFileSync( + join(import.meta.dir, "./node_modules/package-json-exports/package.json"), + JSON.stringify( + { + name: "package-json-exports", + exports: { + "./baz": "./foo/bar.js", + "./references-baz": "./foo/references-baz.js", + }, + }, + null, + 2, + ), + ); +} + +function writePackageJSONImportsFixture() { + try { + mkdirSync(join(import.meta.dir, "./node_modules/package-json-imports/foo"), { + recursive: true, + }); + } catch (exception) {} + writeFileSync(join(import.meta.dir, "./node_modules/package-json-imports/foo/bar.js"), "export const bar = 1;"); + writeFileSync( + join(import.meta.dir, "./node_modules/package-json-imports/foo/wildcard.js"), + "export const wildcard = 1;", + ); + writeFileSync( + join(import.meta.dir, "./node_modules/package-json-imports/foo/private-foo.js"), + "export {bar} from 'package-json-imports/#foo';", + ); + writeFileSync( + join(import.meta.dir, "./node_modules/package-json-imports/package.json"), + JSON.stringify( + { + name: "package-json-imports", + exports: { + "./baz": "./foo/bar.js", + }, + imports: { + "#foo/bar": "./foo/private-foo.js", + "#foo/*.js": "./foo/*.js", + "#foo/extensionless/*": "./foo/*.js", + "#foo": "./foo/private-foo.js", + + "#internal-react": "react", + }, + }, + null, + 2, + ), + ); +} + +it("file url in import resolves", async () => { + const dir = tempDirWithFiles("fileurl", { + "index.js": "export const foo = 1;", + }); + writeFileSync(`${dir}/test.js`, `import {foo} from 'file://${dir}/index.js';\nconsole.log(foo);`); + + console.log("dir", dir); + const { exitCode, stdout } = Bun.spawnSync({ + cmd: [bunExe(), `${dir}/test.js`], + env: bunEnv, + cwd: import.meta.dir, + }); + expect(exitCode).toBe(0); + expect(stdout.toString("utf8")).toBe("1\n"); +}); + +it("file url in await import resolves", async () => { + const dir = tempDirWithFiles("fileurl", { + "index.js": "export const foo = 1;", + }); + writeFileSync(`${dir}/test.js`, `const {foo} = await import('file://${dir}/index.js');\nconsole.log(foo);`); + + console.log("dir", dir); + const { exitCode, stdout } = Bun.spawnSync({ + cmd: [bunExe(), `${dir}/test.js`], + env: bunEnv, + cwd: import.meta.dir, + }); + expect(exitCode).toBe(0); + expect(stdout.toString("utf8")).toBe("1\n"); +}); + +it("file url in require resolves", async () => { + const dir = tempDirWithFiles("fileurl", { + "index.js": "export const foo = 1;", + }); + writeFileSync(`${dir}/test.js`, `const {foo} = require('file://${dir}/index.js');\nconsole.log(foo);`); + + console.log("dir", dir); + const { exitCode, stdout } = Bun.spawnSync({ + cmd: [bunExe(), `${dir}/test.js`], + env: bunEnv, + cwd: import.meta.dir, + }); + expect(exitCode).toBe(0); + expect(stdout.toString("utf8")).toBe("1\n"); +}); |