unwrap.js 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. import { Client, syncClients, expectClients } from './utils.js';
  2. describe( 'transform', () => {
  3. let john, kate;
  4. beforeEach( () => {
  5. return Promise.all( [
  6. Client.get( 'john' ).then( client => ( john = client ) ),
  7. Client.get( 'kate' ).then( client => ( kate = client ) )
  8. ] );
  9. } );
  10. afterEach( () => {
  11. return Promise.all( [ john.destroy(), kate.destroy() ] );
  12. } );
  13. describe( 'unwrap', () => {
  14. describe( 'by unwrap', () => {
  15. it( 'element in different path', () => {
  16. john.setData(
  17. '<blockQuote>[<paragraph>Foo</paragraph>]</blockQuote>' +
  18. '<blockQuote><paragraph>Bar</paragraph></blockQuote>'
  19. );
  20. kate.setData(
  21. '<blockQuote><paragraph>Foo</paragraph></blockQuote>' +
  22. '<blockQuote>[<paragraph>Bar</paragraph>]</blockQuote>'
  23. );
  24. john.unwrap();
  25. kate.unwrap();
  26. syncClients();
  27. expectClients(
  28. '<paragraph>Foo</paragraph>' +
  29. '<paragraph>Bar</paragraph>'
  30. );
  31. } );
  32. it( 'text in different path', () => {
  33. john.setData(
  34. '<blockQuote><paragraph>[]Foo</paragraph></blockQuote>' +
  35. '<blockQuote><paragraph>Bar</paragraph></blockQuote>'
  36. );
  37. kate.setData(
  38. '<blockQuote><paragraph>Foo</paragraph></blockQuote>' +
  39. '<blockQuote><paragraph>[]Bar</paragraph></blockQuote>'
  40. );
  41. john.unwrap();
  42. kate.unwrap();
  43. syncClients();
  44. expectClients(
  45. '<blockQuote>Foo</blockQuote>' +
  46. '<blockQuote>Bar</blockQuote>'
  47. );
  48. } );
  49. it( 'the same element', () => {
  50. john.setData( '<blockQuote>[<paragraph>Foo</paragraph>]</blockQuote>' );
  51. kate.setData( '<blockQuote>[<paragraph>Foo</paragraph>]</blockQuote>' );
  52. john.unwrap();
  53. kate.unwrap();
  54. syncClients();
  55. expectClients( '<paragraph>Foo</paragraph>' );
  56. } );
  57. it( 'the same element, then undo', () => {
  58. john.setData( '<blockQuote>[]<paragraph>Foo</paragraph></blockQuote>' );
  59. kate.setData( '<blockQuote>[]<paragraph>Foo</paragraph></blockQuote>' );
  60. john.unwrap();
  61. kate.unwrap();
  62. syncClients();
  63. expectClients( '<paragraph>Foo</paragraph>' );
  64. john.undo();
  65. syncClients();
  66. expectClients( '<blockQuote><paragraph>Foo</paragraph></blockQuote>' );
  67. } );
  68. it( 'the same text', () => {
  69. john.setData( '<blockQuote><paragraph>[]Foo</paragraph></blockQuote>' );
  70. kate.setData( '<blockQuote><paragraph>[]Foo</paragraph></blockQuote>' );
  71. john.unwrap();
  72. kate.unwrap();
  73. syncClients();
  74. expectClients( '<blockQuote>Foo</blockQuote>' );
  75. } );
  76. it( 'the same text, then undo', () => {
  77. john.setData( '<blockQuote><paragraph>[]Foo</paragraph></blockQuote>' );
  78. kate.setData( '<blockQuote><paragraph>[]Foo</paragraph></blockQuote>' );
  79. john.unwrap();
  80. kate.unwrap();
  81. syncClients();
  82. john.undo();
  83. syncClients();
  84. expectClients( '<blockQuote><paragraph>Foo</paragraph></blockQuote>' );
  85. } );
  86. } );
  87. describe( 'by delete', () => {
  88. it( 'text from two elements #1', () => {
  89. john.setData( '<blockQuote>[<paragraph>Foo</paragraph>]</blockQuote><paragraph>Bar</paragraph>' );
  90. kate.setData( '<blockQuote><paragraph>Fo[o</paragraph></blockQuote><paragraph>Ba]r</paragraph>' );
  91. john.unwrap();
  92. kate.delete();
  93. syncClients();
  94. expectClients( '<paragraph>For</paragraph>' );
  95. } );
  96. it( 'text in same path', () => {
  97. john.setData( '<blockQuote>[<paragraph>Foo</paragraph>]</blockQuote>' );
  98. kate.setData( '<blockQuote><paragraph>F[oo]</paragraph></blockQuote>' );
  99. john.unwrap();
  100. kate.delete();
  101. syncClients();
  102. expectClients( '<paragraph>F</paragraph>' );
  103. } );
  104. } );
  105. describe( 'by merge', () => {
  106. it( 'element into paragraph #1', () => {
  107. john.setData( '<blockQuote>[<paragraph>Foo</paragraph>]<paragraph>Bar</paragraph></blockQuote>' );
  108. kate.setData( '<blockQuote><paragraph>Foo</paragraph>[]<paragraph>Bar</paragraph></blockQuote>' );
  109. john.unwrap();
  110. kate.merge();
  111. syncClients();
  112. expectClients( '<paragraph>FooBar</paragraph>' );
  113. } );
  114. it( 'element into paragraph #2', () => {
  115. john.setData( '<blockQuote>[<paragraph>Foo</paragraph><paragraph>Bar</paragraph>]</blockQuote>' );
  116. kate.setData( '<blockQuote><paragraph>Foo</paragraph>[]<paragraph>Bar</paragraph></blockQuote>' );
  117. john.unwrap();
  118. kate.merge();
  119. syncClients();
  120. expectClients( '<paragraph>FooBar</paragraph>' );
  121. } );
  122. it( 'unwrapped element', () => {
  123. john.setData( '<paragraph>Foo</paragraph><blockQuote>[<paragraph>Bar</paragraph>]</blockQuote>' );
  124. kate.setData( '<paragraph>Foo</paragraph>[]<blockQuote><paragraph>Bar</paragraph></blockQuote>' );
  125. john.unwrap();
  126. kate.merge();
  127. syncClients();
  128. expectClients(
  129. '<paragraph>Foo</paragraph>' +
  130. '<paragraph>Bar</paragraph>'
  131. );
  132. } );
  133. it( 'unwrap merge target element', () => {
  134. john.setData( '<blockQuote>[]<paragraph>Foo</paragraph></blockQuote><blockQuote><paragraph>Bar</paragraph></blockQuote>' );
  135. kate.setData( '<blockQuote><paragraph>Foo</paragraph></blockQuote>[]<blockQuote><paragraph>Bar</paragraph></blockQuote>' );
  136. john.unwrap();
  137. kate.merge();
  138. syncClients();
  139. expectClients(
  140. '<paragraph>Foo</paragraph>' +
  141. '<paragraph>Bar</paragraph>'
  142. );
  143. } );
  144. } );
  145. } );
  146. } );