Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Suggestion] Add test scaffolding #502

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion eslint.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
102 changes: 102 additions & 0 deletions test/__snapshots__/build.test.ts.snap
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html

exports[`Build fixtures > declaration (mkdist) > a.d.ts 1`] = `
"export declare function foo(): number;
"
`;

exports[`Build fixtures > declaration (mkdist) > a.mjs 1`] = `
"export function foo() {
return 42;
}
"
`;

exports[`Build fixtures > declaration (mkdist) > index.d.ts 1`] = `
"export { foo } from "./a.js";
"
`;

exports[`Build fixtures > declaration (mkdist) > index.mjs 1`] = `
"export { foo } from "./a.js";
"
`;

exports[`Build fixtures > declaration (rollup) > index.cjs 1`] = `
"'use strict';

function foo() {
return 42;
}

exports.foo = foo;
"
`;

exports[`Build fixtures > declaration (rollup) > index.d.cts 1`] = `
"declare function foo(): number;

export { foo };
"
`;

exports[`Build fixtures > declaration (rollup) > index.d.mts 1`] = `
"declare function foo(): number;

export { foo };
"
`;

exports[`Build fixtures > declaration (rollup) > index.d.ts 1`] = `
"declare function foo(): number;

export { foo };
"
`;

exports[`Build fixtures > declaration (rollup) > index.mjs 1`] = `
"function foo() {
return 42;
}

export { foo };
"
`;

exports[`Build fixtures > sourcemap (mkdist) > a.mjs 1`] = `
"export function foo() {
return 42;
}
"
`;

exports[`Build fixtures > sourcemap (mkdist) > index.mjs 1`] = `
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note: this test revealed that mkdist doesn’t support sourcemap: true. Should it?

I figured that this test is just a recording of the current behavior (and can surface other bugs like this!)

"export { foo } from "./a.js";
"
`;

exports[`Build fixtures > sourcemap (rollup) > index.cjs 1`] = `
"'use strict';

function foo() {
return 42;
}

exports.foo = foo;
//# sourceMappingURL=index.cjs.map
"
`;

exports[`Build fixtures > sourcemap (rollup) > index.cjs.map 1`] = `"{"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) > index.mjs 1`] = `
"function foo() {
return 42;
}

export { foo };
//# sourceMappingURL=index.mjs.map
"
`;

exports[`Build fixtures > sourcemap (rollup) > index.mjs.map 1`] = `"{"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;;;;"}"`;
51 changes: 51 additions & 0 deletions test/build.test.ts
Original file line number Diff line number Diff line change
@@ -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<typeof build>[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);
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note: the tests are set up to allow any build options if needed, even though this currently doesn’t take use of that. But we could test stubs, etc. if needed! (Should we add more tests for those?)

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(file.name);
}
}
});
});
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { defineBuildConfig } from "../../src";
import { defineBuildConfig } from "../../../src";

export default defineBuildConfig([
// Auto preset
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { definePreset } from "../../src";
import { definePreset } from "../../../src";

export default definePreset({
declaration: "compatible",
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
12 changes: 12 additions & 0 deletions test/fixtures/mkdist-declaration/build.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { defineBuildConfig } from "../../../src/index.js";

export default defineBuildConfig({
entries: [
{
input: "./src/",
builder: "mkdist",
},
],
outDir: "./dist/",
declaration: true,
});
3 changes: 3 additions & 0 deletions test/fixtures/mkdist-declaration/src/a.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export function foo(): number {
return 42;
}
1 change: 1 addition & 0 deletions test/fixtures/mkdist-declaration/src/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export { foo } from "./a.js";
12 changes: 12 additions & 0 deletions test/fixtures/mkdist-sourcemap/build.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { defineBuildConfig } from "../../../src/index.js";

export default defineBuildConfig({
entries: [
{
input: "./src/",
builder: "mkdist",
},
],
outDir: "./dist/",
sourcemap: true,
});
3 changes: 3 additions & 0 deletions test/fixtures/mkdist-sourcemap/src/a.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export function foo(): number {
return 42;
}
1 change: 1 addition & 0 deletions test/fixtures/mkdist-sourcemap/src/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export { foo } from "./a.js";
15 changes: 15 additions & 0 deletions test/fixtures/rollup-declaration/build.config.ts
Original file line number Diff line number Diff line change
@@ -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,
},
});
3 changes: 3 additions & 0 deletions test/fixtures/rollup-declaration/src/a.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export function foo(): number {
return 42;
}
1 change: 1 addition & 0 deletions test/fixtures/rollup-declaration/src/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export { foo } from "./a.js";
15 changes: 15 additions & 0 deletions test/fixtures/rollup-sourcemap/build.config.ts
Original file line number Diff line number Diff line change
@@ -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,
},
});
3 changes: 3 additions & 0 deletions test/fixtures/rollup-sourcemap/src/a.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export function foo(): number {
return 42;
}
1 change: 1 addition & 0 deletions test/fixtures/rollup-sourcemap/src/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export { foo } from "./a.js";
2 changes: 1 addition & 1 deletion test/validate.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ describe("validatePackage", () => {
".": { node: "./src/index.mts" },
},
},
join(fileURLToPath(import.meta.url), "../fixture"),
join(fileURLToPath(import.meta.url), "../fixtures/default"),
buildContext,
);

Expand Down
3 changes: 2 additions & 1 deletion tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,6 @@
"noImplicitOverride": true,
"noEmit": true
},
"include": ["src", "test"]
"include": ["src", "test"],
"exclude": ["test/fixtures/**/dist"]
}