|
@@ -7,6 +7,7 @@ import ModelTestEditor from '@ckeditor/ckeditor5-core/tests/_utils/modeltestedit
|
|
|
import { getData, setData } from '@ckeditor/ckeditor5-engine/src/dev-utils/model';
|
|
import { getData, setData } from '@ckeditor/ckeditor5-engine/src/dev-utils/model';
|
|
|
|
|
|
|
|
import RemoveColumnCommand from '../../src/commands/removecolumncommand';
|
|
import RemoveColumnCommand from '../../src/commands/removecolumncommand';
|
|
|
|
|
+import TableSelection from '../../src/tableselection';
|
|
|
import { defaultConversion, defaultSchema, modelTable } from '../_utils/utils';
|
|
import { defaultConversion, defaultSchema, modelTable } from '../_utils/utils';
|
|
|
import TableUtils from '../../src/tableutils';
|
|
import TableUtils from '../../src/tableutils';
|
|
|
import { assertEqualMarkup } from '@ckeditor/ckeditor5-utils/tests/_utils/utils';
|
|
import { assertEqualMarkup } from '@ckeditor/ckeditor5-utils/tests/_utils/utils';
|
|
@@ -17,7 +18,7 @@ describe( 'RemoveColumnCommand', () => {
|
|
|
beforeEach( () => {
|
|
beforeEach( () => {
|
|
|
return ModelTestEditor
|
|
return ModelTestEditor
|
|
|
.create( {
|
|
.create( {
|
|
|
- plugins: [ TableUtils ]
|
|
|
|
|
|
|
+ plugins: [ TableUtils, TableSelection ]
|
|
|
} )
|
|
} )
|
|
|
.then( newEditor => {
|
|
.then( newEditor => {
|
|
|
editor = newEditor;
|
|
editor = newEditor;
|
|
@@ -43,6 +44,22 @@ describe( 'RemoveColumnCommand', () => {
|
|
|
expect( command.isEnabled ).to.be.true;
|
|
expect( command.isEnabled ).to.be.true;
|
|
|
} );
|
|
} );
|
|
|
|
|
|
|
|
|
|
+ it( 'should be true if selection contains multiple cells', () => {
|
|
|
|
|
+ setData( model, modelTable( [
|
|
|
|
|
+ [ '00', '01', '02' ],
|
|
|
|
|
+ [ '10', '11', '12' ]
|
|
|
|
|
+ ] ) );
|
|
|
|
|
+
|
|
|
|
|
+ const tableSelection = editor.plugins.get( TableSelection );
|
|
|
|
|
+ const modelRoot = model.document.getRoot();
|
|
|
|
|
+ tableSelection._setCellSelection(
|
|
|
|
|
+ modelRoot.getNodeByPath( [ 0, 0, 0 ] ),
|
|
|
|
|
+ modelRoot.getNodeByPath( [ 0, 0, 1 ] )
|
|
|
|
|
+ );
|
|
|
|
|
+
|
|
|
|
|
+ expect( command.isEnabled ).to.be.true;
|
|
|
|
|
+ } );
|
|
|
|
|
+
|
|
|
it( 'should be false if selection is inside table with one column only', () => {
|
|
it( 'should be false if selection is inside table with one column only', () => {
|
|
|
setData( model, modelTable( [
|
|
setData( model, modelTable( [
|
|
|
[ '00' ],
|
|
[ '00' ],
|
|
@@ -53,6 +70,22 @@ describe( 'RemoveColumnCommand', () => {
|
|
|
expect( command.isEnabled ).to.be.false;
|
|
expect( command.isEnabled ).to.be.false;
|
|
|
} );
|
|
} );
|
|
|
|
|
|
|
|
|
|
+ it( 'should be false if all columns are selected', () => {
|
|
|
|
|
+ setData( model, modelTable( [
|
|
|
|
|
+ [ '00', '01', '02' ],
|
|
|
|
|
+ [ '10', '11', '12' ]
|
|
|
|
|
+ ] ) );
|
|
|
|
|
+
|
|
|
|
|
+ const tableSelection = editor.plugins.get( TableSelection );
|
|
|
|
|
+ const modelRoot = model.document.getRoot();
|
|
|
|
|
+ tableSelection._setCellSelection(
|
|
|
|
|
+ modelRoot.getNodeByPath( [ 0, 0, 0 ] ),
|
|
|
|
|
+ modelRoot.getNodeByPath( [ 0, 0, 2 ] )
|
|
|
|
|
+ );
|
|
|
|
|
+
|
|
|
|
|
+ expect( command.isEnabled ).to.be.false;
|
|
|
|
|
+ } );
|
|
|
|
|
+
|
|
|
it( 'should be false if selection is outside a table', () => {
|
|
it( 'should be false if selection is outside a table', () => {
|
|
|
setData( model, '<paragraph>11[]</paragraph>' );
|
|
setData( model, '<paragraph>11[]</paragraph>' );
|
|
|
|
|
|
|
@@ -93,6 +126,206 @@ describe( 'RemoveColumnCommand', () => {
|
|
|
] ) );
|
|
] ) );
|
|
|
} );
|
|
} );
|
|
|
|
|
|
|
|
|
|
+ describe( 'with multiple cells selected', () => {
|
|
|
|
|
+ it( 'should properly remove the first column', () => {
|
|
|
|
|
+ setData( model, modelTable( [
|
|
|
|
|
+ [ '00', '01' ],
|
|
|
|
|
+ [ '10', '11' ],
|
|
|
|
|
+ [ '20', '21' ],
|
|
|
|
|
+ [ '30', '31' ]
|
|
|
|
|
+ ] ) );
|
|
|
|
|
+
|
|
|
|
|
+ const tableSelection = editor.plugins.get( TableSelection );
|
|
|
|
|
+ const modelRoot = model.document.getRoot();
|
|
|
|
|
+ tableSelection._setCellSelection(
|
|
|
|
|
+ modelRoot.getNodeByPath( [ 0, 1, 0 ] ),
|
|
|
|
|
+ modelRoot.getNodeByPath( [ 0, 2, 0 ] )
|
|
|
|
|
+ );
|
|
|
|
|
+
|
|
|
|
|
+ command.execute();
|
|
|
|
|
+
|
|
|
|
|
+ assertEqualMarkup( getData( model ), modelTable( [
|
|
|
|
|
+ [ '01' ],
|
|
|
|
|
+ [ '11' ],
|
|
|
|
|
+ [ '[]21' ],
|
|
|
|
|
+ [ '31' ]
|
|
|
|
|
+ ] ) );
|
|
|
|
|
+ } );
|
|
|
|
|
+
|
|
|
|
|
+ it( 'should properly remove a middle column', () => {
|
|
|
|
|
+ setData( model, modelTable( [
|
|
|
|
|
+ [ '00', '01', '02' ],
|
|
|
|
|
+ [ '10', '11', '12' ],
|
|
|
|
|
+ [ '20', '21', '22' ],
|
|
|
|
|
+ [ '30', '31', '32' ]
|
|
|
|
|
+ ] ) );
|
|
|
|
|
+
|
|
|
|
|
+ const tableSelection = editor.plugins.get( TableSelection );
|
|
|
|
|
+ const modelRoot = model.document.getRoot();
|
|
|
|
|
+ tableSelection._setCellSelection(
|
|
|
|
|
+ modelRoot.getNodeByPath( [ 0, 1, 1 ] ),
|
|
|
|
|
+ modelRoot.getNodeByPath( [ 0, 2, 1 ] )
|
|
|
|
|
+ );
|
|
|
|
|
+
|
|
|
|
|
+ command.execute();
|
|
|
|
|
+
|
|
|
|
|
+ assertEqualMarkup( getData( model ), modelTable( [
|
|
|
|
|
+ [ '00', '02' ],
|
|
|
|
|
+ [ '10', '12' ],
|
|
|
|
|
+ [ '20', '[]22' ],
|
|
|
|
|
+ [ '30', '32' ]
|
|
|
|
|
+ ] ) );
|
|
|
|
|
+ } );
|
|
|
|
|
+
|
|
|
|
|
+ it( 'should properly remove the last column', () => {
|
|
|
|
|
+ setData( model, modelTable( [
|
|
|
|
|
+ [ '00', '01' ],
|
|
|
|
|
+ [ '10', '11' ],
|
|
|
|
|
+ [ '20', '21' ],
|
|
|
|
|
+ [ '30', '31' ]
|
|
|
|
|
+ ] ) );
|
|
|
|
|
+
|
|
|
|
|
+ const tableSelection = editor.plugins.get( TableSelection );
|
|
|
|
|
+ const modelRoot = model.document.getRoot();
|
|
|
|
|
+ tableSelection._setCellSelection(
|
|
|
|
|
+ modelRoot.getNodeByPath( [ 0, 1, 1 ] ),
|
|
|
|
|
+ modelRoot.getNodeByPath( [ 0, 2, 1 ] )
|
|
|
|
|
+ );
|
|
|
|
|
+
|
|
|
|
|
+ command.execute();
|
|
|
|
|
+
|
|
|
|
|
+ assertEqualMarkup( getData( model ), modelTable( [
|
|
|
|
|
+ [ '00' ],
|
|
|
|
|
+ [ '[]10' ],
|
|
|
|
|
+ [ '20' ],
|
|
|
|
|
+ [ '30' ]
|
|
|
|
|
+ ] ) );
|
|
|
|
|
+ } );
|
|
|
|
|
+
|
|
|
|
|
+ it( 'should properly remove two first columns', () => {
|
|
|
|
|
+ setData( model, modelTable( [
|
|
|
|
|
+ [ '00', '01', '02' ],
|
|
|
|
|
+ [ '10', '11', '12' ],
|
|
|
|
|
+ [ '20', '21', '22' ],
|
|
|
|
|
+ [ '30', '31', '32' ]
|
|
|
|
|
+ ] ) );
|
|
|
|
|
+
|
|
|
|
|
+ const tableSelection = editor.plugins.get( TableSelection );
|
|
|
|
|
+ const modelRoot = model.document.getRoot();
|
|
|
|
|
+ tableSelection._setCellSelection(
|
|
|
|
|
+ modelRoot.getNodeByPath( [ 0, 1, 0 ] ),
|
|
|
|
|
+ modelRoot.getNodeByPath( [ 0, 1, 1 ] )
|
|
|
|
|
+ );
|
|
|
|
|
+
|
|
|
|
|
+ command.execute();
|
|
|
|
|
+
|
|
|
|
|
+ assertEqualMarkup( getData( model ), modelTable( [
|
|
|
|
|
+ [ '02' ],
|
|
|
|
|
+ [ '[]12' ],
|
|
|
|
|
+ [ '22' ],
|
|
|
|
|
+ [ '32' ]
|
|
|
|
|
+ ] ) );
|
|
|
|
|
+ } );
|
|
|
|
|
+
|
|
|
|
|
+ it( 'should properly remove two middle columns', () => {
|
|
|
|
|
+ setData( model, modelTable( [
|
|
|
|
|
+ [ '00', '01', '02', '03' ],
|
|
|
|
|
+ [ '10', '11', '12', '13' ],
|
|
|
|
|
+ [ '20', '21', '22', '23' ],
|
|
|
|
|
+ [ '30', '31', '32', '33' ]
|
|
|
|
|
+ ] ) );
|
|
|
|
|
+
|
|
|
|
|
+ const tableSelection = editor.plugins.get( TableSelection );
|
|
|
|
|
+ const modelRoot = model.document.getRoot();
|
|
|
|
|
+ tableSelection._setCellSelection(
|
|
|
|
|
+ modelRoot.getNodeByPath( [ 0, 1, 1 ] ),
|
|
|
|
|
+ modelRoot.getNodeByPath( [ 0, 2, 2 ] )
|
|
|
|
|
+ );
|
|
|
|
|
+
|
|
|
|
|
+ command.execute();
|
|
|
|
|
+
|
|
|
|
|
+ assertEqualMarkup( getData( model ), modelTable( [
|
|
|
|
|
+ [ '00', '03' ],
|
|
|
|
|
+ [ '10', '13' ],
|
|
|
|
|
+ [ '20', '[]23' ],
|
|
|
|
|
+ [ '30', '33' ]
|
|
|
|
|
+ ] ) );
|
|
|
|
|
+ } );
|
|
|
|
|
+
|
|
|
|
|
+ it( 'should properly remove two middle columns with reversed selection', () => {
|
|
|
|
|
+ setData( model, modelTable( [
|
|
|
|
|
+ [ '00', '01', '02', '03' ],
|
|
|
|
|
+ [ '10', '11', '12', '13' ],
|
|
|
|
|
+ [ '20', '21', '22', '23' ],
|
|
|
|
|
+ [ '30', '31', '32', '33' ]
|
|
|
|
|
+ ] ) );
|
|
|
|
|
+
|
|
|
|
|
+ const tableSelection = editor.plugins.get( TableSelection );
|
|
|
|
|
+ const modelRoot = model.document.getRoot();
|
|
|
|
|
+ tableSelection._setCellSelection(
|
|
|
|
|
+ modelRoot.getNodeByPath( [ 0, 2, 2 ] ),
|
|
|
|
|
+ modelRoot.getNodeByPath( [ 0, 1, 1 ] )
|
|
|
|
|
+ );
|
|
|
|
|
+
|
|
|
|
|
+ command.execute();
|
|
|
|
|
+
|
|
|
|
|
+ assertEqualMarkup( getData( model ), modelTable( [
|
|
|
|
|
+ [ '00', '03' ],
|
|
|
|
|
+ [ '10', '13' ],
|
|
|
|
|
+ [ '20', '[]23' ],
|
|
|
|
|
+ [ '30', '33' ]
|
|
|
|
|
+ ] ) );
|
|
|
|
|
+ } );
|
|
|
|
|
+
|
|
|
|
|
+ it( 'should properly remove two last columns', () => {
|
|
|
|
|
+ // There's no handling for selection in case like that.
|
|
|
|
|
+ setData( model, modelTable( [
|
|
|
|
|
+ [ '00', '01', '02' ],
|
|
|
|
|
+ [ '10', '11', '12' ],
|
|
|
|
|
+ [ '20', '21', '22' ],
|
|
|
|
|
+ [ '30', '31', '32' ]
|
|
|
|
|
+ ] ) );
|
|
|
|
|
+
|
|
|
|
|
+ const tableSelection = editor.plugins.get( TableSelection );
|
|
|
|
|
+ const modelRoot = model.document.getRoot();
|
|
|
|
|
+ tableSelection._setCellSelection(
|
|
|
|
|
+ modelRoot.getNodeByPath( [ 0, 1, 1 ] ),
|
|
|
|
|
+ modelRoot.getNodeByPath( [ 0, 2, 2 ] )
|
|
|
|
|
+ );
|
|
|
|
|
+
|
|
|
|
|
+ command.execute();
|
|
|
|
|
+
|
|
|
|
|
+ assertEqualMarkup( getData( model ), modelTable( [
|
|
|
|
|
+ [ '00' ],
|
|
|
|
|
+ [ '[]10' ],
|
|
|
|
|
+ [ '20' ],
|
|
|
|
|
+ [ '30' ]
|
|
|
|
|
+ ] ) );
|
|
|
|
|
+ } );
|
|
|
|
|
+
|
|
|
|
|
+ it( 'should properly remove multiple heading columns', () => {
|
|
|
|
|
+ // There's no handling for selection in case like that.
|
|
|
|
|
+ setData( model, modelTable( [
|
|
|
|
|
+ [ '00', '01', '02', '03', '04' ],
|
|
|
|
|
+ [ '10', '11', '12', '13', '14' ]
|
|
|
|
|
+ ], { headingColumns: 3 } ) );
|
|
|
|
|
+
|
|
|
|
|
+ const tableSelection = editor.plugins.get( TableSelection );
|
|
|
|
|
+ const modelRoot = model.document.getRoot();
|
|
|
|
|
+ tableSelection._setCellSelection(
|
|
|
|
|
+ modelRoot.getNodeByPath( [ 0, 0, 1 ] ),
|
|
|
|
|
+ modelRoot.getNodeByPath( [ 0, 1, 3 ] )
|
|
|
|
|
+ );
|
|
|
|
|
+
|
|
|
|
|
+ command.execute();
|
|
|
|
|
+
|
|
|
|
|
+ assertEqualMarkup( getData( model ), modelTable( [
|
|
|
|
|
+ [ '00', '04' ],
|
|
|
|
|
+ [ '10', '[]14' ]
|
|
|
|
|
+ ], { headingColumns: 1 } ) );
|
|
|
|
|
+ } );
|
|
|
|
|
+ } );
|
|
|
|
|
+
|
|
|
it( 'should change heading columns if removing a heading column', () => {
|
|
it( 'should change heading columns if removing a heading column', () => {
|
|
|
setData( model, modelTable( [
|
|
setData( model, modelTable( [
|
|
|
[ '00', '01' ],
|
|
[ '00', '01' ],
|