Skip to content

Commit a97f138

Browse files
sai6855michaldudak
authored andcommitted
port tests from mui#35924
1 parent 53dfc60 commit a97f138

File tree

13 files changed

+342
-10
lines changed

13 files changed

+342
-10
lines changed
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import * as React from 'react';
2+
import Card from '@mui/material/Card';
3+
import { expectType } from '@mui/types';
4+
5+
const CustomComponent: React.FC<{ stringProp: string; numberProp: number }> =
6+
function CustomComponent() {
7+
return <div />;
8+
};
9+
10+
function CardTest() {
11+
return (
12+
<div>
13+
<Card />
14+
<Card elevation={4} />
15+
<Card
16+
onClick={(event) => {
17+
expectType<React.MouseEvent<HTMLDivElement, MouseEvent>, typeof event>(event);
18+
}}
19+
/>
20+
<Card component="a" href="test" />
21+
22+
<Card component={CustomComponent} stringProp="test" numberProp={0} />
23+
{/* @ts-expect-error missing stringProp and numberProp */}
24+
<Card<typeof CustomComponent> component={CustomComponent} />
25+
</div>
26+
);
27+
}

packages/mui-material/src/CardHeader/CardHeader.spec.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ interface ComponentProp {
1212
component?: React.ElementType;
1313
}
1414

