front-matter.test.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import { test } from 'node:test'
  2. import assert from 'node:assert/strict'
  3. import { parseFrontMatter } from '../../../src/storage/parsers/front-matter.js'
  4. test('正常路径:含 front matter 的章节文件', () => {
  5. const content = `---
  6. 章号: 1
  7. 标题: 测试章节
  8. ---
  9. 这是正文内容。`
  10. const result = parseFrontMatter(content)
  11. assert.equal(result.ok, true)
  12. assert.equal(result.data.章号, 1)
  13. assert.equal(result.data.标题, '测试章节')
  14. assert.equal(result.body, '这是正文内容。')
  15. assert.equal(result.error, '')
  16. })
  17. test('边界:无 front matter', () => {
  18. const content = '直接是正文,没有 front matter'
  19. const result = parseFrontMatter(content)
  20. assert.equal(result.ok, false)
  21. assert.ok(result.error.includes('缺少 front matter 分隔符'))
  22. assert.equal(result.body, content)
  23. })
  24. test('边界:单个 --- 不配对', () => {
  25. const content = `---
  26. 章号: 1
  27. 标题: 测试`
  28. const result = parseFrontMatter(content)
  29. assert.equal(result.ok, false)
  30. assert.ok(result.error.includes('不配对'))
  31. })
  32. test('边界:YAML 语法错误', () => {
  33. const content = `---
  34. 章号: 1
  35. 标题: 测试
  36. 错误缩进
  37. 子项
  38. ---
  39. 正文`
  40. const result = parseFrontMatter(content)
  41. assert.equal(result.ok, false)
  42. assert.ok(result.error.includes('YAML 解析失败'))
  43. })
  44. test('容错:前面有空行', () => {
  45. const content = `
  46. ---
  47. 章号: 1
  48. ---
  49. 正文`
  50. const result = parseFrontMatter(content)
  51. assert.equal(result.ok, true)
  52. assert.equal(result.data.章号, 1)
  53. })
  54. test('容错:非字符串输入', () => {
  55. const result = parseFrontMatter(null)
  56. assert.equal(result.ok, false)
  57. assert.ok(result.error.includes('必须是字符串'))
  58. })