Skip to content

Commit ded32c9

Browse files
committed
test: no-missing-key add test cases from jsx-eslint/eslint-plugin-react#3657
1 parent d3b23bf commit ded32c9

File tree

2 files changed

+197
-132
lines changed

2 files changed

+197
-132
lines changed

packages/eslint-plugin-jsx/src/rules/no-missing-key.spec.ts

Lines changed: 194 additions & 129 deletions
Original file line numberDiff line numberDiff line change
@@ -145,140 +145,205 @@ ruleTester.run(RULE_NAME, rule, {
145145
// toArray(Array.from([1, 2 ,3], x => <App />));
146146
`,
147147
],
148-
invalid: [{
149-
code: "[<App />];",
150-
errors: [{ messageId: "NO_MISSING_KEY" }],
151-
}, {
152-
code: "[<App {...key} />];",
153-
errors: [{ messageId: "NO_MISSING_KEY" }],
154-
}, {
155-
code: "[<App key={0}/>, <App />];",
156-
errors: [{ messageId: "NO_MISSING_KEY" }],
157-
}, {
158-
code: "[1, 2 ,3].map(function(x) { return <App /> });",
159-
errors: [{ messageId: "NO_MISSING_KEY" }],
160-
}, {
161-
code: "[1, 2 ,3].map(x => <App />);",
162-
errors: [{ messageId: "NO_MISSING_KEY" }],
163-
}, {
164-
code: "[1, 2 ,3].map(x => x && <App x={x} />);",
165-
errors: [{ messageId: "NO_MISSING_KEY" }],
166-
}, {
167-
code: '[1, 2 ,3].map(x => x ? <App x={x} key="1" /> : <OtherApp x={x} />);',
168-
errors: [{ messageId: "NO_MISSING_KEY" }],
169-
}, {
170-
code: '[1, 2 ,3].map(x => x ? <App x={x} /> : <OtherApp x={x} key="2" />);',
171-
errors: [{ messageId: "NO_MISSING_KEY" }],
172-
}, {
173-
code: "[1, 2 ,3].map(x => { return <App /> });",
174-
errors: [{ messageId: "NO_MISSING_KEY" }],
175-
}, {
176-
code: "Array.from([1, 2 ,3], function(x) { return <App /> });",
177-
errors: [{ messageId: "NO_MISSING_KEY" }],
178-
}, {
179-
code: "Array.from([1, 2 ,3], (x => { return <App /> }));",
180-
errors: [{ messageId: "NO_MISSING_KEY" }],
181-
}, {
182-
code: "Array.from([1, 2 ,3], (x => <App />));",
183-
errors: [{ messageId: "NO_MISSING_KEY" }],
184-
}, {
185-
code: "[1, 2, 3]?.map(x => <BabelEslintApp />)",
186-
errors: [{ messageId: "NO_MISSING_KEY" }],
187-
}, {
188-
code: "[1, 2, 3]?.map(x => <TypescriptEslintApp />)",
189-
errors: [{ messageId: "NO_MISSING_KEY" }],
190-
}, {
191-
code: "[1, 2, 3].map(x => <>{x}</>);",
192-
errors: [
193-
{
194-
messageId: "NO_MISSING_KEY_WITH_FRAGMENT",
195-
data: {
196-
reactPragma: "React",
197-
fragmentPragma: "Fragment",
148+
invalid: [
149+
{
150+
code: "[<App />];",
151+
errors: [{ messageId: "NO_MISSING_KEY" }],
152+
},
153+
{
154+
code: "[<App {...key} />];",
155+
errors: [{ messageId: "NO_MISSING_KEY" }],
156+
},
157+
{
158+
code: "[<App key={0}/>, <App />];",
159+
errors: [{ messageId: "NO_MISSING_KEY" }],
160+
},
161+
{
162+
code: "[1, 2 ,3].map(function(x) { return <App /> });",
163+
errors: [{ messageId: "NO_MISSING_KEY" }],
164+
},
165+
{
166+
code: "[1, 2 ,3].map(x => <App />);",
167+
errors: [{ messageId: "NO_MISSING_KEY" }],
168+
},
169+
{
170+
code: "[1, 2 ,3].map(x => x && <App x={x} />);",
171+
errors: [{ messageId: "NO_MISSING_KEY" }],
172+
},
173+
{
174+
code: '[1, 2 ,3].map(x => x ? <App x={x} key="1" /> : <OtherApp x={x} />);',
175+
errors: [{ messageId: "NO_MISSING_KEY" }],
176+
},
177+
{
178+
code: '[1, 2 ,3].map(x => x ? <App x={x} /> : <OtherApp x={x} key="2" />);',
179+
errors: [{ messageId: "NO_MISSING_KEY" }],
180+
},
181+
{
182+
code: "[1, 2 ,3].map(x => { return <App /> });",
183+
errors: [{ messageId: "NO_MISSING_KEY" }],
184+
},
185+
{
186+
code: "Array.from([1, 2 ,3], function(x) { return <App /> });",
187+
errors: [{ messageId: "NO_MISSING_KEY" }],
188+
},
189+
{
190+
code: "Array.from([1, 2 ,3], (x => { return <App /> }));",
191+
errors: [{ messageId: "NO_MISSING_KEY" }],
192+
},
193+
{
194+
code: "Array.from([1, 2 ,3], (x => <App />));",
195+
errors: [{ messageId: "NO_MISSING_KEY" }],
196+
},
197+
{
198+
code: "[1, 2, 3]?.map(x => <BabelEslintApp />)",
199+
errors: [{ messageId: "NO_MISSING_KEY" }],
200+
},
201+
{
202+
code: "[1, 2, 3]?.map(x => <TypescriptEslintApp />)",
203+
errors: [{ messageId: "NO_MISSING_KEY" }],
204+
},
205+
{
206+
code: "[1, 2, 3].map(x => <>{x}</>);",
207+
errors: [
208+
{
209+
messageId: "NO_MISSING_KEY_WITH_FRAGMENT",
210+
data: {
211+
reactPragma: "React",
212+
fragmentPragma: "Fragment",
213+
},
198214
},
199-
},
200-
],
201-
}, {
202-
code: "[<></>];",
203-
errors: [
204-
{
205-
messageId: "NO_MISSING_KEY_WITH_FRAGMENT",
206-
data: {
207-
reactPragma: "React",
208-
fragmentPragma: "Fragment",
215+
],
216+
},
217+
{
218+
code: "[<></>];",
219+
errors: [
220+
{
221+
messageId: "NO_MISSING_KEY_WITH_FRAGMENT",
222+
data: {
223+
reactPragma: "React",
224+
fragmentPragma: "Fragment",
225+
},
209226
},
210-
},
211-
],
212-
}, {
213-
code: dedent`
214-
const Test = () => {
215-
const list = [1, 2, 3, 4, 5];
227+
],
228+
},
229+
{
230+
code: dedent`
231+
const Test = () => {
232+
const list = [1, 2, 3, 4, 5];
216233
217-
return (
218-
<div>
219-
{list.map(item => {
220-
if (item < 2) {
221-
return <div>{item}</div>;
222-
}
234+
return (
235+
<div>
236+
{list.map(item => {
237+
if (item < 2) {
238+
return <div>{item}</div>;
239+
}
223240
224-
return <div />;
225-
})}
226-
</div>
227-
);
228-
};
229-
`,
230-
errors: [
231-
{ messageId: "NO_MISSING_KEY" },
232-
{ messageId: "NO_MISSING_KEY" },
233-
],
234-
}, {
235-
code: dedent`
236-
const TestO = () => {
237-
const list = [1, 2, 3, 4, 5];
241+
return <div />;
242+
})}
243+
</div>
244+
);
245+
};
246+
`,
247+
errors: [
248+
{ messageId: "NO_MISSING_KEY" },
249+
{ messageId: "NO_MISSING_KEY" },
250+
],
251+
},
252+
{
253+
code: dedent`
254+
const TestO = () => {
255+
const list = [1, 2, 3, 4, 5];
238256
239-
return (
240-
<div>
241-
{list.map(item => {
242-
if (item < 2) {
243-
return <div>{item}</div>;
244-
} else if (item < 5) {
245-
return <div></div>
246-
} else {
247-
return <div></div>
248-
}
257+
return (
258+
<div>
259+
{list.map(item => {
260+
if (item < 2) {
261+
return <div>{item}</div>;
262+
} else if (item < 5) {
263+
return <div></div>
264+
} else {
265+
return <div></div>
266+
}
249267
250-
return <div />;
251-
})}
252-
</div>
253-
);
254-
};
255-
`,
256-
errors: [
257-
{ messageId: "NO_MISSING_KEY" },
258-
{ messageId: "NO_MISSING_KEY" },
259-
{ messageId: "NO_MISSING_KEY" },
260-
{ messageId: "NO_MISSING_KEY" },
261-
],
262-
}, {
263-
code: dedent`
264-
const TestCase = () => {
265-
const list = [1, 2, 3, 4, 5];
268+
return <div />;
269+
})}
270+
</div>
271+
);
272+
};
273+
`,
274+
errors: [
275+
{ messageId: "NO_MISSING_KEY" },
276+
{ messageId: "NO_MISSING_KEY" },
277+
{ messageId: "NO_MISSING_KEY" },
278+
{ messageId: "NO_MISSING_KEY" },
279+
],
280+
},
281+
{
282+
code: dedent`
283+
const TestCase = () => {
284+
const list = [1, 2, 3, 4, 5];
266285
267-
return (
268-
<div>
269-
{list.map(item => {
270-
if (item < 2) return <div>{item}</div>;
271-
else if (item < 5) return <div />;
272-
else return <div />;
273-
})}
274-
</div>
275-
);
276-
};
277-
`,
278-
errors: [
279-
{ messageId: "NO_MISSING_KEY" },
280-
{ messageId: "NO_MISSING_KEY" },
281-
{ messageId: "NO_MISSING_KEY" },
282-
],
283-
}],
286+
return (
287+
<div>
288+
{list.map(item => {
289+
if (item < 2) return <div>{item}</div>;
290+
else if (item < 5) return <div />;
291+
else return <div />;
292+
})}
293+
</div>
294+
);
295+
};
296+
`,
297+
errors: [
298+
{ messageId: "NO_MISSING_KEY" },
299+
{ messageId: "NO_MISSING_KEY" },
300+
{ messageId: "NO_MISSING_KEY" },
301+
],
302+
},
303+
{
304+
code: dedent`
305+
function Explain() {
306+
return (
307+
<div>
308+
{arr.map((id) => {
309+
return <>{id}</>;
310+
})}
311+
{arr.map((id) => {
312+
return <React.Fragment>{id}</React.Fragment>;
313+
})}
314+
</div>
315+
);
316+
}
317+
318+
function Repro() {
319+
return (
320+
<div>
321+
{arr.map((id) => {
322+
return <>{id}</>;
323+
})}
324+
</div>
325+
);
326+
}
327+
`,
328+
errors: [
329+
{
330+
messageId: "NO_MISSING_KEY_WITH_FRAGMENT",
331+
data: {
332+
reactPragma: "React",
333+
fragmentPragma: "Fragment",
334+
},
335+
},
336+
{
337+
messageId: "NO_MISSING_KEY",
338+
},
339+
{
340+
messageId: "NO_MISSING_KEY_WITH_FRAGMENT",
341+
data: {
342+
reactPragma: "React",
343+
fragmentPragma: "Fragment",
344+
},
345+
},
346+
],
347+
},
348+
],
284349
});

pnpm-lock.yaml

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)