 _ = require 'underscore-plus'
 async = require 'async'
 
-# TODO: This should really be parallel on every platform, however:
-# - On Windows, our fixtures step on each others toes.
-if process.platform is 'win32'
-  concurrency = 1
-else
-  concurrency = 2
-
 module.exports = (grunt) ->
   {isAtomPackage, spawn} = require('./task-helpers')(grunt)
 
   packageSpecQueue = null
 
-  logDeprecations = (label, {stderr}={}) ->
-    stderr ?= ''
-    deprecatedStart = stderr.indexOf('Calls to deprecated functions')
-    return if deprecatedStart is -1
-
-    grunt.log.error(label)
-    stderr = stderr.substring(deprecatedStart)
-    stderr = stderr.replace(/^\s*\[[^\]]+\]\s+/gm, '')
-    stderr = stderr.replace(/source: .*$/gm, '')
-    stderr = stderr.replace(/^"/gm, '')
-    stderr = stderr.replace(/",\s*$/gm, '')
-    grunt.log.error(stderr)
-
   getAppPath = ->
     contentsDir = grunt.config.get('atom.contentsDir')
-    switch process.platform
-      when 'darwin'
-        path.join(contentsDir, 'MacOS', 'Atom')
-      when 'linux'
-        path.join(contentsDir, 'atom')
-      when 'win32'
-        path.join(contentsDir, 'atom.exe')
+    path.join(contentsDir, 'MacOS', 'Atom')
 
   runPackageSpecs = (callback) ->
     failedPackages = []

        [coreSpecFailed, failedPackages] = results

      elapsedTime = Math.round((Date.now() - startTime) / 100) / 10
      grunt.log.ok("Total spec time: #{elapsedTime}s using #{concurrency} cores")
      failures = failedPackages
      failures.push "atom core" if coreSpecFailed

      grunt.log.error("[Error]".red + " #{failures.join(', ')} spec(s) failed") if failures.length > 0

      if process.platform is 'win32' and process.env.JANKY_SHA1
        done()
      else
        done(not coreSpecFailed and failedPackages.length is 0)

      continue unless isAtomPackage(packagePath)
      packageSpecQueue.push(packagePath)

    packageSpecQueue.concurrency = 1
    packageSpecQueue.drain = -> callback(null, failedPackages)

  runCoreSpecs = (callback) ->
    appPath = getAppPath()
    resourcePath = process.cwd()
    coreSpecsPath = path.resolve('spec')

    options =
      cmd: appPath
      args: ['--test', "--resource-path=#{resourcePath}", coreSpecsPath, "--user-data-dir=#{temp.mkdirSync('atom-user-data-dir')}"]
      opts:
        env: _.extend({}, process.env, {ATOM_INTEGRATION_TESTS_ENABLED: true, ELECTRON_ENABLE_LOGGING: true})
        stdio: 'inherit'

    grunt.log.ok "Launching core specs."
    spawn options, (error, results) ->
      callback(null, error)

  grunt.registerTask 'run-specs', 'Run the specs', ->
    done = @async()
    startTime = Date.now()

    specs =
      if process.env.ATOM_SPECS_TASK is 'packages'
        [runPackageSpecs]
      else if process.env.ATOM_SPECS_TASK is 'core'
        [runCoreSpecs]
      else
        [runCoreSpecs, runPackageSpecs]

    async.series specs, (error, results) ->
      failedPackages = []
      coreSpecFailed = null

