outline.test.ts 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. import { resolveHeaders } from 'client/theme-default/composables/outline'
  2. const element = {
  3. classList: {
  4. contains: () => false
  5. }
  6. } as unknown as HTMLHeadElement
  7. describe('client/theme-default/composables/outline', () => {
  8. describe('resolveHeader', () => {
  9. test('levels range', () => {
  10. expect(
  11. resolveHeaders(
  12. [
  13. {
  14. level: 2,
  15. title: 'h2 - 1',
  16. link: '#h2-1',
  17. element
  18. },
  19. {
  20. level: 3,
  21. title: 'h3 - 1',
  22. link: '#h3-1',
  23. element
  24. }
  25. ],
  26. [2, 3]
  27. )
  28. ).toEqual([
  29. {
  30. level: 2,
  31. title: 'h2 - 1',
  32. link: '#h2-1',
  33. children: [
  34. {
  35. level: 3,
  36. title: 'h3 - 1',
  37. link: '#h3-1',
  38. children: [],
  39. element
  40. }
  41. ],
  42. element
  43. }
  44. ])
  45. })
  46. test('specific level', () => {
  47. expect(
  48. resolveHeaders(
  49. [
  50. {
  51. level: 2,
  52. title: 'h2 - 1',
  53. link: '#h2-1',
  54. element
  55. },
  56. {
  57. level: 3,
  58. title: 'h3 - 1',
  59. link: '#h3-1',
  60. element
  61. }
  62. ],
  63. 2
  64. )
  65. ).toEqual([
  66. {
  67. level: 2,
  68. title: 'h2 - 1',
  69. link: '#h2-1',
  70. children: [],
  71. element
  72. }
  73. ])
  74. })
  75. test('complex deep', () => {
  76. expect(
  77. resolveHeaders(
  78. [
  79. {
  80. level: 2,
  81. title: 'h2 - 1',
  82. link: '#h2-1',
  83. element
  84. },
  85. {
  86. level: 3,
  87. title: 'h3 - 1',
  88. link: '#h3-1',
  89. element
  90. },
  91. {
  92. level: 4,
  93. title: 'h4 - 1',
  94. link: '#h4-1',
  95. element
  96. },
  97. {
  98. level: 3,
  99. title: 'h3 - 2',
  100. link: '#h3-2',
  101. element
  102. },
  103. {
  104. level: 4,
  105. title: 'h4 - 2',
  106. link: '#h4-2',
  107. element
  108. },
  109. {
  110. level: 2,
  111. title: 'h2 - 2',
  112. link: '#h2-2',
  113. element
  114. },
  115. {
  116. level: 3,
  117. title: 'h3 - 3',
  118. link: '#h3-3',
  119. element
  120. },
  121. {
  122. level: 4,
  123. title: 'h4 - 3',
  124. link: '#h4-3',
  125. element
  126. }
  127. ],
  128. 'deep'
  129. )
  130. ).toEqual([
  131. {
  132. level: 2,
  133. title: 'h2 - 1',
  134. link: '#h2-1',
  135. children: [
  136. {
  137. level: 3,
  138. title: 'h3 - 1',
  139. link: '#h3-1',
  140. children: [
  141. {
  142. level: 4,
  143. title: 'h4 - 1',
  144. link: '#h4-1',
  145. children: [],
  146. element
  147. }
  148. ],
  149. element
  150. },
  151. {
  152. level: 3,
  153. title: 'h3 - 2',
  154. link: '#h3-2',
  155. children: [
  156. {
  157. level: 4,
  158. title: 'h4 - 2',
  159. link: '#h4-2',
  160. children: [],
  161. element
  162. }
  163. ],
  164. element
  165. }
  166. ],
  167. element
  168. },
  169. {
  170. level: 2,
  171. title: 'h2 - 2',
  172. link: '#h2-2',
  173. children: [
  174. {
  175. level: 3,
  176. title: 'h3 - 3',
  177. link: '#h3-3',
  178. children: [
  179. {
  180. level: 4,
  181. title: 'h4 - 3',
  182. link: '#h4-3',
  183. children: [],
  184. element
  185. }
  186. ],
  187. element
  188. }
  189. ],
  190. element
  191. }
  192. ])
  193. })
  194. })
  195. })