asynctest(
'browser.tinymce.plugins.table.TableRowDialogTest',
[
'ephox.agar.api.Pipeline',
'ephox.mcagar.api.LegacyUnit',
'ephox.mcagar.api.TinyLoader',
'tinymce.plugins.table.Plugin',
'tinymce.themes.modern.Theme'
],
function (Pipeline, LegacyUnit, TinyLoader, Plugin, Theme) {
var success = arguments[arguments.length - 2];
var failure = arguments[arguments.length - 1];
var suite = LegacyUnit.createSuite();
Plugin();
Theme();
var getFrontmostWindow = function (editor) {
return editor.windowManager.windows[editor.windowManager.windows.length - 1];
};
var closeTopMostWindow = function (editor) {
var win = getFrontmostWindow(editor);
if (win) {
getFrontmostWindow(editor).close();
}
};
var fillAndSubmitWindowForm = function (editor, data) {
var win = getFrontmostWindow(editor);
win.fromJSON(data);
win.find('form')[0].submit();
win.close();
};
var cleanTableHtml = function (html) {
return html.replace(/<p>( |<br[^>]+>)<\/p>$/, '');
};
suite.test("Table row properties dialog (get data from plain cell)", function (editor) {
editor.focus();
editor.setContent('<table><tr><td>X</td></tr></table>');
LegacyUnit.setSelection(editor, 'td', 0);
editor.execCommand('mceTableRowProps');
LegacyUnit.deepEqual(getFrontmostWindow(editor).toJSON(), {
"align": "",
"height": "",
"type": "tbody",
"backgroundColor": "",
"borderStyle": "",
"borderColor": "",
"style": ""
});
closeTopMostWindow(editor);
});
suite.test("Table row properties dialog (get data from complex row)", function (editor) {
editor.setContent(
'<table><thead>' +
'<tr style="height: 10px; text-align: right; border-color: red; background-color: blue"><td>X</td></tr>' +
'</thead></table>'
);
LegacyUnit.setSelection(editor, 'td', 0);
editor.execCommand('mceTableRowProps');
LegacyUnit.deepEqual(getFrontmostWindow(editor).toJSON(), {
"align": "right",
"height": "10px",
"type": "thead",
"backgroundColor": "blue",
"borderColor": "red",
"borderStyle": "",
"style": "height: 10px; text-align: right; border-color: red; background-color: blue;"
});
closeTopMostWindow(editor);
});
suite.test("Table row properties dialog (update all)", function (editor) {
editor.setContent('<table><tr><td>X</td></tr></table>');
LegacyUnit.setSelection(editor, 'td', 0);
editor.execCommand('mceTableRowProps');
fillAndSubmitWindowForm(editor, {
"align": "right",
"height": "10",
"type": "thead"
});
LegacyUnit.equal(
cleanTableHtml(editor.getContent()),
'<table><thead><tr style="height: 10px; text-align: right;"><td>X</td></tr></thead></table>'
);
closeTopMostWindow(editor);
});
suite.test("Caption should always stay the firstChild of the table (see TINY-1167)", function (editor) {
editor.setContent('<table><caption>CAPTION</caption><tbody><tr><td>X</td></tr><tr><td>Y</td></tr></tbody></table>');
LegacyUnit.setSelection(editor, 'td', 0);
editor.execCommand('mceTableRowProps');
fillAndSubmitWindowForm(editor, {
"type": "thead"
});
LegacyUnit.equal(
cleanTableHtml(editor.getContent()),
'<table><caption>CAPTION</caption><thead><tr><td>X</td></tr></thead><tbody><tr><td>Y</td></tr></tbody></table>'
);
closeTopMostWindow(editor);
});
suite.test("Table row properties dialog update multiple rows", function (editor) {
editor.getBody().innerHTML = (
'<table>' +
'<tbody>' +
'<tr style="height: 20px;">' +
'<td data-mce-selected="1">a</td>' +
'<td data-mce-selected="1">b</td>' +
'</tr>' +
'<tr style="height: 20px;">' +
'<td data-mce-selected="1">c</td>' +
'<td data-mce-selected="1">d</td>' +
'</tr>' +
'</tbody>' +
'</table>'
);
LegacyUnit.setSelection(editor, 'tr:nth-child(2) td:nth-child(2)', 0);
editor.execCommand('mceTableRowProps');
LegacyUnit.deepEqual(getFrontmostWindow(editor).toJSON(), {
"align": "",
"height": "",
"type": "tbody",
"backgroundColor": "",
"borderColor": "",
"borderStyle": "",
"style": ""
}, 'Should not contain height');
fillAndSubmitWindowForm(editor, {
"align": "center"
});
LegacyUnit.equal(
cleanTableHtml(editor.getContent()),
(
'<table>' +
'<tbody>' +
'<tr style="height: 20px; text-align: center;">' +
'<td>a</td>' +
'<td>b</td>' +
'</tr>' +
'<tr style="height: 20px; text-align: center;">' +
'<td>c</td>' +
'<td>d</td>' +
'</tr>' +
'</tbody>' +
'</table>'
),
'Width should be retained height should be changed'
);
closeTopMostWindow(editor);
});
TinyLoader.setup(function (editor, onSuccess, onFailure) {
Pipeline.async({}, suite.toSteps(editor), onSuccess, onFailure);
}, {
plugins: 'table',
indent: false,
valid_styles: {
'*': 'width,height,vertical-align,text-align,float,border-color,border-style,background-color,border,padding,border-spacing,border-collapse'
},
skin_url: '/project/src/skins/lightgray/dist/lightgray'
}, success, failure);
}
);
|