rename.js 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  1. /**
  2. * @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.
  3. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  4. */
  5. import { Client, syncClients, expectClients, clearBuffer } from './utils.js';
  6. describe( 'transform', () => {
  7. let john, kate;
  8. beforeEach( () => {
  9. return Promise.all( [
  10. Client.get( 'john' ).then( client => ( john = client ) ),
  11. Client.get( 'kate' ).then( client => ( kate = client ) )
  12. ] );
  13. } );
  14. afterEach( () => {
  15. clearBuffer();
  16. return Promise.all( [ john.destroy(), kate.destroy() ] );
  17. } );
  18. describe( 'rename', () => {
  19. describe( 'by rename', () => {
  20. it( 'elements in different paths #1', () => {
  21. john.setData( '<paragraph>[]Foo</paragraph><paragraph>Bar</paragraph>' );
  22. kate.setData( '<paragraph>Foo</paragraph><paragraph>[]Bar</paragraph>' );
  23. john.rename( 'heading1' );
  24. kate.rename( 'heading2' );
  25. syncClients();
  26. expectClients( '<heading1>Foo</heading1><heading2>Bar</heading2>' );
  27. } );
  28. it( 'elements in different paths #2', () => {
  29. john.setData( '<blockQuote>[]<paragraph>Foo Bar</paragraph></blockQuote>' );
  30. kate.setData( '<blockQuote><paragraph>[]Foo Bar</paragraph></blockQuote>' );
  31. john.rename( 'blockQuote2' );
  32. kate.rename( 'heading2' );
  33. syncClients();
  34. expectClients( '<blockQuote2><heading2>Foo Bar</heading2></blockQuote2>' );
  35. } );
  36. it( 'the same element', () => {
  37. john.setData( '<blockQuote><paragraph>[]Foo Bar</paragraph></blockQuote>' );
  38. kate.setData( '<blockQuote><paragraph>[]Foo Bar</paragraph></blockQuote>' );
  39. john.rename( 'heading1' );
  40. kate.rename( 'heading2' );
  41. syncClients();
  42. expectClients( '<blockQuote><heading1>Foo Bar</heading1></blockQuote>' );
  43. } );
  44. } );
  45. describe( 'by split', () => {
  46. it( 'element in different path', () => {
  47. john.setData( '<paragraph>F[]oo</paragraph><paragraph>Bar</paragraph>' );
  48. kate.setData( '<paragraph>Foo</paragraph><paragraph>B[]ar</paragraph>' );
  49. john.rename( 'heading1' );
  50. kate.split();
  51. syncClients();
  52. expectClients(
  53. '<heading1>Foo</heading1>' +
  54. '<paragraph>B</paragraph>' +
  55. '<paragraph>ar</paragraph>'
  56. );
  57. } );
  58. it( 'element in same path', () => {
  59. john.setData( '<paragraph>[]Foo Bar</paragraph>' );
  60. kate.setData( '<paragraph>Foo []Bar</paragraph>' );
  61. john.rename( 'heading1' );
  62. kate.split();
  63. syncClients();
  64. expectClients( '<heading1>Foo </heading1><heading1>Bar</heading1>' );
  65. } );
  66. it( 'element in same path, then undo', () => {
  67. john.setData( '<paragraph>[]Foo Bar</paragraph>' );
  68. kate.setData( '<paragraph>Foo []Bar</paragraph>' );
  69. john.rename( 'heading1' );
  70. john.undo();
  71. kate.split();
  72. syncClients();
  73. expectClients( '<paragraph>Foo </paragraph><paragraph>Bar</paragraph>' );
  74. } );
  75. it( 'element in other user\'s selection', () => {
  76. john.setData( '<paragraph>[Foo]</paragraph>' );
  77. kate.setData( '<paragraph>F[]oo</paragraph>' );
  78. john.rename( 'heading1' );
  79. kate.split();
  80. syncClients();
  81. expectClients(
  82. '<heading1>F</heading1>' +
  83. '<heading1>oo</heading1>'
  84. );
  85. } );
  86. } );
  87. describe( 'by wrap', () => {
  88. it( 'element in different path', () => {
  89. john.setData( '<paragraph>[]Foo</paragraph><paragraph>Bar</paragraph>' );
  90. kate.setData( '<paragraph>Foo</paragraph>[<paragraph>Bar</paragraph>]' );
  91. john.rename( 'heading1' );
  92. kate.wrap( 'blockQuote' );
  93. syncClients();
  94. expectClients(
  95. '<heading1>Foo</heading1>' +
  96. '<blockQuote>' +
  97. '<paragraph>Bar</paragraph>' +
  98. '</blockQuote>'
  99. );
  100. } );
  101. it( 'element in same path', () => {
  102. john.setData( '<paragraph>[]Foo</paragraph>' );
  103. kate.setData( '[<paragraph>Foo</paragraph>]' );
  104. john.rename( 'heading1' );
  105. kate.wrap( 'blockQuote' );
  106. syncClients();
  107. expectClients( '<blockQuote><heading1>Foo</heading1></blockQuote>' );
  108. } );
  109. } );
  110. describe( 'by unwrap', () => {
  111. it( 'element in different path', () => {
  112. john.setData( '<paragraph>F[]oo</paragraph><blockQuote><paragraph>Bar</paragraph></blockQuote>' );
  113. kate.setData( '<paragraph>Foo</paragraph><blockQuote>[<paragraph>Bar</paragraph>]</blockQuote>' );
  114. john.rename( 'heading1' );
  115. kate.unwrap();
  116. syncClients();
  117. expectClients(
  118. '<heading1>Foo</heading1>' +
  119. '<paragraph>Bar</paragraph>'
  120. );
  121. } );
  122. it( 'text in different path', () => {
  123. john.setData( '<paragraph>F[]oo</paragraph><blockQuote><paragraph>Bar</paragraph></blockQuote>' );
  124. kate.setData( '<paragraph>Foo</paragraph><blockQuote><paragraph>[]Bar</paragraph></blockQuote>' );
  125. john.rename( 'heading1' );
  126. kate.unwrap();
  127. syncClients();
  128. expectClients(
  129. '<heading1>Foo</heading1>' +
  130. '<blockQuote>Bar</blockQuote>'
  131. );
  132. } );
  133. it( 'element in same path', () => {
  134. john.setData( '<blockQuote><paragraph>F[]oo</paragraph></blockQuote>' );
  135. kate.setData( '<blockQuote>[<paragraph>Foo</paragraph>]</blockQuote>' );
  136. john.rename( 'heading1' );
  137. kate.unwrap();
  138. syncClients();
  139. expectClients( '<heading1>Foo</heading1>' );
  140. } );
  141. it( 'text in same path', () => {
  142. john.setData( '<blockQuote><paragraph>[]Foo</paragraph></blockQuote>' );
  143. kate.setData( '<blockQuote><paragraph>[]Foo</paragraph></blockQuote>' );
  144. john.rename( 'heading1' );
  145. kate.unwrap();
  146. syncClients();
  147. expectClients( '<blockQuote>Foo</blockQuote>' );
  148. } );
  149. } );
  150. describe( 'by merge', () => {
  151. it( 'element into paragraph #1', () => {
  152. john.setData( '<paragraph>F[]oo</paragraph><paragraph>Bar</paragraph>' );
  153. kate.setData( '<paragraph>Foo</paragraph>[]<paragraph>Bar</paragraph>' );
  154. john.rename( 'heading1' );
  155. kate.merge();
  156. syncClients();
  157. expectClients( '<heading1>FooBar</heading1>' );
  158. } );
  159. it( 'element into paragraph #2', () => {
  160. john.setData( '<paragraph>Foo</paragraph><paragraph>B[]ar</paragraph>' );
  161. kate.setData( '<paragraph>Foo</paragraph>[]<paragraph>Bar</paragraph>' );
  162. john.rename( 'heading1' );
  163. kate.merge();
  164. syncClients();
  165. expectClients( '<paragraph>FooBar</paragraph>' );
  166. } );
  167. it( 'wrapped element into wrapped paragraph #1', () => {
  168. john.setData( '<blockQuote><paragraph>F[]oo</paragraph><paragraph>Bar</paragraph></blockQuote>' );
  169. kate.setData( '<blockQuote><paragraph>Foo</paragraph>[]<paragraph>Bar</paragraph></blockQuote>' );
  170. john.rename( 'heading1' );
  171. kate.merge();
  172. syncClients();
  173. expectClients( '<blockQuote><heading1>FooBar</heading1></blockQuote>' );
  174. } );
  175. it( 'wrapped element into wrapped paragraph #2', () => {
  176. john.setData( '<blockQuote><paragraph>Foo</paragraph><paragraph>B[]ar</paragraph></blockQuote>' );
  177. kate.setData( '<blockQuote><paragraph>Foo</paragraph>[]<paragraph>Bar</paragraph></blockQuote>' );
  178. john.rename( 'heading1' );
  179. kate.merge();
  180. syncClients();
  181. expectClients( '<blockQuote><paragraph>FooBar</paragraph></blockQuote>' );
  182. } );
  183. } );
  184. } );
  185. } );