(function() { module("tinymce.plugins.Table", { setupModule: function() { QUnit.stop(); tinymce.init({ selector: "textarea", add_unload_trigger: false, skin: false, indent: false, plugins: 'table', valid_styles: { '*' : 'width,height,vertical-align,text-align,float' }, init_instance_callback: function(ed) { window.editor = ed; QUnit.start(); } }); } }); function fillAndSubmitWindowForm(data) { var win = Utils.getFontmostWindow(); win.fromJSON(data); win.find('form')[0].submit(); win.close(); } function cleanTableHtml(html) { return Utils.cleanHtml(html).replace(/

( |]+>)<\/p>$/, ''); } test("Table properties dialog (get data from plain table)", function() { editor.setContent('
X
'); Utils.setSelection('td', 0); editor.execCommand('mceInsertTable'); deepEqual(Utils.getFontmostWindow().toJSON(), { "align": "", "border": "", "caption": false, "cellpadding": "", "cellspacing": "", "height": "", "width": "" }); Utils.getFontmostWindow().close(); }); test("Table properties dialog (get data from full table)", function() { editor.setContent( '' + '' + '' + '' + '' + '' + '' + '
 
 
' ); Utils.setSelection('td', 0); editor.execCommand('mceInsertTable'); deepEqual(Utils.getFontmostWindow().toJSON(), { "align": "", "border": "4", "caption": true, "cellpadding": "3", "cellspacing": "2", "height": "101", "width": "100" }); Utils.getFontmostWindow().close(); }); test("Table properties dialog (add caption)", function() { editor.setContent('
X
'); Utils.setSelection('td', 0); editor.execCommand('mceInsertTable'); fillAndSubmitWindowForm({ caption: true }); equal( cleanTableHtml(editor.getContent()), '
 
x
' ); }); test("Table properties dialog (remove caption)", function() { editor.setContent('
 
X
'); Utils.setSelection('td', 0); editor.execCommand('mceInsertTable'); fillAndSubmitWindowForm({ caption: false }); equal( cleanTableHtml(editor.getContent()), '
x
' ); }); test("Table properties dialog (change size in pixels)", function() { editor.setContent('
X
'); Utils.setSelection('td', 0); editor.execCommand('mceInsertTable'); fillAndSubmitWindowForm({ width: 100, height: 101 }); equal( cleanTableHtml(editor.getContent()), '
x
' ); }); test("Table properties dialog (change size in %)", function() { editor.setContent('
X
'); Utils.setSelection('td', 0); editor.execCommand('mceInsertTable'); fillAndSubmitWindowForm({ width: "100%", height: "101%" }); equal( cleanTableHtml(editor.getContent()), '
x
' ); }); test("Table properties dialog (change: border,cellpadding,cellspacing,align)", function() { editor.setContent('
X
'); Utils.setSelection('td', 0); editor.execCommand('mceInsertTable'); fillAndSubmitWindowForm({ border: "1", cellpadding: "2", cellspacing: "3", align: "right" }); equal( cleanTableHtml(editor.getContent()), '
x
' ); }); test("Table cell properties dialog (get data from plain cell)", function() { editor.setContent('
X
'); Utils.setSelection('td', 0); editor.execCommand('mceTableCellProps'); deepEqual(Utils.getFontmostWindow().toJSON(), { "align": "", "valign": "", "height": "", "scope": "", "type": "td", "width": "" }); Utils.getFontmostWindow().close(); }); test("Table cell properties dialog (get data from complex cell)", function() { editor.setContent('
X
'); Utils.setSelection('th', 0); editor.execCommand('mceTableCellProps'); deepEqual(Utils.getFontmostWindow().toJSON(), { "align": "right", "valign": "top", "height": "11", "scope": "row", "type": "th", "width": "10" }); Utils.getFontmostWindow().close(); }); test("Table cell properties dialog (update all)", function() { editor.setContent('
X
'); Utils.setSelection('td', 0); editor.execCommand('mceTableCellProps'); fillAndSubmitWindowForm({ "align": "right", "height": "11", "scope": "row", "type": "th", "width": "10" }); equal( cleanTableHtml(editor.getContent()), '
x
' ); }); test("Table row properties dialog (get data from plain cell)", function() { editor.setContent('
X
'); Utils.setSelection('td', 0); editor.execCommand('mceTableRowProps'); deepEqual(Utils.getFontmostWindow().toJSON(), { "align": "", "height": "", "type": "tbody" }); Utils.getFontmostWindow().close(); }); test("Table row properties dialog (get data from complex cell)", function() { editor.setContent('
X
'); Utils.setSelection('td', 0); editor.execCommand('mceTableRowProps'); deepEqual(Utils.getFontmostWindow().toJSON(), { "align": "right", "height": "10", "type": "thead" }); Utils.getFontmostWindow().close(); }); test("Table row properties dialog (update all)", function() { editor.setContent('
X
'); Utils.setSelection('td', 0); editor.execCommand('mceTableRowProps'); fillAndSubmitWindowForm({ "align": "right", "height": "10", "type": "thead" }); equal( cleanTableHtml(editor.getContent()), '
x
' ); }); test("mceTableDelete command", function() { editor.setContent('
X
'); Utils.setSelection('td', 0); editor.execCommand('mceTableDelete'); equal(cleanTableHtml(editor.getContent()), ''); }); test("mceTableDeleteCol command", function() { editor.setContent('
12
'); Utils.setSelection('td', 0); editor.execCommand('mceTableDeleteCol'); equal(cleanTableHtml(editor.getContent()), '
2
'); }); test("mceTableDeleteRow command", function() { editor.setContent('
1
2
'); Utils.setSelection('td', 0); editor.execCommand('mceTableDeleteRow'); equal(cleanTableHtml(editor.getContent()), '
2
'); }); test("mceTableInsertColAfter command", function() { editor.setContent('
1
2
'); Utils.setSelection('td', 0); editor.execCommand('mceTableInsertColAfter'); equal(cleanTableHtml(editor.getContent()), '
1 
2 
'); }); test("mceTableInsertColBefore command", function() { editor.setContent('
1
2
'); Utils.setSelection('td', 0); editor.execCommand('mceTableInsertColBefore'); equal(cleanTableHtml(editor.getContent()), '
 1
 2
'); }); test("mceTableInsertRowAfter command", function() { editor.setContent('
12
'); Utils.setSelection('td', 0); editor.execCommand('mceTableInsertRowAfter'); equal(cleanTableHtml(editor.getContent()), '
12
  
'); }); test("mceTableInsertRowBefore command", function() { editor.setContent('
12
'); Utils.setSelection('td', 0); editor.execCommand('mceTableInsertRowBefore'); equal(cleanTableHtml(editor.getContent()), '
  
12
'); }); test("mceTableMergeCells command with cell selection", function() { editor.setContent('
12
'); Utils.setSelection('td', 0); editor.execCommand('mceTableMergeCells'); equal(cleanTableHtml(editor.getContent()), '
12
'); }); test("mceTableSplitCells command", function() { editor.setContent('
12
'); Utils.setSelection('td', 0); editor.execCommand('mceTableSplitCells'); equal( cleanTableHtml(editor.getContent()), '
12 
' ); }); test("Tab key navigation", function() { editor.setContent('
A1A2
B1B2

x

'); Utils.setSelection('td', 0); editor.fire('keydown', {keyCode: 9}); equal(editor.selection.getStart().innerHTML, 'A2'); Utils.setSelection('td', 0); editor.fire('keydown', {keyCode: 9, shiftKey: true}); equal(editor.selection.getStart().innerHTML, 'A1'); Utils.setSelection('td:nth-child(2)', 0); editor.fire('keydown', {keyCode: 9, shiftKey: true}); equal(editor.selection.getStart().innerHTML, 'A1'); Utils.setSelection('tr:nth-child(2) td:nth-child(2)', 0); editor.fire('keydown', {keyCode: 9}); equal(editor.selection.getStart().nodeName, 'TD'); equal( editor.getContent(), '
A1A2
B1B2
  

x

' ); }); })();