aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Dylan Conway <35280289+dylan-conway@users.noreply.github.com> 2023-04-06 13:58:01 -0700
committerGravatar GitHub <noreply@github.com> 2023-04-06 13:58:01 -0700
commit8a73c2a453fc3a569073f6f1f584369d657686f5 (patch)
treedb971ce71159decf6fcce6206ac0ef389290bafd
parent21978dabe554a65468cbed5868f13968fd1c9f69 (diff)
downloadbun-8a73c2a453fc3a569073f6f1f584369d657686f5.tar.gz
bun-8a73c2a453fc3a569073f6f1f584369d657686f5.tar.zst
bun-8a73c2a453fc3a569073f6f1f584369d657686f5.zip
cache needs to update, move to another process (#2578)
-rw-r--r--test/js/bun/resolve/resolve-test.js157
-rw-r--r--test/js/bun/resolve/resolve.test.js170
2 files changed, 171 insertions, 156 deletions
diff --git a/test/js/bun/resolve/resolve-test.js b/test/js/bun/resolve/resolve-test.js
new file mode 100644
index 000000000..bdc0f94b6
--- /dev/null
+++ b/test/js/bun/resolve/resolve-test.js
@@ -0,0 +1,157 @@
+import { it, expect } from "bun:test";
+import { join, resolve } from "path";
+
+function resolveFrom(from) {
+ return specifier => import.meta.resolveSync(specifier, from);
+}
+
+it("#imports", async () => {
+ const baz = await import.meta.resolve("#foo", join(await import.meta.resolve("package-json-imports/baz"), "../"));
+ expect(baz.endsWith("foo/private-foo.js")).toBe(true);
+
+ const subpath = await import.meta.resolve(
+ "#foo/bar",
+ join(await import.meta.resolve("package-json-imports/baz"), "../"),
+ );
+ expect(subpath.endsWith("foo/private-foo.js")).toBe(true);
+
+ const react = await import.meta.resolve(
+ "#internal-react",
+ join(await import.meta.resolve("package-json-imports/baz"), "../"),
+ );
+ expect(react.endsWith("/react/index.js")).toBe(true);
+
+ // Check that #foo is not resolved to the package.json file.
+ try {
+ await import.meta.resolve("#foo");
+ throw new Error("Test failed");
+ } catch (exception) {
+ expect(exception instanceof ResolveError).toBe(true);
+ expect(exception.referrer).toBe(import.meta.path);
+ expect(exception.name).toBe("ResolveError");
+ }
+
+ // Chcek that package-json-imports/#foo doesn't work
+ try {
+ await import.meta.resolve("package-json-imports/#foo");
+ throw new Error("Test failed");
+ } catch (exception) {
+ expect(exception instanceof ResolveError).toBe(true);
+ expect(exception.referrer).toBe(import.meta.path);
+ expect(exception.name).toBe("ResolveError");
+ }
+});
+
+it("#imports with wildcard", async () => {
+ const run = resolveFrom(resolve(import.meta.dir + "/node_modules/package-json-imports/package.json"));
+
+ const wildcard = resolve(import.meta.dir + "/node_modules/package-json-imports/foo/wildcard.js");
+ expect(run("#foo/wildcard.js")).toBe(wildcard);
+ expect(run("#foo/extensionless/wildcard")).toBe(wildcard);
+});
+
+it("import.meta.resolve", async () => {
+ expect(await import.meta.resolve("./resolve-test.test.js")).toBe(import.meta.path);
+
+ expect(await import.meta.resolve("./resolve-test.test.js", import.meta.path)).toBe(import.meta.path);
+
+ expect(
+ // optional second param can be any path, including a dir
+ await import.meta.resolve("./resolve/resolve-test.test.js", join(import.meta.path, "../")),
+ ).toBe(import.meta.path);
+
+ // can be a package path
+ expect((await import.meta.resolve("react", import.meta.path)).length > 0).toBe(true);
+
+ // file extensions are optional
+ expect(await import.meta.resolve("./resolve-test.test")).toBe(import.meta.path);
+
+ // works with tsconfig.json "paths"
+ expect(await import.meta.resolve("foo/bar")).toBe(join(import.meta.path, "../baz.js"));
+ expect(await import.meta.resolve("@faasjs/baz")).toBe(join(import.meta.path, "../baz.js"));
+
+ // works with package.json "exports"
+ expect(await import.meta.resolve("package-json-exports/baz")).toBe(
+ join(import.meta.path, "../node_modules/package-json-exports/foo/bar.js"),
+ );
+
+ // if they never exported /package.json, allow reading from it too
+ expect(await import.meta.resolve("package-json-exports/package.json")).toBe(
+ join(import.meta.path, "../node_modules/package-json-exports/package.json"),
+ );
+
+ // if an unnecessary ".js" extension was added, try against /baz
+ expect(await import.meta.resolve("package-json-exports/baz.js")).toBe(
+ join(import.meta.path, "../node_modules/package-json-exports/foo/bar.js"),
+ );
+
+ // works with TypeScript compiler edgecases like:
+ // - If the file ends with .js and it doesn't exist, try again with .ts and .tsx
+ expect(await import.meta.resolve("./resolve-typescript-file.js")).toBe(
+ join(import.meta.path, "../resolve-typescript-file.tsx"),
+ );
+ expect(await import.meta.resolve("./resolve-typescript-file.tsx")).toBe(
+ join(import.meta.path, "../resolve-typescript-file.tsx"),
+ );
+
+ // throws a ResolveError on failure
+ try {
+ await import.meta.resolve("THIS FILE DOESNT EXIST");
+ throw new Error("Test failed");
+ } catch (exception) {
+ expect(exception instanceof ResolveError).toBe(true);
+ expect(exception.referrer).toBe(import.meta.path);
+ expect(exception.name).toBe("ResolveError");
+ }
+});
+
+// the slightly lower level API, which doesn't prefill the second param
+// and expects a directory instead of a filepath
+it("Bun.resolve", async () => {
+ expect(await Bun.resolve("./resolve-test.test.js", import.meta.dir)).toBe(import.meta.path);
+});
+
+// synchronous
+it("Bun.resolveSync", () => {
+ expect(Bun.resolveSync("./resolve-test.test.js", import.meta.dir)).toBe(import.meta.path);
+});
+
+it("self-referencing imports works", async () => {
+ const baz = await import.meta.resolve("package-json-exports/baz");
+ const namespace = await import.meta.resolve("package-json-exports/references-baz");
+ Loader.registry.delete(baz);
+ Loader.registry.delete(namespace);
+ var a = await import(baz);
+ var b = await import(namespace);
+ expect(a.bar).toBe(1);
+ expect(b.bar).toBe(1);
+
+ Loader.registry.delete(baz);
+ Loader.registry.delete(namespace);
+ var a = await import("package-json-exports/baz");
+ var b = await import("package-json-exports/references-baz");
+ expect(a.bar).toBe(1);
+ expect(b.bar).toBe(1);
+
+ Loader.registry.delete(baz);
+ Loader.registry.delete(namespace);
+ var a = import.meta.require("package-json-exports/baz");
+ var b = import.meta.require("package-json-exports/references-baz");
+ expect(a.bar).toBe(1);
+ expect(b.bar).toBe(1);
+
+ Loader.registry.delete(baz);
+ Loader.registry.delete(namespace);
+ var a = import.meta.require(baz);
+ var b = import.meta.require(namespace);
+ expect(a.bar).toBe(1);
+ expect(b.bar).toBe(1);
+
+ // test that file:// works
+ Loader.registry.delete(baz);
+ Loader.registry.delete(namespace);
+ var a = import.meta.require("file://" + baz);
+ var b = import.meta.require("file://" + namespace);
+ expect(a.bar).toBe(1);
+ expect(b.bar).toBe(1);
+});
diff --git a/test/js/bun/resolve/resolve.test.js b/test/js/bun/resolve/resolve.test.js
index 65a6751d9..33bf510eb 100644
--- a/test/js/bun/resolve/resolve.test.js
+++ b/test/js/bun/resolve/resolve.test.js
@@ -1,166 +1,24 @@
import { it, expect } from "bun:test";
-import { mkdirSync, writeFileSync } from "fs";
-import { join, resolve } from "path";
+import { mkdirSync, writeFileSync, existsSync, rmSync, copyFileSync } from "fs";
+import { join } from "path";
+import { bunExe, bunEnv } from "harness";
-function resolveFrom(from) {
- return specifier => import.meta.resolveSync(specifier, from);
-}
-
-it("#imports", async () => {
- await writePackageJSONImportsFixture();
-
- const baz = await import.meta.resolve("#foo", join(await import.meta.resolve("package-json-imports/baz"), "../"));
- expect(baz.endsWith("foo/private-foo.js")).toBe(true);
-
- const subpath = await import.meta.resolve(
- "#foo/bar",
- join(await import.meta.resolve("package-json-imports/baz"), "../"),
- );
- expect(subpath.endsWith("foo/private-foo.js")).toBe(true);
-
- const react = await import.meta.resolve(
- "#internal-react",
- join(await import.meta.resolve("package-json-imports/baz"), "../"),
- );
- expect(react.endsWith("/react/index.js")).toBe(true);
-
- // Check that #foo is not resolved to the package.json file.
- try {
- await import.meta.resolve("#foo");
- throw new Error("Test failed");
- } catch (exception) {
- expect(exception instanceof ResolveError).toBe(true);
- expect(exception.referrer).toBe(import.meta.path);
- expect(exception.name).toBe("ResolveError");
- }
-
- // Chcek that package-json-imports/#foo doesn't work
- try {
- await import.meta.resolve("package-json-imports/#foo");
- throw new Error("Test failed");
- } catch (exception) {
- expect(exception instanceof ResolveError).toBe(true);
- expect(exception.referrer).toBe(import.meta.path);
- expect(exception.name).toBe("ResolveError");
- }
-});
-
-it("#imports with wildcard", async () => {
- await writePackageJSONImportsFixture();
- const run = resolveFrom(resolve(import.meta.dir + "/node_modules/package-json-imports/package.json"));
-
- const wildcard = resolve(import.meta.dir + "/node_modules/package-json-imports/foo/wildcard.js");
- expect(run("#foo/wildcard.js")).toBe(wildcard);
- expect(run("#foo/extensionless/wildcard")).toBe(wildcard);
-});
-
-it("import.meta.resolve", async () => {
- expect(await import.meta.resolve("./resolve.test.js")).toBe(import.meta.path);
-
- expect(await import.meta.resolve("./resolve.test.js", import.meta.path)).toBe(import.meta.path);
-
- expect(
- // optional second param can be any path, including a dir
- await import.meta.resolve("./resolve/resolve.test.js", join(import.meta.path, "../")),
- ).toBe(import.meta.path);
-
- // can be a package path
- expect((await import.meta.resolve("react", import.meta.path)).length > 0).toBe(true);
-
- // file extensions are optional
- expect(await import.meta.resolve("./resolve.test")).toBe(import.meta.path);
-
- // works with tsconfig.json "paths"
- expect(await import.meta.resolve("foo/bar")).toBe(join(import.meta.path, "../baz.js"));
- expect(await import.meta.resolve("@faasjs/baz")).toBe(join(import.meta.path, "../baz.js"));
-
- // works with package.json "exports"
+it("spawn test file", () => {
+ writePackageJSONImportsFixture();
writePackageJSONExportsFixture();
- expect(await import.meta.resolve("package-json-exports/baz")).toBe(
- join(import.meta.path, "../node_modules/package-json-exports/foo/bar.js"),
- );
-
- // if they never exported /package.json, allow reading from it too
- expect(await import.meta.resolve("package-json-exports/package.json")).toBe(
- join(import.meta.path, "../node_modules/package-json-exports/package.json"),
- );
-
- // if an unnecessary ".js" extension was added, try against /baz
- expect(await import.meta.resolve("package-json-exports/baz.js")).toBe(
- join(import.meta.path, "../node_modules/package-json-exports/foo/bar.js"),
- );
-
- // works with TypeScript compiler edgecases like:
- // - If the file ends with .js and it doesn't exist, try again with .ts and .tsx
- expect(await import.meta.resolve("./resolve-typescript-file.js")).toBe(
- join(import.meta.path, "../resolve-typescript-file.tsx"),
- );
- expect(await import.meta.resolve("./resolve-typescript-file.tsx")).toBe(
- join(import.meta.path, "../resolve-typescript-file.tsx"),
- );
-
- // throws a ResolveError on failure
- try {
- await import.meta.resolve("THIS FILE DOESNT EXIST");
- throw new Error("Test failed");
- } catch (exception) {
- expect(exception instanceof ResolveError).toBe(true);
- expect(exception.referrer).toBe(import.meta.path);
- expect(exception.name).toBe("ResolveError");
- }
-});
-
-// the slightly lower level API, which doesn't prefill the second param
-// and expects a directory instead of a filepath
-it("Bun.resolve", async () => {
- expect(await Bun.resolve("./resolve.test.js", import.meta.dir)).toBe(import.meta.path);
-});
-
-// synchronous
-it("Bun.resolveSync", () => {
- expect(Bun.resolveSync("./resolve.test.js", import.meta.dir)).toBe(import.meta.path);
-});
-
-it("self-referencing imports works", async () => {
- await writePackageJSONExportsFixture();
-
- const baz = await import.meta.resolve("package-json-exports/baz");
- const namespace = await import.meta.resolve("package-json-exports/references-baz");
- Loader.registry.delete(baz);
- Loader.registry.delete(namespace);
- var a = await import(baz);
- var b = await import(namespace);
- expect(a.bar).toBe(1);
- expect(b.bar).toBe(1);
- Loader.registry.delete(baz);
- Loader.registry.delete(namespace);
- var a = await import("package-json-exports/baz");
- var b = await import("package-json-exports/references-baz");
- expect(a.bar).toBe(1);
- expect(b.bar).toBe(1);
+ copyFileSync(join(import.meta.dir, "resolve-test.js"), join(import.meta.dir, "resolve-test.test.js"));
- Loader.registry.delete(baz);
- Loader.registry.delete(namespace);
- var a = import.meta.require("package-json-exports/baz");
- var b = import.meta.require("package-json-exports/references-baz");
- expect(a.bar).toBe(1);
- expect(b.bar).toBe(1);
+ const { exitCode } = Bun.spawnSync({
+ cmd: [bunExe(), "test", "resolve-test.test.js"],
+ env: bunEnv,
+ cwd: import.meta.dir,
+ });
- Loader.registry.delete(baz);
- Loader.registry.delete(namespace);
- var a = import.meta.require(baz);
- var b = import.meta.require(namespace);
- expect(a.bar).toBe(1);
- expect(b.bar).toBe(1);
+ expect(exitCode).toBe(0);
- // test that file:// works
- Loader.registry.delete(baz);
- Loader.registry.delete(namespace);
- var a = import.meta.require("file://" + baz);
- var b = import.meta.require("file://" + namespace);
- expect(a.bar).toBe(1);
- expect(b.bar).toBe(1);
+ rmSync(join(import.meta.dir, "resolve-test.test.js"));
+ expect(existsSync(join(import.meta.dir, "resolve-test.test.js"))).toBe(false);
});
function writePackageJSONExportsFixture() {