Skip to content

Commit 25504f5

Browse files
committed
refactor test
1 parent 8be2f76 commit 25504f5

1 file changed

Lines changed: 92 additions & 58 deletions

File tree

packages/core/src/checker.test.ts

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

814
const resolver = createResolver({}, undefined);
915

16+
function prepareCheckerArgs<const T extends CSSModule[]>(cssModules: T) {
17+
const getCSSModule = (path: string) => cssModules.find((m) => m.fileName === path);
18+
const matchesPattern = (path: string) => path.endsWith('.module.css');
19+
const exportBuilder = createExportBuilder({
20+
getCSSModule,
21+
matchesPattern,
22+
resolver,
23+
});
24+
return { cssModules, exportBuilder, matchesPattern, resolver, getCSSModule };
25+
}
26+
1027
describe('checkCSSModule', () => {
1128
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);
29+
const args = prepareCheckerArgs([
30+
fakeCSSModule({
31+
fileName: '/a.module.css',
32+
tokenImporters: [
33+
fakeAtImportTokenImporter({ from: './b.module.css' }),
34+
fakeAtValueTokenImporter({
35+
from: './c.module.css',
36+
values: [fakeAtValueTokenImporterValue({ name: 'c_1' })],
37+
}),
38+
],
39+
}),
40+
]);
41+
const diagnostics = checkCSSModule(
42+
args.cssModules[0],
43+
args.exportBuilder,
44+
args.matchesPattern,
45+
args.resolver,
46+
args.getCSSModule,
47+
);
2648
expect(diagnostics).toMatchInlineSnapshot(`
2749
[
2850
{
@@ -55,22 +77,28 @@ describe('checkCSSModule', () => {
5577
`);
5678
});
5779
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);
80+
const args = prepareCheckerArgs([
81+
fakeCSSModule({
82+
fileName: '/a.module.css',
83+
tokenImporters: [
84+
fakeAtValueTokenImporter({
85+
from: './b.module.css',
86+
values: [fakeAtValueTokenImporterValue({ name: 'b_1' }), fakeAtValueTokenImporterValue({ name: 'b_2' })],
87+
}),
88+
],
89+
}),
90+
fakeCSSModule({
91+
fileName: '/b.module.css',
92+
localTokens: [fakeToken({ name: 'b_1' })],
93+
}),
94+
]);
95+
const diagnostics = checkCSSModule(
96+
args.cssModules[0],
97+
args.exportBuilder,
98+
args.matchesPattern,
99+
args.resolver,
100+
args.getCSSModule,
101+
);
74102
expect(diagnostics).toMatchInlineSnapshot(`
75103
[
76104
{
@@ -90,35 +118,41 @@ describe('checkCSSModule', () => {
90118
`);
91119
});
92120
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);
121+
const args = prepareCheckerArgs([
122+
fakeCSSModule({
123+
fileName: '/a.module.css',
124+
tokenImporters: [fakeAtImportTokenImporter({ from: './unresolvable.module.css' })],
125+
}),
126+
]);
127+
const diagnostics = checkCSSModule(
128+
args.cssModules[0],
129+
args.exportBuilder,
130+
args.matchesPattern,
131+
() => undefined, // Simulate unresolvable module
132+
args.getCSSModule,
133+
);
105134
expect(diagnostics).toEqual([]);
106135
});
107136
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);
137+
const args = prepareCheckerArgs([
138+
fakeCSSModule({
139+
fileName: '/a.module.css',
140+
tokenImporters: [
141+
fakeAtImportTokenImporter({ from: './b.module.css' }),
142+
fakeAtValueTokenImporter({
143+
from: './c.module.css',
144+
values: [fakeAtValueTokenImporterValue({ name: 'c_1' })],
145+
}),
146+
],
147+
}),
148+
]);
149+
const diagnostics = checkCSSModule(
150+
args.cssModules[0],
151+
args.exportBuilder,
152+
(path: string) => path === '/a.module.css', // Only match the current module
153+
args.resolver,
154+
args.getCSSModule,
155+
);
122156
expect(diagnostics).toEqual([]);
123157
});
124158
});

0 commit comments

Comments
 (0)