15+
<CardHeader component={CustomComponent} stringProp="s" numberProp={2} />;
16+
1517
function createElementBasePropMixedTest() {
1618
React.createElement<CardHeaderProps<DefaultComponent, ComponentProp>>(CardHeader);
1719
React.createElement<CardHeaderProps<DefaultComponent, ComponentProp>>(CardHeader, {

packages/mui-material/src/Dialog/Dialog.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ export interface DialogProps extends StandardProps<ModalProps, 'children'> {
7272
* Props applied to the [`Paper`](/material-ui/api/paper/) element.
7373
* @default {}
7474
*/
75-
PaperProps?: Partial<PaperProps>;
75+
PaperProps?: Partial<PaperProps<React.ElementType>>;
7676
/**
7777
* Determine the container for scrolling the dialog.
7878
* @default 'paper'
Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,19 @@
11
import * as React from 'react';
2-
import { Dialog } from '@mui/material';
2+
import Dialog from '@mui/material/Dialog';
3+
import { PaperProps } from '@mui/material/Paper';
4+
import { expectType } from '@mui/types';
35

4-
function optionalChildrenTest() {
5-
<Dialog open />;
6+
const paperProps: PaperProps<'span'> = {
7+
component: 'span',
8+
onClick: (event) => {
9+
expectType<React.MouseEvent<HTMLSpanElement, MouseEvent>, typeof event>(event);
10+
},
11+
};
12+
function Test() {
13+
return (
14+
<React.Fragment>
15+
<Dialog open />;
16+
<Dialog open PaperProps={paperProps} />;
17+
</React.Fragment>
18+
);
619
}

packages/mui-material/src/Drawer/Drawer.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ export interface DrawerProps extends StandardProps<ModalProps, 'open' | 'childre
4646
* Props applied to the [`Paper`](/material-ui/api/paper/) element.
4747
* @default {}
4848
*/
49-
PaperProps?: Partial<PaperProps>;
49+
PaperProps?: Partial<PaperProps<React.ElementType>>;
5050
/**
5151
* Props applied to the [`Slide`](/material-ui/api/slide/) element.
5252
*/
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import * as React from 'react';
2+
import Drawer from '@mui/material/Drawer';
3+
import { PaperProps } from '@mui/material/Paper';
4+
import { expectType } from '@mui/types';
5+
6+
const paperProps: PaperProps<'span'> = {
7+
component: 'span',
8+
onClick: (event) => {
9+
expectType<React.MouseEvent<HTMLSpanElement, MouseEvent>, typeof event>(event);
10+
},
11+
};
12+
function Test() {
13+
return (
14+
<React.Fragment>
15+
<Drawer open />;
16+
<Drawer open PaperProps={paperProps} />;
17+
</React.Fragment>
18+
);
19+
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
import * as React from 'react';
2+
import FormHelperText, { FormHelperTextProps } from '@mui/material/FormHelperText';
3+
import { expectType } from '@mui/types';
4+
5+
const CustomComponent: React.FC<{ stringProp: string; numberProp: number }> =
6+
function CustomComponent() {
7+
return <div />;
8+
};
9+
10+
const props: FormHelperTextProps<'div'> = {
11+
component: 'div',
12+
onChange: (event) => {
13+
expectType<React.FormEvent<HTMLDivElement>, typeof event>(event);
14+
},
15+
};
16+
17+
const props2: FormHelperTextProps = {
18+
onChange: (event) => {
19+
expectType<React.FormEvent<HTMLParagraphElement>, typeof event>(event);
20+
},
21+
};
22+
23+
const props4: FormHelperTextProps<typeof CustomComponent> = {
24+
component: CustomComponent,
25+
stringProp: '2',
26+
numberProp: 2,
27+
};
28+
29+
const props5: FormHelperTextProps<typeof CustomComponent> = {
30+
component: CustomComponent,
31+
stringProp: '2',
32+
numberProp: 2,
33+
// @ts-expect-error
34+
inCorrectProp: 3,
35+
};
36+
37+
// @ts-expect-error
38+
const props6: FormHelperTextProps<typeof CustomComponent> = {
39+
component: CustomComponent,
40+
};
41+
42+
const TestComponent = () => {
43+
return (
44+
<React.Fragment>
45+
<FormHelperText />
46+
<FormHelperText component={'a'} href="/test" />
47+
48+
<FormHelperText component={CustomComponent} stringProp="s" numberProp={1} />
49+
{
50+
// @ts-expect-error
51+
<FormHelperText component={CustomComponent} />
52+
}
53+
<FormHelperText
54+
component="span"
55+
onChange={(event) => {
56+
expectType<React.FormEvent<HTMLSpanElement>, typeof event>(event);
57+
}}
58+
/>
59+
</React.Fragment>
60+
);
61+
};
Lines changed: 58 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,63 @@
11
import * as React from 'react';
22
import Paper from '@mui/material/Paper';
3-
import Grid from '@mui/material/Grid';
3+
import Grid, { GridProps } from '@mui/material/Grid';
4+
import { expectType } from '@mui/types';
5+
6+
const CustomComponent: React.FC<{ stringProp: string; numberProp: number }> =
7+
function CustomComponent() {
8+
return <div />;
9+
};
10+
11+
const props: GridProps<'span'> = {
12+
component: 'span',
13+
onChange: (event) => {
14+
expectType<React.FormEvent<HTMLSpanElement>, typeof event>(event);
15+
},
16+
};
17+
18+
const props2: GridProps = {
19+
onChange: (event) => {
20+
expectType<React.FormEvent<HTMLDivElement>, typeof event>(event);
21+
},
22+
};
23+
24+
const props4: GridProps<typeof CustomComponent> = {
25+
component: CustomComponent,
26+
stringProp: '2',
27+
numberProp: 2,
28+
};
29+
30+
const props5: GridProps<typeof CustomComponent> = {
31+
component: CustomComponent,
32+
stringProp: '2',
33+
numberProp: 2,
34+
// @ts-expect-error
35+
inCorrectProp: 3,
36+
};
37+
38+
// @ts-expect-error
39+
const props6: GridProps<typeof CustomComponent> = {
40+
component: CustomComponent,
41+
};
442

543
function ResponsiveTest() {
6-
<Grid item xs={12} sm={8} md={5} component={Paper} elevation={6} square />;
44+
return (
45+
<React.Fragment>
46+
<Grid item xs={12} sm={8} md={5} component={Paper} elevation={6} square />
47+
<Grid item component={'a'} href="/test" />
48+
49+
<Grid item component={CustomComponent} stringProp="s" numberProp={1} />
50+
{
51+
// @ts-expect-error
52+
<Grid item component={CustomComponent} />
53+
}
54+
<Grid
55+
item
56+
component="span"
57+
onChange={(event) => {
58+
expectType<React.FormEvent<HTMLSpanElement>, typeof event>(event);
59+
}}
60+
/>
61+
</React.Fragment>
62+
);
763
}

packages/mui-material/src/Link/Link.spec.tsx

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,44 @@
11
import * as React from 'react';
2-
import Link from '@mui/material/Link';
2+
import Link, { LinkProps } from '@mui/material/Link';
33
import { expectType } from '@mui/types';
44

5+
const CustomComponent: React.FC<{ stringProp: string; numberProp: number }> =
6+
function CustomComponent() {
7+
return <div />;
8+
};
9+
10+
const props1: LinkProps<'div'> = {
11+
component: 'div',
12+
onChange: (event) => {
13+
expectType<React.FormEvent<HTMLDivElement>, typeof event>(event);
14+
},
15+
};
16+
17+
const props2: LinkProps = {
18+
onChange: (event) => {
19+
expectType<React.FormEvent<HTMLAnchorElement>, typeof event>(event);
20+
},
21+
};
22+
23+
const props4: LinkProps<typeof CustomComponent> = {
24+
component: CustomComponent,
25+
stringProp: '1',
26+
numberProp: 2,
27+
};
28+
29+
const props5: LinkProps<typeof CustomComponent> = {
30+
component: CustomComponent,
31+
stringProp: '2',
32+
numberProp: 2,
33+
// @ts-expect-error
34+
inCorrectProp: 3,
35+
};
36+
37+
// @ts-expect-error
38+
const props6: LinkProps<typeof CustomComponent> = {
39+
component: CustomComponent,
40+
};
41+
542
<Link
643
ref={(elem) => {
744
expectType<HTMLAnchorElement | null, typeof elem>(elem);
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
import * as React from 'react';
2+
import MenuItem, { MenuItemProps } from '@mui/material/MenuItem';
3+
import { expectType } from '@mui/types';
4+
5+
const CustomComponent: React.FC<{ stringProp: string; numberProp: number }> =
6+
function CustomComponent() {
7+
return <div />;
8+
};
9+
10+
const props: MenuItemProps<'div'> = {
11+
component: 'div',
12+
onChange: (event) => {
13+
expectType<React.FormEvent<HTMLDivElement>, typeof event>(event);
14+
},
15+
};
16+
17+
const props2: MenuItemProps = {
18+
onChange: (event) => {
19+
expectType<React.FormEvent<HTMLLIElement>, typeof event>(event);
20+
},
21+
};
22+
23+
const props4: MenuItemProps<typeof CustomComponent> = {
24+
component: CustomComponent,
25+
stringProp: '2',
26+
numberProp: 2,
27+
};
28+
29+
const props5: MenuItemProps<typeof CustomComponent> = {
30+
component: CustomComponent,
31+
stringProp: '2',
32+
numberProp: 2,
33+
// @ts-expect-error
34+
inCorrectProp: 3,
35+
};
36+
37+
// @ts-expect-error
38+
const props6: MenuItemProps<typeof CustomComponent> = {
39+
component: CustomComponent,
40+
};
41+
42+
const TestComponent = () => {
43+
return (
44+
<React.Fragment>
45+
<MenuItem />
46+
<MenuItem component={'a'} href="/test" />
47+
48+
<MenuItem component={CustomComponent} stringProp="s" numberProp={1} />
49+
{
50+
// @ts-expect-error
51+
<MenuItem component={CustomComponent} />
52+
}
53+
<MenuItem
54+
onChange={(event) => {
55+
expectType<React.FormEvent<HTMLLIElement>, typeof event>(event);
56+
}}
57+
/>
58+
<MenuItem
59+
component="span"
60+
onChange={(event) => {
61+
expectType<React.FormEvent<HTMLSpanElement>, typeof event>(event);
62+
}}
63+
/>
64+
</React.Fragment>
65+
);
66+
};

packages/mui-material/src/Paper/Paper.spec.tsx

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,44 @@
11
import * as React from 'react';
2-
import Paper from '@mui/material/Paper';
2+
import Paper, { PaperProps } from '@mui/material/Paper';
3+
import { expectType } from '@mui/types';
34

45
const CustomComponent: React.FC<{ stringProp: string; numberProp: number }> =
56
function CustomComponent() {
67
return <div />;
78
};
89

10+
const props: PaperProps<'div'> = {
11+
component: 'div',
12+
onChange: (event) => {
13+
expectType<React.FormEvent<HTMLDivElement>, typeof event>(event);
14+
},
15+
};
16+
17+
const props2: PaperProps = {
18+
onChange: (event) => {
19+
expectType<React.FormEvent<HTMLDivElement>, typeof event>(event);
20+
},
21+
};
22+
23+
const props4: PaperProps<typeof CustomComponent> = {
24+
component: CustomComponent,
25+
stringProp: '2',
26+
numberProp: 2,
27+
};
28+
29+
const props5: PaperProps<typeof CustomComponent> = {
30+
component: CustomComponent,
31+
stringProp: '2',
32+
numberProp: 2,
33+
// @ts-expect-error
34+
inCorrectProp: 3,
35+
};
36+
37+
// @ts-expect-error
38+
const props6: PaperProps<typeof CustomComponent> = {
39+
component: CustomComponent,
40+
};
41+
942
function PaperTest() {
1043
return (
1144
<div>

packages/mui-material/src/Popover/Popover.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ export interface PopoverProps
107107
*
108108
* @default {}
109109
*/
110-
PaperProps?: Partial<PaperProps>;
110+
PaperProps?: Partial<PaperProps<React.ElementType>>;
111111
/**
112112
* The components used for each slot inside.
113113
*

0 commit comments

Comments
 (0)