import React from 'react';
import { ReactWrapper } from 'enzyme';
import { createEditorFactory } from '@atlaskit/editor-test-helpers/create-editor';
import { mountWithIntl } from '@atlaskit/editor-test-helpers/enzyme';
import {
doc,
p,
extension,
DocBuilder,
} from '@atlaskit/editor-test-helpers/doc-builder';
import FullPage from '../../../ui/Appearance/FullPage';
import EditorContext from '../../../ui/EditorContext';
const mountWithContext = (node: React.ReactNode) =>
mountWithIntl({node});
describe('full page editor', () => {
const createEditor = createEditorFactory();
const editor = (doc: DocBuilder) =>
createEditor({
doc,
editorProps: { allowExtension: true },
});
let fullPage: ReactWrapper | undefined;
afterAll(() => {
if (fullPage) {
fullPage.unmount();
fullPage = undefined;
}
});
it('should create empty terminal empty paragraph when clicked outside editor', () => {
const { editorView } = editor(doc(p('Hello world'), p('Hello world')));
fullPage = mountWithContext(
}
/>,
);
fullPage
.findWhere((elm) => elm.name() === 'ClickWrapper')
.simulate('click', { clientY: 200 });
expect(editorView.state.doc).toEqualDocument(
doc(p('Hello world'), p('Hello world'), p('')),
);
});
it('should create empty terminal empty paragraph when clicked outside editor even if last block is extension', () => {
const { editorView } = editor(
doc(
p('Hello world'),
extension({
extensionKey: '123',
extensionType: 'BLOCK',
localId: 'testId',
})(),
),
);
fullPage = mountWithContext(
}
/>,
);
fullPage
.findWhere((elm) => elm.name() === 'ClickWrapper')
.simulate('click', { clientY: 200 });
expect(editorView.state.doc).toEqualDocument(
doc(
p('Hello world'),
extension({
extensionKey: '123',
extensionType: 'BLOCK',
localId: 'testId',
})(),
p(''),
),
);
});
it('should not create empty terminal empty paragraph if it is already present at end', () => {
const { editorView } = editor(doc(p('Hello world'), p('')));
fullPage = mountWithContext(
}
/>,
);
fullPage
.findWhere((elm) => elm.name() === 'ClickWrapper')
.simulate('click', { clientY: 200 })
.simulate('click', { clientY: 200 });
expect(editorView.state.doc).toEqualDocument(doc(p('Hello world'), p('')));
});
it('should not create empty terminal paragraph when clicked inside editor', () => {
const { editorView } = editor(doc(p('Hello world')));
fullPage = mountWithContext(
}
/>,
);
(editorView.dom as HTMLElement).click();
expect(editorView.state.doc).toEqualDocument(doc(p('Hello world')));
});
it('should set selection to end of editor content if paragraph is inserted', () => {
const { editorView, sel } = editor(doc(p('Hello {<>}')));
fullPage = mountWithContext(
}
/>,
);
fullPage
.findWhere((elm) => elm.name() === 'ClickWrapper')
.simulate('click', { clientY: 300 });
const { selection } = editorView.state;
expect(selection.empty).toEqual(true);
expect(selection.$to.pos).toEqual(sel + 2);
});
it('should set selection to end of editor content event if is already present at end', () => {
const { editorView, sel } = editor(doc(p('Hello {<>}'), p('')));
fullPage = mountWithContext(
}
/>,
);
fullPage
.findWhere((elm) => elm.name() === 'ClickWrapper')
.simulate('click', { clientY: 300 });
const { selection } = editorView.state;
expect(selection.empty).toEqual(true);
expect(selection.$to.pos).toEqual(sel + 2);
});
it('should create paragraph correctly when clicked outside and then inside the editor in sequence', () => {
const { editorView } = editor(doc(p('Hello world'), p('Hello world')));
fullPage = mountWithContext(
}
/>,
);
fullPage
.findWhere((elm) => elm.name() === 'ClickWrapper')
.simulate('click', { clientY: 200 });
expect(editorView.state.doc).toEqualDocument(
doc(p('Hello world'), p('Hello world'), p('')),
);
(editorView.dom as HTMLElement).click();
fullPage
.findWhere((elm) => elm.name() === 'ClickWrapper')
.simulate('click', { clientY: 200 });
expect(editorView.state.doc).toEqualDocument(
doc(p('Hello world'), p('Hello world'), p('')),
);
fullPage
.findWhere((elm) => elm.name() === 'ClickWrapper')
.simulate('click', { clientY: 200 });
expect(editorView.state.doc).toEqualDocument(
doc(p('Hello world'), p('Hello world'), p('')),
);
});
});