var test = require('tap').test
var path = require('path')
var npm = path.resolve(__dirname, '../../cli.js')
var pkg = __dirname + '/scripts-whitespace-windows'
var tmp = pkg + '/tmp'
var cache = pkg + '/cache'
var modules = pkg + '/node_modules'
var dep = pkg + '/dep'

var mkdirp = require('mkdirp')
var rimraf = require('rimraf')
var node = process.execPath
var spawn = require('child_process').spawn

test('setup', function (t) {
  mkdirp.sync(cache)
  mkdirp.sync(tmp)
  rimraf.sync(modules)

  var env = {
    npm_config_cache: cache,
    npm_config_tmp: tmp,
    npm_config_prefix: pkg,
    npm_config_global: 'false'
  }

  var child = spawn(node, [npm, 'i', dep], {
    cwd: pkg,
    env: env
  })

  child.stdout.setEncoding('utf8')
  // FIXME: npm@1.4.29 always prints a deprecation banner to stdout
  // child.stderr.on('data', function(chunk) {
  //   throw new Error('got stderr data: ' + JSON.stringify('' + chunk))
  // })
  child.on('close', function () {
    t.end()
  })
})

test('test', function (t) {

  var child = spawn(node, [npm, 'run', 'foo'], {
    cwd: pkg,
    env: process.env
  })

  child.stdout.setEncoding('utf8')
  // FIXME: npm@1.4.29 always prints a deprecation banner to stdout
  // child.stderr.on('data', function(chunk) {
  //   throw new Error('got stderr data: ' + JSON.stringify('' + chunk))
  // })
  child.stdout.on('data', ondata)
  child.on('close', onend)
  var c = ''
  function ondata (chunk) {
    c += chunk
  }
  function onend () {
    c = c.trim()

    t.ok(/npm-test-fine/.test(c))
    t.end()
  }
})

test('cleanup', function (t) {
  rimraf.sync(cache)
  rimraf.sync(tmp)
  rimraf.sync(modules)
  t.end()
})
