1
0

yaml-dialect.test.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import { test } from 'node:test'
  2. import assert from 'node:assert/strict'
  3. import { serializeYAML } from '../../../src/storage/serializers/yaml-dialect.js'
  4. test('列表输出块格式', () => {
  5. const data = { 伏笔: ['伏笔-001', '伏笔-002'] }
  6. const yaml = serializeYAML(data)
  7. assert.ok(yaml.includes('伏笔:\n - 伏笔-001\n - 伏笔-002'))
  8. assert.ok(!yaml.includes('[伏笔-001, 伏笔-002]'))
  9. })
  10. test('危险值加引号:数字串', () => {
  11. const data = { 章号: '123' }
  12. const yaml = serializeYAML(data)
  13. assert.ok(yaml.includes('章号: "123"'))
  14. })
  15. test('危险值加引号:布尔字面值', () => {
  16. const data = { 开关: 'true', 标志: 'false' }
  17. const yaml = serializeYAML(data)
  18. assert.ok(yaml.includes('开关: "true"'))
  19. assert.ok(yaml.includes('标志: "false"'))
  20. })
  21. test('危险值加引号:null 字面值', () => {
  22. const data = { 值: 'null' }
  23. const yaml = serializeYAML(data)
  24. assert.ok(yaml.includes('值: "null"'))
  25. })
  26. test('危险值加引号:含冒号', () => {
  27. const data = { 标题: '包含:冒号' }
  28. const yaml = serializeYAML(data)
  29. assert.ok(yaml.includes('标题: "包含:冒号"'))
  30. })
  31. test('危险值加引号:以 # 或 - 开头', () => {
  32. const data = { 注释: '#comment', 项: '-item' }
  33. const yaml = serializeYAML(data)
  34. assert.ok(yaml.includes('注释: "#comment"'))
  35. assert.ok(yaml.includes('项: "-item"'))
  36. })
  37. test('正常字符串不加引号', () => {
  38. const data = { 标题: '测试章节', 视角: '林晚' }
  39. const yaml = serializeYAML(data)
  40. assert.ok(yaml.includes('标题: 测试章节'))
  41. assert.ok(yaml.includes('视角: 林晚'))
  42. })
  43. test('数字和布尔值正常输出', () => {
  44. const data = { 章号: 1, 字数: 3000, 开关: true }
  45. const yaml = serializeYAML(data)
  46. assert.ok(yaml.includes('章号: 1'))
  47. assert.ok(yaml.includes('字数: 3000'))
  48. assert.ok(yaml.includes('开关: true'))
  49. })
  50. test('嵌套映射抛错', () => {
  51. const data = { 外层: { 内层: '值' } }
  52. assert.throws(() => {
  53. serializeYAML(data)
  54. }, /禁止嵌套映射/)
  55. })
  56. test('空数组', () => {
  57. const data = { 列表: [] }
  58. const yaml = serializeYAML(data)
  59. assert.equal(yaml, '列表:')
  60. })
  61. test('混合字段', () => {
  62. const data = {
  63. 章号: 1,
  64. 标题: '测试',
  65. 伏笔: ['伏笔-001', '伏笔-002'],
  66. 危险数字: '123',
  67. }
  68. const yaml = serializeYAML(data)
  69. assert.ok(yaml.includes('章号: 1'))
  70. assert.ok(yaml.includes('标题: 测试'))
  71. assert.ok(yaml.includes('伏笔:\n - 伏笔-001'))
  72. assert.ok(yaml.includes('危险数字: "123"'))
  73. })