Skip to content

Commit ad3dfc3

Browse files
committed
add test
1 parent 910effd commit ad3dfc3

File tree

3 files changed

+273
-38
lines changed

3 files changed

+273
-38
lines changed

packages/eslint-plugin-svelte/src/types.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -117,9 +117,9 @@ export interface PartialRuleMetaData {
117117
conditions?: {
118118
svelteVersions?: SvelteContext['svelteVersion'][];
119119
fileTypes?: SvelteContext['fileType'][];
120-
runes?: SvelteContext['runes'];
121-
svelteKitVersions?: NonNullable<SvelteContext['svelteKitVersion']>[];
122-
svelteKitFileTypes?: NonNullable<SvelteContext['svelteKitFileType']>[];
120+
runes?: SvelteContext['runes'][];
121+
svelteKitVersions?: SvelteContext['svelteKitVersion'][];
122+
svelteKitFileTypes?: SvelteContext['svelteKitFileType'][];
123123
}[];
124124
}
125125

packages/eslint-plugin-svelte/src/utils/index.ts

Lines changed: 16 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,58 +1,39 @@
11
import type { RuleModule, PartialRuleModule, PartialRuleMetaData, RuleContext } from '../types.js';
22
import { getSvelteContext, type SvelteContext } from '../utils/svelte-context.js';
33

4+
function isNotSatisfies<T>(actual: T, expected?: T[]): boolean {
5+
if (expected == null || expected.length === 0) {
6+
return false;
7+
}
8+
9+
return !expected.includes(actual);
10+
}
11+
412
function satisfiesCondition(
513
condition: NonNullable<PartialRuleMetaData['conditions']>[number],
614
svelteContext: SvelteContext
715
): boolean {
816
if (
9-
condition.svelteVersions != null &&
10-
condition.svelteVersions.length > 0 &&
11-
!condition.svelteVersions.includes(svelteContext.svelteVersion)
12-
) {
13-
return false;
14-
}
15-
16-
if (
17-
condition.fileTypes != null &&
18-
condition.fileTypes.length > 0 &&
19-
!condition.fileTypes.includes(svelteContext.fileType)
17+
isNotSatisfies(svelteContext.svelteVersion, condition.svelteVersions) ||
18+
isNotSatisfies(svelteContext.fileType, condition.fileTypes) ||
19+
isNotSatisfies(svelteContext.runes, condition.runes) ||
20+
isNotSatisfies(svelteContext.svelteKitVersion, condition.svelteKitVersions) ||
21+
isNotSatisfies(svelteContext.svelteKitFileType, condition.svelteKitFileTypes)
2022
) {
2123
return false;
2224
}
2325

24-
if (condition.runes != null && condition.runes !== svelteContext.runes) {
25-
return false;
26-
}
27-
28-
if (condition.svelteKitVersions != null && condition.svelteKitVersions.length > 0) {
29-
if (
30-
svelteContext.svelteKitVersion == null ||
31-
!condition.svelteKitVersions.includes(svelteContext.svelteKitVersion)
32-
) {
33-
return false;
34-
}
35-
}
36-
37-
if (condition.svelteKitFileTypes != null && condition.svelteKitFileTypes.length > 0) {
38-
if (
39-
svelteContext.svelteKitFileType == null ||
40-
!condition.svelteKitFileTypes.includes(svelteContext.svelteKitFileType)
41-
) {
42-
return false;
43-
}
44-
}
45-
4626
return true;
4727
}
4828

