|
@@ -9,7 +9,7 @@ import Element from '../../src/view/element';
|
|
|
import DocumentFragment from '../../src/view/documentfragment';
|
|
import DocumentFragment from '../../src/view/documentfragment';
|
|
|
import Text from '../../src/view/text';
|
|
import Text from '../../src/view/text';
|
|
|
import TreeWalker from '../../src/view/treewalker';
|
|
import TreeWalker from '../../src/view/treewalker';
|
|
|
-import { parse } from '../../src/dev-utils/view';
|
|
|
|
|
|
|
+import { parse, stringify } from '../../src/dev-utils/view';
|
|
|
|
|
|
|
|
function getRange( view, options = {} ) {
|
|
function getRange( view, options = {} ) {
|
|
|
const { selection } = parse( view, options );
|
|
const { selection } = parse( view, options );
|
|
@@ -86,6 +86,111 @@ describe( 'Range', () => {
|
|
|
} );
|
|
} );
|
|
|
} );
|
|
} );
|
|
|
|
|
|
|
|
|
|
+ describe( 'getEnlarged', () => {
|
|
|
|
|
+ it( 'case 1', () => {
|
|
|
|
|
+ expect( enlarge( '<p>f<b>{oo}</b></p><p>bar</p>' ) )
|
|
|
|
|
+ .to.equal( '<p>f[<b>oo</b></p>]<p>bar</p>' );
|
|
|
|
|
+ } );
|
|
|
|
|
+
|
|
|
|
|
+ it( 'case 2', () => {
|
|
|
|
|
+ expect( enlarge( '<p>f{oo}bar</p>' ) )
|
|
|
|
|
+ .to.equal( '<p>f{oo}bar</p>' );
|
|
|
|
|
+ } );
|
|
|
|
|
+
|
|
|
|
|
+ it( 'case 3', () => {
|
|
|
|
|
+ expect( enlarge( '<p>f<span></span>{oo}<span></span>bar</p>' ) )
|
|
|
|
|
+ .to.equal( '<p>f[<span></span>oo<span></span>]bar</p>' );
|
|
|
|
|
+ } );
|
|
|
|
|
+
|
|
|
|
|
+ it( 'case 4', () => {
|
|
|
|
|
+ expect( enlarge( '<p>f<img></img>{oo}<img></img>bar</p>' ) )
|
|
|
|
|
+ .to.equal( '<p>f<img></img>[oo]<img></img>bar</p>' );
|
|
|
|
|
+ } );
|
|
|
|
|
+
|
|
|
|
|
+ it( 'case 5', () => {
|
|
|
|
|
+ expect( enlarge( '<p><b>f</b>{oo}<b><span></span>bar</b></p>' ) )
|
|
|
|
|
+ .to.equal( '<p><b>f[</b>oo<b><span></span>]bar</b></p>' );
|
|
|
|
|
+ } );
|
|
|
|
|
+
|
|
|
|
|
+ it( 'case6', () => {
|
|
|
|
|
+ expect( enlarge( '<p>foo</p><p>[bar]</p><p>bom</p>' ) )
|
|
|
|
|
+ .to.equal( '<p>foo</p>[<p>bar</p>]<p>bom</p>' );
|
|
|
|
|
+ } );
|
|
|
|
|
+
|
|
|
|
|
+ function enlarge( data ) {
|
|
|
|
|
+ data = data
|
|
|
|
|
+ .replace( /<p>/g, '<container:p>' )
|
|
|
|
|
+ .replace( /<\/p>/g, '</container:p>' )
|
|
|
|
|
+ .replace( /<b>/g, '<attribute:b>' )
|
|
|
|
|
+ .replace( /<\/b>/g, '</attribute:b>' )
|
|
|
|
|
+ .replace( /<img><\/img>/g, '<empty:img></empty:img>' )
|
|
|
|
|
+ .replace( /<span><\/span>/g, '<ui:span></ui:span>' );
|
|
|
|
|
+
|
|
|
|
|
+ const viewFrag = new DocumentFragment();
|
|
|
|
|
+ const { view, selection } = parse( data, { rootElement: viewFrag } );
|
|
|
|
|
+ const range = selection.getFirstRange();
|
|
|
|
|
+
|
|
|
|
|
+ const enlargedRange = range.getEnlarged();
|
|
|
|
|
+
|
|
|
|
|
+ return stringify( view, enlargedRange );
|
|
|
|
|
+ }
|
|
|
|
|
+ } );
|
|
|
|
|
+
|
|
|
|
|
+ describe( 'getTrimmed', () => {
|
|
|
|
|
+ it( 'case 1', () => {
|
|
|
|
|
+ expect( trim( '<p>f[<b>oo</b></p>]<p>bar</p>' ) )
|
|
|
|
|
+ .to.equal( '<p>f<b>{oo}</b></p><p>bar</p>' );
|
|
|
|
|
+ } );
|
|
|
|
|
+
|
|
|
|
|
+ it( 'case 2', () => {
|
|
|
|
|
+ expect( trim( '<p>f{oo}bar</p>' ) )
|
|
|
|
|
+ .to.equal( '<p>f{oo}bar</p>' );
|
|
|
|
|
+ } );
|
|
|
|
|
+
|
|
|
|
|
+ it( 'case 3', () => {
|
|
|
|
|
+ expect( trim( '<p>f[<span></span>oo<span></span>]bar</p>' ) )
|
|
|
|
|
+ .to.equal( '<p>f<span></span>{oo}<span></span>bar</p>' );
|
|
|
|
|
+ } );
|
|
|
|
|
+
|
|
|
|
|
+ it( 'case 4', () => {
|
|
|
|
|
+ expect( trim( '<p>f<img></img>[oo]<img></img>bar</p>' ) )
|
|
|
|
|
+ .to.equal( '<p>f<img></img>{oo}<img></img>bar</p>' );
|
|
|
|
|
+ } );
|
|
|
|
|
+
|
|
|
|
|
+ it( 'case 5', () => {
|
|
|
|
|
+ expect( trim( '<p><b>f[</b>oo<b><span></span>]bar</b></p>' ) )
|
|
|
|
|
+ .to.equal( '<p><b>f</b>{oo}<b><span></span>bar</b></p>' );
|
|
|
|
|
+ } );
|
|
|
|
|
+
|
|
|
|
|
+ it( 'case6', () => {
|
|
|
|
|
+ expect( trim( '<p>foo[</p><p>bar</p><p>]bom</p>' ) )
|
|
|
|
|
+ .to.equal( '<p>foo[</p><p>bar</p><p>]bom</p>' );
|
|
|
|
|
+ } );
|
|
|
|
|
+
|
|
|
|
|
+ it( 'case7', () => {
|
|
|
|
|
+ expect( trim( '<p>foo[<b><img></img></b>]bom</p>' ) )
|
|
|
|
|
+ .to.equal( '<p>foo<b>[<img></img>]</b>bom</p>' );
|
|
|
|
|
+ } );
|
|
|
|
|
+
|
|
|
|
|
+ function trim( data ) {
|
|
|
|
|
+ data = data
|
|
|
|
|
+ .replace( /<p>/g, '<container:p>' )
|
|
|
|
|
+ .replace( /<\/p>/g, '</container:p>' )
|
|
|
|
|
+ .replace( /<b>/g, '<attribute:b>' )
|
|
|
|
|
+ .replace( /<\/b>/g, '</attribute:b>' )
|
|
|
|
|
+ .replace( /<img><\/img>/g, '<empty:img></empty:img>' )
|
|
|
|
|
+ .replace( /<span><\/span>/g, '<ui:span></ui:span>' );
|
|
|
|
|
+
|
|
|
|
|
+ const viewFrag = new DocumentFragment();
|
|
|
|
|
+ const { view, selection } = parse( data, { rootElement: viewFrag } );
|
|
|
|
|
+ const range = selection.getFirstRange();
|
|
|
|
|
+
|
|
|
|
|
+ const trimmedRange = range.getTrimmed();
|
|
|
|
|
+
|
|
|
|
|
+ return stringify( view, trimmedRange );
|
|
|
|
|
+ }
|
|
|
|
|
+ } );
|
|
|
|
|
+
|
|
|
describe( 'isEqual', () => {
|
|
describe( 'isEqual', () => {
|
|
|
it( 'should return true for the same range', () => {
|
|
it( 'should return true for the same range', () => {
|
|
|
const start = new Position( {}, 1 );
|
|
const start = new Position( {}, 1 );
|