diff --git a/spec/jasmine-helper.coffee b/spec/jasmine-helper.coffee deleted file mode 100644 index 74e4a0384..000000000 --- a/spec/jasmine-helper.coffee +++ /dev/null @@ -1,59 +0,0 @@ -fs = require 'fs' - -module.exports.runSpecSuite = (specSuite, logFile, logErrors=true) -> - window[key] = value for key, value of require '../vendor/jasmine' - - {TerminalReporter} = require 'jasmine-tagged' - - disableFocusMethods() if process.env.JANKY_SHA1 or process.env.CI - - TimeReporter = require './time-reporter' - timeReporter = new TimeReporter() - - logStream = fs.openSync(logFile, 'w') if logFile? - log = (str) -> - if logStream? - fs.writeSync(logStream, str) - else - process.stderr.write(str) - - if atom.getLoadSettings().exitWhenDone - reporter = new TerminalReporter - print: (str) -> - log(str) - onComplete: (runner) -> - fs.closeSync(logStream) if logStream? - if process.env.JANKY_SHA1 or process.env.CI - grim = require 'grim' - - if grim.getDeprecationsLength() > 0 - grim.logDeprecations() - return atom.exit(1) - - if runner.results().failedCount > 0 - atom.exit(1) - else - atom.exit(0) - else - AtomReporter = require './atom-reporter' - reporter = new AtomReporter() - - require specSuite - - jasmineEnv = jasmine.getEnv() - jasmineEnv.addReporter(reporter) - jasmineEnv.addReporter(timeReporter) - jasmineEnv.setIncludedTags([process.platform]) - - jasmineContent = document.createElement('div') - jasmineContent.setAttribute('id', 'jasmine-content') - document.body.appendChild(jasmineContent) - - jasmineEnv.execute() - -disableFocusMethods = -> - ['fdescribe', 'ffdescribe', 'fffdescribe', 'fit', 'ffit', 'fffit'].forEach (methodName) -> - focusMethod = window[methodName] - window[methodName] = (description) -> - error = new Error('Focused spec is running on CI') - focusMethod description, -> throw error diff --git a/spec/jasmine-test-runner.coffee b/spec/jasmine-test-runner.coffee new file mode 100644 index 000000000..a85e3a8a2 --- /dev/null +++ b/spec/jasmine-test-runner.coffee @@ -0,0 +1,85 @@ +fs = require 'fs' +_ = require 'underscore-plus' +fs = require 'fs-plus' +path = require 'path' + +module.exports = ({logFile, exitWhenDone, testPaths}) -> + window[key] = value for key, value of require '../vendor/jasmine' + require 'jasmine-tagged' + + require './spec-helper' + disableFocusMethods() if process.env.JANKY_SHA1 or process.env.CI + requireSpecs(testPath) for testPath in testPaths + + setSpecType('user') + + jasmineEnv = jasmine.getEnv() + jasmineEnv.addReporter(buildReporter({logFile, exitWhenDone})) + TimeReporter = require './time-reporter' + jasmineEnv.addReporter(new TimeReporter()) + jasmineEnv.setIncludedTags([process.platform]) + + jasmineContent = document.createElement('div') + jasmineContent.setAttribute('id', 'jasmine-content') + document.body.appendChild(jasmineContent) + + jasmineEnv.execute() + +disableFocusMethods = -> + ['fdescribe', 'ffdescribe', 'fffdescribe', 'fit', 'ffit', 'fffit'].forEach (methodName) -> + focusMethod = window[methodName] + window[methodName] = (description) -> + error = new Error('Focused spec is running on CI') + focusMethod description, -> throw error + +requireSpecs = (specDirectory, specType) -> + for specFilePath in fs.listTreeSync(specDirectory) when /-spec\.(coffee|js)$/.test specFilePath + require specFilePath + # Set spec directory on spec for setting up the project in spec-helper + setSpecDirectory(specDirectory) + +setSpecField = (name, value) -> + specs = jasmine.getEnv().currentRunner().specs() + return if specs.length is 0 + for index in [specs.length-1..0] + break if specs[index][name]? + specs[index][name] = value + +setSpecType = (specType) -> + setSpecField('specType', specType) + +setSpecDirectory = (specDirectory) -> + setSpecField('specDirectory', specDirectory) + +buildReporter = ({logFile, exitWhenDone}) -> + if exitWhenDone + buildTerminalReporter(logFile) + else + AtomReporter = require './atom-reporter' + reporter = new AtomReporter() + +buildTerminalReporter = (logFile) -> + logStream = fs.openSync(logFile, 'w') if logFile? + log = (str) -> + if logStream? + fs.writeSync(logStream, str) + else + process.stderr.write(str) + + {TerminalReporter} = require 'jasmine-tagged' + new TerminalReporter + print: (str) -> + log(str) + onComplete: (runner) -> + fs.closeSync(logStream) if logStream? + if process.env.JANKY_SHA1 + grim = require 'grim' + + if grim.getDeprecationsLength() > 0 + grim.logDeprecations() + return atom.exit(1) + + if runner.results().failedCount > 0 + atom.exit(1) + else + atom.exit(0) diff --git a/spec/spec-bootstrap.coffee b/spec/spec-bootstrap.coffee index 5158c9bee..7cf972484 100644 --- a/spec/spec-bootstrap.coffee +++ b/spec/spec-bootstrap.coffee @@ -12,16 +12,20 @@ try # that are focused in the very first spec run. atom.getCurrentWindow().show() unless atom.getLoadSettings().exitWhenDone - {runSpecSuite} = require './jasmine-helper' - # Add 'exports' to module search path. exportsPath = path.join(atom.getLoadSettings().resourcePath, 'exports') require('module').globalPaths.push(exportsPath) - # Still set NODE_PATH since tasks may need it. - process.env.NODE_PATH = exportsPath + process.env.NODE_PATH = exportsPath # Set NODE_PATH env variable since tasks may need it. document.title = "Spec Suite" - runSpecSuite './spec-suite', atom.getLoadSettings().logFile + + testRunner = require('./jasmine-test-runner') + testRunner({ + logFile: atom.getLoadSettings().logFile + exitWhenDone: atom.getLoadSettings().exitWhenDone + testPaths: [atom.getLoadSettings().specDirectory] + }) + catch error if atom?.getLoadSettings().exitWhenDone console.error(error.stack ? error) diff --git a/spec/spec-suite.coffee b/spec/spec-suite.coffee deleted file mode 100644 index 817de7986..000000000 --- a/spec/spec-suite.coffee +++ /dev/null @@ -1,55 +0,0 @@ -_ = require 'underscore-plus' -fs = require 'fs-plus' -path = require 'path' -require './spec-helper' - -requireSpecs = (specDirectory, specType) -> - for specFilePath in fs.listTreeSync(specDirectory) when /-spec\.(coffee|js)$/.test specFilePath - require specFilePath - - # Set spec directory on spec for setting up the project in spec-helper - setSpecDirectory(specDirectory) - -setSpecField = (name, value) -> - specs = jasmine.getEnv().currentRunner().specs() - return if specs.length is 0 - for index in [specs.length-1..0] - break if specs[index][name]? - specs[index][name] = value - -setSpecType = (specType) -> - setSpecField('specType', specType) - -setSpecDirectory = (specDirectory) -> - setSpecField('specDirectory', specDirectory) - -runAllSpecs = -> - {resourcePath} = atom.getLoadSettings() - - requireSpecs(path.join(resourcePath, 'spec')) - setSpecType('core') - - fixturesPackagesPath = path.join(__dirname, 'fixtures', 'packages') - packagePaths = atom.packages.getAvailablePackageNames().map (packageName) -> - atom.packages.resolvePackagePath(packageName) - packagePaths = _.groupBy packagePaths, (packagePath) -> - if packagePath.indexOf("#{fixturesPackagesPath}#{path.sep}") is 0 - 'fixtures' - else if packagePath.indexOf("#{resourcePath}#{path.sep}") is 0 - 'bundled' - else - 'user' - - # Run bundled package specs - requireSpecs(path.join(packagePath, 'spec')) for packagePath in packagePaths.bundled ? [] - setSpecType('bundled') - - # Run user package specs - requireSpecs(path.join(packagePath, 'spec')) for packagePath in packagePaths.user ? [] - setSpecType('user') - -if specDirectory = atom.getLoadSettings().specDirectory - requireSpecs(specDirectory) - setSpecType('user') -else - runAllSpecs()