diff --git a/Gemfile b/Gemfile index 04eeea93..12901f62 100644 --- a/Gemfile +++ b/Gemfile @@ -2,5 +2,6 @@ source :rubygems gem "json_pure", "~>1.4.3" gem "frank" +gem "term-ansicolor" gem "ragaskar-jsdoc_helper" gem "rake", "0.8.7" diff --git a/Gemfile.lock b/Gemfile.lock index 837abb8d..8a21f3ad 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -10,17 +10,18 @@ GEM rack (>= 1.0) tilt (= 0.9) gem_plugin (0.2.3) - haml (3.0.25) + haml (3.1.2) json_pure (1.4.6) mongrel (1.2.0.pre2) daemons (~> 1.0.10) gem_plugin (~> 0.2.3) net-scp (1.0.4) net-ssh (>= 1.99.1) - net-ssh (2.1.0) - rack (1.2.1) + net-ssh (2.1.4) + rack (1.3.0) ragaskar-jsdoc_helper (0.0.2.1) rake (0.8.7) + term-ansicolor (1.0.5) tilt (0.9) PLATFORMS @@ -31,3 +32,4 @@ DEPENDENCIES json_pure (~> 1.4.3) ragaskar-jsdoc_helper rake (= 0.8.7) + term-ansicolor diff --git a/Rakefile b/Rakefile index 8c646081..e0e0d16e 100644 --- a/Rakefile +++ b/Rakefile @@ -1,5 +1,6 @@ require 'json' require 'tilt' +require 'term/ansicolor' Dir["#{File.dirname(__FILE__)}/tasks/**/*.rb"].each do |file| require file @@ -19,6 +20,11 @@ def node_installed? `which node` =~ /node/ end +class String + include Term::ANSIColor +end + +Term::ANSIColor.coloring = STDOUT.isatty #namespace :jasmine do # diff --git a/lib/jasmine.js b/lib/jasmine.js index 7fa23d28..30c667df 100644 --- a/lib/jasmine.js +++ b/lib/jasmine.js @@ -2471,6 +2471,6 @@ jasmine.version_= { "major": 1, "minor": 1, "build": 0, - "revision": 1308238364, + "revision": 1308288659, "rc": 1 }; diff --git a/spec/console/TrivialConsoleReporterSpec.js b/spec/console/TrivialConsoleReporterSpec.js index 94207ada..1eef11c9 100644 --- a/spec/console/TrivialConsoleReporterSpec.js +++ b/spec/console/TrivialConsoleReporterSpec.js @@ -114,7 +114,7 @@ describe("TrivialConsoleReporter", function() { describe('Integration', function() { - it("prints the proper output under a pass scenario. small numbers.", function() { + it("prints the proper output under a pass scenario - small numbers.", function() { simulateRun(reporter, repeat(passingSpec, 3), [], @@ -134,16 +134,10 @@ describe("TrivialConsoleReporter", function() { 1777 ); - expect(out.getOutput()).toEqual( - [ - "Started", - green(".") + green(".") + green("."), - "", - "Finished in 0.777 seconds", - green("3 specs, 0 failures"), - "" - ].join("\n") + "\n" - ); + var output = out.getOutput(); + expect(output).toMatch(/^Started/); + expect(output).toMatch(/\.\.\./); + expect(output).toMatch(/3 specs, 0 failures/); }); it("prints the proper output under a pass scenario. large numbers.", function() { @@ -165,33 +159,12 @@ describe("TrivialConsoleReporter", function() { 1000, 1777); - expect(out.getOutput()).toEqual( - [ - "Started", - - green(".") + green(".") + green(".") + green(".") + green(".") + //50 green dots - green(".") + green(".") + green(".") + green(".") + green(".") + - green(".") + green(".") + green(".") + green(".") + green(".") + - green(".") + green(".") + green(".") + green(".") + green(".") + - green(".") + green(".") + green(".") + green(".") + green(".") + - green(".") + green(".") + green(".") + green(".") + green(".") + - green(".") + green(".") + green(".") + green(".") + green(".") + - green(".") + green(".") + green(".") + green(".") + green(".") + - green(".") + green(".") + green(".") + green(".") + green(".") + - green(".") + green(".") + green(".") + green(".") + green(".") + - - green(".") + green(".") + green(".") + green(".") + green(".") + //7 green dots - green(".") + green("."), - - "", - "Finished in 0.777 seconds", - green("3 specs, 0 failures"), - "" - ].join("\n") + "\n" - ); + var output = out.getOutput(); + expect(output).toMatch(/^Started/); + expect(output).toMatch(/\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\./); + expect(output).toMatch(/3 specs, 0 failures/); }); - it("prints the proper output under a failure scenario.", function() { simulateRun(reporter, [failingSpec, passingSpec, failingSpec], @@ -237,24 +210,12 @@ describe("TrivialConsoleReporter", function() { 1000, 1777); - expect(out.getOutput()).toEqual( - [ - "Started", - red("F") + green(".") + red("F"), - "", - "The oven heats up", - " stack trace one", - " second line", - " stack trace two", - "", - "The washing machine washes clothes", - " stack trace one", - "", - "Finished in 0.777 seconds", - red("3 specs, 2 failures"), - "" - ].join("\n") + "\n" - ); + var output = out.getOutput(); + expect(output).toMatch(/^Started/); + expect(output).toMatch(/F\.F/); + expect(output).toMatch(/The oven heats up\n stack trace one\n second line\n stack trace two/); + expect(output).toMatch(/The washing machine washes clothes\n stack trace one/); + expect(output).toMatch(/3 specs, 2 failures/); }); }); @@ -275,19 +236,19 @@ describe("TrivialConsoleReporter", function() { it("prints a green dot if the spec passes", function() { reporter.reportSpecResults(passingSpec); - expect(out.getOutput()).toEqual(green(".")); + expect(out.getOutput()).toMatch(/\./); }); it("prints a red dot if the spec fails", function() { reporter.reportSpecResults(failingSpec); - expect(out.getOutput()).toEqual(red("F")); + expect(out.getOutput()).toMatch(/F/); }); it("prints a yellow star if the spec was skipped", function() { reporter.reportSpecResults(skippedSpec); - expect(out.getOutput()).toEqual(yellow("*")); + expect(out.getOutput()).toMatch(/\*/); }); }); diff --git a/spec/node_suite.js b/spec/node_suite.js index 1bbc4a0e..78a1597f 100644 --- a/spec/node_suite.js +++ b/spec/node_suite.js @@ -30,14 +30,14 @@ delete global.window; function noop() { } -jasmine.executeSpecs = function(specs, done) { +jasmine.executeSpecs = function(specs, done, isVerbose, showColors) { for (var i = 0, len = specs.length; i < len; ++i) { var filename = specs[i]; require(filename.replace(/\.\w+$/, "")); } var jasmineEnv = jasmine.getEnv(); - var consoleReporter = new jasmine.TrivialConsoleReporter(sys.print, done); + var consoleReporter = new jasmine.TrivialConsoleReporter(sys.print, done, showColors); jasmineEnv.addReporter(consoleReporter); jasmineEnv.execute(); diff --git a/src/console/TrivialConsoleReporter.js b/src/console/TrivialConsoleReporter.js index cea4f388..b42de2ac 100644 --- a/src/console/TrivialConsoleReporter.js +++ b/src/console/TrivialConsoleReporter.js @@ -1,4 +1,4 @@ -jasmine.TrivialConsoleReporter = function(print, doneCallback) { +jasmine.TrivialConsoleReporter = function(print, doneCallback, showColors) { //inspired by mhevery's jasmine-node reporter //https://github.com/mhevery/jasmine-node @@ -16,7 +16,7 @@ jasmine.TrivialConsoleReporter = function(print, doneCallback) { }; function coloredStr(color, str) { - return ansi[color] + str + ansi.none; + return showColors ? (ansi[color] + str + ansi.none) : str; } function greenStr(str) { diff --git a/src/version.js b/src/version.js index cad21b4f..a5142693 100644 --- a/src/version.js +++ b/src/version.js @@ -2,6 +2,6 @@ jasmine.version_= { "major": 1, "minor": 1, "build": 0, - "revision": 1308238364, + "revision": 1308288659, "rc": 1 }; diff --git a/tasks/build_dist.rb b/tasks/build_dist.rb index f91c2e1d..9c636f26 100644 --- a/tasks/build_dist.rb +++ b/tasks/build_dist.rb @@ -1,6 +1,6 @@ desc "Build core jasmine.js" task :build_dist => [:lint, :write_version_file] do - puts 'Building Jasmine distribution from source' + puts 'Building Jasmine distribution from source'.cyan concat_into('lib/jasmine.js') { core_sources + version_source_file } concat_into('lib/jasmine-html.js') { html_sources } @@ -19,7 +19,7 @@ end desc 'Check jasmine sources for coding problems' task :lint do - puts "Running JSHint via Node.js" + puts "Running JSHint via Node.js".cyan system("node jshint/run.js") || exit(1) end diff --git a/tasks/spec.rb b/tasks/spec.rb index 668d6b98..36e1d2a2 100644 --- a/tasks/spec.rb +++ b/tasks/spec.rb @@ -3,13 +3,15 @@ task :spec => ["build_dist", "count_specs", "spec:node", "spec:browser"] desc 'Run specs in Node.js' task "spec:node" => [:count_specs, :require_node] do - puts "Running all appropriate specs via Node.js" - system("node spec/node_suite.js") + puts "Running all appropriate specs via Node.js".cyan + + color = Term::ANSIColor.coloring? ? "--color" : "--noColor" + system("node spec/node_suite.js #{color}") end desc "Run specs in the default browser (MacOS only)" task "spec:browser" => [:count_specs, :build_runner_html] do - puts "Running all appropriate specs via the default web browser" + puts "Running all appropriate specs via the default web browser".cyan system("open spec/runner.html") end @@ -20,8 +22,8 @@ task :count_specs do html_spec_count = count_specs_in(Dir.glob('spec/html/*.js')) puts "\n" - puts "#{yellow(core_specs_count + console_spec_count)} specs for Node.js runner (exclude DOM-related specs)" - puts "#{yellow(core_specs_count + console_spec_count + html_spec_count)} specs for Browser runner (all specs)" + puts "#{(core_specs_count + console_spec_count).to_s.yellow.bold} specs for Node.js runner (exclude DOM-related specs)" + puts "#{(core_specs_count + console_spec_count + html_spec_count).to_s.yellow.bold} specs for Browser runner (all specs)" puts "\n" puts "Please verify that these numbers match the runner output." puts "\n" @@ -33,7 +35,3 @@ def count_specs_in(files) count end end - -def yellow(str) - "\033[33m#{str}\033[0m" -end \ No newline at end of file