unwrap.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  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( 'the same element', () => {
  33. john.setData( '<blockQuote>[<paragraph>Foo</paragraph>]</blockQuote>' );
  34. kate.setData( '<blockQuote>[<paragraph>Foo</paragraph>]</blockQuote>' );
  35. john.unwrap();
  36. kate.unwrap();
  37. syncClients();
  38. expectClients( '<paragraph>Foo</paragraph>' );
  39. } );
  40. it( 'the same element, then undo', () => {
  41. john.setData( '<blockQuote>[]<paragraph>Foo</paragraph></blockQuote>' );
  42. kate.setData( '<blockQuote>[]<paragraph>Foo</paragraph></blockQuote>' );
  43. john.unwrap();
  44. kate.unwrap();
  45. syncClients();
  46. expectClients( '<paragraph>Foo</paragraph>' );
  47. john.undo();
  48. syncClients();
  49. expectClients( '<blockQuote><paragraph>Foo</paragraph></blockQuote>' );
  50. } );
  51. } );
  52. describe( 'by delete', () => {
  53. it( 'text from two elements', () => {
  54. john.setData( '<blockQuote>[<paragraph>Foo</paragraph>]</blockQuote><paragraph>Bar</paragraph>' );
  55. kate.setData( '<blockQuote><paragraph>Fo[o</paragraph></blockQuote><paragraph>Ba]r</paragraph>' );
  56. john.unwrap();
  57. kate.delete();
  58. syncClients();
  59. expectClients( '<paragraph>For</paragraph>' );
  60. } );
  61. it( 'text in same path', () => {
  62. john.setData( '<blockQuote>[<paragraph>Foo</paragraph>]</blockQuote>' );
  63. kate.setData( '<blockQuote><paragraph>F[oo]</paragraph></blockQuote>' );
  64. john.unwrap();
  65. kate.delete();
  66. syncClients();
  67. expectClients( '<paragraph>F</paragraph>' );
  68. } );
  69. } );
  70. describe( 'by merge', () => {
  71. it( 'element into paragraph #1', () => {
  72. john.setData( '<blockQuote>[<paragraph>Foo</paragraph>]<paragraph>Bar</paragraph></blockQuote>' );
  73. kate.setData( '<blockQuote><paragraph>Foo</paragraph>[]<paragraph>Bar</paragraph></blockQuote>' );
  74. john.unwrap();
  75. kate.merge();
  76. syncClients();
  77. expectClients( '<paragraph>FooBar</paragraph>' );
  78. } );
  79. it( 'element into paragraph #2', () => {
  80. john.setData( '<blockQuote>[<paragraph>Foo</paragraph><paragraph>Bar</paragraph>]</blockQuote>' );
  81. kate.setData( '<blockQuote><paragraph>Foo</paragraph>[]<paragraph>Bar</paragraph></blockQuote>' );
  82. john.unwrap();
  83. kate.merge();
  84. syncClients();
  85. expectClients( '<paragraph>FooBar</paragraph>' );
  86. } );
  87. it( 'unwrapped element', () => {
  88. john.setData( '<paragraph>Foo</paragraph><blockQuote>[<paragraph>Bar</paragraph>]</blockQuote>' );
  89. kate.setData( '<paragraph>Foo</paragraph>[]<blockQuote><paragraph>Bar</paragraph></blockQuote>' );
  90. john.unwrap();
  91. kate.merge();
  92. syncClients();
  93. expectClients(
  94. '<paragraph>Foo</paragraph>' +
  95. '<paragraph>Bar</paragraph>'
  96. );
  97. } );
  98. } );
  99. } );
  100. } );