|
|
@@ -405,10 +405,22 @@ describe( 'Model converter builder', () => {
|
|
|
|
|
|
expect( viewToString( viewRoot ) ).to.equal( '<div><p>foobar</p></div>' );
|
|
|
} );
|
|
|
+
|
|
|
+ it( 'should do nothing when marker range is collapsed', () => {
|
|
|
+ buildModelConverter().for( dispatcher ).fromMarker( 'search' ).toElement( 'strong' );
|
|
|
+
|
|
|
+ dispatcher.convertMarker( 'addMarker', 'search', ModelRange.createFromParentsAndOffsets( modelElement, 2, modelElement, 2 ) );
|
|
|
+
|
|
|
+ expect( viewToString( viewRoot ) ).to.equal( '<div><p>foobar</p></div>' );
|
|
|
+
|
|
|
+ dispatcher.convertMarker( 'removeMarker', 'search', ModelRange.createFromParentsAndOffsets( modelElement, 2, modelElement, 2 ) );
|
|
|
+
|
|
|
+ expect( viewToString( viewRoot ) ).to.equal( '<div><p>foobar</p></div>' );
|
|
|
+ } );
|
|
|
} );
|
|
|
|
|
|
- describe( 'model collapsed marker to view element conversion', () => {
|
|
|
- let modelText, modelElement;
|
|
|
+ describe( 'model marker to view stamp conversion', () => {
|
|
|
+ let modelText, modelElement, range;
|
|
|
|
|
|
beforeEach( () => {
|
|
|
modelText = new ModelText( 'foobar' );
|
|
|
@@ -422,45 +434,99 @@ describe( 'Model converter builder', () => {
|
|
|
mapper.bindElements( modelElement, viewElement );
|
|
|
} );
|
|
|
|
|
|
- it( 'using passed view element name', () => {
|
|
|
- buildModelConverter().for( dispatcher ).fromCollapsedMarker( 'search' ).toElement( 'span' );
|
|
|
+ describe( 'collapsed range', () => {
|
|
|
+ beforeEach( () => {
|
|
|
+ range = ModelRange.createFromParentsAndOffsets( modelElement, 2, modelElement, 2 );
|
|
|
+ } );
|
|
|
|
|
|
- dispatcher.convertMarker( 'addMarker', 'search', ModelRange.createFromParentsAndOffsets( modelElement, 3, modelElement, 3 ) );
|
|
|
+ it( 'using passed view element name', () => {
|
|
|
+ buildModelConverter().for( dispatcher ).fromMarker( 'search' ).toStamp( 'span' );
|
|
|
|
|
|
- expect( viewToString( viewRoot ) ).to.equal( '<div><p>foo<span></span>bar</p></div>' );
|
|
|
+ dispatcher.convertMarker( 'addMarker', 'search', range );
|
|
|
|
|
|
- dispatcher.convertMarker( 'removeMarker', 'search', ModelRange.createFromParentsAndOffsets( modelElement, 3, modelElement, 3 ) );
|
|
|
+ expect( viewToString( viewRoot ) ).to.equal( '<div><p>fo<span></span>obar</p></div>' );
|
|
|
|
|
|
- expect( viewToString( viewRoot ) ).to.equal( '<div><p>foobar</p></div>' );
|
|
|
- } );
|
|
|
+ dispatcher.convertMarker( 'removeMarker', 'search', range );
|
|
|
|
|
|
- it( 'using passed view element', () => {
|
|
|
- const viewElement = new ViewUIElement( 'span', { class: 'search' } );
|
|
|
- buildModelConverter().for( dispatcher ).fromCollapsedMarker( 'search' ).toElement( viewElement );
|
|
|
+ expect( viewToString( viewRoot ) ).to.equal( '<div><p>foobar</p></div>' );
|
|
|
+ } );
|
|
|
|
|
|
- dispatcher.convertMarker( 'addMarker', 'search', ModelRange.createFromParentsAndOffsets( modelElement, 3, modelElement, 3 ) );
|
|
|
+ it( 'using passed view element', () => {
|
|
|
+ const viewElement = new ViewUIElement( 'span', { class: 'search' } );
|
|
|
+ buildModelConverter().for( dispatcher ).fromMarker( 'search' ).toStamp( viewElement );
|
|
|
|
|
|
- expect( viewToString( viewRoot ) ).to.equal( '<div><p>foo<span class="search"></span>bar</p></div>' );
|
|
|
+ dispatcher.convertMarker( 'addMarker', 'search', range );
|
|
|
|
|
|
- dispatcher.convertMarker( 'removeMarker', 'search', ModelRange.createFromParentsAndOffsets( modelElement, 3, modelElement, 3 ) );
|
|
|
+ expect( viewToString( viewRoot ) ).to.equal( '<div><p>fo<span class="search"></span>obar</p></div>' );
|
|
|
|
|
|
- expect( viewToString( viewRoot ) ).to.equal( '<div><p>foobar</p></div>' );
|
|
|
+ dispatcher.convertMarker( 'removeMarker', 'search', range );
|
|
|
+
|
|
|
+ expect( viewToString( viewRoot ) ).to.equal( '<div><p>foobar</p></div>' );
|
|
|
+ } );
|
|
|
+
|
|
|
+ it( 'using passed creator function', () => {
|
|
|
+ buildModelConverter().for( dispatcher ).fromMarker( 'search' ).toStamp( ( data ) => {
|
|
|
+ const className = 'search search-color-' + data.name.split( ':' )[ 1 ];
|
|
|
+
|
|
|
+ return new ViewUIElement( 'span', { class: className } );
|
|
|
+ } );
|
|
|
+
|
|
|
+ dispatcher.convertMarker( 'addMarker', 'search:red', range );
|
|
|
+
|
|
|
+ expect( viewToString( viewRoot ) ).to.equal( '<div><p>fo<span class="search search-color-red"></span>obar</p></div>' );
|
|
|
+
|
|
|
+ dispatcher.convertMarker( 'removeMarker', 'search:red', range );
|
|
|
+
|
|
|
+ expect( viewToString( viewRoot ) ).to.equal( '<div><p>foobar</p></div>' );
|
|
|
+ } );
|
|
|
} );
|
|
|
|
|
|
- it( 'using passed creator function', () => {
|
|
|
- buildModelConverter().for( dispatcher ).fromCollapsedMarker( 'search' ).toElement( ( data ) => {
|
|
|
- const className = 'search search-color-' + data.name.split( ':' )[ 1 ];
|
|
|
+ describe( 'non-collapsed range', () => {
|
|
|
+ beforeEach( () => {
|
|
|
+ range = ModelRange.createFromParentsAndOffsets( modelElement, 2, modelElement, 4 );
|
|
|
+ } );
|
|
|
+
|
|
|
+ it( 'using passed view element name', () => {
|
|
|
+ buildModelConverter().for( dispatcher ).fromMarker( 'search' ).toStamp( 'span' );
|
|
|
+
|
|
|
+ dispatcher.convertMarker( 'addMarker', 'search', range );
|
|
|
|
|
|
- return new ViewUIElement( 'span', { class: className } );
|
|
|
+ expect( viewToString( viewRoot ) ).to.equal( '<div><p>fo<span></span>ob<span></span>ar</p></div>' );
|
|
|
+
|
|
|
+ dispatcher.convertMarker( 'removeMarker', 'search', range );
|
|
|
+
|
|
|
+ expect( viewToString( viewRoot ) ).to.equal( '<div><p>foobar</p></div>' );
|
|
|
} );
|
|
|
|
|
|
- dispatcher.convertMarker( 'addMarker', 'search:red', ModelRange.createFromParentsAndOffsets( modelElement, 3, modelElement, 3 ) );
|
|
|
+ it( 'using passed view element', () => {
|
|
|
+ const viewElement = new ViewUIElement( 'span', { class: 'search' } );
|
|
|
+ buildModelConverter().for( dispatcher ).fromMarker( 'search' ).toStamp( viewElement );
|
|
|
|
|
|
- expect( viewToString( viewRoot ) ).to.equal( '<div><p>foo<span class="search search-color-red"></span>bar</p></div>' );
|
|
|
+ dispatcher.convertMarker( 'addMarker', 'search', range );
|
|
|
|
|
|
- dispatcher.convertMarker( 'removeMarker', 'search:red', ModelRange.createFromParentsAndOffsets( modelElement, 3, modelElement, 3 ) );
|
|
|
+ expect( viewToString( viewRoot ) ).to.equal( '<div><p>fo<span class="search"></span>ob<span class="search"></span>ar</p></div>' );
|
|
|
|
|
|
- expect( viewToString( viewRoot ) ).to.equal( '<div><p>foobar</p></div>' );
|
|
|
+ dispatcher.convertMarker( 'removeMarker', 'search', range );
|
|
|
+
|
|
|
+ expect( viewToString( viewRoot ) ).to.equal( '<div><p>foobar</p></div>' );
|
|
|
+ } );
|
|
|
+
|
|
|
+ it( 'using passed creator function', () => {
|
|
|
+ buildModelConverter().for( dispatcher ).fromMarker( 'search' ).toStamp( ( data ) => {
|
|
|
+ const className = 'search search-color-' + data.name.split( ':' )[ 1 ];
|
|
|
+
|
|
|
+ return new ViewUIElement( 'span', { class: className } );
|
|
|
+ } );
|
|
|
+
|
|
|
+ dispatcher.convertMarker( 'addMarker', 'search:red', range );
|
|
|
+
|
|
|
+ expect( viewToString( viewRoot ) )
|
|
|
+ .to.equal( '<div><p>fo<span class="search search-color-red"></span>ob<span class="search search-color-red"></span>ar</p></div>' );
|
|
|
+
|
|
|
+ dispatcher.convertMarker( 'removeMarker', 'search:red', range );
|
|
|
+
|
|
|
+ expect( viewToString( viewRoot ) ).to.equal( '<div><p>foobar</p></div>' );
|
|
|
+ } );
|
|
|
} );
|
|
|
} );
|
|
|
|
|
|
@@ -483,4 +549,16 @@ describe( 'Model converter builder', () => {
|
|
|
buildModelConverter().for( dispatcher ).fromElement( 'paragraph' ).toAttribute( 'paragraph', true );
|
|
|
} ).to.throw( CKEditorError, /^build-model-converter-non-attribute-to-attribute/ );
|
|
|
} );
|
|
|
+
|
|
|
+ it( 'should throw when trying to build model element to view stamp converter', () => {
|
|
|
+ expect( () => {
|
|
|
+ buildModelConverter().for( dispatcher ).fromElement( 'paragraph' ).toStamp( 'span' );
|
|
|
+ } ).to.throw( CKEditorError, /^build-model-converter-non-marker-to-stamp/ );
|
|
|
+ } );
|
|
|
+
|
|
|
+ it( 'should throw when trying to build model attribute to view stamp converter', () => {
|
|
|
+ expect( () => {
|
|
|
+ buildModelConverter().for( dispatcher ).fromAttribute( 'class' ).toStamp( 'span' );
|
|
|
+ } ).to.throw( CKEditorError, /^build-model-converter-non-marker-to-stamp/ );
|
|
|
+ } );
|
|
|
} );
|