Name: js-handler/node_modules/restify/node_modules/bunyan/test/cycles.test.js 
1:
/*
2:
 * Copyright (c) 2012 Trent Mick. All rights reserved.
3:
 *
4:
 * Make sure cycles are safe.
5:
 */
6:
 
7:
var Logger = require('../lib/bunyan.js');
8:
 
9:
// node-tap API
10:
if (require.cache[__dirname + '/tap4nodeunit.js'])
11:
        delete require.cache[__dirname + '/tap4nodeunit.js'];
12:
var tap4nodeunit = require('./tap4nodeunit.js');
13:
var after = tap4nodeunit.after;
14:
var before = tap4nodeunit.before;
15:
var test = tap4nodeunit.test;
16:
 
17:
 
18:
var Stream = require('stream').Stream;
19:
var outstr = new Stream;
20:
outstr.writable = true;
21:
var output = [];
22:
outstr.write = function (c) {
23:
    output.push(JSON.parse(c + ''));
24:
};
25:
outstr.end = function (c) {
26:
    if (c) this.write(c);
27:
    this.emit('end');
28:
};
29:
 
30:
// these are lacking a few fields that will probably never match
31:
var expect =
32:
        [
33:
            {
34:
                'name': 'blammo',
35:
                'level': 30,
36:
                'msg': 'bango { bang: \'boom\', KABOOM: [Circular] }',
37:
                'v': 0
38:
            },
39:
            {
40:
                'name': 'blammo',
41:
                'level': 30,
42:
                'msg': 'kaboom { bang: \'boom\', KABOOM: [Circular] }',
43:
                'v': 0
44:
            },
45:
            {
46:
                'name': 'blammo',
47:
                'level': 30,
48:
                'bang': 'boom',
49:
                'KABOOM': {
50:
                    'bang': 'boom',
51:
                    'KABOOM': '[Circular]'
52:
                },
53:
                'msg': '',
54:
                'v': 0
55:
            }
56:
        ];
57:
 
58:
var log = new Logger({
59:
    name: 'blammo',
60:
    streams: [
61:
        {
62:
            type: 'stream',
63:
            level: 'info',
64:
            stream: outstr
65:
        }
66:
    ]
67:
});
68:
 
69:
test('cycles', function (t) {
70:
    outstr.on('end', function () {
71:
        output.forEach(function (o, i) {
72:
            // Drop variable parts for comparison.
73:
            delete o.hostname;
74:
            delete o.pid;
75:
            delete o.time;
76:
            // Hack object/dict comparison: JSONify.
77:
            t.equal(JSON.stringify(o), JSON.stringify(expect[i]),
78:
                'log item ' + i + ' matches');
79:
        });
80:
        t.end();
81:
    });
82:
 
83:
    var obj = { bang: 'boom' };
84:
    obj.KABOOM = obj;
85:
    log.info('bango', obj);
86:
    log.info('kaboom', obj.KABOOM);
87:
    log.info(obj);
88:
    outstr.end();
89:
    t.ok('did not throw');
90:
});