Skip to content

Commit 413f106

Browse files
authored
refactor test (#224)
1 parent 8be2f76 commit 413f106

1 file changed

Lines changed: 93 additions & 58 deletions

File tree

packages/core/src/checker.test.ts

Lines changed: 93 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,51 @@
11
import { describe, expect, test } from 'vitest';
22
import { checkCSSModule } from './checker.js';
3+
import { createExportBuilder } from './export-builder.js';
4+
import { resolve } from './path.js';
35
import { createResolver } from './resolver.js';
46
import { fakeCSSModule } from './test/css-module.js';
5-
import { fakeAtImportTokenImporter, fakeAtValueTokenImporter, fakeAtValueTokenImporterValue } from './test/token.js';
6-
import type { ExportBuilder } from './type.js';
7+
import {
8+
fakeAtImportTokenImporter,
9+
fakeAtValueTokenImporter,
10+
fakeAtValueTokenImporterValue,
11+
fakeToken,
12+
} from './test/token.js';
13+
import type { CSSModule } from './type.js';
714

815
const resolver = createResolver({}, undefined);
916

17+
function prepareCheckerArgs<const T extends CSSModule[]>(cssModules: T) {
18+
const getCSSModule = (path: string) => cssModules.find((m) => resolve(m.fileName) === resolve(path));
19+
const matchesPattern = (path: string) => path.endsWith('.module.css');
20+
const exportBuilder = createExportBuilder({
21+
getCSSModule,
22+
matchesPattern,
23+
resolver,
24+
});
25+
return { cssModules, exportBuilder, matchesPattern, resolver, getCSSModule };
26+
}
27+
1028
describe('checkCSSModule', () => {
1129
test('report diagnostics for non-existing module', () => {
12-
const cssModule = fakeCSSModule({
13-
fileName: '/a.module.css',
14-
tokenImporters: [
15-
fakeAtImportTokenImporter({ from: './b.module.css' }),
16-
fakeAtValueTokenImporter({ from: './c.module.css', values: [fakeAtValueTokenImporterValue({ name: 'c_1' })] }),
17-
],
18-
});
19-
const exportBuilder: ExportBuilder = {
20-
build: () => ({ allTokens: [] }),
21-
clearCache: () => {},
22-
};
23-
const matchesPattern = () => true;
24-
const getCSSModule = () => undefined;
25-
const diagnostics = checkCSSModule(cssModule, exportBuilder, matchesPattern, resolver, getCSSModule);
30+
const args = prepareCheckerArgs([
31+
fakeCSSModule({
32+
fileName: '/a.module.css',
33+
tokenImporters: [
34+
fakeAtImportTokenImporter({ from: './b.module.css' }),
35+
fakeAtValueTokenImporter({
36+
from: './c.module.css',
37+
values: [fakeAtValueTokenImporterValue({ name: 'c_1' })],
38+
}),
39+
],
40+
}),
41+
]);
42+
const diagnostics = checkCSSModule(
43+
args.cssModules[0],
44+
args.exportBuilder,
45+
args.matchesPattern,
46+
args.resolver,
47+
args.getCSSModule,
48+
);
2649
expect(diagnostics).toMatchInlineSnapshot(`
2750
[
2851
{
@@ -55,22 +78,28 @@ describe('checkCSSModule', () => {
5578
`);
5679
});
5780
test('report diagnostics for non-exported token', () => {
58-
const cssModule = fakeCSSModule({
59-
fileName: '/a.module.css',
60-
tokenImporters: [
61-
fakeAtValueTokenImporter({
62-
from: './b.module.css',
63-
values: [fakeAtValueTokenImporterValue({ name: 'b_1' }), fakeAtValueTokenImporterValue({ name: 'b_2' })],
64-
}),
65-
],
66-
});
67-
const exportBuilder: ExportBuilder = {
68-
build: () => ({ allTokens: ['b_1'] }),
69-
clearCache: () => {},
70-
};
71-
const matchesPattern = () => true;
72-
const getCSSModule = () => cssModule;
73-
const diagnostics = checkCSSModule(cssModule, exportBuilder, matchesPattern, resolver, getCSSModule);
81+
const args = prepareCheckerArgs([
82+
fakeCSSModule({
83+
fileName: '/a.module.css',
84+
tokenImporters: [
85+
fakeAtValueTokenImporter({
86+
from: './b.module.css',
87+
values: [fakeAtValueTokenImporterValue({ name: 'b_1' }), fakeAtValueTokenImporterValue({ name: 'b_2' })],
88+
}),
89+
],
90+
}),
91+
fakeCSSModule({
92+
fileName: '/b.module.css',
93+
localTokens: [fakeToken({ name: 'b_1' })],
94+
}),
95+
]);
96+
const diagnostics = checkCSSModule(
97+
args.cssModules[0],
98+
args.exportBuilder,
99+
args.matchesPattern,
100+
args.resolver,
101+
args.getCSSModule,
102+
);
74103
expect(diagnostics).toMatchInlineSnapshot(`
75104
[
76105
{
@@ -90,35 +119,41 @@ describe('checkCSSModule', () => {
90119
`);
91120
});
92121
test('ignore token importers for unresolvable modules', () => {
93-
const cssModule = fakeCSSModule({
94-
fileName: '/a.module.css',
95-
tokenImporters: [fakeAtImportTokenImporter({ from: './unresolvable.module.css' })],
96-
});
97-
const exportBuilder: ExportBuilder = {
98-
build: () => ({ allTokens: [] }),
99-
clearCache: () => {},
100-
};
101-
const matchesPattern = () => true;
102-
const resolver = () => undefined;
103-
const getCSSModule = () => undefined;
104-
const diagnostics = checkCSSModule(cssModule, exportBuilder, matchesPattern, resolver, getCSSModule);
122+
const args = prepareCheckerArgs([
123+
fakeCSSModule({
124+
fileName: '/a.module.css',
125+
tokenImporters: [fakeAtImportTokenImporter({ from: './unresolvable.module.css' })],
126+
}),
127+
]);
128+
const diagnostics = checkCSSModule(
129+
args.cssModules[0],
130+
args.exportBuilder,
131+
args.matchesPattern,
132+
() => undefined, // Simulate unresolvable module
133+
args.getCSSModule,
134+
);
105135
expect(diagnostics).toEqual([]);
106136
});
107137
test('ignore token importers that do not match the pattern', () => {
108-
const cssModule = fakeCSSModule({
109-
fileName: '/a.module.css',
110-
tokenImporters: [
111-
fakeAtImportTokenImporter({ from: './b.module.css' }),
112-
fakeAtValueTokenImporter({ from: './c.module.css', values: [fakeAtValueTokenImporterValue({ name: 'c_1' })] }),
113-
],
114-
});
115-
const exportBuilder: ExportBuilder = {
116-
build: () => ({ allTokens: [] }),
117-
clearCache: () => {},
118-
};
119-
const matchesPattern = () => false;
120-
const getCSSModule = () => undefined;
121-
const diagnostics = checkCSSModule(cssModule, exportBuilder, matchesPattern, resolver, getCSSModule);
138+
const args = prepareCheckerArgs([
139+
fakeCSSModule({
140+
fileName: '/a.module.css',
141+
tokenImporters: [
142+
fakeAtImportTokenImporter({ from: './b.module.css' }),
143+
fakeAtValueTokenImporter({
144+
from: './c.module.css',
145+
values: [fakeAtValueTokenImporterValue({ name: 'c_1' })],
146+
}),
147+
],
148+
}),
149+
]);
150+
const diagnostics = checkCSSModule(
151+
args.cssModules[0],
152+
args.exportBuilder,
153+
(path: string) => path === '/a.module.css', // Only match the current module
154+
args.resolver,
155+
args.getCSSModule,
156+
);
122157
expect(diagnostics).toEqual([]);
123158
});
124159
});

0 commit comments

Comments
 (0)