From c9683135d704e9fce02be97ec2580ac472d98e49 Mon Sep 17 00:00:00 2001 From: slowjack2k Date: Thu, 9 Jan 2014 09:14:26 +0100 Subject: [PATCH] #243, changed warn to Guard::UI.warning, return only spec without line number for shared examples --- lib/guard/rspec/formatter.rb | 14 +++++++++++--- spec/lib/guard/rspec/formatter_spec.rb | 18 +++++++++++++++++- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/lib/guard/rspec/formatter.rb b/lib/guard/rspec/formatter.rb index 1612f4d4..4c79f802 100644 --- a/lib/guard/rspec/formatter.rb +++ b/lib/guard/rspec/formatter.rb @@ -6,19 +6,27 @@ class RSpec class Formatter < ::RSpec::Core::Formatters::BaseFormatter TEMPORARY_FILE_PATH = './tmp/rspec_guard_result' + # rspec issue https://github.com/rspec/rspec-core/issues/793 def self.extract_spec_location(metadata) root_metadata = metadata - until spec_path?(metadata[:location]) + location = metadata[:location] + + until spec_path?(location) metadata = metadata[:example_group] + if !metadata - warn "no spec file found for #{root_metadata[:location]}" + Guard::UI.warning "no spec file found for #{root_metadata[:location]}" return root_metadata[:location] end + + location = (metadata[:location] || "").split(':').first # rspec issue https://github.com/rspec/rspec-core/issues/1243 end - metadata[:location] + + location end def self.spec_path?(path) + path ||= "" flags = File::FNM_PATHNAME | File::FNM_DOTMATCH if File.const_defined?(:FNM_EXTGLOB) # ruby >= 2 flags |= File::FNM_EXTGLOB diff --git a/spec/lib/guard/rspec/formatter_spec.rb b/spec/lib/guard/rspec/formatter_spec.rb index 54581ee5..6f023238 100644 --- a/spec/lib/guard/rspec/formatter_spec.rb +++ b/spec/lib/guard/rspec/formatter_spec.rb @@ -51,7 +51,23 @@ :example_group => {:location => './spec/requests/breadcrumbs_spec.rb:218'} } - expect(described_class.extract_spec_location(metadata)).to eq './spec/requests/breadcrumbs_spec.rb:218' + expect(described_class.extract_spec_location(metadata)).to start_with './spec/requests/breadcrumbs_spec.rb' + end + + it "should return only the spec file without line number for shared examples" do + metadata = {:location => './spec/support/breadcrumbs.rb:75', + :example_group => {:location => './spec/requests/breadcrumbs_spec.rb:218'} + } + + expect(described_class.extract_spec_location(metadata)).to eq './spec/requests/breadcrumbs_spec.rb' + end + + it "should return location of the root spec when a shared examples has no location" do + metadata = {:location => './spec/support/breadcrumbs.rb:75', + :example_group => {} + } + + expect(described_class.extract_spec_location(metadata)).to eq metadata[:location] end context 'with only success' do