blockquotes.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. /**
  2. * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
  3. * For licensing, see LICENSE.md.
  4. */
  5. import MarkdownDataProcessor from '/ckeditor5/markdown-gfm/gfmdataprocessor.js';
  6. import { stringify, parse } from '/tests/engine/_utils/view.js';
  7. describe( 'GFMDataProcessor', () => {
  8. let dataProcessor;
  9. beforeEach( () => {
  10. dataProcessor = new MarkdownDataProcessor();
  11. } );
  12. describe( 'blockquotes', () => {
  13. describe( 'toView', () => {
  14. it( 'should process single blockquotes', () => {
  15. const viewFragment = dataProcessor.toView( '> foo bar' );
  16. expect( stringify( viewFragment ) ).to.equal( '<blockquote><p>foo bar</p></blockquote>' );
  17. } );
  18. it( 'should process nested blockquotes', () => {
  19. const viewFragment = dataProcessor.toView( '> foo\n>\n> > bar\n>\n> foo\n' );
  20. expect( stringify( viewFragment ) ).to.equal( '<blockquote><p>foo</p><blockquote><p>bar</p></blockquote><p>foo</p></blockquote>' );
  21. } );
  22. it( 'should process list within a blockquote', () => {
  23. const viewFragment = dataProcessor.toView(
  24. '> A list within a blockquote:\n' +
  25. '> \n' +
  26. '> * asterisk 1\n' +
  27. '> * asterisk 2\n' +
  28. '> * asterisk 3\n'
  29. );
  30. expect( stringify( viewFragment ) ).to.equal(
  31. '<blockquote>' +
  32. '<p>A list within a blockquote:</p>' +
  33. '<ul>' +
  34. '<li>asterisk 1</li>' +
  35. '<li>asterisk 2</li>' +
  36. '<li>asterisk 3</li>' +
  37. '</ul>' +
  38. '</blockquote>'
  39. );
  40. } );
  41. it( 'should process blockquotes with code inside', () => {
  42. const viewFragment = dataProcessor.toView(
  43. '> Example 1:\n' +
  44. '>\n' +
  45. '> sub status {\n' +
  46. '> print "working";\n' +
  47. '> }\n' +
  48. '>\n' +
  49. '> Example 2:\n' +
  50. '>\n' +
  51. '> sub status {\n' +
  52. '> return "working";\n' +
  53. '> }\n'
  54. );
  55. expect( stringify( viewFragment ) ).to.equal(
  56. '<blockquote>' +
  57. '<p>Example 1:</p>' +
  58. '<pre>' +
  59. '<code>' +
  60. 'sub status {\n' +
  61. ' print "working";\n' +
  62. '}' +
  63. '</code>' +
  64. '</pre>' +
  65. '<p>Example 2:</p>' +
  66. '<pre>' +
  67. '<code>' +
  68. 'sub status {\n' +
  69. ' return "working";\n' +
  70. '}' +
  71. '</code>' +
  72. '</pre>' +
  73. '</blockquote>'
  74. );
  75. } );
  76. } );
  77. describe( 'toData', () => {
  78. it( 'should process single blockquotes', () => {
  79. const viewFragment = parse( '<blockquote><p>foo bar</p></blockquote>' );
  80. expect( dataProcessor.toData( viewFragment ) ).to.equal( '> foo bar' );
  81. } );
  82. it( 'should process nested blockquotes', () => {
  83. const viewFragment = parse(
  84. '<blockquote>' +
  85. '<p>foo</p>' +
  86. '<blockquote>' +
  87. '<p>bar</p>' +
  88. '</blockquote>' +
  89. '<p>foo</p>' +
  90. '</blockquote>'
  91. );
  92. expect( dataProcessor.toData( viewFragment ) ).to.equal(
  93. '> foo\n' +
  94. '> \n' +
  95. '> > bar\n' +
  96. '> \n' +
  97. '> foo'
  98. );
  99. } );
  100. it( 'should process list within a blockquote', () => {
  101. const viewFragment = parse(
  102. '<blockquote>' +
  103. '<p>A list within a blockquote:</p>' +
  104. '<ul>' +
  105. '<li>asterisk 1</li>' +
  106. '<li>asterisk 2</li>' +
  107. '<li>asterisk 3</li>' +
  108. '</ul>' +
  109. '</blockquote>'
  110. );
  111. expect( dataProcessor.toData( viewFragment ) ).to.equal(
  112. '> A list within a blockquote:\n' +
  113. '> \n' +
  114. '> * asterisk 1\n' +
  115. '> * asterisk 2\n' +
  116. '> * asterisk 3'
  117. );
  118. } );
  119. it( 'should process blockquotes with code inside', () => {
  120. const viewFragment = parse(
  121. '<blockquote>' +
  122. '<p>Example 1:</p>' +
  123. '<pre>' +
  124. '<code>' +
  125. 'code' +
  126. '</code>' +
  127. '</pre>' +
  128. '<p>Example 2:</p>' +
  129. '<pre>' +
  130. '<code>' +
  131. 'code' +
  132. '</code>' +
  133. '</pre>' +
  134. '</blockquote>',
  135. { sameSelectionCharacters: true }
  136. );
  137. expect( dataProcessor.toData( viewFragment ) ).to.equal(
  138. '> Example 1:\n' +
  139. '> \n' +
  140. '> ```\n' +
  141. '> code\n' +
  142. '> ```\n' +
  143. '> \n' +
  144. '> Example 2:\n' +
  145. '> \n' +
  146. '> ```\n' +
  147. '> code\n' +
  148. '> ```'
  149. );
  150. } );
  151. } );
  152. } );
  153. } );