Skip to content

Commit 60c17d6

Browse files
committed
fix(rule-tester) Add defaultExtension
1 parent b6a4863 commit 60c17d6

File tree

2 files changed

+39
-31
lines changed

2 files changed

+39
-31
lines changed

packages/rule-tester/src/FlatRuleTester.ts

Lines changed: 34 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -167,14 +167,18 @@ export class FlatRuleTester<F extends string> extends TestFramework {
167167
FlatRuleTester.describe('valid', () =>
168168
data.valid.forEach(validCase =>
169169
FlatRuleTester.it(validCase.name, () => {
170-
if (validCase.extension) {
171-
assert.ok(validCase.extension in this.#config.extensions);
172-
}
170+
const extension: F = (validCase.extension ??
171+
this.#config.defaultExtension ??
172+
'ts') as F;
173+
assert.ok(
174+
Object.hasOwn(this.#config.extensions, extension),
175+
`Undefined format: ${sanitize(extension)}, should be in ${sanitize(Object.keys(this.#config.extensions).join(', '))}`,
176+
);
173177

174-
const name = `/file.${validCase.extension ?? 'ts'}`;
178+
const name = `/file.${extension}`;
175179
assert.ok(
176180
existsSync(join(this.#fixtureDir, name)),
177-
`Fixtures must exist for format: ${name}`,
181+
`Fixtures must exist for format: ${sanitize(name)}`,
178182
);
179183

180184
const fullConfig: FlatConfig.ConfigArray = [
@@ -184,14 +188,15 @@ export class FlatRuleTester<F extends string> extends TestFramework {
184188
files: ['**/*.*'],
185189
},
186190
];
187-
if (validCase.extension) {
188-
const formatConfig =
189-
this.#config.extensions[validCase.extension as F];
190-
fullConfig.splice(1, 0, {
191-
...formatConfig,
192-
files: [`**/*.${validCase.extension}`],
193-
});
194-
}
191+
192+
const formatConfig = this.#config.extensions[extension];
193+
194+
assert.notStrictEqual(formatConfig, undefined);
195+
196+
fullConfig.splice(1, 0, {
197+
...formatConfig,
198+
files: [`**/*.${extension}`],
199+
});
195200

196201
const results = this.#linter.verify(
197202
validCase.code,
@@ -201,7 +206,7 @@ export class FlatRuleTester<F extends string> extends TestFramework {
201206

202207
results.forEach(msg => {
203208
throw new Error(
204-
`Got error ${msg.message} (${msg.messageId}), expected nothing`,
209+
`Got error ${sanitize(msg.message)} (${msg.messageId ? sanitize(msg.messageId) : '(unknown message ID)'}), expected nothing`,
205210
);
206211
});
207212
}),
@@ -210,14 +215,15 @@ export class FlatRuleTester<F extends string> extends TestFramework {
210215
FlatRuleTester.describe('invalid', () =>
211216
data.invalid.forEach(invalidCase =>
212217
FlatRuleTester.it(sanitize(invalidCase.name), () => {
213-
if (invalidCase.extension) {
214-
assert.ok(
215-
invalidCase.extension in this.#config.extensions,
216-
`Undefined format: ${sanitize(invalidCase.extension)}, should be in ${sanitize(Object.keys(this.#config.extensions).join(', '))}`,
217-
);
218-
}
218+
const extension: F = (invalidCase.extension ??
219+
this.#config.defaultExtension ??
220+
'ts') as F;
221+
assert.ok(
222+
Object.hasOwn(this.#config.extensions, extension),
223+
`Undefined format: ${sanitize(extension)}, should be in ${sanitize(Object.keys(this.#config.extensions).join(', '))}`,
224+
);
219225

220-
const name = `/file.${invalidCase.extension ?? 'ts'}`;
226+
const name = `/file.${extension}`;
221227
assert.ok(
222228
existsSync(join(this.#fixtureDir, name)),
223229
'Fixtures must exist',
@@ -230,14 +236,11 @@ export class FlatRuleTester<F extends string> extends TestFramework {
230236
files: ['**/*.*'],
231237
},
232238
];
233-
if (invalidCase.extension) {
234-
const formatConfig =
235-
this.#config.extensions[invalidCase.extension as F];
236-
fullConfig.splice(1, 0, {
237-
...formatConfig,
238-
files: [`**/*.${invalidCase.extension}`],
239-
});
240-
}
239+
const formatConfig = this.#config.extensions[extension];
240+
fullConfig.splice(1, 0, {
241+
...formatConfig,
242+
files: [`**/*.${invalidCase.extension}`],
243+
});
241244

242245
const allMessages: Linter.LintMessage[] = [];
243246
const results = this.#linter.verifyAndFix(
@@ -281,12 +284,12 @@ export class FlatRuleTester<F extends string> extends TestFramework {
281284
results.messages.forEach((message, idx) => {
282285
assert.ok(
283286
message.ruleId != null,
284-
`Parser/linter error occured: ${message.message}`,
287+
`Parser/linter error occured: ${sanitize(message.message)}`,
285288
);
286289

287290
assert.ok(
288291
message.ruleId === 'rule/rule',
289-
`Errors must be from the defined rule, as opposed to typescript-eslint or eslint: ${message.ruleId}`,
292+
`Errors must be from the defined rule, as opposed to typescript-eslint or eslint: ${sanitize(message.ruleId)}`,
290293
);
291294

292295
const expectedMessage = invalidCase.errors[idx];

packages/rule-tester/src/types/FlatRuleTester.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,11 @@ export interface RuleTesterConfig<Formats extends string> {
4444
* For future use, do not set.
4545
*/
4646
fixtureMode?: undefined;
47+
48+
/**
49+
* Default extension
50+
*/
51+
defaultExtension?: NoInfer<Formats>;
4752
}
4853

4954
export interface ExpectedSuggestion<MessageIds extends string> {

0 commit comments

Comments
 (0)