-
Notifications
You must be signed in to change notification settings - Fork 59
/
index.test.tsx
116 lines (99 loc) · 3.33 KB
/
index.test.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
import * as React from 'react';
import { makeResetStyles, makeStyles, mergeClasses, TextDirectionProvider } from '@griffel/react';
import { render } from '@testing-library/react';
import { print, test } from './index';
expect.addSnapshotSerializer({ print, test });
const useStyles1 = makeStyles({
root: { color: 'var(--colorNeutralForeground1)' },
paddingLeft: { paddingLeft: '10px' },
});
const useStyles2 = makeStyles({
paddingRight: { paddingRight: '20px' },
});
const useStyles3 = makeStyles({
display: { display: 'none' },
});
const useBaseStyles = makeResetStyles({
color: 'red',
marginLeft: '20px',
});
const TestComponent: React.FC<{ id?: string }> = ({ id }) => {
const styles1 = useStyles1();
const styles2 = useStyles2();
const styles3 = useStyles3();
const styles = mergeClasses(
'class-a',
styles1.root,
styles1.paddingLeft,
styles2.paddingRight,
styles3.display,
'class-b',
);
return <div data-testid={id} className={styles} />;
};
const TestResetComponent: React.FC<{ id?: string }> = ({ id }) => {
const classes = useStyles1();
const baseClassName = useBaseStyles();
const className = mergeClasses('class-a', classes.paddingLeft, baseClassName, 'class-b');
return <div data-testid={id} className={className} />;
};
const RtlWrapper: React.FC<{ children: React.ReactNode }> = ({ children }) => (
<TextDirectionProvider dir="rtl">{children}</TextDirectionProvider>
);
describe('serializer', () => {
it('should check styles', () => {
expect(render(<TestComponent id="test" />).getByTestId('test')).toHaveStyle({
display: 'none',
paddingLeft: '10px',
paddingRight: '20px',
});
expect(render(<TestResetComponent id="reset-test" />).getByTestId('reset-test')).toHaveStyle({
color: 'red',
paddingLeft: '10px',
marginLeft: '20px',
});
expect(render(<TestComponent id="rtl-test" />, { wrapper: RtlWrapper }).getByTestId('rtl-test')).toHaveStyle({
display: 'none',
paddingLeft: '20px',
paddingRight: '10px',
});
expect(
render(<TestResetComponent id="rtl-reset-test" />, { wrapper: RtlWrapper }).getByTestId('rtl-reset-test'),
).toHaveStyle({
color: 'red',
paddingRight: '10px',
marginRight: '20px',
});
});
// Note: When HTML element is passed we will get a string with classes, not the whole snippet
it('handles classes strings', () => {
expect(render(<TestComponent />).container.firstChild).toMatchInlineSnapshot(`
<div
class="class-a class-b"
/>
`);
expect(render(<TestResetComponent />).container.firstChild).toMatchInlineSnapshot(`
<div
class="class-a class-b"
/>
`);
expect(render(<TestComponent />, { wrapper: RtlWrapper }).container.firstChild).toMatchInlineSnapshot(`
<div
class="class-a class-b"
/>
`);
expect(render(<TestResetComponent />, { wrapper: RtlWrapper }).container.firstChild).toMatchInlineSnapshot(`
<div
class="class-a class-b"
/>
`);
});
it('handles HTML strings', () => {
expect(render(<TestResetComponent />).container.innerHTML).toMatchInlineSnapshot(
`"<div class="class-a class-b"></div>"`,
);
expect(render(<TestResetComponent />).container.innerHTML).toMatchInlineSnapshot(
`"<div class="class-a class-b"></div>"`,
);
});
});