You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
98 lines
2.4 KiB
98 lines
2.4 KiB
'use strict' |
|
|
|
var test = require('tap').test |
|
var pino = require('../') |
|
var sink = require('./helper').sink |
|
var os = require('os') |
|
|
|
var pid = process.pid |
|
var hostname = os.hostname() |
|
|
|
function testEscape (ch, key) { |
|
test('correctly escape ' + ch, function (t) { |
|
t.plan(1) |
|
|
|
var instance = pino({ |
|
name: 'hello' |
|
}, sink(function (chunk, enc, cb) { |
|
delete chunk.time |
|
t.deepEqual(chunk, { |
|
pid: pid, |
|
hostname: hostname, |
|
level: 60, |
|
name: 'hello', |
|
msg: 'this contains ' + key, |
|
v: 1 |
|
}) |
|
cb() |
|
})) |
|
|
|
instance.fatal('this contains ' + key) |
|
}) |
|
} |
|
|
|
testEscape('\\n', '\n') |
|
testEscape('\\/', '/') |
|
testEscape('\\\\', '\\') |
|
testEscape('\\r', '\r') |
|
testEscape('\\t', '\t') |
|
testEscape('\\b', '\b') |
|
|
|
var 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(function (key) { |
|
testEscape(JSON.stringify(key), key) |
|
}) |
|
|
|
test('correctly escape `hello \\u001F world \\n \\u0022`', function (t) { |
|
t.plan(1) |
|
var instance = pino({ |
|
name: 'hello' |
|
}, sink(function (chunk, enc, cb) { |
|
delete chunk.time |
|
t.deepEqual(chunk, { |
|
pid: pid, |
|
hostname: hostname, |
|
level: 60, |
|
name: 'hello', |
|
msg: 'hello \u001F world \n \u0022', |
|
v: 1 |
|
}) |
|
cb() |
|
})) |
|
|
|
instance.fatal('hello \u001F world \n \u0022') |
|
})
|
|
|