From d160da7752ce33a50fd320ae8ca448fd4a88ece8 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Wed, 21 Aug 2013 11:15:22 +0800 Subject: [PATCH] Add script to run specs in CI, fixes #61. --- script/cibuild | 8 ++++++++ script/test.py | 2 +- spec/index.html | 27 ++++++++++++++++++++++++++- spec/main.js | 12 ++++++++++++ 4 files changed, 47 insertions(+), 2 deletions(-) create mode 100755 script/cibuild diff --git a/script/cibuild b/script/cibuild new file mode 100755 index 000000000000..63946159fe04 --- /dev/null +++ b/script/cibuild @@ -0,0 +1,8 @@ +#!/usr/bin/env python + +import os +import subprocess + + +test = os.path.join(os.path.dirname(__file__), 'test.py') +subprocess.check_call([test, '--ci']) diff --git a/script/test.py b/script/test.py index dd9842fdecf3..54601a6e7216 100755 --- a/script/test.py +++ b/script/test.py @@ -17,7 +17,7 @@ def main(): else: atom_shell = os.path.join(SOURCE_ROOT, 'out', 'Debug', 'atom.exe') - subprocess.check_call([atom_shell, 'spec']) + subprocess.check_call([atom_shell, 'spec'] + sys.argv[1:]) if __name__ == '__main__': diff --git a/spec/index.html b/spec/index.html index 16d8389edaf3..eb40fc7e3740 100644 --- a/spec/index.html +++ b/spec/index.html @@ -15,6 +15,21 @@ require('coffee-script'); // Supports .coffee tests. + // Rediret all output to browser. + var ipc = require('ipc'); + global.__defineGetter__('console', function() { + return { + log: function() { + args = Array.prototype.slice.call(arguments); + ipc.sendChannel('console.log', args); + }, + error: function() { + args = Array.prototype.slice.call(arguments); + ipc.sendChannel('console.error', args); + }, + } + }); + var Mocha = require('mocha'); var mocha = new Mocha(); @@ -24,6 +39,14 @@ if (query.grep) mocha.grep(query.grep); if (query.invert) mocha.invert(); + // Check if we are running in CI. + var argv = require('remote').process.argv; + var isCi = false; + if (argv[1] == '--ci') { + isCi = true; + mocha.reporter('tap'); + } + // Read all test files. var walker = require('walkdir').walk(__dirname); @@ -33,8 +56,10 @@ }); walker.on('end', function() { - mocha.run(function() { + var runner = mocha.run(function() { Mocha.utils.highlightTags('code'); + if (isCi) + ipc.sendChannel('process.exit', runner.failures); }); }); })(); diff --git a/spec/main.js b/spec/main.js index dbe8cca608a7..7947bc063be1 100644 --- a/spec/main.js +++ b/spec/main.js @@ -10,6 +10,18 @@ ipc.on('message', function() { ipc.send.apply(this, arguments); }); +ipc.on('console.log', function(pid, rid, args) { + console.log.apply(console, args); +}); + +ipc.on('console.error', function(pid, rid, args) { + console.log.apply(console, args); +}); + +ipc.on('process.exit', function(pid, rid, code) { + process.exit(code); +}); + process.on('uncaughtException', function() { window.openDevTools(); });