8
0
فهرست منبع

Merge pull request #119 from ckeditor/i/6352

Tests: Widget package reports 100% CC when run alone. Closes ckeditor/ckeditor5#6352.
Piotrek Koszuliński 5 سال پیش
والد
کامیت
e5ed3f7486
2فایلهای تغییر یافته به همراه178 افزوده شده و 22 حذف شده
  1. 127 19
      packages/ckeditor5-widget/tests/widgetresize.js
  2. 51 3
      packages/ckeditor5-widget/tests/widgetresize/resizer.js

+ 127 - 19
packages/ckeditor5-widget/tests/widgetresize.js

@@ -363,6 +363,107 @@ describe( 'WidgetResize', () => {
 				} )();
 			} );
 		} );
+
+		it( 'doesn\'t call options.onCommit() in case of no change', () => {
+			const commitStub = sinon.stub();
+			createResizer( {
+				onCommit: commitStub
+			} );
+
+			const domParts = getWidgetDomParts( editor, widget, 'top-left' );
+
+			resizerMouseSimulator.down( editor, domParts.resizeHandle );
+			resizerMouseSimulator.up( editor );
+			expect( commitStub.callCount, 'call count' ).to.be.eql( 0 );
+		} );
+
+		it( 'returns proper value when resize host is different from widget wrapper', () => {
+			createResizer( {
+				unit: undefined,
+				getHandleHost( domWidgetElement ) {
+					return domWidgetElement.querySelector( '.sub-div' );
+				}
+			} );
+
+			const usedHandle = 'bottom-right';
+			const pointerDifference = { x: -10, y: -10 };
+			const expectedWidth = '20%';
+
+			const domParts = getWidgetDomParts( editor, widget, usedHandle );
+			const resizeHost = domParts.widget.querySelector( '.sub-div' );
+			const initialPointerPosition = getHandleCenterPoint( resizeHost, usedHandle );
+			const finalPointerPosition = initialPointerPosition.moveBy( pointerDifference.x, pointerDifference.y );
+
+			resizerMouseSimulator.dragTo( editor, domParts.resizeHandle, finalPointerPosition );
+			expect( commitStub.callCount, 'call count' ).to.be.eql( 1 );
+			expect( commitStub.args[ 0 ][ 0 ], 'width' ).to.be.equal( expectedWidth );
+			sinon.assert.calledOnce( commitStub );
+		} );
+
+		it( 'doesn\'t break if the widget wrapper was removed from DOM', () => {
+			const resizer = createResizer( {
+				unit: undefined
+			} );
+			const domParts = getWidgetDomParts( editor, widget, 'bottom-right' );
+
+			domParts.resizeWrapper.remove();
+
+			resizer.redraw();
+		} );
+	} );
+
+	describe( 'attachTo()', () => {
+		it( 'works without WidgetToolbarRepository plugin', async () => {
+			const localEditorElement = createEditorElement();
+			const localEditor = await ClassicEditor.create( localEditorElement, {
+				plugins: [
+					WidgetResize, simpleWidgetPlugin
+				]
+			} );
+
+			setModelData( localEditor.model, '[<widget></widget>]' );
+
+			const resizerOptions = {
+				modelElement: localEditor.model.document.getRoot().getChild( 0 ),
+				viewElement: localEditor.editing.view.document.getRoot().getChild( 0 ),
+				editor: localEditor,
+
+				isCentered: () => false,
+				getHandleHost( domWidgetElement ) {
+					return domWidgetElement;
+				},
+				getResizeHost( domWidgetElement ) {
+					return domWidgetElement;
+				},
+
+				onCommit: commitStub
+			};
+
+			localEditor.plugins.get( WidgetResize ).attachTo( resizerOptions );
+			// Nothing should be thrown.
+			// And clean up.
+			localEditorElement.remove();
+			return localEditor.destroy();
+		} );
+	} );
+
+	describe( 'init()', () => {
+		it( 'adds listener to redraw resizer on visible resizer change', async () => {
+			setModelData( editor.model, '<widget></widget><paragraph>[]</paragraph>' );
+			widget = editor.editing.view.document.getRoot().getChild( 0 );
+
+			const resizer = createResizer();
+			const redrawSpy = sinon.spy( resizer, 'redraw' );
+
+			focusEditor( editor );
+
+			editor.model.change( writer => {
+				const widgetModel = editor.model.document.getRoot().getChild( 0 );
+				writer.setSelection( widgetModel, 'on' );
+			} );
+
+			expect( redrawSpy.callCount ).to.be.equal( 1 );
+		} );
 	} );
 
 	describe( '_getResizerByHandle()', () => {
@@ -406,27 +507,34 @@ describe( 'WidgetResize', () => {
 					ArticlePluginSet, WidgetResize, simpleWidgetPlugin
 				]
 			} );
+	}
 
