'use strict';

var assert = require('assert');
var stream = require('stream');
var hash = require('../index');

describe('replacer option', function() {
  it('should emit information about an object to a stream', function() {
    var strm = new stream.PassThrough();
    
    var replacer = function(value) {
      try {
        return JSON.stringify(value);
      } catch (e) {
        return value;
      }
    };
    
    var obj = {foo: 'bar'};
    hash.writeToStream(obj, {replacer: replacer}, strm);
    var result = strm.read().toString();
    assert.strictEqual(typeof result, 'string');
    assert.notStrictEqual(result.indexOf(JSON.stringify(obj)), -1);
  });

  it('should not reach property values when excludeValues = true', function() {
    var strm = new stream.PassThrough();
    
    var replacer = function(k) {
      assert.notStrictEqual(k, 'bar');
      return k;
    };
    
    hash.writeToStream({foo: 'bar'}, {excludeValues: true}, strm);
  });
});