Explorar o código

Tests: Unit tests for attributes rerendering special case.

Krzysztof Krztoń %!s(int64=7) %!d(string=hai) anos
pai
achega
d22b81c35d
Modificáronse 1 ficheiros con 35 adicións e 4 borrados
  1. 35 4
      packages/ckeditor5-engine/tests/view/renderer.js

+ 35 - 4
packages/ckeditor5-engine/tests/view/renderer.js

@@ -3041,11 +3041,11 @@ describe( 'Renderer', () => {
 		} );
 
 		// #1560
-		describe( 'direct attributes manipulation', () => {
-			it( 'should rerender element if its attribute was removed before rendering', () => {
+		describe( 'attributes manipulation on replaced element', () => {
+			it( 'should rerender element if it was removed after having its attributes removed (attribute)', () => {
 				const writer = new DowncastWriter();
 
-				// 1. Setup.
+				// 1. Setup initial view/DOM.
 				viewRoot._appendChild( parse( '<container:p>1</container:p>' ) );
 
 				const viewP = viewRoot.getChild( 0 );
@@ -3057,18 +3057,49 @@ describe( 'Renderer', () => {
 
 				expect( domRoot.innerHTML ).to.equal( '<p data-placeholder="Body">1</p>' );
 
-				// 2. Transform.
+				// 2. Modify view.
 				writer.removeAttribute( 'data-placeholder', viewP );
 
 				viewRoot._removeChildren( 0, viewRoot.childCount );
 
 				viewRoot._appendChild( parse( '<container:p>1</container:p><container:p>2</container:p>' ) );
 
+				renderer.markToSync( 'attributes', viewP );
 				renderer.markToSync( 'children', viewRoot );
 				renderer.render();
 
 				expect( domRoot.innerHTML ).to.equal( '<p>1</p><p>2</p>' );
 			} );
+
+			it( 'should rerender element if it was removed after having its attributes removed (classes)', () => {
+				const writer = new DowncastWriter();
+
+				// 1. Setup initial view/DOM.
+				viewRoot._appendChild( parse( '<container:h1>h1</container:h1><container:p>p</container:p>' ) );
+
+				const viewP = viewRoot.getChild( 1 );
+
+				writer.addClass( [ 'cke-test1', 'cke-test2' ], viewP );
+
+				renderer.markToSync( 'children', viewRoot );
+				renderer.render();
+
+				expect( domRoot.innerHTML ).to.equal( '<h1>h1</h1><p class="cke-test1 cke-test2">p</p>' );
+
+				// 2. Modify view.
+				writer.removeClass( 'cke-test2', viewP );
+
+				viewRoot._removeChildren( 0, viewRoot.childCount );
+
+				viewRoot._appendChild( parse( '<container:h1>h1</container:h1>' +
+					'<container:p class="cke-test1">p</container:p><container:p>p2</container:p>' ) );
+
+				renderer.markToSync( 'attributes', viewP );
+				renderer.markToSync( 'children', viewRoot );
+				renderer.render();
+
+				expect( domRoot.innerHTML ).to.equal( '<h1>h1</h1><p class="cke-test1">p</p><p>p2</p>' );
+			} );
 		} );
 	} );