text: /*
   * helpers.js: Test helpers for nconf.
   *
   * (C) 2011, Charlie Robbins and the Contributors.
   *
   */
  
  var assert = require('assert'),
      spawn = require('child_process').spawn,
      fs = require('fs'),
      path = require('path'),
      nconf = require('../lib/nconf');
  
  exports.assertMerged = function (err, merged) {
    merged = merged instanceof nconf.Provider
      ? merged.store.store
      : merged;
  
    assert.isNull(err);
    assert.isObject(merged);
    assert.isTrue(merged.apples);
    assert.isTrue(merged.bananas);
    assert.isObject(merged.candy);
    assert.isTrue(merged.candy.something1);
    assert.isTrue(merged.candy.something2);
    assert.isTrue(merged.candy.something3);
    assert.isTrue(merged.candy.something4);
    assert.isTrue(merged.dates);
    assert.isTrue(merged.elderberries);
  };
  
  exports.assertSystemConf = function (options) {
    return {
      topic: function () {
        var env = null;
  
        if (options.env) {
          env = {}
          Object.keys(process.env).forEach(function (key) {
            env[key] = process.env[key];
          });
  
          Object.keys(options.env).forEach(function (key) {
            env[key] = options.env[key];
          });
        }
  
        var child = spawn('node', [options.script].concat(options.argv), { env: env });
        child.stdout.once('data', that.callback.bind(that, null));
      },
      "should respond with the value passed into the script": function (_, data) {
        assert.equal(data.toString(), 'foobar');
      }
    }
  }
  
  // copy a file
  exports.cp = function (from, to, callback) {
    fs.readFile(from, function (err, data) {
      if (err) return callback(err);
      fs.writeFile(to, data, callback);
    });
  };
  
  exports.fixture = function (file) {
    return path.join(__dirname, 'fixtures', file);
  };
  