import React from 'react'; import mountTest from '../../../tests/shared/mountTest'; import { render, fireEvent, getByText, waitFakeTimer } from '../../../tests/utils'; import Wave from '../wave'; (global as any).isVisible = true; jest.mock('rc-util/lib/Dom/isVisible', () => { const mockFn = () => (global as any).isVisible; return mockFn; }); describe('Wave component', () => { mountTest(Wave); beforeAll(() => { jest.useFakeTimers(); }); afterAll(() => { jest.useRealTimers(); }); beforeEach(() => { (global as any).isVisible = true; document.body.innerHTML = ''; }); afterEach(() => { jest.clearAllTimers(); const styles = document.getElementsByTagName('style'); for (let i = 0; i < styles.length; i += 1) { styles[i].remove(); } }); function getWaveStyle() { const styleObj: Record = {}; const { style } = document.querySelector('.ant-wave')!; style.cssText.split(';').forEach((kv) => { if (kv.trim()) { const cells = kv.split(':'); styleObj[cells[0].trim()] = cells[1].trim(); } }); return styleObj; } it('work', async () => { const { container, unmount } = render( , ); fireEvent.click(container.querySelector('button')!); expect(document.querySelector('.ant-wave')).toBeTruthy(); // Match deadline await waitFakeTimer(); expect(document.querySelector('.ant-wave')).toBeFalsy(); unmount(); }); it('invisible in screen', () => { (global as any).isVisible = false; const { container, unmount } = render( , ); fireEvent.click(container.querySelector('button')!); expect(document.querySelector('.ant-wave')).toBeFalsy(); unmount(); }); it('wave color is grey', () => { const { container, unmount } = render( , ); fireEvent.click(container.querySelector('button')!); const style = getWaveStyle(); expect(style['--wave-scale']).toBeTruthy(); expect(style['--wave-color']).toBeFalsy(); unmount(); }); it('wave color is not grey', () => { const { container, unmount } = render( , ); fireEvent.click(container.querySelector('button')!); const style = getWaveStyle(); expect(style['--wave-color']).toEqual('red'); unmount(); }); it('read wave color from border-top-color', () => { const { container, unmount } = render(
button
, ); fireEvent.click(getByText(container, 'button')!); const style = getWaveStyle(); expect(style['--wave-color']).toEqual('blue'); unmount(); }); it('read wave color from background color', () => { const { container, unmount } = render(
button
, ); fireEvent.click(getByText(container, 'button')!); const style = getWaveStyle(); expect(style['--wave-color']).toEqual('green'); unmount(); }); it('read wave color from border firstly', () => { const { container, unmount } = render(
button
, ); fireEvent.click(getByText(container, 'button')!); const style = getWaveStyle(); expect(style['--wave-color']).toEqual('yellow'); unmount(); }); it('hidden element with -leave className', () => { const { container, unmount } = render( , ); fireEvent.click(container.querySelector('button')!); expect(document.querySelector('.ant-wave')).toBeFalsy(); unmount(); }); it('not show when disabled', () => { const { container } = render( , ); fireEvent.click(container.querySelector('button')!); expect(document.querySelector('.ant-wave')).toBeFalsy(); }); it('not show when hidden', () => { (global as any).isVisible = false; const { container } = render( , ); fireEvent.click(container.querySelector('button')!); expect(document.querySelector('.ant-wave')).toBeFalsy(); }); it('not show when is input', () => { const { container } = render( , ); fireEvent.click(container.querySelector('input')!); expect(document.querySelector('.ant-wave')).toBeFalsy(); }); it('should not throw when click it', () => { expect(() => { const { container } = render(
, ); fireEvent.click(container); }).not.toThrow(); }); it('should not throw when no children', () => { expect(() => render()).not.toThrow(); }); it('wave color should inferred if border is transparent and background is not', () => { const { container, unmount } = render( , ); fireEvent.click(container.querySelector('button')!); const style = getWaveStyle(); expect(style['--wave-color']).toEqual('red'); unmount(); }); it('wave color should inferred if borderTopColor is transparent and borderColor is not', () => { const { container, unmount } = render( , ); fireEvent.click(container.querySelector('button')!); const style = getWaveStyle(); expect(style['--wave-color']).toEqual('red'); unmount(); }); it('Wave style should append to validate element', () => { const { container } = render(
, ); // Mock shadow container const fakeDoc = document.createElement('div'); fakeDoc.append('text'); fakeDoc.appendChild(document.createElement('span')); expect(fakeDoc.childNodes).toHaveLength(2); const elem = container.querySelector('.bamboo')!; elem.getRootNode = () => fakeDoc; // Click should not throw fireEvent.click(elem); expect(fakeDoc.querySelector('.ant-wave')).toBeTruthy(); }); });