/* * Copyright (c) 2012 Trent Mick. All rights reserved. * * Make sure cycles are safe. */ var Logger = require('../lib/bunyan.js'); // node-tap API if (require.cache[__dirname + '/tap4nodeunit.js']) delete require.cache[__dirname + '/tap4nodeunit.js']; var tap4nodeunit = require('./tap4nodeunit.js'); var after = tap4nodeunit.after; var before = tap4nodeunit.before; var test = tap4nodeunit.test; var Stream = require('stream').Stream; var outstr = new Stream; outstr.writable = true; var output = []; outstr.write = function (c) { output.push(JSON.parse(c + '')); }; outstr.end = function (c) { if (c) this.write(c); this.emit('end'); }; // these are lacking a few fields that will probably never match var expect = [ { "name": "blammo", "level": 30, "msg": "bango { bang: 'boom', KABOOM: [Circular] }", "v": 0 }, { "name": "blammo", "level": 30, "msg": "kaboom { bang: 'boom', KABOOM: [Circular] }", "v": 0 }, { "name": "blammo", "level": 30, "bang": "boom", "KABOOM": { "bang": "boom", "KABOOM": "[Circular]" }, "msg": "", "v": 0 } ]; var log = new Logger({ name: 'blammo', streams: [ { type: 'stream', level: 'info', stream: outstr } ] }); test('cycles', function (t) { outstr.on('end', function () { output.forEach(function (o, i) { // Drop variable parts for comparison. delete o.hostname; delete o.pid; delete o.time; // Hack object/dict comparison: JSONify. t.equal(JSON.stringify(o), JSON.stringify(expect[i]), 'log item ' + i + ' matches'); }); t.end(); }); var obj = { bang: 'boom' }; obj.KABOOM = obj; log.info('bango', obj); log.info('kaboom', obj.KABOOM); log.info(obj); outstr.end(); t.ok('did not throw'); });