/** * @jest-environment jsdom */ /* eslint-disable jest/no-conditional-expect */ import React, { useEffect, useRef } from 'react'; import renderer from 'react-test-renderer'; import { render, fireEvent, screen } from '@testing-library/react'; // import userEvent from '@testing-library/user-event'; // import '@testing-library/jest-dom'; import CodeMirror, { ReactCodeMirrorRef } from '..'; it('CodeMirror', async () => { const component = renderer.create(); let tree = component.toJSON(); if (tree && !Array.isArray(tree)) { expect(tree.type).toEqual('div'); expect(tree.props.className).toEqual('cm-theme-light'); } }); it('CodeMirror onChange', async () => { const handleChange = jest.fn((value) => { expect(value).toEqual('# title'); return Array.isArray(value) ? value.join() : value; }); render(); const input = await screen.findByRole('textbox'); // findByRole('textbox'); fireEvent.change(input, { target: { textContent: '# title' } }); const elm = screen.queryByText('# title'); expect((elm as any).cmView.dom.innerHTML).toEqual('# title'); }); it('CodeMirror onUpdate', async () => { render( { expect(viewUpdate.state.doc.length).toEqual(27); }} />, ); }); it('CodeMirror ref', async () => { function Demo() { const ref = useRef(null); useEffect(() => { expect(Object.keys(ref.current!)).toEqual(['editor', 'state', 'view']); }, [ref]); return ; } render(); }); it('CodeMirror theme', async () => { const component = renderer.create(); let tree = component.toJSON(); if (tree && !Array.isArray(tree)) { expect(tree.type).toEqual('div'); expect(tree.props.className).toEqual('cm-theme-dark'); } }); it('CodeMirror className', async () => { const component = renderer.create(); let tree = component.toJSON(); if (tree && !Array.isArray(tree)) { expect(tree.type).toEqual('div'); expect(tree.props.className).toEqual('cm-theme-light test'); } }); it('CodeMirror placeholder', async () => { render(); const elm = screen.queryByText('Hello World'); expect(elm!.style['pointerEvents']).toEqual('none'); expect(elm!.className).toEqual('cm-placeholder'); }); it('CodeMirror editable', async () => { render(); const text = screen.getByRole('textbox'); expect(text.className).toEqual('cm-content'); expect(text.tagName).toEqual('DIV'); }); it("CodeMirror doesn't echo changes", async () => { const handleChange = jest.fn(); const { rerender } = render(); rerender(); expect(handleChange).not.toHaveBeenCalled(); });