@@ -18,12 +18,38 @@ const path = require('path');
18
18
const eslintPluginPrettier = require ( '..' ) ;
19
19
20
20
const rule = eslintPluginPrettier . rules . prettier ;
21
- const RuleTester = require ( 'eslint' ) . RuleTester ;
21
+
22
+ const assert = require ( 'assert' ) ;
23
+ const { ESLint, RuleTester } = require ( 'eslint' ) ;
22
24
23
25
// ------------------------------------------------------------------------------
24
26
// Tests
25
27
// ------------------------------------------------------------------------------
26
28
29
+ const eslint = new ESLint ( {
30
+ baseConfig : {
31
+ parserOptions : {
32
+ ecmaVersion : 2021 ,
33
+ ecmaFeatures : {
34
+ jsx : true ,
35
+ } ,
36
+ sourceType : 'module' ,
37
+ } ,
38
+ extends : 'plugin:prettier/recommended' ,
39
+ overrides : [
40
+ {
41
+ files : '*.mdx' ,
42
+ extends : 'plugin:mdx/recommended' ,
43
+ settings : {
44
+ 'mdx/code-block' : true ,
45
+ } ,
46
+ } ,
47
+ ] ,
48
+ } ,
49
+ useEslintrc : false ,
50
+ ignore : false ,
51
+ } ) ;
52
+
27
53
const ruleTester = new RuleTester ( ) ;
28
54
29
55
ruleTester . run ( 'prettier' , rule , {
@@ -154,6 +180,69 @@ eslintPluginGraphqlRuleTester.run('eslint-plugin-graphql', rule, {
154
180
invalid : [ ] ,
155
181
} ) ;
156
182
183
+ const mdxRuleTester = new RuleTester ( {
184
+ parser : require . resolve ( 'eslint-mdx' ) ,
185
+ parserOptions : {
186
+ ...require ( 'eslint-mdx' ) . DEFAULT_PARSER_OPTIONS ,
187
+ // mdx-js/eslint-mdx#366
188
+ ecmaVersion : 2021 ,
189
+ } ,
190
+ } ) ;
191
+
192
+ mdxRuleTester . run ( 'eslint-plugin-mdx' , rule , {
193
+ valid : [
194
+ {
195
+ code : [
196
+ "import React from 'react';" ,
197
+ '' ,
198
+ '<div>Hello World</div>' ,
199
+ '' ,
200
+ ] . join ( '\n' ) ,
201
+ filename : 'valid.mdx' ,
202
+ } ,
203
+ ] ,
204
+ invalid : [
205
+ Object . assign ( loadInvalidFixture ( 'mdx' ) , {
206
+ filename : 'invalid.mdx' ,
207
+ } ) ,
208
+ ] ,
209
+ } ) ;
210
+
211
+ runFixture ( 'mdx' , [
212
+ [
213
+ {
214
+ column : 33 ,
215
+ endColumn : 33 ,
216
+ endLine : 1 ,
217
+ fix : {
218
+ range : [ 32 , 32 ] ,
219
+ text : ';' ,
220
+ } ,
221
+ line : 1 ,
222
+ message : 'Insert `;`' ,
223
+ messageId : 'insert' ,
224
+ nodeType : null ,
225
+ ruleId : 'prettier/prettier' ,
226
+ severity : 2 ,
227
+ } ,
228
+ {
229
+ column : 27 ,
230
+ endColumn : 27 ,
231
+ endLine : 6 ,
232
+ fix : {
233
+ range : [ 91 , 91 ] ,
234
+ text : ';' ,
235
+ } ,
236
+ line : 6 ,
237
+ message : 'Insert `;`' ,
238
+ messageId : 'insert' ,
239
+ nodeType : null ,
240
+ ruleId : 'prettier/prettier' ,
241
+ severity : 2 ,
242
+ } ,
243
+ ] ,
244
+ ] ) ;
245
+
157
246
// ------------------------------------------------------------------------------
158
247
// Helpers
159
248
// ------------------------------------------------------------------------------
@@ -193,3 +282,20 @@ function loadInvalidFixture(name) {
193
282
function getPrettierRcJsFilename ( dir , file = 'dummy.js' ) {
194
283
return path . resolve ( __dirname , `./prettierrc/${ dir } /${ file } ` ) ;
195
284
}
285
+
286
+ function runFixture ( name , asserts ) {
287
+ return eslint
288
+ . lintFiles ( `test/fixtures/${ name } .*` )
289
+ . then ( ( results ) =>
290
+ assert . deepStrictEqual (
291
+ asserts ,
292
+ results . map ( ( { messages } ) => messages )
293
+ )
294
+ )
295
+ . catch ( ( err ) => {
296
+ // eslint-disable-next-line no-console
297
+ console . error ( err ) ;
298
+ // eslint-disable-next-line no-process-exit
299
+ process . exit ( 1 ) ;
300
+ } ) ;
301
+ }
0 commit comments