Przeglądaj źródła

Tests: Moved some enter key integration tests from the Widget plugin tests.

Aleksander Nowodzinski 5 lat temu
rodzic
commit
e091c9a912

+ 68 - 0
packages/ckeditor5-widget/tests/widgettypearound/widgettypearound.js

@@ -733,6 +733,61 @@ describe( 'WidgetTypeAround', () => {
 					expect( modelSelection.getAttribute( 'widget-type-around' ) ).to.be.undefined;
 				} );
 
+				it( 'should insert a new paragraph only if an entire widget is selected (selected nested editable content)', () => {
+					setModelData( editor.model, '<blockWidget><nested>[foo] bar</nested></blockWidget>' );
+					expect( modelSelection.getAttribute( 'widget-type-around' ) ).to.be.undefined;
+
+					fireKeyboardEvent( 'enter' );
+
+					expect( getModelData( model ) ).to.equal( '<blockWidget><nested>[] bar</nested></blockWidget>' );
+					expect( modelSelection.getAttribute( 'widget-type-around' ) ).to.be.undefined;
+				} );
+
+				it( 'should insert a new paragraph only if an entire widget is selected (selected widget siblings)', () => {
+					setModelData( editor.model, '<paragraph>f[oo</paragraph><blockWidget></blockWidget><paragraph>o]o</paragraph>' );
+					expect( modelSelection.getAttribute( 'widget-type-around' ) ).to.be.undefined;
+
+					fireKeyboardEvent( 'enter' );
+
+					expect( getModelData( model ) ).to.equal( '<paragraph>f</paragraph><paragraph>[]o</paragraph>' );
+					expect( modelSelection.getAttribute( 'widget-type-around' ) ).to.be.undefined;
+				} );
+
+				it( 'should split ancestors to find a place that allows a widget', () => {
+					model.schema.register( 'allowP', {
+						inheritAllFrom: '$block'
+					} );
+					model.schema.register( 'disallowP', {
+						inheritAllFrom: '$block',
+						allowIn: [ 'allowP' ]
+					} );
+					model.schema.extend( 'blockWidget', {
+						allowIn: [ 'allowP', 'disallowP' ]
+					} );
+					model.schema.extend( 'paragraph', {
+						allowIn: [ 'allowP' ]
+					} );
+
+					editor.conversion.for( 'downcast' ).elementToElement( { model: 'allowP', view: 'allowP' } );
+					editor.conversion.for( 'downcast' ).elementToElement( { model: 'disallowP', view: 'disallowP' } );
+
+					setModelData( model,
+						'<allowP>' +
+							'<disallowP>[<blockWidget></blockWidget>]</disallowP>' +
+						'</allowP>'
+					);
+
+					fireKeyboardEvent( 'enter' );
+
+					expect( getModelData( model ) ).to.equal(
+						'<allowP>' +
+							'<disallowP><blockWidget></blockWidget></disallowP>' +
+							'<paragraph>[]</paragraph>' +
+							'<disallowP></disallowP>' +
+						'</allowP>'
+					);
+				} );
+
 				it( 'should integrate with the undo feature', () => {
 					setModelData( editor.model, '[<blockWidget></blockWidget>]' );
 					expect( modelSelection.getAttribute( 'widget-type-around' ) ).to.be.undefined;
@@ -865,6 +920,15 @@ describe( 'WidgetTypeAround', () => {
 			isObject: true
 		} );
 
+		editor.model.schema.register( 'nested', {
+			allowIn: 'blockWidget',
+			isLimit: true
+		} );
+
+		editor.model.schema.extend( '$text', {
+			allowIn: [ 'nested' ]
+		} );
+
 		editor.conversion.for( 'downcast' )
 			.elementToElement( {
 				model: 'blockWidget',
@@ -878,6 +942,10 @@ describe( 'WidgetTypeAround', () => {
 						label: 'block widget'
 					} );
 				}
+			} )
+			.elementToElement( {
+				model: 'nested',
+				view: ( modelItem, viewWriter ) => viewWriter.createEditableElement( 'nested', { contenteditable: true } )
 			} );
 	}