-		function simpleWidgetPlugin( editor ) {
-			editor.model.schema.register( 'widget', {
-				inheritAllFrom: '$block',
-				isObject: true
-			} );
+	function simpleWidgetPlugin( editor ) {
+		editor.model.schema.register( 'widget', {
+			inheritAllFrom: '$block',
+			isObject: true
+		} );
 
-			editor.conversion.for( 'downcast' )
-				.elementToElement( {
-					model: 'widget',
-					view: ( modelItem, viewWriter ) => {
-						const div = viewWriter.createContainerElement( 'div' );
-						viewWriter.setStyle( 'height', '50px', div );
-						viewWriter.setStyle( 'width', '25%', div ); // It evaluates to 100px.
-
-						return toWidget( div, viewWriter, {
-							label: 'element label'
-						} );
-					}
-				} );
-		}
+		editor.conversion.for( 'downcast' )
+			.elementToElement( {
+				model: 'widget',
+				view: ( modelItem, viewWriter ) => {
+					const parentDiv = viewWriter.createContainerElement( 'div' );
+					viewWriter.setStyle( 'height', '50px', parentDiv );
+					viewWriter.setStyle( 'width', '25%', parentDiv ); // It evaluates to 100px.
+
+					const subDiv = viewWriter.createContainerElement( 'div' );
+					viewWriter.insert( viewWriter.createPositionAt( subDiv, 'start' ), viewWriter.createText( 'foo' ) );
+					viewWriter.addClass( 'sub-div', subDiv );
+					viewWriter.setStyle( 'height', '20px', subDiv );
+					viewWriter.setStyle( 'width', '50px', subDiv );
+					viewWriter.insert( viewWriter.createPositionAt( parentDiv, 'start' ), subDiv );
+
+					return toWidget( parentDiv, viewWriter, {
+						label: 'element label'
+					} );
+				}
+			} );
 	}
 
 	function createEditorElement() {

+ 51 - 3
packages/ckeditor5-widget/tests/widgetresize/resizer.js

@@ -82,6 +82,54 @@ describe( 'Resizer', () => {
 		} );
 	} );
 
+	describe( 'attach()', () => {
+		it( 'doesn\'t show resizer if it\'s initialized as disabled', () => {
+			const resizerInstance = createResizer();
+			resizerInstance.isEnabled = false;
+			resizerInstance.attach();
+
+			const domResizeeWrapper = resizerInstance._viewResizerWrapper.render( document );
+			expect( domResizeeWrapper.style.display ).to.be.equal( 'none' );
+		} );
+
+		it( 'hides the resizer if it gets disabled at a runtime', () => {
+			const resizerInstance = createResizer();
+			resizerInstance.isEnabled = true;
+			resizerInstance.attach();
+			const domResizeeWrapper = resizerInstance._viewResizerWrapper.render( document );
+
+			resizerInstance.isEnabled = false;
+			expect( domResizeeWrapper.style.display ).to.be.equal( 'none' );
+		} );
+
+		it( 'restores the resizer if it gets enabled at a runtime', () => {
+			const resizerInstance = createResizer();
+			resizerInstance.isEnabled = false;
+			resizerInstance.attach();
+			const domResizeeWrapper = resizerInstance._viewResizerWrapper.render( document );
+
+			resizerInstance.isEnabled = true;
+			expect( domResizeeWrapper.style.display ).to.be.equal( '' );
+		} );
+	} );
+
+	describe( 'redraw()', () => {
+		it( 'works fetch proper rect if handleHostRect argument not given explicitly', () => {
+			const resizerInstance = createResizer( {
+				getHandleHost: widgetWrapper => widgetWrapper
+			} );
+			resizerInstance.attach();
+			const renderedElement = resizerInstance._viewResizerWrapper.render( document );
+
+			document.body.appendChild( renderedElement );
+
+			resizerInstance.redraw();
+
+			// Cleanup.
+			renderedElement.remove();
+		} );
+	} );
+
 	describe( '_proposeNewSize()', () => {
 		let resizer;
 
@@ -139,14 +187,14 @@ describe( 'Resizer', () => {
 		} );
 	} );
 
-	function createResizer() {
+	function createResizer( customOptions ) {
 		const model = new Element( 'resizable' );
 		const viewElement = new ContainerElement( 'div' );
 
-		return new Resizer( {
+		return new Resizer( Object.assign( {
 			modelElement: model,
 			viewElement,
 			editor
-		} );
+		}, customOptions ) );
 	}
 } );