|
|
@@ -514,6 +514,212 @@ describe( 'Writer', () => {
|
|
|
} );
|
|
|
} );
|
|
|
|
|
|
+ describe( 'breakRange', () => {
|
|
|
+ it( 'should throw when range placed in two containers', () => {
|
|
|
+ const p1 = new Element( 'p' );
|
|
|
+ const p2 = new Element( 'p' );
|
|
|
+
|
|
|
+ expect( () => {
|
|
|
+ writer.breakRange( Range.createFromParentsAndOffsets( p1, 0, p2, 0 ) );
|
|
|
+ } ).to.throw( 'treeview-writer-invalid-range-container' );
|
|
|
+ } );
|
|
|
+
|
|
|
+ it( 'should break at collapsed range and return collapsed one', () => {
|
|
|
+ // <p>{foo[]bar}</p> -> <p>{foo}[]{bar}</p>
|
|
|
+ const created = create( writer, {
|
|
|
+ instanceOf: Element,
|
|
|
+ name: 'p',
|
|
|
+ children: [
|
|
|
+ { instanceOf: Text, data: 'foobar', rangeStart: 3, rangeEnd: 3 }
|
|
|
+ ]
|
|
|
+ } );
|
|
|
+
|
|
|
+ const newRange = writer.breakRange( created.range );
|
|
|
+
|
|
|
+ test( writer, newRange, created.node, {
|
|
|
+ instanceOf: Element,
|
|
|
+ name: 'p',
|
|
|
+ rangeStart: 1,
|
|
|
+ rangeEnd: 1,
|
|
|
+ children: [
|
|
|
+ { instanceOf: Text, data: 'foo' },
|
|
|
+ { instanceOf: Text, data: 'bar' }
|
|
|
+ ]
|
|
|
+ } );
|
|
|
+ } );
|
|
|
+
|
|
|
+ it( 'should break inside text node #1', () => {
|
|
|
+ // <p>{foo[bar]baz}</p> -> <p>{foo}[{bar}]{baz}</p>
|
|
|
+ const created = create( writer, {
|
|
|
+ instanceOf: Element,
|
|
|
+ name: 'p',
|
|
|
+ children: [
|
|
|
+ { instanceOf: Text, data: 'foobarbaz', rangeStart: 3, rangeEnd: 6 }
|
|
|
+ ]
|
|
|
+ } );
|
|
|
+
|
|
|
+ const newRange = writer.breakRange( created.range );
|
|
|
+
|
|
|
+ test( writer, newRange, created.node, {
|
|
|
+ instanceOf: Element,
|
|
|
+ name: 'p',
|
|
|
+ rangeStart: 1,
|
|
|
+ rangeEnd: 2,
|
|
|
+ children: [
|
|
|
+ { instanceOf: Text, data: 'foo' },
|
|
|
+ { instanceOf: Text, data: 'bar' },
|
|
|
+ { instanceOf: Text, data: 'baz' }
|
|
|
+ ]
|
|
|
+ } );
|
|
|
+ } );
|
|
|
+
|
|
|
+ it( 'should break inside text node #2', () => {
|
|
|
+ // <p>{foo[barbaz]}</p> -> <p>{foo}[{barbaz}]</p>
|
|
|
+ const created = create( writer, {
|
|
|
+ instanceOf: Element,
|
|
|
+ name: 'p',
|
|
|
+ children: [
|
|
|
+ { instanceOf: Text, data: 'foobarbaz', rangeStart: 3, rangeEnd: 9 }
|
|
|
+ ]
|
|
|
+ } );
|
|
|
+
|
|
|
+ const newRange = writer.breakRange( created.range );
|
|
|
+
|
|
|
+ test( writer, newRange, created.node, {
|
|
|
+ instanceOf: Element,
|
|
|
+ name: 'p',
|
|
|
+ rangeStart: 1,
|
|
|
+ rangeEnd: 2,
|
|
|
+ children: [
|
|
|
+ { instanceOf: Text, data: 'foo' },
|
|
|
+ { instanceOf: Text, data: 'barbaz' }
|
|
|
+ ]
|
|
|
+ } );
|
|
|
+ } );
|
|
|
+
|
|
|
+ it( 'should break inside text node #3', () => {
|
|
|
+ // <p>{foo[barbaz}]</p> -> <p>{foo}[{barbaz}]</p>
|
|
|
+ const created = create( writer, {
|
|
|
+ instanceOf: Element,
|
|
|
+ name: 'p',
|
|
|
+ rangeEnd: 1,
|
|
|
+ children: [
|
|
|
+ { instanceOf: Text, data: 'foobarbaz', rangeStart: 3 }
|
|
|
+ ]
|
|
|
+ } );
|
|
|
+
|
|
|
+ const newRange = writer.breakRange( created.range );
|
|
|
+
|
|
|
+ test( writer, newRange, created.node, {
|
|
|
+ instanceOf: Element,
|
|
|
+ name: 'p',
|
|
|
+ rangeStart: 1,
|
|
|
+ rangeEnd: 2,
|
|
|
+ children: [
|
|
|
+ { instanceOf: Text, data: 'foo' },
|
|
|
+ { instanceOf: Text, data: 'barbaz' }
|
|
|
+ ]
|
|
|
+ } );
|
|
|
+ } );
|
|
|
+
|
|
|
+ it( 'should break inside text node #4', () => {
|
|
|
+ // <p>{[foo]barbaz}</p> -> <p>[{foo}]{barbaz]</p>
|
|
|
+ const created = create( writer, {
|
|
|
+ instanceOf: Element,
|
|
|
+ name: 'p',
|
|
|
+ children: [
|
|
|
+ { instanceOf: Text, data: 'foobarbaz', rangeStart: 0, rangeEnd: 3 }
|
|
|
+ ]
|
|
|
+ } );
|
|
|
+
|
|
|
+ const newRange = writer.breakRange( created.range );
|
|
|
+
|
|
|
+ test( writer, newRange, created.node, {
|
|
|
+ instanceOf: Element,
|
|
|
+ name: 'p',
|
|
|
+ rangeStart: 0,
|
|
|
+ rangeEnd: 1,
|
|
|
+ children: [
|
|
|
+ { instanceOf: Text, data: 'foo' },
|
|
|
+ { instanceOf: Text, data: 'barbaz' }
|
|
|
+ ]
|
|
|
+ } );
|
|
|
+ } );
|
|
|
+
|
|
|
+ it( 'should break inside text node #5', () => {
|
|
|
+ // <p>[{foo]barbaz}</p> -> <p>[{foo}]{barbaz]</p>
|
|
|
+ const created = create( writer, {
|
|
|
+ instanceOf: Element,
|
|
|
+ name: 'p',
|
|
|
+ rangeStart: 0,
|
|
|
+ children: [
|
|
|
+ { instanceOf: Text, data: 'foobarbaz', rangeEnd: 3 }
|
|
|
+ ]
|
|
|
+ } );
|
|
|
+
|
|
|
+ const newRange = writer.breakRange( created.range );
|
|
|
+
|
|
|
+ test( writer, newRange, created.node, {
|
|
|
+ instanceOf: Element,
|
|
|
+ name: 'p',
|
|
|
+ rangeStart: 0,
|
|
|
+ rangeEnd: 1,
|
|
|
+ children: [
|
|
|
+ { instanceOf: Text, data: 'foo' },
|
|
|
+ { instanceOf: Text, data: 'barbaz' }
|
|
|
+ ]
|
|
|
+ } );
|
|
|
+ } );
|
|
|
+
|
|
|
+ it( 'should break placed inside different nodes', () => {
|
|
|
+ // <p>{foo[bar}<b>{baz]qux}</b></p>
|
|
|
+ // <p>{foo}[{bar}<b>{baz}</b>]<b>qux</b></p>
|
|
|
+ const created = create( writer, {
|
|
|
+ instanceOf: Element,
|
|
|
+ name: 'p',
|
|
|
+ children: [
|
|
|
+ { instanceOf: Text, data: 'foobar', rangeStart: 3 },
|
|
|
+ {
|
|
|
+ instanceOf: Element,
|
|
|
+ name: 'b',
|
|
|
+ priority: 1,
|
|
|
+ children: [
|
|
|
+ { instanceOf: Text, data: 'bazqux', rangeEnd: 3 }
|
|
|
+ ]
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ } );
|
|
|
+
|
|
|
+ const newRange = writer.breakRange( created.range );
|
|
|
+ test( writer, newRange, created.node, {
|
|
|
+ instanceOf: Element,
|
|
|
+ name: 'p',
|
|
|
+ rangeStart: 1,
|
|
|
+ rangeEnd: 3,
|
|
|
+ children: [
|
|
|
+ { instanceOf: Text, data: 'foo' },
|
|
|
+ { instanceOf: Text, data: 'bar' },
|
|
|
+ {
|
|
|
+ instanceOf: Element,
|
|
|
+ name: 'b',
|
|
|
+ priority: 1,
|
|
|
+ children: [
|
|
|
+ { instanceOf: Text, data: 'baz' }
|
|
|
+ ]
|
|
|
+ },
|
|
|
+ {
|
|
|
+ instanceOf: Element,
|
|
|
+ name: 'b',
|
|
|
+ priority: 1,
|
|
|
+ children: [
|
|
|
+ { instanceOf: Text, data: 'qux' }
|
|
|
+ ]
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ } );
|
|
|
+ } );
|
|
|
+ } );
|
|
|
+
|
|
|
describe( 'mergeAttributes', () => {
|
|
|
it( 'should not merge if inside text node', () => {
|
|
|
// <p>{fo|obar}</p>
|
|
|
@@ -1056,7 +1262,7 @@ describe( 'Writer', () => {
|
|
|
|
|
|
expect( () => {
|
|
|
writer.remove( Range.createFromParentsAndOffsets( p1, 0, p2, 0 ) );
|
|
|
- } ).to.throw( 'treeview-writer-invalid-range' );
|
|
|
+ } ).to.throw( 'treeview-writer-invalid-range-container' );
|
|
|
} );
|
|
|
|
|
|
it( 'should return empty array when range is collapsed', () => {
|
|
|
@@ -1402,7 +1608,7 @@ describe( 'Writer', () => {
|
|
|
|
|
|
expect( () => {
|
|
|
writer.wrap( range, b, 1 );
|
|
|
- } ).to.throw( CKEditorError, 'treeview-writer-unwrap-invalid-range' );
|
|
|
+ } ).to.throw( CKEditorError, 'treeview-writer-invalid-range-container' );
|
|
|
} );
|
|
|
|
|
|
it( 'wraps part of a single text node #1', () => {
|
|
|
@@ -1897,7 +2103,7 @@ describe( 'Writer', () => {
|
|
|
|
|
|
expect( () => {
|
|
|
writer.unwrap( range, b, 1 );
|
|
|
- } ).to.throw( CKEditorError, 'treeview-writer-unwrap-invalid-range' );
|
|
|
+ } ).to.throw( CKEditorError, 'treeview-writer-invalid-range-container' );
|
|
|
} );
|
|
|
|
|
|
it( 'should unwrap single node', () => {
|