/** * @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ import { Client, syncClients, expectClients, clearBuffer } from './utils.js'; describe( 'transform', () => { let john, kate; beforeEach( () => { return Promise.all( [ Client.get( 'john' ).then( client => ( john = client ) ), Client.get( 'kate' ).then( client => ( kate = client ) ) ] ); } ); afterEach( () => { clearBuffer(); return Promise.all( [ john.destroy(), kate.destroy() ] ); } ); describe( 'rename', () => { describe( 'by rename', () => { it( 'elements in different paths #1', () => { john.setData( '[]FooBar' ); kate.setData( 'Foo[]Bar' ); john.rename( 'heading1' ); kate.rename( 'heading2' ); syncClients(); expectClients( 'FooBar' ); } ); it( 'elements in different paths #2', () => { john.setData( '
[]Foo Bar
' ); kate.setData( '
[]Foo Bar
' ); john.rename( 'blockQuote2' ); kate.rename( 'heading2' ); syncClients(); expectClients( 'Foo Bar' ); } ); it( 'the same element', () => { john.setData( '
[]Foo Bar
' ); kate.setData( '
[]Foo Bar
' ); john.rename( 'heading1' ); kate.rename( 'heading2' ); syncClients(); expectClients( '
Foo Bar
' ); } ); } ); describe( 'by split', () => { it( 'element in different path', () => { john.setData( 'F[]ooBar' ); kate.setData( 'FooB[]ar' ); john.rename( 'heading1' ); kate.split(); syncClients(); expectClients( 'Foo' + 'B' + 'ar' ); } ); it( 'element in same path', () => { john.setData( '[]Foo Bar' ); kate.setData( 'Foo []Bar' ); john.rename( 'heading1' ); kate.split(); syncClients(); expectClients( 'Foo Bar' ); } ); it( 'element in same path, then undo', () => { john.setData( '[]Foo Bar' ); kate.setData( 'Foo []Bar' ); john.rename( 'heading1' ); john.undo(); kate.split(); syncClients(); expectClients( 'Foo Bar' ); } ); it( 'element in other user\'s selection', () => { john.setData( '[Foo]' ); kate.setData( 'F[]oo' ); john.rename( 'heading1' ); kate.split(); syncClients(); expectClients( 'F' + 'oo' ); } ); } ); describe( 'by wrap', () => { it( 'element in different path', () => { john.setData( '[]FooBar' ); kate.setData( 'Foo[Bar]' ); john.rename( 'heading1' ); kate.wrap( 'blockQuote' ); syncClients(); expectClients( 'Foo' + '
' + 'Bar' + '
' ); } ); it( 'element in same path', () => { john.setData( '[]Foo' ); kate.setData( '[Foo]' ); john.rename( 'heading1' ); kate.wrap( 'blockQuote' ); syncClients(); expectClients( '
Foo
' ); } ); } ); describe( 'by unwrap', () => { it( 'element in different path', () => { john.setData( 'F[]oo
Bar
' ); kate.setData( 'Foo
[Bar]
' ); john.rename( 'heading1' ); kate.unwrap(); syncClients(); expectClients( 'Foo' + 'Bar' ); } ); it( 'text in different path', () => { john.setData( 'F[]oo
Bar
' ); kate.setData( 'Foo
[]Bar
' ); john.rename( 'heading1' ); kate.unwrap(); syncClients(); expectClients( 'Foo' + '
Bar
' ); } ); it( 'element in same path', () => { john.setData( '
F[]oo
' ); kate.setData( '
[Foo]
' ); john.rename( 'heading1' ); kate.unwrap(); syncClients(); expectClients( 'Foo' ); } ); it( 'text in same path', () => { john.setData( '
[]Foo
' ); kate.setData( '
[]Foo
' ); john.rename( 'heading1' ); kate.unwrap(); syncClients(); expectClients( '
Foo
' ); } ); } ); describe( 'by merge', () => { it( 'element into paragraph #1', () => { john.setData( 'F[]ooBar' ); kate.setData( 'Foo[]Bar' ); john.rename( 'heading1' ); kate.merge(); syncClients(); expectClients( 'FooBar' ); } ); it( 'element into paragraph #2', () => { john.setData( 'FooB[]ar' ); kate.setData( 'Foo[]Bar' ); john.rename( 'heading1' ); kate.merge(); syncClients(); expectClients( 'FooBar' ); } ); it( 'wrapped element into wrapped paragraph #1', () => { john.setData( '
F[]ooBar
' ); kate.setData( '
Foo[]Bar
' ); john.rename( 'heading1' ); kate.merge(); syncClients(); expectClients( '
FooBar
' ); } ); it( 'wrapped element into wrapped paragraph #2', () => { john.setData( '
FooB[]ar
' ); kate.setData( '
Foo[]Bar
' ); john.rename( 'heading1' ); kate.merge(); syncClients(); expectClients( '
FooBar
' ); } ); } ); } ); } );