/**
* @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
*/
import ModelTestEditor from '@ckeditor/ckeditor5-core/tests/_utils/modeltesteditor';
import SelectAllEditing from '../src/selectallediting';
import Paragraph from '@ckeditor/ckeditor5-paragraph/src/paragraph';
import ImageEditing from '@ckeditor/ckeditor5-image/src/image/imageediting';
import ImageCaptionEditing from '@ckeditor/ckeditor5-image/src/imagecaption/imagecaptionediting';
import TableEditing from '@ckeditor/ckeditor5-table/src/tableediting';
import { setData, getData } from '@ckeditor/ckeditor5-engine/src/dev-utils/model';
describe( 'SelectAllCommand', () => {
let editor, model, command;
beforeEach( () => {
return ModelTestEditor
.create( {
plugins: [ SelectAllEditing, Paragraph, ImageEditing, ImageCaptionEditing, TableEditing ]
} )
.then( newEditor => {
editor = newEditor;
model = editor.model;
command = editor.commands.get( 'selectAll' );
} );
} );
afterEach( () => {
return editor.destroy();
} );
describe( 'isEnabled', () => {
it( 'should always be "true" because the command is stateless', () => {
expect( command.isEnabled ).to.be.true;
} );
} );
describe( 'execute()', () => {
it( 'should select all (collapsed selection in a block with text)', () => {
setData( model, 'f[]oo' );
editor.execute( 'selectAll' );
expect( getData( model ) ).to.equal( '[foo]' );
} );
it( 'should select all (collapsed selection in a content with an object)', () => {
setData( model, 'fo[]o' );
editor.execute( 'selectAll' );
expect( getData( model ) ).to.equal( '[foo]' );
} );
it( 'should select all (selection on an object)', () => {
setData( model, 'foo[]' );
editor.execute( 'selectAll' );
expect( getData( model ) ).to.equal( '[foo]' );
} );
it( 'should select all (collapsed selection in a nested editable)', () => {
setData( model, 'foob[]ar' );
editor.execute( 'selectAll' );
expect( getData( model ) ).to.equal( 'foo[bar]' );
} );
it( 'should select all (selection in a nested editable)', () => {
setData( model, 'foob[ar]' );
editor.execute( 'selectAll' );
expect( getData( model ) ).to.equal( 'foo[bar]' );
} );
it( 'should select all (selection within limit element)', () => {
setData( model,
'foo' +
'
' +
'' +
'' +
'foo' +
'' +
'[' +
'bar' +
']' +
'[' +
'baz' +
']' +
'' +
'
'
);
editor.execute( 'selectAll' );
expect( getData( model ) ).to.equal(
'[foo' +
'' +
'' +
'' +
'foo' +
'' +
'' +
'bar' +
'' +
'' +
'baz' +
'' +
'' +
'
]'
);
} );
it( 'should select all in the closest nested editable (nested editable inside another nested editable)', () => {
setData( model,
'foo' +
'' +
'' +
'' +
'foo' +
'b[]ar' +
'' +
'' +
'
'
);
editor.execute( 'selectAll' );
expect( getData( model ) ).to.equal( 'foo' +
'' +
'' +
'' +
'foo' +
'[bar]' +
'' +
'' +
'
'
);
} );
it( 'should select all in the parent select-all-limit element (the entire editable is selected)', () => {
setData( model, 'foo[bar]' );
editor.execute( 'selectAll' );
expect( getData( model ) ).to.equal( '[foobar]' );
} );
it( 'should select all in the parent sellect-all-limit element (consecutive execute() on a nested editable)', () => {
setData( model,
'foo' +
'' +
'' +
'' +
'foo' +
'b[]ar' +
'' +
'' +
'
'
);
editor.execute( 'selectAll' );
editor.execute( 'selectAll' );
expect( getData( model ) ).to.equal( 'foo' +
'' +
'' +
'' +
'[foo' +
'bar]' +
'' +
'' +
'
'
);
editor.execute( 'selectAll' );
expect( getData( model ) ).to.equal( '[foo' +
'' +
'' +
'' +
'foo' +
'bar' +
'' +
'' +
'
]'
);
} );
it( 'should not change the selection (the entire editor is selected)', () => {
setData( model,
'[foo' +
'' +
'' +
'' +
'foo' +
'bar' +
'' +
'' +
'
]'
);
editor.execute( 'selectAll' );
expect( getData( model ) ).to.equal( '[foo' +
'' +
'' +
'' +
'foo' +
'bar' +
'' +
'' +
'
]'
);
} );
} );
} );