asynctest(
'browser.tinymce.core.EditorManagerTest',
[
'ephox.agar.api.Pipeline',
'ephox.mcagar.api.LegacyUnit',
'global!document',
'tinymce.core.dom.DOMUtils',
'tinymce.core.Editor',
'tinymce.core.EditorManager',
'tinymce.core.PluginManager',
'tinymce.core.test.ViewBlock',
'tinymce.core.util.Delay',
'tinymce.core.util.Tools',
'tinymce.themes.modern.Theme'
],
function (Pipeline, LegacyUnit, document, DOMUtils, Editor, EditorManager, PluginManager, ViewBlock, Delay, Tools, Theme) {
var success = arguments[arguments.length - 2];
var failure = arguments[arguments.length - 1];
var suite = LegacyUnit.createSuite();
var viewBlock = new ViewBlock();
Theme();
var teardown = function (done) {
Delay.setTimeout(function () {
EditorManager.remove();
done();
}, 0);
};
suite.asyncTest('get', function (_, done) {
viewBlock.update('<textarea class="tinymce"></textarea>');
EditorManager.init({
selector: "textarea.tinymce",
skin_url: '/project/src/skins/lightgray/dist/lightgray',
init_instance_callback: function (editor1) {
LegacyUnit.equal(EditorManager.get().length, 1);
LegacyUnit.equal(EditorManager.get(0) === EditorManager.activeEditor, true);
LegacyUnit.equal(EditorManager.get(1), null);
LegacyUnit.equal(EditorManager.get("noid"), null);
LegacyUnit.equal(EditorManager.get(undefined), null);
LegacyUnit.equal(EditorManager.get()[0] === EditorManager.activeEditor, true);
LegacyUnit.equal(EditorManager.get(EditorManager.activeEditor.id) === EditorManager.activeEditor, true);
LegacyUnit.equal(EditorManager.get() !== EditorManager.get(), true);
// Trigger save
var saveCount = 0;
editor1.on('SaveContent', function () {
saveCount++;
});
EditorManager.triggerSave();
LegacyUnit.equal(saveCount, 1);
// Re-init on same id
EditorManager.init({
selector: "#" + EditorManager.activeEditor.id,
skin_url: '/project/src/skins/lightgray/dist/lightgray'
});
LegacyUnit.equal(EditorManager.get().length, 1);
teardown(done);
}
});
});
suite.test('addI18n/translate', function () {
EditorManager.addI18n('en', {
'from': 'to'
});
LegacyUnit.equal(EditorManager.translate('from'), 'to');
});
suite.asyncTest("Do not reload language pack if it was already loaded or registered manually.", function (_, done) {
var langCode = 'mce_lang';
var langUrl = 'http://example.com/language/' + langCode + '.js';
EditorManager.addI18n(langCode, {
'from': 'to'
});
viewBlock.update('<textarea></textarea>');
EditorManager.init({
selector: "textarea",
skin_url: '/project/src/skins/lightgray/dist/lightgray',
language: langCode,
language_url: langUrl,
init_instance_callback: function (ed) {
var scripts = Tools.grep(document.getElementsByTagName('script'), function (script) {
return script.src === langUrl;
});
LegacyUnit.equal(scripts.length, 0);
teardown(done);
}
});
});
suite.asyncTest('Externally destroyed editor', function (_, done) {
EditorManager.remove();
EditorManager.init({
selector: "textarea",
skin_url: '/project/src/skins/lightgray/dist/lightgray',
init_instance_callback: function (editor1) {
Delay.setTimeout(function () {
// Destroy the editor by setting innerHTML common ajax pattern
viewBlock.update('<textarea id="' + editor1.id + '"></textarea>');
// Re-init the editor will have the same id
EditorManager.init({
selector: "textarea",
skin_url: '/project/src/skins/lightgray/dist/lightgray',
init_instance_callback: function (editor2) {
LegacyUnit.equal(EditorManager.get().length, 1);
LegacyUnit.equal(editor1.id, editor2.id);
LegacyUnit.equal(editor1.destroyed, 1, "First editor instance should be destroyed");
teardown(done);
}
});
}, 0);
}
});
});
suite.test('overrideDefaults', function () {
var oldBaseURI, oldBaseUrl, oldSuffix;
oldBaseURI = EditorManager.baseURI;
oldBaseUrl = EditorManager.baseURL;
oldSuffix = EditorManager.suffix;
EditorManager.overrideDefaults({
test: 42,
base_url: "http://www.EditorManager.com/base/",
suffix: "x",
external_plugins: {
"plugina": "//domain/plugina.js",
"pluginb": "//domain/pluginb.js"
},
plugin_base_urls: {
testplugin: 'http://custom.ephox.com/dir/testplugin'
}
});
LegacyUnit.strictEqual(EditorManager.baseURI.path, "/base");
LegacyUnit.strictEqual(EditorManager.baseURL, "http://www.EditorManager.com/base");
LegacyUnit.strictEqual(EditorManager.suffix, "x");
LegacyUnit.strictEqual(new Editor('ed1', {}, EditorManager).settings.test, 42);
LegacyUnit.strictEqual(PluginManager.urls.testplugin, 'http://custom.ephox.com/dir/testplugin');
LegacyUnit.equal(new Editor('ed2', {
skin_url: '/project/src/skins/lightgray/dist/lightgray',
external_plugins: {
"plugina": "//domain/plugina2.js",
"pluginc": "//domain/pluginc.js"
},
plugin_base_urls: {
testplugin: 'http://custom.ephox.com/dir/testplugin'
}
}, EditorManager).settings.external_plugins, {
"plugina": "//domain/plugina2.js",
"pluginb": "//domain/pluginb.js",
"pluginc": "//domain/pluginc.js"
});
LegacyUnit.equal(new Editor('ed3', {
skin_url: '/project/src/skins/lightgray/dist/lightgray'
}, EditorManager).settings.external_plugins, {
"plugina": "//domain/plugina.js",
"pluginb": "//domain/pluginb.js"
});
EditorManager.baseURI = oldBaseURI;
EditorManager.baseURL = oldBaseUrl;
EditorManager.suffix = oldSuffix;
EditorManager.overrideDefaults({});
});
suite.test('Init inline editor on invalid targets', function () {
var invalidNames;
invalidNames = (
'area base basefont br col frame hr img input isindex link meta param embed source wbr track ' +
'colgroup option tbody tfoot thead tr script noscript style textarea video audio iframe object menu'
);
EditorManager.remove();
Tools.each(invalidNames.split(' '), function (invalidName) {
var elm = DOMUtils.DOM.add(document.body, invalidName, { 'class': 'targetEditor' }, null);
EditorManager.init({
selector: invalidName + '.targetEditor',
skin_url: '/project/src/skins/lightgray/dist/lightgray',
inline: true
});
LegacyUnit.strictEqual(EditorManager.get().length, 0, 'Should not have created an editor');
DOMUtils.DOM.remove(elm);
});
});
viewBlock.attach();
Pipeline.async({}, suite.toSteps({}), function () {
EditorManager.remove();
viewBlock.detach();
success();
}, failure);
}
);
|