text: var tap = require('tap')
  var read = require('../lib/read.js')
  
  if (process.argv[2] === 'child') {
    return child()
  }
  
  var CLOSE = 'close'
  if (process.version.match(/^v0\.6/)) {
    CLOSE = 'exit'
  }
  
  var spawn = require('child_process').spawn
  
  tap.test('basic', function (t) {
    var child = spawn(process.execPath, [__filename, 'child'])
    var output = ''
    var write = child.stdin.write.bind(child.stdin)
    child.stdout.on('data', function (c) {
      console.error('data %s', c)
      output += c
      if (output.match(/Username: \(test-user\) $/)) {
        process.nextTick(write.bind(null, 'a user\n'))
      } else if (output.match(/Password: \(<default hidden>\) $/)) {
        process.nextTick(write.bind(null, 'a password\n'))
      } else if (output.match(/Password again: \(<default hidden>\) $/)) {
        process.nextTick(write.bind(null, 'a password\n'))
      } else {
        console.error('prompts done, output=%j', output)
      }
    })
  
    var result = ''
    child.stderr.on('data', function (c) {
      result += c
      console.error('result %j', c.toString())
    })
  
    child.on(CLOSE, function () {
      result = JSON.parse(result)
      t.same(result, {"user":"a user","pass":"a password","verify":"a password","passMatch":true})
      t.equal(output, 'Username: (test-user) Password: (<default hidden>) Password again: (<default hidden>) ')
      t.end()
    })
  })
  
  function child () {
    read({prompt: "Username: ", default: "test-user" }, function (er, user) {
      read({prompt: "Password: ", default: "test-pass", silent: true }, function (er, pass) {
        read({prompt: "Password again: ", default: "test-pass", silent: true }, function (er, pass2) {
          console.error(JSON.stringify({user: user,
                         pass: pass,
                         verify: pass2,
                         passMatch: (pass === pass2)}))
        })
      })
    })
  }
  