ant-design/components/config-provider/__tests__/theme.test.ts

77 lines
2.1 KiB
TypeScript
Raw Normal View History

2021-09-01 10:56:50 +08:00
import { kebabCase } from 'lodash';
import canUseDom from 'rc-util/lib/Dom/canUseDom';
2021-09-01 10:56:50 +08:00
import ConfigProvider from '..';
import { resetWarned } from '../../_util/warning';
let mockCanUseDom = true;
jest.mock('rc-util/lib/Dom/canUseDom', () => () => mockCanUseDom);
2021-09-01 10:56:50 +08:00
describe('ConfigProvider.Theme', () => {
beforeEach(() => {
mockCanUseDom = true;
});
2021-09-01 10:56:50 +08:00
const colorList = ['primaryColor', 'successColor', 'warningColor', 'errorColor', 'infoColor'];
colorList.forEach(colorName => {
it(colorName, () => {
ConfigProvider.config({
prefixCls: 'bamboo',
theme: { [colorName]: '#0000FF' },
2021-09-01 10:56:50 +08:00
});
const styles: HTMLStyleElement[] = Array.from(document.querySelectorAll('style'));
2022-02-14 18:51:16 +08:00
const themeStyle = styles.find(style =>
style.getAttribute('rc-util-key')?.includes('-dynamic-theme'),
2022-02-14 18:51:16 +08:00
);
2021-09-01 10:56:50 +08:00
expect(themeStyle).toBeTruthy();
expect(themeStyle?.innerHTML).toContain(`--bamboo-${kebabCase(colorName)}: rgb(0, 0, 255)`);
2021-09-01 10:56:50 +08:00
});
});
it('should generate the same css variable as less algorithm', () => {
const prefixCls = 'test';
const infoColor = {
hover: '#40a9ff',
active: '#096dd9',
deprecatedBg: '#e6f7ff',
deprecatedBorder: '#91d5ff',
};
ConfigProvider.config({
prefixCls,
theme: {
infoColor: '#1890ff',
},
});
2022-10-06 18:53:06 +08:00
const styles = Array.from(document.querySelectorAll('style'));
const themeStyle = styles.find(style =>
2022-10-06 18:53:06 +08:00
style.getAttribute('rc-util-key')?.includes('-dynamic-theme'),
);
2022-10-06 18:53:06 +08:00
Object.keys(infoColor).forEach((key: keyof typeof infoColor) => {
expect(themeStyle?.innerHTML).toContain(
`--${prefixCls}-info-color-${kebabCase(key)}: ${infoColor[key]}`,
);
});
});
it('warning for SSR', () => {
resetWarned();
const errorSpy = jest.spyOn(console, 'error').mockImplementation(() => {});
mockCanUseDom = false;
expect(canUseDom()).toBeFalsy();
ConfigProvider.config({ theme: {} });
expect(errorSpy).toHaveBeenCalledWith(
'Warning: [antd: ConfigProvider] SSR do not support dynamic theme with css variables.',
);
errorSpy.mockRestore();
});
2021-09-01 10:56:50 +08:00
});