var tap = require('tap') var log = require('../') var result = [] var logEvents = [] var logInfoEvents = [] var logPrefixEvents = [] var util = require('util') var resultExpect = [ '\u001b[37m', '\u001b[40m', 'npm', '\u001b[0m', ' ', '\u001b[0m', '\u001b[7m', 'sill', '\u001b[0m', ' ', '\u001b[0m', '\u001b[35m', 'silly prefix', '\u001b[0m', ' x = {"foo":{"bar":"baz"}}\n', '\u001b[0m', '\u001b[37m', '\u001b[40m', 'npm', '\u001b[0m', ' ', '\u001b[0m', '\u001b[34m', '\u001b[40m', 'verb', '\u001b[0m', ' ', '\u001b[0m', '\u001b[35m', 'verbose prefix', '\u001b[0m', ' x = {"foo":{"bar":"baz"}}\n', '\u001b[0m', '\u001b[37m', '\u001b[40m', 'npm', '\u001b[0m', ' ', '\u001b[0m', '\u001b[32m', '\u001b[7m', 'info', '\u001b[0m', ' ', '\u001b[0m', '\u001b[35m', 'info prefix', '\u001b[0m', ' x = {"foo":{"bar":"baz"}}\n', '\u001b[0m', '\u001b[37m', '\u001b[40m', 'npm', '\u001b[0m', ' ', '\u001b[0m', '\u001b[32m', 'http', '\u001b[0m', ' ', '\u001b[0m', '\u001b[35m', 'http prefix', '\u001b[0m', ' x = {"foo":{"bar":"baz"}}\n', '\u001b[0m', '\u001b[37m', '\u001b[40m', 'npm', '\u001b[0m', ' ', '\u001b[0m', '\u001b[30m', '\u001b[41m', 'WARN', '\u001b[0m', ' ', '\u001b[0m', '\u001b[33m', 'warn prefix', '\u001b[0m', ' x = {"foo":{"bar":"baz"}}\n', '\u001b[0m', '\u001b[37m', '\u001b[40m', 'npm', '\u001b[0m', ' ', '\u001b[0m', '\u001b[31m', '\u001b[40m', 'ERR!', '\u001b[0m', ' ', '\u001b[0m', '\u001b[35m', 'error prefix', '\u001b[0m', ' x = {"foo":{"bar":"baz"}}\n', '\u001b[0m', '\u001b[37m', '\u001b[40m', 'npm', '\u001b[0m', ' ', '\u001b[0m', '\u001b[32m', '\u001b[7m', 'info', '\u001b[0m', ' ', '\u001b[0m', '\u001b[35m', 'info prefix', '\u001b[0m', ' x = {"foo":{"bar":"baz"}}\n', '\u001b[0m', '\u001b[37m', '\u001b[40m', 'npm', '\u001b[0m', ' ', '\u001b[0m', '\u001b[32m', 'http', '\u001b[0m', ' ', '\u001b[0m', '\u001b[35m', 'http prefix', '\u001b[0m', ' x = {"foo":{"bar":"baz"}}\n', '\u001b[0m', '\u001b[37m', '\u001b[40m', 'npm', '\u001b[0m', ' ', '\u001b[0m', '\u001b[30m', '\u001b[41m', 'WARN', '\u001b[0m', ' ', '\u001b[0m', '\u001b[35m', 'warn prefix', '\u001b[0m', ' x = {"foo":{"bar":"baz"}}\n', '\u001b[0m', '\u001b[37m', '\u001b[40m', 'npm', '\u001b[0m', ' ', '\u001b[0m', '\u001b[31m', '\u001b[40m', 'ERR!', '\u001b[0m', ' ', '\u001b[0m', '\u001b[35m', 'error prefix', '\u001b[0m', ' x = {"foo":{"bar":"baz"}}\n', '\u001b[0m', '\u001b[37m', '\u001b[40m', 'npm', '\u001b[0m', ' ', '\u001b[0m', '\u001b[31m', '\u001b[40m', 'ERR!', '\u001b[0m', ' ', '\u001b[0m', '\u001b[35m', '404', '\u001b[0m', ' This is a longer\n', '\u001b[0m', '\u001b[37m', '\u001b[40m', 'npm', '\u001b[0m', ' ', '\u001b[0m', '\u001b[31m', '\u001b[40m', 'ERR!', '\u001b[0m', ' ', '\u001b[0m', '\u001b[35m', '404', '\u001b[0m', ' message, with some details\n', '\u001b[0m', '\u001b[37m', '\u001b[40m', 'npm', '\u001b[0m', ' ', '\u001b[0m', '\u001b[31m', '\u001b[40m', 'ERR!', '\u001b[0m', ' ', '\u001b[0m', '\u001b[35m', '404', '\u001b[0m', ' and maybe a stack.\n', '\u001b[0m', '\u001b[37m', '\u001b[40m', 'npm', '\u001b[0m', ' ', '\u001b[0m', '\u001b[31m', '\u001b[40m', 'ERR!', '\u001b[0m', ' ', '\u001b[0m', '\u001b[35m', '404', '\u001b[0m', ' \n', '\u001b[0m', '\u001b[37m', '\u001b[40m', 'npm', '\u001b[0m', ' ', '\u001b[0m', '\u0007', 'noise', '\u001b[0m', '\u001b[35m', '', '\u001b[0m', ' LOUD NOISES\n', '\u001b[0m' ] var logPrefixEventsExpect = [ { id: 2, level: 'info', prefix: 'info prefix', message: 'x = {"foo":{"bar":"baz"}}', messageRaw: [ 'x = %j', { foo: { bar: 'baz' } } ] }, { id: 9, level: 'info', prefix: 'info prefix', message: 'x = {"foo":{"bar":"baz"}}', messageRaw: [ 'x = %j', { foo: { bar: 'baz' } } ] }, { id: 16, level: 'info', prefix: 'info prefix', message: 'x = {"foo":{"bar":"baz"}}', messageRaw: [ 'x = %j', { foo: { bar: 'baz' } } ] } ] // should be the same. var logInfoEventsExpect = logPrefixEventsExpect var logEventsExpect = [ { id: 0, level: 'silly', prefix: 'silly prefix', message: 'x = {"foo":{"bar":"baz"}}', messageRaw: [ 'x = %j', { foo: { bar: 'baz' } } ] }, { id: 1, level: 'verbose', prefix: 'verbose prefix', message: 'x = {"foo":{"bar":"baz"}}', messageRaw: [ 'x = %j', { foo: { bar: 'baz' } } ] }, { id: 2, level: 'info', prefix: 'info prefix', message: 'x = {"foo":{"bar":"baz"}}', messageRaw: [ 'x = %j', { foo: { bar: 'baz' } } ] }, { id: 3, level: 'http', prefix: 'http prefix', message: 'x = {"foo":{"bar":"baz"}}', messageRaw: [ 'x = %j', { foo: { bar: 'baz' } } ] }, { id: 4, level: 'warn', prefix: 'warn prefix', message: 'x = {"foo":{"bar":"baz"}}', messageRaw: [ 'x = %j', { foo: { bar: 'baz' } } ] }, { id: 5, level: 'error', prefix: 'error prefix', message: 'x = {"foo":{"bar":"baz"}}', messageRaw: [ 'x = %j', { foo: { bar: 'baz' } } ] }, { id: 6, level: 'silent', prefix: 'silent prefix', message: 'x = {"foo":{"bar":"baz"}}', messageRaw: [ 'x = %j', { foo: { bar: 'baz' } } ] }, { id: 7, level: 'silly', prefix: 'silly prefix', message: 'x = {"foo":{"bar":"baz"}}', messageRaw: [ 'x = %j', { foo: { bar: 'baz' } } ] }, { id: 8, level: 'verbose', prefix: 'verbose prefix', message: 'x = {"foo":{"bar":"baz"}}', messageRaw: [ 'x = %j', { foo: { bar: 'baz' } } ] }, { id: 9, level: 'info', prefix: 'info prefix', message: 'x = {"foo":{"bar":"baz"}}', messageRaw: [ 'x = %j', { foo: { bar: 'baz' } } ] }, { id: 10, level: 'http', prefix: 'http prefix', message: 'x = {"foo":{"bar":"baz"}}', messageRaw: [ 'x = %j', { foo: { bar: 'baz' } } ] }, { id: 11, level: 'warn', prefix: 'warn prefix', message: 'x = {"foo":{"bar":"baz"}}', messageRaw: [ 'x = %j', { foo: { bar: 'baz' } } ] }, { id: 12, level: 'error', prefix: 'error prefix', message: 'x = {"foo":{"bar":"baz"}}', messageRaw: [ 'x = %j', { foo: { bar: 'baz' } } ] }, { id: 13, level: 'silent', prefix: 'silent prefix', message: 'x = {"foo":{"bar":"baz"}}', messageRaw: [ 'x = %j', { foo: { bar: 'baz' } } ] }, { id: 14, level: 'silly', prefix: 'silly prefix', message: 'x = {"foo":{"bar":"baz"}}', messageRaw: [ 'x = %j', { foo: { bar: 'baz' } } ] }, { id: 15, level: 'verbose', prefix: 'verbose prefix', message: 'x = {"foo":{"bar":"baz"}}', messageRaw: [ 'x = %j', { foo: { bar: 'baz' } } ] }, { id: 16, level: 'info', prefix: 'info prefix', message: 'x = {"foo":{"bar":"baz"}}', messageRaw: [ 'x = %j', { foo: { bar: 'baz' } } ] }, { id: 17, level: 'http', prefix: 'http prefix', message: 'x = {"foo":{"bar":"baz"}}', messageRaw: [ 'x = %j', { foo: { bar: 'baz' } } ] }, { id: 18, level: 'warn', prefix: 'warn prefix', message: 'x = {"foo":{"bar":"baz"}}', messageRaw: [ 'x = %j', { foo: { bar: 'baz' } } ] }, { id: 19, level: 'error', prefix: 'error prefix', message: 'x = {"foo":{"bar":"baz"}}', messageRaw: [ 'x = %j', { foo: { bar: 'baz' } } ] }, { id: 20, level: 'silent', prefix: 'silent prefix', message: 'x = {"foo":{"bar":"baz"}}', messageRaw: [ 'x = %j', { foo: { bar: 'baz' } } ] }, { id: 21, level: 'error', prefix: '404', message: 'This is a longer\nmessage, with some details\nand maybe a stack.\n', messageRaw: [ 'This is a longer\nmessage, with some details\nand maybe a stack.\n' ] }, { id: 22, level: 'noise', prefix: false, message: 'LOUD NOISES', messageRaw: [ 'LOUD NOISES' ] } ] var Stream = require('stream').Stream var s = new Stream() s.write = function (m) { result.push(m) } s.writable = true s.isTTY = true s.end = function () {} log.stream = s log.heading = 'npm' tap.test('basic', function (t) { log.on('log', logEvents.push.bind(logEvents)) log.on('log.info', logInfoEvents.push.bind(logInfoEvents)) log.on('info prefix', logPrefixEvents.push.bind(logPrefixEvents)) console.error('log.level=silly') log.level = 'silly' log.silly('silly prefix', 'x = %j', {foo:{bar:'baz'}}) log.verbose('verbose prefix', 'x = %j', {foo:{bar:'baz'}}) log.info('info prefix', 'x = %j', {foo:{bar:'baz'}}) log.http('http prefix', 'x = %j', {foo:{bar:'baz'}}) log.warn('warn prefix', 'x = %j', {foo:{bar:'baz'}}) log.error('error prefix', 'x = %j', {foo:{bar:'baz'}}) log.silent('silent prefix', 'x = %j', {foo:{bar:'baz'}}) console.error('log.level=silent') log.level = 'silent' log.silly('silly prefix', 'x = %j', {foo:{bar:'baz'}}) log.verbose('verbose prefix', 'x = %j', {foo:{bar:'baz'}}) log.info('info prefix', 'x = %j', {foo:{bar:'baz'}}) log.http('http prefix', 'x = %j', {foo:{bar:'baz'}}) log.warn('warn prefix', 'x = %j', {foo:{bar:'baz'}}) log.error('error prefix', 'x = %j', {foo:{bar:'baz'}}) log.silent('silent prefix', 'x = %j', {foo:{bar:'baz'}}) console.error('log.level=info') log.level = 'info' log.silly('silly prefix', 'x = %j', {foo:{bar:'baz'}}) log.verbose('verbose prefix', 'x = %j', {foo:{bar:'baz'}}) log.info('info prefix', 'x = %j', {foo:{bar:'baz'}}) log.http('http prefix', 'x = %j', {foo:{bar:'baz'}}) log.warn('warn prefix', 'x = %j', {foo:{bar:'baz'}}) log.error('error prefix', 'x = %j', {foo:{bar:'baz'}}) log.silent('silent prefix', 'x = %j', {foo:{bar:'baz'}}) log.error('404', 'This is a longer\n'+ 'message, with some details\n'+ 'and maybe a stack.\n') log.addLevel('noise', 10000, {beep: true}) log.noise(false, 'LOUD NOISES') t.deepEqual(result, resultExpect, 'result') t.deepEqual(log.record, logEventsExpect, 'record') t.deepEqual(logEvents, logEventsExpect, 'logEvents') t.deepEqual(logInfoEvents, logInfoEventsExpect, 'logInfoEvents') t.deepEqual(logPrefixEvents, logPrefixEventsExpect, 'logPrefixEvents') t.end() })