94 lines
2.4 KiB
JavaScript
94 lines
2.4 KiB
JavaScript
'use strict'
|
|
|
|
const os = require('os')
|
|
const { test } = require('tap')
|
|
const { sink, once } = require('./helper')
|
|
const pino = require('../')
|
|
|
|
const { pid } = process
|
|
const hostname = os.hostname()
|
|
|
|
function testEscape (ch, key) {
|
|
test('correctly escape ' + ch, async ({ same }) => {
|
|
const stream = sink()
|
|
const instance = pino({
|
|
name: 'hello'
|
|
}, stream)
|
|
instance.fatal('this contains ' + key)
|
|
const result = await once(stream, 'data')
|
|
delete result.time
|
|
same(result, {
|
|
pid: pid,
|
|
hostname: hostname,
|
|
level: 60,
|
|
name: 'hello',
|
|
msg: 'this contains ' + key,
|
|
v: 1
|
|
})
|
|
})
|
|
}
|
|
|
|
testEscape('\\n', '\n')
|
|
testEscape('\\/', '/')
|
|
testEscape('\\\\', '\\')
|
|
testEscape('\\r', '\r')
|
|
testEscape('\\t', '\t')
|
|
testEscape('\\b', '\b')
|
|
|
|
const toEscape = [
|
|
'\u0000', // NUL Null character
|
|
'\u0001', // SOH Start of Heading
|
|
'\u0002', // STX Start of Text
|
|
'\u0003', // ETX End-of-text character
|
|
'\u0004', // EOT End-of-transmission character
|
|
'\u0005', // ENQ Enquiry character
|
|
'\u0006', // ACK Acknowledge character
|
|
'\u0007', // BEL Bell character
|
|
'\u0008', // BS Backspace
|
|
'\u0009', // HT Horizontal tab
|
|
'\u000A', // LF Line feed
|
|
'\u000B', // VT Vertical tab
|
|
'\u000C', // FF Form feed
|
|
'\u000D', // CR Carriage return
|
|
'\u000E', // SO Shift Out
|
|
'\u000F', // SI Shift In
|
|
'\u0010', // DLE Data Link Escape
|
|
'\u0011', // DC1 Device Control 1
|
|
'\u0012', // DC2 Device Control 2
|
|
'\u0013', // DC3 Device Control 3
|
|
'\u0014', // DC4 Device Control 4
|
|
'\u0015', // NAK Negative-acknowledge character
|
|
'\u0016', // SYN Synchronous Idle
|
|
'\u0017', // ETB End of Transmission Block
|
|
'\u0018', // CAN Cancel character
|
|
'\u0019', // EM End of Medium
|
|
'\u001A', // SUB Substitute character
|
|
'\u001B', // ESC Escape character
|
|
'\u001C', // FS File Separator
|
|
'\u001D', // GS Group Separator
|
|
'\u001E', // RS Record Separator
|
|
'\u001F' // US Unit Separator
|
|
]
|
|
|
|
toEscape.forEach((key) => {
|
|
testEscape(JSON.stringify(key), key)
|
|
})
|
|
|
|
test('correctly escape `hello \\u001F world \\n \\u0022`', async ({ same }) => {
|
|
const stream = sink()
|
|
const instance = pino({
|
|
name: 'hello'
|
|
}, stream)
|
|
instance.fatal('hello \u001F world \n \u0022')
|
|
const result = await once(stream, 'data')
|
|
delete result.time
|
|
same(result, {
|
|
pid: pid,
|
|
hostname: hostname,
|
|
level: 60,
|
|
name: 'hello',
|
|
msg: 'hello \u001F world \n \u0022',
|
|
v: 1
|
|
})
|
|
})
|