8
0
Просмотр исходного кода

Cleaned up the tests. Removed confusing boundary cases with setData() and added explicit test for setting selection's attrs. Cleared schema rules.

Piotrek Koszuliński 7 лет назад
Родитель
Сommit
38699efc8c
1 измененных файлов с 33 добавлено и 24 удалено
  1. 33 24
      packages/ckeditor5-engine/tests/model/schema.js

+ 33 - 24
packages/ckeditor5-engine/tests/model/schema.js

@@ -1035,6 +1035,9 @@ describe( 'Schema', () => {
 				allowIn: '$root',
 				allowAttributes: [ 'name', 'title' ]
 			} );
+			schema.extend( '$text', {
+				allowAttributes: [ 'italic' ]
+			} );
 
 			schema.addAttributeCheck( ( ctx, attributeName ) => {
 				// Allow 'bold' on p>$text.
@@ -1046,24 +1049,12 @@ describe( 'Schema', () => {
 				if ( ctx.endsWith( '$root p' ) && attributeName == 'bold' ) {
 					return true;
 				}
-			} );
 
-			schema.addAttributeCheck( ( ctx, attributeName ) => {
-				// Disallow 'italic' on $text that has attribute 'bold'.
+				// Disallow 'italic' on $text that has 'bold' already.
 				if ( inTextWithBold( ctx ) && attributeName == 'italic' ) {
 					return false;
 				}
 
-				// Allow 'italic' on p>$text.
-				if ( ctx.endsWith( 'p $text' ) && attributeName == 'italic' ) {
-					return true;
-				}
-
-				// Allow 'italic' on $root>p.
-				if ( ctx.endsWith( '$root p' ) && attributeName == 'italic' ) {
-					return true;
-				}
-
 				function inTextWithBold( context ) {
 					return context.endsWith( '$text' ) && context.last.getAttribute( 'bold' );
 				}
@@ -1084,22 +1075,19 @@ describe( 'Schema', () => {
 				expect( schema.checkAttributeInSelection( doc.selection, attribute ) ).to.be.false;
 			} );
 
-			it( 'should check attributes of the selection (selection at the beginning of the text)', () => {
-				setData( model, '<p><$text bold="true">[]foo</$text></p>' );
-				expect( schema.checkAttributeInSelection( doc.selection, 'italic' ) ).to.be.false;
-			} );
-
-			it( 'should check attributes of the selection (selection inside the text)', () => {
+			it( 'should check attributes of the selection (selection inside the $text[bold])', () => {
 				setData( model, '<p><$text bold="true">f[]oo</$text></p>' );
-				expect( schema.checkAttributeInSelection( doc.selection, 'italic' ) ).to.be.false;
-			} );
 
-			it( 'should check attributes of the selection (selection at the end of the text)', () => {
-				setData( model, '<p><$text bold="true">foo[]</$text></p>' );
 				expect( schema.checkAttributeInSelection( doc.selection, 'italic' ) ).to.be.false;
+
+				model.change( writer => {
+					writer.removeSelectionAttribute( 'bold' );
+				} );
+
+				expect( schema.checkAttributeInSelection( doc.selection, 'italic' ) ).to.be.true;
 			} );
 
-			it( 'should check attributes of the selection (an attribute sets manually)', () => {
+			it( 'should check attributes of the selection (attribute set manually on selection)', () => {
 				setData( model, '<p>foo[]bar</p>' );
 
 				expect( schema.checkAttributeInSelection( doc.selection, 'italic' ) ).to.be.true;
@@ -1110,6 +1098,27 @@ describe( 'Schema', () => {
 
 				expect( schema.checkAttributeInSelection( doc.selection, 'italic' ) ).to.be.false;
 			} );
+
+			it( 'should pass all selection\'s attributes to checkAttribute()', done => {
+				schema.on( 'checkAttribute', ( evt, args ) => {
+					const context = args[ 0 ];
+					const attributeName = args[ 1 ];
+
+					expect( attributeName ).to.equal( 'italic' );
+					expect( Array.from( context.last.getAttributeKeys() ) ).to.deep.equal( [ 'bold', 'underline' ] );
+
+					done();
+				}, { priority: 'highest' } );
+
+				setData( model, '<p>foo[]bar</p>' );
+
+				model.change( writer => {
+					writer.setSelectionAttribute( 'bold', true );
+					writer.setSelectionAttribute( 'underline', true );
+				} );
+
+				expect( schema.checkAttributeInSelection( doc.selection, 'italic' ) ).to.be.false;
+			} );
 		} );
 
 		describe( 'when selection is not collapsed', () => {