wangzhibo
2026-05-09 53418655c061ac26f66058253f39200aced1ab1d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
'use strict'
 
const tap = require('tap')
const escapeValue = require('./escape-value')
 
tap.test('throws for bad input', async t => {
  t.throws(
    () => escapeValue(42),
    Error('value must be a string')
  )
})
 
tap.test('reserved chars', t => {
  t.test('space', async t => {
    const input = ' has a leading and trailing space '
    const expected = '\\20has a leading and trailing space\\20'
    const result = escapeValue(input)
    t.equal(result, expected)
  })
 
  t.test('leading #', async t => {
    t.equal(escapeValue('#hashtag'), '\\23hashtag')
  })
 
  t.test('pompous name', async t => {
    t.equal(
      escapeValue('James "Jim" Smith, III'),
      'James \\22Jim\\22 Smith\\2c III'
    )
  })
 
  t.test('carriage return', async t => {
    t.equal(escapeValue('Before\rAfter'), 'Before\\0dAfter')
  })
 
  t.end()
})
 
tap.test('2-byte utf-8', t => {
  t.test('Lučić', async t => {
    const expected = 'Lu\\c4\\8di\\c4\\87'
    t.equal(escapeValue('Lučić'), expected)
  })
 
  t.end()
})
 
tap.test('3-byte utf-8', t => {
  t.test('₠', async t => {
    t.equal(escapeValue('₠'), '\\e2\\82\\a0')
  })
 
  t.end()
})
 
tap.test('4-byte utf-8', t => {
  t.test('😀', async t => {
    t.equal(escapeValue('😀'), '\\f0\\9f\\98\\80')
  })
 
  t.end()
})