From 3ed72300d369ddee702b62a7232c930d26357808 Mon Sep 17 00:00:00 2001 From: John Bintz Date: Wed, 7 Sep 2011 09:53:33 -0400 Subject: [PATCH] some cleanups of running specs, ensure correct return values for serial guard execution --- README.md | 4 +- lib/guard/jasmine-headless-webkit.rb | 39 +++++++++++---- .../lib/guard/jasmine-headless-webkit_spec.rb | 48 +++++++++++++++---- spec/spec_helper.rb | 2 + 4 files changed, 75 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 97f9e45..146269d 100644 --- a/README.md +++ b/README.md @@ -15,9 +15,11 @@ home folder's `.jasmine-headless-webkit` file. ## `guard` options * `:all_on_start => false` to not run everything when starting, just like `guard-rspec`. -* `:run_before => ""` to run a command before running specs. If the command fails, the test run stops. * `:valid_extensions => %w{js coffee}` to only trigger `run_on_change` events for files with these extensions. Forces Guard to re-run all tests when any other matched file changes. +### Deprecated options +* `:run_before => ""` to run a command before running specs. If the command fails, the test run stops. + ## Using with Rails 3.1 and the Asset Pipeline and/or Jammit Use [`guard-rails-assets`](https://github.com/dnagir/guard-rails-assets) chained in before `guard-jasmine-headless-webkit` to precompile your application diff --git a/lib/guard/jasmine-headless-webkit.rb b/lib/guard/jasmine-headless-webkit.rb index 41eda1e..62e3cef 100644 --- a/lib/guard/jasmine-headless-webkit.rb +++ b/lib/guard/jasmine-headless-webkit.rb @@ -7,6 +7,9 @@ module Guard class JasmineHeadlessWebkit < Guard DEFAULT_EXTENSIONS = %w{js coffee} + ALL_SPECS_MESSAGE = "Guard::JasmineHeadlessWebkit running all specs..." + SOME_SPECS_MESSAGE = "Guard::JasmineHeadlessWebkit running the following: %s" + attr_reader :files_to_rerun def initialize(watchers = [], options = {}) @@ -17,6 +20,8 @@ module Guard :valid_extensions => DEFAULT_EXTENSIONS }.merge(options) + UI.deprecation ":run_before is deprecated. Use guard-shell to do something beforehand. This will be removed in a future release." if @options[:run_before] + @files_to_rerun = [] end @@ -32,9 +37,9 @@ module Guard def run_all run_something_and_rescue do - UI.info "Guard::JasmineHeadlessWebkit running all specs..." - JasmineHeadlessWebkitRunner.run if run_all_things_before @ran_before = false + + run_for_failed_files if run_all_things_before end end @@ -46,10 +51,8 @@ module Guard @ran_before = true if !paths.empty? paths = (paths + @files_to_rerun).uniq - UI.info "Guard::JasmineHeadlessWebkit running the following: #{paths.join(' ')}" - if failed_files = JasmineHeadlessWebkitRunner.run(paths) - @files_to_rerun = failed_files - end + + run_for_failed_files(paths) else run_all end @@ -58,6 +61,20 @@ module Guard end private + def run_for_failed_files(paths = []) + if paths.empty? + UI.info(ALL_SPECS_MESSAGE) + else + UI.info(SOME_SPECS_MESSAGE % paths.join(' ')) + end + + if failed_files = JasmineHeadlessWebkitRunner.run(paths) + @files_to_rerun = failed_files + end + + failed_files && failed_files.empty? + end + def filter_paths(paths) paths.find_all { |path| File.extname(path)[valid_extensions] }.uniq end @@ -93,9 +110,13 @@ module Guard yield rescue ::CoffeeScript::CompilationError rescue StandardError => e - puts e.message - puts e.backtrace.join("\n") - puts + if ENV['GUARD_ENV'] == 'test' + raise e + else + puts e.message + puts e.backtrace.join("\n") + puts + end end end diff --git a/spec/lib/guard/jasmine-headless-webkit_spec.rb b/spec/lib/guard/jasmine-headless-webkit_spec.rb index c57fd38..161f087 100644 --- a/spec/lib/guard/jasmine-headless-webkit_spec.rb +++ b/spec/lib/guard/jasmine-headless-webkit_spec.rb @@ -24,6 +24,39 @@ describe Guard::JasmineHeadlessWebkit do guard.start end end + + context 'run_before' do + let(:options) { { :run_before => true, :all_on_start => false } } + + it "should warn about deprecation" do + Guard::UI.expects(:deprecation).at_least_once + guard.start + end + end + end + + describe '#run_all' do + before do + guard.stubs(:run_all_things_before).returns(true) + end + + context 'fails' do + it 'should return false' do + Guard::JasmineHeadlessWebkitRunner.stubs(:run).returns(['file.js']) + + guard.run_all.should be_false + guard.files_to_rerun.should == ['file.js'] + end + end + + context 'succeeds' do + it 'should return true' do + Guard::JasmineHeadlessWebkitRunner.stubs(:run).returns([]) + + guard.run_all.should be_true + guard.files_to_rerun.should == [] + end + end end describe '#run_on_change' do @@ -33,7 +66,7 @@ describe Guard::JasmineHeadlessWebkit do it "should only run one" do Guard::JasmineHeadlessWebkitRunner.expects(:run).with(one_file).returns(one_file) - guard.run_on_change(%w{test.js test.js}) + guard.run_on_change(%w{test.js test.js}).should be_false guard.files_to_rerun.should == one_file end end @@ -42,7 +75,7 @@ describe Guard::JasmineHeadlessWebkit do it "should not run all" do Guard::JasmineHeadlessWebkitRunner.expects(:run).returns(one_file) - guard.run_on_change(one_file) + guard.run_on_change(one_file).should be_false guard.files_to_rerun.should == one_file end end @@ -52,7 +85,7 @@ describe Guard::JasmineHeadlessWebkit do guard.instance_variable_set(:@files_to_rerun, [ "two.js" ]) Guard::JasmineHeadlessWebkitRunner.expects(:run).with(one_file + [ "two.js" ]).returns(one_file) - guard.run_on_change(one_file) + guard.run_on_change(one_file).should be_false guard.files_to_rerun.should == one_file end end @@ -62,7 +95,7 @@ describe Guard::JasmineHeadlessWebkit do guard.instance_variable_set(:@files_to_rerun, one_file) Guard::JasmineHeadlessWebkitRunner.expects(:run).with(one_file).returns(nil) - guard.run_on_change(one_file) + guard.run_on_change(one_file).should be_false guard.files_to_rerun.should == one_file end end @@ -71,7 +104,7 @@ describe Guard::JasmineHeadlessWebkit do it "should run all" do Guard::JasmineHeadlessWebkitRunner.expects(:run).returns([]) - guard.run_on_change(one_file) + guard.run_on_change(one_file).should be_true guard.files_to_rerun.should == [] end end @@ -79,9 +112,9 @@ describe Guard::JasmineHeadlessWebkit do context 'no files given, just run all' do it 'should run all but not run once' do Guard::JasmineHeadlessWebkitRunner.expects(:run).never - guard.expects(:run_all).once + guard.expects(:run_all).once.returns(true) - guard.run_on_change([]) + guard.run_on_change([]).should be_true guard.files_to_rerun.should == [] end end @@ -102,7 +135,6 @@ describe Guard::JasmineHeadlessWebkit do before do Guard::JasmineHeadlessWebkitRunner.expects(:run).never Guard::UI.expects(:info).with(regexp_matches(/false/)) - Guard::UI.expects(:info).with(regexp_matches(/running all/)) end let(:options) { { :run_before => 'false' } } diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index fb3367d..9d18222 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -5,6 +5,8 @@ RSpec.configure do |config| config.mock_with :mocha end +ENV['GUARD_ENV'] = 'test' + module Guard module UI class << self