49-
function shouldRun(
29+
// export for testing
30+
export function shouldRun(
5031
svelteContext: SvelteContext | null,
5132
conditions: PartialRuleMetaData['conditions']
5233
): boolean {
5334
// If svelteContext is null, it means the rule might be executed based on the analysis result of a different parser.
5435
// In this case, always execute the rule.
55-
if (svelteContext == null || conditions == null) {
36+
if (svelteContext == null || conditions == null || conditions.length === 0) {
5637
return true;
5738
}
5839

Lines changed: 254 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,254 @@
1+
import assert from 'assert';
2+
import { shouldRun } from '../../src/utils/index.js';
3+
4+
const actualSvelte3: Parameters<typeof shouldRun>[0] = {
5+
svelteVersion: '3/4',
6+
fileType: '.svelte',
7+
runes: false,
8+
svelteKitVersion: null,
9+
svelteKitFileType: null
10+
};
11+
12+
const actualSvelte5: Parameters<typeof shouldRun>[0] = {
13+
svelteVersion: 5,
14+
fileType: '.svelte',
15+
runes: true,
16+
svelteKitVersion: null,
17+
svelteKitFileType: null
18+
};
19+
20+
const actualSvelte5Script: Parameters<typeof shouldRun>[0] = {
21+
svelteVersion: 5,
22+
fileType: '.svelte.[js|ts]',
23+
runes: true,
24+
svelteKitVersion: null,
25+
svelteKitFileType: null
26+
};
27+
28+
const actualSvelteKit: Parameters<typeof shouldRun>[0] = {
29+
svelteVersion: 5,
30+
fileType: '.svelte',
31+
runes: true,
32+
svelteKitVersion: 2,
33+
svelteKitFileType: '+page.svelte'
34+
};
35+
36+
const actualSvelteKitNotRoute: Parameters<typeof shouldRun>[0] = {
37+
svelteVersion: 5,
38+
fileType: '.svelte',
39+
runes: true,
40+
svelteKitVersion: 2,
41+
svelteKitFileType: null
42+
};
43+
44+
describe('shouldRun', () => {
45+
it('no condition1', () => {
46+
assert.strictEqual(shouldRun(actualSvelte3, []), true);
47+
});
48+
it('no condition2', () => {
49+
assert.strictEqual(shouldRun(actualSvelte3, [{}]), true);
50+
});
51+
it('no condition3', () => {
52+
assert.strictEqual(
53+
shouldRun(actualSvelte3, [
54+
{
55+
svelteVersions: undefined
56+
}
57+
]),
58+
true
59+
);
60+
});
61+
it('no condition4', () => {
62+
assert.strictEqual(
63+
shouldRun(actualSvelte3, [
64+
{
65+
svelteVersions: []
66+
}
67+
]),
68+
true
69+
);
70+
});
71+
72+
it('simple true', () => {
73+
assert.strictEqual(
74+
shouldRun(actualSvelte3, [
75+
{
76+
svelteVersions: ['3/4']
77+
}
78+
]),
79+
true
80+
);
81+
});
82+
83+
it('simple false', () => {
84+
assert.strictEqual(
85+
shouldRun(actualSvelte3, [
86+
{
87+
svelteVersions: [5]
88+
}
89+
]),
90+
false
91+
);
92+
});
93+
94+
it('or true', () => {
95+
assert.strictEqual(
96+
shouldRun(actualSvelte3, [
97+
{
98+
svelteVersions: ['3/4']
99+
},
100+
{
101+
svelteVersions: [5]
102+
}
103+
]),
104+
true
105+
);
106+
});
107+
108+
it('or false', () => {
109+
assert.strictEqual(
110+
shouldRun(actualSvelteKit, [
111+
{
112+
svelteKitFileTypes: ['+page.js']
113+
},
114+
{
115+
svelteKitFileTypes: ['+page.server.js']
116+
}
117+
]),
118+
false
119+
);
120+
});
121+
122+
it('and true', () => {
123+
assert.strictEqual(
124+
shouldRun(actualSvelte5, [
125+
{
126+
svelteVersions: [5],
127+
runes: [true]
128+
}
129+
]),
130+
true
131+
);
132+
});
133+
134+
it('and false', () => {
135+
assert.strictEqual(
136+
shouldRun(actualSvelte5, [
137+
{
138+
svelteVersions: [5],
139+
runes: [false]
140+
}
141+
]),
142+
false
143+
);
144+
});
145+
146+
it('real - svelte3', () => {
147+
assert.strictEqual(
148+
shouldRun(actualSvelte3, [
149+
{
150+
svelteVersions: ['3/4']
151+
}
152+
]),
153+
true
154+
);
155+
});
156+
157+
it('real - Svelte5 with runes', () => {
158+
assert.strictEqual(
159+
shouldRun(actualSvelte5, [
160+
{
161+
svelteVersions: [5],
162+
fileTypes: ['.svelte'],
163+
runes: [true]
164+
}
165+
]),
166+
true
167+
);
168+
});
169+
170+
it('real - Svelte5 without runes', () => {
171+
assert.strictEqual(
172+
shouldRun(actualSvelte5, [
173+
{
174+
svelteVersions: [5],
175+
fileTypes: ['.svelte'],
176+
runes: [false]
177+
}
178+
]),
179+
false
180+
);
181+
});
182+
183+
it('real - Svelte5 script', () => {
184+
assert.strictEqual(
185+
shouldRun(actualSvelte5Script, [
186+
{
187+
svelteVersions: [5],
188+
fileTypes: ['.svelte.[js|ts]'],
189+
runes: [true]
190+
}
191+
]),
192+
true
193+
);
194+
});
195+
196+
it('real - SvelteKit1', () => {
197+
assert.strictEqual(
198+
shouldRun(actualSvelteKit, [
199+
{
200+
svelteKitVersions: [2],
201+
svelteKitFileTypes: ['+page.svelte']
202+
}
203+
]),
204+
true
205+
);
206+
});
207+
208+
it('real - SvelteKit2', () => {
209+
assert.strictEqual(
210+
shouldRun(actualSvelteKit, [
211+
{
212+
svelteKitVersions: [null]
213+
}
214+
]),
215+
false
216+
);
217+
});
218+
219+
it('real - SvelteKit3', () => {
220+
assert.strictEqual(
221+
shouldRun(actualSvelteKit, [
222+
{
223+
svelteKitVersions: [2],
224+
svelteKitFileTypes: [null]
225+
}
226+
]),
227+
false
228+
);
229+
});
230+
231+
it('real - SvelteKit not route1', () => {
232+
assert.strictEqual(
233+
shouldRun(actualSvelteKitNotRoute, [
234+
{
235+
svelteKitVersions: [2],
236+
svelteKitFileTypes: [null]
237+
}
238+
]),
239+
true
240+
);
241+
});
242+
243+
it('real - SvelteKit not route2', () => {
244+
assert.strictEqual(
245+
shouldRun(actualSvelteKitNotRoute, [
246+
{
247+
svelteKitVersions: [2],
248+
svelteKitFileTypes: ['+page.svelte']
249+
}
250+
]),
251+
false
252+
);
253+
});
254+
});

0 commit comments

Comments
 (0)