Skip to content
This repository has been archived by the owner on Jun 26, 2020. It is now read-only.

Commit

Permalink
Cleaned up the tests. Removed confusing boundary cases with setData()…
Browse files Browse the repository at this point in the history
… and added explicit test for setting selection's attrs. Cleared schema rules.
  • Loading branch information
Reinmar committed Sep 21, 2018
1 parent 37fe24e commit d0cd559
Showing 1 changed file with 33 additions and 24 deletions.
57 changes: 33 additions & 24 deletions tests/model/schema.js
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -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' );
}
Expand All @@ -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;
Expand All @@ -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', () => {
Expand Down

0 comments on commit d0cd559

Please sign in to comment.