import { Chain, Logger, Pipeline, RawAssertions } from '@ephox/agar';
import { UnitTest } from '@ephox/bedrock';
import { Editor as McEditor } from '@ephox/mcagar';
import { Editor } from 'tinymce/core/api/Editor';
import EditorManager from 'tinymce/core/api/EditorManager';
import Theme from 'tinymce/themes/modern/Theme';
import Node from 'tinymce/core/api/html/Node';
UnitTest.asynctest('browser.tinymce.core.EditorContentNotInitializedTest', (success, failure) => {
Theme();
const settings = {
skin_url: '/project/js/tinymce/skins/lightgray'
};
const cCreateEditor = Chain.on((_, next, die) => next(Chain.wrap(new Editor('editor', {}, EditorManager))));
const cSetContentAndAssertReturn = (content) => Chain.op((editor) => {
const actual = editor.setContent(content);
RawAssertions.assertEq('should return what you tried to set', content, actual);
});
const cGetAndAssertContent = (expected, tree?) => Chain.op((editor) => {
const actual = tree ? editor.getContent({format: 'tree'}) : editor.getContent();
RawAssertions.assertEq('content should be equal', expected, actual);
});
const cRemoveBodyElement = Chain.op((editor) => {
const body = editor.getBody();
body.parentNode.removeChild(body);
});
Pipeline.async({}, [
Logger.t('set content on editor without initializing it', Chain.asStep({}, [
cCreateEditor,
cSetContentAndAssertReturn('hello'),
McEditor.cRemove
])),
Logger.t('set content on editor where the body has been removed', Chain.asStep({}, [
McEditor.cFromHtml('', settings),
cRemoveBodyElement,
cSetContentAndAssertReturn('hello'),
McEditor.cRemove
])),
Logger.t('get content on editor without initializing it', Chain.asStep({}, [
cCreateEditor,
cGetAndAssertContent(''),
McEditor.cRemove
])),
Logger.t('get content on editor where the body has been removed', Chain.asStep({}, [
McEditor.cFromHtml('', settings),
cRemoveBodyElement,
cGetAndAssertContent(''),
McEditor.cRemove
])),
Logger.t('set tree content on editor without initializing it', Chain.asStep({}, [
cCreateEditor,
cSetContentAndAssertReturn(new Node('p', 1)),
McEditor.cRemove,
])),
Logger.t('set tree content on editor where the body has been removed', Chain.asStep({}, [
McEditor.cFromHtml('', settings),
cRemoveBodyElement,
cSetContentAndAssertReturn(new Node('p', 1)),
McEditor.cRemove
])),
Logger.t('get tree content on editor without initializing it', Chain.asStep({}, [
cCreateEditor,
cGetAndAssertContent(new Node('body', 11), true),
McEditor.cRemove
])),
Logger.t('get tree content on editor where the body has been removed', Chain.asStep({}, [
McEditor.cFromHtml('', settings),
cRemoveBodyElement,
cGetAndAssertContent(new Node('body', 11), true),
McEditor.cRemove
]))
], () => {
success();
}, failure);
});