import React from 'react'; import mountTest from '../../../tests/shared/mountTest'; import { act, fireEvent, getByText, render, waitFakeTimer } from '../../../tests/utils'; import Wave from '../wave'; let isVisible = vi.hoisted(() => true); vi.mock('rc-util/es/Dom/isVisible', () => { const mockFn = () => isVisible; return { default: mockFn, }; }); describe('Wave component', () => { mountTest(Wave); let obCnt = 0; let disCnt = 0; beforeAll(() => { /* eslint-disable class-methods-use-this */ class FakeResizeObserver { observe = () => { obCnt += 1; }; disconnect = () => { disCnt += 1; }; } (window as any).ResizeObserver = FakeResizeObserver; vi.useFakeTimers(); }); afterAll(() => { vi.useRealTimers(); expect(obCnt).not.toBe(0); expect(disCnt).not.toBe(0); }); beforeEach(() => { isVisible = true; document.body.innerHTML = ''; }); afterEach(async () => { await vi.runAllTimersAsync(); vi.clearAllTimers(); const styles = document.getElementsByTagName('style'); for (let i = 0; i < styles.length; i += 1) { styles[i].remove(); } }); function getWaveColor() { const { style } = document.querySelector('.ant-wave')!; return style.getPropertyValue('--wave-color'); } function waitRaf() { act(() => { vi.advanceTimersByTime(100); }); } it('work', async () => { const { container, unmount } = render( , ); fireEvent.click(container.querySelector('button')!); waitRaf(); expect(document.querySelector('.ant-wave')).toBeTruthy(); // Match deadline await waitFakeTimer(); expect(document.querySelector('.ant-wave')).toBeFalsy(); unmount(); }); it('invisible in screen', () => { isVisible = false; const { container, unmount } = render( , ); fireEvent.click(container.querySelector('button')!); waitRaf(); expect(document.querySelector('.ant-wave')).toBeFalsy(); unmount(); }); it('wave color is grey', () => { const { container, unmount } = render( , ); fireEvent.click(container.querySelector('button')!); waitRaf(); expect(getWaveColor()).toBeFalsy(); unmount(); }); it('wave color is not grey', () => { const { container, unmount } = render( , ); fireEvent.click(container.querySelector('button')!); waitRaf(); expect(getWaveColor()).toEqual('rgb(255, 0, 0)'); unmount(); }); it('read wave color from border-top-color', () => { const { container, unmount } = render(
button
, ); fireEvent.click(getByText(container, 'button')!); waitRaf(); expect(getWaveColor()).toEqual('rgb(0, 0, 255)'); unmount(); }); it('read wave color from background color', () => { const { container, unmount } = render(
button
, ); fireEvent.click(getByText(container, 'button')!); waitRaf(); expect(getWaveColor()).toEqual('rgb(0, 128, 0)'); unmount(); }); it('read wave color from border firstly', () => { const { container, unmount } = render(
button
, ); fireEvent.click(getByText(container, 'button')!); waitRaf(); expect(getWaveColor()).toEqual('rgb(255, 0, 0)'); unmount(); }); it('hidden element with -leave className', () => { const { container, unmount } = render( , ); fireEvent.click(container.querySelector('button')!); waitRaf(); 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', () => { isVisible = false; const { container } = render( , ); fireEvent.click(container.querySelector('button')!); waitRaf(); expect(document.querySelector('.ant-wave')).toBeFalsy(); }); it('not show when is input', () => { const { container } = render( , ); fireEvent.click(container.querySelector('input')!); waitRaf(); expect(document.querySelector('.ant-wave')).toBeFalsy(); }); it('should not throw when click it', () => { expect(() => { const { container } = render(
, ); fireEvent.click(container); waitRaf(); }).not.toThrow(); }); it('should not throw when no children', () => { expect(() => { render(); waitRaf(); }).not.toThrow(); }); it('wave color should inferred if border is transparent and background is not', () => { const { container, unmount } = render( , ); fireEvent.click(container.querySelector('button')!); waitRaf(); expect(getWaveColor()).toEqual('rgb(255, 0, 0)'); unmount(); }); it('wave color should inferred if borderTopColor is transparent and borderColor is not', () => { const { container, unmount } = render( , ); fireEvent.click(container.querySelector('button')!); waitRaf(); expect(getWaveColor()).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); waitRaf(); expect(container.querySelector('.ant-wave')).toBeTruthy(); }); });