8
0

lists.js 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286
  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( 'lists', () => {
  13. describe( 'toView', () => {
  14. it( 'should process tight asterisks', () => {
  15. const viewFragment = dataProcessor.toView(
  16. '* item 1\n' +
  17. '* item 2\n' +
  18. '* item 3'
  19. );
  20. expect( stringify( viewFragment ) ).to.equal(
  21. '<ul>' +
  22. '<li>item 1</li>' +
  23. '<li>item 2</li>' +
  24. '<li>item 3</li>' +
  25. '</ul>'
  26. );
  27. } );
  28. // it( 'should process loose asterisks', () => {
  29. // const viewFragment = dataProcessor.toView(
  30. // '* item 1\n\n' +
  31. // '* item 2\n\n' +
  32. // '* item 3'
  33. // );
  34. //
  35. // expect( stringify( viewFragment ) ).to.equal(
  36. // '<ul>' +
  37. // '<li>item 1</li>' +
  38. // '<li>item 2</li>' +
  39. // '<li>item 3</li>' +
  40. // '</ul>'
  41. // );
  42. // } );
  43. it( 'should process tight pluses', () => {
  44. const viewFragment = dataProcessor.toView(
  45. '+ item 1\n' +
  46. '+ item 2\n' +
  47. '+ item 3'
  48. );
  49. expect( stringify( viewFragment ) ).to.equal(
  50. '<ul>' +
  51. '<li>item 1</li>' +
  52. '<li>item 2</li>' +
  53. '<li>item 3</li>' +
  54. '</ul>'
  55. );
  56. } );
  57. // it( 'should process loose pluses', () => {
  58. // const viewFragment = dataProcessor.toView(
  59. // '+ item 1\n\n' +
  60. // '+ item 2\n\n' +
  61. // '+ item 3'
  62. // );
  63. //
  64. // expect( stringify( viewFragment ) ).to.equal(
  65. // '<ul>' +
  66. // '<li>item 1</li>' +
  67. // '<li>item 2</li>' +
  68. // '<li>item 3</li>' +
  69. // '</ul>' );
  70. // } );
  71. it( 'should process tight minuses', () => {
  72. const viewFragment = dataProcessor.toView(
  73. '- item 1\n' +
  74. '- item 2\n' +
  75. '- item 3'
  76. );
  77. expect( stringify( viewFragment ) ).to.equal(
  78. '<ul>' +
  79. '<li>item 1</li>' +
  80. '<li>item 2</li>' +
  81. '<li>item 3</li>' +
  82. '</ul>'
  83. );
  84. } );
  85. // it( 'should process loose minuses', () => {
  86. // const viewFragment = dataProcessor.toView(
  87. // '- item 1\n\n' +
  88. // '- item 2\n\n' +
  89. // '- item 3' );
  90. //
  91. // expect( stringify( viewFragment ) ).to.equal(
  92. // '<ul>' +
  93. // '<li>item 1</li>' +
  94. // '<li>item 2</li>' +
  95. // '<li>item 3</li>' +
  96. // '</ul>' );
  97. // } );
  98. it( 'should process ordered list with tabs', () => {
  99. const viewFragment = dataProcessor.toView(
  100. '1. item 1\n' +
  101. '2. item 2\n' +
  102. '3. item 3' );
  103. expect( stringify( viewFragment ) ).to.equal(
  104. '<ol>' +
  105. '<li>item 1</li>' +
  106. '<li>item 2</li>' +
  107. '<li>item 3</li>' +
  108. '</ol>'
  109. );
  110. } );
  111. it( 'should process ordered list with spaces', () => {
  112. const viewFragment = dataProcessor.toView(
  113. '1. item 1\n' +
  114. '2. item 2\n' +
  115. '3. item 3'
  116. );
  117. expect( stringify( viewFragment ) ).to.equal(
  118. '<ol>' +
  119. '<li>item 1</li>' +
  120. '<li>item 2</li>' +
  121. '<li>item 3</li>' +
  122. '</ol>' );
  123. } );
  124. // it( 'should process loose ordered list with tabs', () => {
  125. // const viewFragment = dataProcessor.toView(
  126. // '1. item 1\n\n' +
  127. // '2. item 2\n\n' +
  128. // '3. item 3'
  129. // );
  130. //
  131. // expect( stringify( viewFragment ) ).to.equal(
  132. // '<ol>' +
  133. // '<li>item 1</li>' +
  134. // '<li>item 2</li>' +
  135. // '<li>item 3</li>' +
  136. // '</ol>'
  137. // );
  138. // } );
  139. // it( 'should process loose ordered list with spaces', () => {
  140. // const viewFragment = dataProcessor.toView(
  141. // '1. item 1\n\n' +
  142. // '2. item 2\n\n' +
  143. // '3. item 3'
  144. // );
  145. //
  146. // expect( stringify( viewFragment ) ).to.equal(
  147. // '<ol>' +
  148. // '<li>item 1</li>' +
  149. // '<li>item 2</li>' +
  150. // '<li>item 3</li>' +
  151. // '</ol>'
  152. // );
  153. // } );
  154. it( 'should process nested lists', () => {
  155. const viewFragment = dataProcessor.toView( '* Tab\n * Tab\n * Tab' );
  156. expect( stringify( viewFragment ) ).to.equal( '<ul><li>Tab<ul><li>Tab<ul><li>Tab</li></ul></li></ul></li></ul>' );
  157. } );
  158. it( 'should process nested and mixed lists', () => {
  159. const viewFragment = dataProcessor.toView( '1. First\n2. Second:\n * Fee\n * Fie\n * Foe\n3. Third' );
  160. expect( stringify( viewFragment ) ).to.equal(
  161. '<ol>' +
  162. '<li>First</li>' +
  163. '<li>Second:' +
  164. '<ul>' +
  165. '<li>Fee</li>' +
  166. '<li>Fie</li>' +
  167. '<li>Foe</li>' +
  168. '</ul>' +
  169. '</li>' +
  170. '<li>Third</li>' +
  171. '</ol>'
  172. );
  173. } );
  174. it( 'should process nested and mixed loose lists', () => {
  175. const viewFragment = dataProcessor.toView( '1. First\n\n2. Second:\n * Fee\n * Fie\n * Foe\n\n3. Third' );
  176. expect( stringify( viewFragment ) ).to.equal(
  177. '<ol>' +
  178. '<li>' +
  179. '<p>First</p>' +
  180. '</li>' +
  181. '<li>' +
  182. '<p>Second:</p>' +
  183. '<ul>' +
  184. '<li>Fee</li>' +
  185. '<li>Fie</li>' +
  186. '<li>Foe</li>' +
  187. '</ul>' +
  188. '</li>' +
  189. '<li>' +
  190. '<p>Third</p>' +
  191. '</li>' +
  192. '</ol>'
  193. );
  194. } );
  195. it( 'should create same bullet from different list indicators', () => {
  196. const viewFragment = dataProcessor.toView( '* test\n+ test\n- test' );
  197. expect( stringify( viewFragment ) ).to.equal( '<ul><li>test</li><li>test</li><li>test</li></ul>' );
  198. } );
  199. } );
  200. describe( 'toData', () => {
  201. it( 'should process unordered lists', () => {
  202. const viewFragment = parse(
  203. '<ul>' +
  204. '<li>item 1</li>' +
  205. '<li>item 2</li>' +
  206. '<li>item 3</li>' +
  207. '</ul>'
  208. );
  209. expect( dataProcessor.toData( viewFragment ) ).to.equal(
  210. '* item 1\n' +
  211. '* item 2\n' +
  212. '* item 3'
  213. );
  214. } );
  215. it( 'should process ordered lists', () => {
  216. const viewFragment = parse(
  217. '<ol>' +
  218. '<li>item 1</li>' +
  219. '<li>item 2</li>' +
  220. '<li>item 3</li>' +
  221. '</ol>'
  222. );
  223. expect( dataProcessor.toData( viewFragment ) ).to.equal(
  224. '1. item 1\n' +
  225. '2. item 2\n' +
  226. '3. item 3'
  227. );
  228. } );
  229. // it( 'should process ordered list with multiple paragraphs in them', () => {
  230. // const viewFragment = parse(
  231. // '<ol>' +
  232. // '<li>' +
  233. // '<p>Item 1, p1</p>' +
  234. // '<p>Item 1, p2<br></br>next line</p>' +
  235. // '</li>' +
  236. // '<li>' +
  237. // '<p>Item 2.</p>' +
  238. // '</li>' +
  239. // '<li>' +
  240. // '<p>Item 3.</p>' +
  241. // '</li>' +
  242. // '</ol>'
  243. // );
  244. //
  245. // expect( dataProcessor.toData( viewFragment ) ).to.equal(
  246. // '1. Item 1, p1\n\n' +
  247. // ' Item 1, p2\n' +
  248. // ' next line\n\n' +
  249. // '2. Item 2.\n\n' +
  250. // '3. Item 3.'
  251. // );
  252. // } );
  253. } );
  254. } );
  255. } );