浏览代码

Tests: Add basic TableUI tests for insertTableButton.

Maciej Gołaszewski 7 年之前
父节点
当前提交
ce7e0487b6

+ 1 - 2
packages/ckeditor5-table/src/converters.js

@@ -27,8 +27,7 @@ export function downcastTableCell( dispatcher ) {
 			return;
 		}
 
-		const viewElementName = data.item.getAttribute( 'isHeading' ) ? 'th' : 'td';
-		const tableCellElement = conversionApi.writer.createContainerElement( viewElementName, {} );
+		const tableCellElement = conversionApi.writer.createContainerElement( 'td' );
 
 		const viewPosition = conversionApi.mapper.toViewPosition( data.range.start );
 

+ 3 - 1
packages/ckeditor5-table/src/inserttablecommand.js

@@ -42,7 +42,9 @@ export default class InsertTableCommand extends Command {
 		const columns = parseInt( options.columns ) || 2;
 
 		const firstPosition = selection.getFirstPosition();
-		const insertTablePosition = Position.createAfter( firstPosition.parent || firstPosition );
+		// TODO does API has it?
+		const isRoot = firstPosition.parent === firstPosition.root;
+		const insertTablePosition = isRoot ? Position.createAt( firstPosition ) : Position.createAfter( firstPosition.parent );
 
 		model.change( writer => {
 			const table = writer.createElement( 'table' );

+ 12 - 0
packages/ckeditor5-table/tests/inserttablecommand.js

@@ -83,6 +83,18 @@ describe( 'InsertTableCommand', () => {
 
 	describe( 'execute()', () => {
 		describe( 'collapsed selection', () => {
+			it( 'should insert table in empty root', () => {
+				setData( model, '[]' );
+
+				command.execute();
+
+				expect( getData( model ) ).to.equal(
+					'<table>' +
+					'<tableRow><tableCell></tableCell><tableCell></tableCell></tableRow>' +
+					'<tableRow><tableCell></tableCell><tableCell></tableCell></tableRow>' +
+					'</table>[]'
+				);
+			} );
 			it( 'should insert table with two rows and two columns after non-empty paragraph', () => {
 				setData( model, '<p>foo[]</p>' );
 

+ 32 - 1
packages/ckeditor5-table/tests/tableui.js

@@ -11,11 +11,12 @@ import TableUI from '../src/tableui';
 import ClassicTestEditor from '@ckeditor/ckeditor5-core/tests/_utils/classictesteditor';
 import testUtils from '@ckeditor/ckeditor5-core/tests/_utils/utils';
 import { _clear as clearTranslations, add as addTranslations } from '@ckeditor/ckeditor5-utils/src/translation-service';
+import ButtonView from '@ckeditor/ckeditor5-ui/src/button/buttonview';
 
 testUtils.createSinonSandbox();
 
 describe( 'TableUI', () => {
-	let editor, element;
+	let editor, element, insertTable;
 
 	before( () => {
 		addTranslations( 'en', {} );
@@ -36,6 +37,8 @@ describe( 'TableUI', () => {
 			} )
 			.then( newEditor => {
 				editor = newEditor;
+
+				insertTable = editor.ui.componentFactory.create( 'insertTable' );
 			} );
 	} );
 
@@ -44,4 +47,32 @@ describe( 'TableUI', () => {
 
 		return editor.destroy();
 	} );
+
+	describe( 'insertTable button', () => {
+		it( 'should register insertTable buton', () => {
+			expect( insertTable ).to.be.instanceOf( ButtonView );
+			expect( insertTable.isOn ).to.be.false;
+			expect( insertTable.label ).to.equal( 'Insert table' );
+			expect( insertTable.icon ).to.match( /<svg / );
+		} );
+
+		it( 'should bind to insertTable command', () => {
+			const command = editor.commands.get( 'insertTable' );
+
+			expect( insertTable.isOn ).to.be.false;
+			expect( insertTable.isEnabled ).to.be.true;
+
+			command.isEnabled = false;
+			expect( insertTable.isEnabled ).to.be.false;
+		} );
+
+		it( 'should execute insertTable command on button execute event', () => {
+			const executeSpy = testUtils.sinon.spy( editor, 'execute' );
+
+			insertTable.fire( 'execute' );
+
+			sinon.assert.calledOnce( executeSpy );
+			sinon.assert.calledWithExactly( executeSpy, 'insertTable' );
+		} );
+	} );
 } );