/*
 * Copyright (c) 2012 Trent Mick. All rights reserved.
 * Copyright (c) 2012 Joyent Inc. All rights reserved.
 *
 * Test logging with (accidental) usage of buffers.
 */

var util = require('util'),
    inspect = util.inspect,
    format = util.format;
var bunyan = require('../lib/bunyan');

// 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;



function Catcher() {
    this.records = [];
}
Catcher.prototype.write = function (record) {
    this.records.push(record);
}

var catcher = new Catcher();
var log = new bunyan.createLogger({
    name: 'buffer.test',
    streams: [
        {
            type: 'raw',
            stream: catcher,
            level: 'trace'
        }
    ]
});


test('log.info(BUFFER)', function (t) {
    var b = new Buffer('foo');

    ['trace',
     'debug',
     'info',
     'warn',
     'error',
     'fatal'].forEach(function (lvl) {
        log[lvl].call(log, b);
        var rec = catcher.records[catcher.records.length - 1];
        t.equal(rec.msg, inspect(b),
            format('log.%s msg is inspect(BUFFER)', lvl));
        t.ok(rec['0'] === undefined,
            'no "0" array index key in record: ' + inspect(rec['0']));
        t.ok(rec['parent'] === undefined,
            'no "parent" array index key in record: ' + inspect(rec['parent']));

        log[lvl].call(log, b, 'bar');
        var rec = catcher.records[catcher.records.length - 1];
        t.equal(rec.msg, inspect(b) + ' bar', format(
            'log.%s(BUFFER, "bar") msg is inspect(BUFFER) + " bar"', lvl));
    });

    t.end();
});


//test('log.info({buf: BUFFER})', function (t) {
//  var b = new Buffer('foo');
//
//  // Really there isn't much Bunyan can do here. See
//  // <https://github.com/joyent/node/issues/3905>. An unwelcome hack would
//  // be to monkey-patch in Buffer.toJSON. Bletch.
//  log.info({buf: b}, 'my message');
//  var rec = catcher.records[catcher.records.length - 1];
//
//  t.end();
//});