From 08c12a326c2b3a4e94fd642499be6382e64e8900 Mon Sep 17 00:00:00 2001 From: Drew Powers Date: Fri, 7 Feb 2025 17:22:54 -0700 Subject: [PATCH] Add test scaffolding --- eslint.config.mjs | 2 +- test/__snapshots__/build.test.ts.snap | 102 ++++++++++++++++++ test/build.test.ts | 51 +++++++++ .../{fixture => fixtures/default}/bin/cli.mjs | 0 .../default}/build.config.ts | 2 +- .../default}/build.preset.ts | 2 +- .../default}/package.json | 0 .../default}/src/index.mts | 0 .../default}/src/nested/subpath.ts | 0 .../default}/src/runtime/foo.ts | 0 .../default}/src/schema.ts | 0 .../default}/src/test.json | 0 .../mkdist-declaration/build.config.ts | 12 +++ test/fixtures/mkdist-declaration/src/a.ts | 3 + test/fixtures/mkdist-declaration/src/index.ts | 1 + .../fixtures/mkdist-sourcemap/build.config.ts | 12 +++ test/fixtures/mkdist-sourcemap/src/a.ts | 3 + test/fixtures/mkdist-sourcemap/src/index.ts | 1 + .../rollup-declaration/build.config.ts | 15 +++ test/fixtures/rollup-declaration/src/a.ts | 3 + test/fixtures/rollup-declaration/src/index.ts | 1 + .../fixtures/rollup-sourcemap/build.config.ts | 15 +++ test/fixtures/rollup-sourcemap/src/a.ts | 3 + test/fixtures/rollup-sourcemap/src/index.ts | 1 + test/validate.test.ts | 6 +- tsconfig.json | 3 +- 26 files changed, 232 insertions(+), 6 deletions(-) create mode 100644 test/__snapshots__/build.test.ts.snap create mode 100644 test/build.test.ts rename test/{fixture => fixtures/default}/bin/cli.mjs (100%) rename test/{fixture => fixtures/default}/build.config.ts (94%) rename test/{fixture => fixtures/default}/build.preset.ts (85%) rename test/{fixture => fixtures/default}/package.json (100%) rename test/{fixture => fixtures/default}/src/index.mts (100%) rename test/{fixture => fixtures/default}/src/nested/subpath.ts (100%) rename test/{fixture => fixtures/default}/src/runtime/foo.ts (100%) rename test/{fixture => fixtures/default}/src/schema.ts (100%) rename test/{fixture => fixtures/default}/src/test.json (100%) create mode 100644 test/fixtures/mkdist-declaration/build.config.ts create mode 100644 test/fixtures/mkdist-declaration/src/a.ts create mode 100644 test/fixtures/mkdist-declaration/src/index.ts create mode 100644 test/fixtures/mkdist-sourcemap/build.config.ts create mode 100644 test/fixtures/mkdist-sourcemap/src/a.ts create mode 100644 test/fixtures/mkdist-sourcemap/src/index.ts create mode 100644 test/fixtures/rollup-declaration/build.config.ts create mode 100644 test/fixtures/rollup-declaration/src/a.ts create mode 100644 test/fixtures/rollup-declaration/src/index.ts create mode 100644 test/fixtures/rollup-sourcemap/build.config.ts create mode 100644 test/fixtures/rollup-sourcemap/src/a.ts create mode 100644 test/fixtures/rollup-sourcemap/src/index.ts diff --git a/eslint.config.mjs b/eslint.config.mjs index da993ad2..867645eb 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -4,7 +4,7 @@ import unjs from "eslint-config-unjs"; export default unjs({ ignores: [ ".git", - "test/fixture/dist" + "test/fixtures/**/dist" ], rules: { "unicorn/no-null": 0, diff --git a/test/__snapshots__/build.test.ts.snap b/test/__snapshots__/build.test.ts.snap new file mode 100644 index 00000000..07b26446 --- /dev/null +++ b/test/__snapshots__/build.test.ts.snap @@ -0,0 +1,102 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`Build fixtures > declaration (mkdist) 1`] = ` +"export declare function foo(): number; +" +`; + +exports[`Build fixtures > declaration (mkdist) 2`] = ` +"export function foo() { + return 42; +} +" +`; + +exports[`Build fixtures > declaration (mkdist) 3`] = ` +"export { foo } from "./a.js"; +" +`; + +exports[`Build fixtures > declaration (mkdist) 4`] = ` +"export { foo } from "./a.js"; +" +`; + +exports[`Build fixtures > declaration (rollup) 1`] = ` +"'use strict'; + +function foo() { + return 42; +} + +exports.foo = foo; +" +`; + +exports[`Build fixtures > declaration (rollup) 2`] = ` +"declare function foo(): number; + +export { foo }; +" +`; + +exports[`Build fixtures > declaration (rollup) 3`] = ` +"declare function foo(): number; + +export { foo }; +" +`; + +exports[`Build fixtures > declaration (rollup) 4`] = ` +"declare function foo(): number; + +export { foo }; +" +`; + +exports[`Build fixtures > declaration (rollup) 5`] = ` +"function foo() { + return 42; +} + +export { foo }; +" +`; + +exports[`Build fixtures > sourcemap (mkdist) 1`] = ` +"export function foo() { + return 42; +} +" +`; + +exports[`Build fixtures > sourcemap (mkdist) 2`] = ` +"export { foo } from "./a.js"; +" +`; + +exports[`Build fixtures > sourcemap (rollup) 1`] = ` +"'use strict'; + +function foo() { + return 42; +} + +exports.foo = foo; +//# sourceMappingURL=index.cjs.map +" +`; + +exports[`Build fixtures > sourcemap (rollup) 2`] = `"{"version":3,"file":"index.cjs","sources":["../src/a.ts"],"sourcesContent":["export function foo(): number {\\n return 42;\\n}\\n"],"names":[],"mappings":";;AAAO,SAAS,GAAc,GAAA;AAC5B,EAAO,OAAA,EAAA;AACT;;;;"}"`; + +exports[`Build fixtures > sourcemap (rollup) 3`] = ` +"function foo() { + return 42; +} + +export { foo }; +//# sourceMappingURL=index.mjs.map +" +`; + +exports[`Build fixtures > sourcemap (rollup) 4`] = `"{"version":3,"file":"index.mjs","sources":["../src/a.ts"],"sourcesContent":["export function foo(): number {\\n return 42;\\n}\\n"],"names":[],"mappings":"AAAO,SAAS,GAAc,GAAA;AAC5B,EAAO,OAAA,EAAA;AACT;;;;"}"`; diff --git a/test/build.test.ts b/test/build.test.ts new file mode 100644 index 00000000..029f06f0 --- /dev/null +++ b/test/build.test.ts @@ -0,0 +1,51 @@ +import { describe, it, expect } from "vitest"; +import fs from "node:fs"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import { build } from "../src/index.js"; + +type BuildConfig = Parameters[2]; + +describe("Build fixtures", () => { + const tests: [string, BuildConfig & { dir: string }][] = [ + [ + "declaration (mkdist)", + { + dir: "fixtures/mkdist-declaration", + }, + ], + [ + "sourcemap (mkdist)", + { + dir: "fixtures/mkdist-sourcemap", + }, + ], + [ + "declaration (rollup)", + { + dir: "fixtures/rollup-declaration", + }, + ], + [ + "sourcemap (rollup)", + { + dir: "fixtures/rollup-sourcemap", + }, + ], + ]; + + it.each(tests)("%s", async (_, { dir, ...buildOptions }) => { + const cwd = new URL(dir.replace(/\/?$/, "/"), import.meta.url); + await build(fileURLToPath(cwd), false, buildOptions); + for (const file of fs.readdirSync(new URL("dist/", cwd), { + recursive: true, + withFileTypes: true, + })) { + if (file.isFile()) { + expect( + fs.readFileSync(path.join(file.parentPath, file.name), "utf8"), + ).toMatchSnapshot(); + } + } + }); +}); diff --git a/test/fixture/bin/cli.mjs b/test/fixtures/default/bin/cli.mjs similarity index 100% rename from test/fixture/bin/cli.mjs rename to test/fixtures/default/bin/cli.mjs diff --git a/test/fixture/build.config.ts b/test/fixtures/default/build.config.ts similarity index 94% rename from test/fixture/build.config.ts rename to test/fixtures/default/build.config.ts index 985309b5..27b1726f 100644 --- a/test/fixture/build.config.ts +++ b/test/fixtures/default/build.config.ts @@ -1,4 +1,4 @@ -import { defineBuildConfig } from "../../src"; +import { defineBuildConfig } from "../../../src"; export default defineBuildConfig([ // Auto preset diff --git a/test/fixture/build.preset.ts b/test/fixtures/default/build.preset.ts similarity index 85% rename from test/fixture/build.preset.ts rename to test/fixtures/default/build.preset.ts index 60db3f07..36bc5f11 100644 --- a/test/fixture/build.preset.ts +++ b/test/fixtures/default/build.preset.ts @@ -1,4 +1,4 @@ -import { definePreset } from "../../src"; +import { definePreset } from "../../../src"; export default definePreset({ declaration: "compatible", diff --git a/test/fixture/package.json b/test/fixtures/default/package.json similarity index 100% rename from test/fixture/package.json rename to test/fixtures/default/package.json diff --git a/test/fixture/src/index.mts b/test/fixtures/default/src/index.mts similarity index 100% rename from test/fixture/src/index.mts rename to test/fixtures/default/src/index.mts diff --git a/test/fixture/src/nested/subpath.ts b/test/fixtures/default/src/nested/subpath.ts similarity index 100% rename from test/fixture/src/nested/subpath.ts rename to test/fixtures/default/src/nested/subpath.ts diff --git a/test/fixture/src/runtime/foo.ts b/test/fixtures/default/src/runtime/foo.ts similarity index 100% rename from test/fixture/src/runtime/foo.ts rename to test/fixtures/default/src/runtime/foo.ts diff --git a/test/fixture/src/schema.ts b/test/fixtures/default/src/schema.ts similarity index 100% rename from test/fixture/src/schema.ts rename to test/fixtures/default/src/schema.ts diff --git a/test/fixture/src/test.json b/test/fixtures/default/src/test.json similarity index 100% rename from test/fixture/src/test.json rename to test/fixtures/default/src/test.json diff --git a/test/fixtures/mkdist-declaration/build.config.ts b/test/fixtures/mkdist-declaration/build.config.ts new file mode 100644 index 00000000..84ece834 --- /dev/null +++ b/test/fixtures/mkdist-declaration/build.config.ts @@ -0,0 +1,12 @@ +import { defineBuildConfig } from "../../../src/index.js"; + +export default defineBuildConfig({ + entries: [ + { + input: "./src/", + builder: "mkdist", + }, + ], + outDir: "./dist/", + declaration: true, +}); diff --git a/test/fixtures/mkdist-declaration/src/a.ts b/test/fixtures/mkdist-declaration/src/a.ts new file mode 100644 index 00000000..01e79f43 --- /dev/null +++ b/test/fixtures/mkdist-declaration/src/a.ts @@ -0,0 +1,3 @@ +export function foo(): number { + return 42; +} diff --git a/test/fixtures/mkdist-declaration/src/index.ts b/test/fixtures/mkdist-declaration/src/index.ts new file mode 100644 index 00000000..df65760a --- /dev/null +++ b/test/fixtures/mkdist-declaration/src/index.ts @@ -0,0 +1 @@ +export { foo } from "./a.js"; diff --git a/test/fixtures/mkdist-sourcemap/build.config.ts b/test/fixtures/mkdist-sourcemap/build.config.ts new file mode 100644 index 00000000..b68e0b0d --- /dev/null +++ b/test/fixtures/mkdist-sourcemap/build.config.ts @@ -0,0 +1,12 @@ +import { defineBuildConfig } from "../../../src/index.js"; + +export default defineBuildConfig({ + entries: [ + { + input: "./src/", + builder: "mkdist", + }, + ], + outDir: "./dist/", + sourcemap: true, +}); diff --git a/test/fixtures/mkdist-sourcemap/src/a.ts b/test/fixtures/mkdist-sourcemap/src/a.ts new file mode 100644 index 00000000..01e79f43 --- /dev/null +++ b/test/fixtures/mkdist-sourcemap/src/a.ts @@ -0,0 +1,3 @@ +export function foo(): number { + return 42; +} diff --git a/test/fixtures/mkdist-sourcemap/src/index.ts b/test/fixtures/mkdist-sourcemap/src/index.ts new file mode 100644 index 00000000..df65760a --- /dev/null +++ b/test/fixtures/mkdist-sourcemap/src/index.ts @@ -0,0 +1 @@ +export { foo } from "./a.js"; diff --git a/test/fixtures/rollup-declaration/build.config.ts b/test/fixtures/rollup-declaration/build.config.ts new file mode 100644 index 00000000..1592426c --- /dev/null +++ b/test/fixtures/rollup-declaration/build.config.ts @@ -0,0 +1,15 @@ +import { defineBuildConfig } from "../../../src/index.js"; + +export default defineBuildConfig({ + entries: [ + { + input: "./src/index.ts", + builder: "rollup", + }, + ], + outDir: "./dist/", + declaration: true, + rollup: { + emitCJS: true, + }, +}); diff --git a/test/fixtures/rollup-declaration/src/a.ts b/test/fixtures/rollup-declaration/src/a.ts new file mode 100644 index 00000000..01e79f43 --- /dev/null +++ b/test/fixtures/rollup-declaration/src/a.ts @@ -0,0 +1,3 @@ +export function foo(): number { + return 42; +} diff --git a/test/fixtures/rollup-declaration/src/index.ts b/test/fixtures/rollup-declaration/src/index.ts new file mode 100644 index 00000000..df65760a --- /dev/null +++ b/test/fixtures/rollup-declaration/src/index.ts @@ -0,0 +1 @@ +export { foo } from "./a.js"; diff --git a/test/fixtures/rollup-sourcemap/build.config.ts b/test/fixtures/rollup-sourcemap/build.config.ts new file mode 100644 index 00000000..cc4b3ab7 --- /dev/null +++ b/test/fixtures/rollup-sourcemap/build.config.ts @@ -0,0 +1,15 @@ +import { defineBuildConfig } from "../../../src/index.js"; + +export default defineBuildConfig({ + entries: [ + { + input: "./src/index.ts", + builder: "rollup", + }, + ], + outDir: "./dist/", + sourcemap: true, + rollup: { + emitCJS: true, + }, +}); diff --git a/test/fixtures/rollup-sourcemap/src/a.ts b/test/fixtures/rollup-sourcemap/src/a.ts new file mode 100644 index 00000000..01e79f43 --- /dev/null +++ b/test/fixtures/rollup-sourcemap/src/a.ts @@ -0,0 +1,3 @@ +export function foo(): number { + return 42; +} diff --git a/test/fixtures/rollup-sourcemap/src/index.ts b/test/fixtures/rollup-sourcemap/src/index.ts new file mode 100644 index 00000000..df65760a --- /dev/null +++ b/test/fixtures/rollup-sourcemap/src/index.ts @@ -0,0 +1 @@ +export { foo } from "./a.js"; diff --git a/test/validate.test.ts b/test/validate.test.ts index ddf4f11b..edefd98d 100644 --- a/test/validate.test.ts +++ b/test/validate.test.ts @@ -1,15 +1,17 @@ import type { BuildEntry } from "../src/types.ts"; import { fileURLToPath } from "node:url"; import { consola } from "consola"; -import { join } from "pathe"; import { describe, it, expect } from "vitest"; import { validateDependencies, validatePackage } from "../src/validate"; +const FIXTURES_DIR = new URL("fixtures/", import.meta.url); + describe("validatePackage", () => { it("detects missing files", () => { const buildContext = { warnings: new Set(), } as any; + const cwd = new URL("default/", FIXTURES_DIR); validatePackage( { @@ -23,7 +25,7 @@ describe("validatePackage", () => { ".": { node: "./src/index.mts" }, }, }, - join(fileURLToPath(import.meta.url), "../fixture"), + fileURLToPath(cwd), buildContext, ); diff --git a/tsconfig.json b/tsconfig.json index 06c6a5ee..a7502439 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -17,5 +17,6 @@ "noImplicitOverride": true, "noEmit": true }, - "include": ["src", "test"] + "include": ["src", "test"], + "exclude": ["test/fixtures/**/dist"] }