/**
* @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();
});