diff --git a/lib/spinach/feature.rb b/lib/spinach/feature.rb index 72b49f11..781b5ab9 100644 --- a/lib/spinach/feature.rb +++ b/lib/spinach/feature.rb @@ -1,6 +1,6 @@ module Spinach class Feature - attr_accessor :line + attr_accessor :filename, :line attr_accessor :name, :scenarios, :tags attr_accessor :background attr_accessor :description @@ -14,5 +14,8 @@ def background_steps @background.nil? ? [] : @background.steps end + def line=(value) + @line = value.to_i if value + end end end diff --git a/lib/spinach/runner.rb b/lib/spinach/runner.rb index 64e4f96d..ace7369c 100644 --- a/lib/spinach/runner.rb +++ b/lib/spinach/runner.rb @@ -73,6 +73,8 @@ def run filename.split(':') end.each do |filename, line| feature = Parser.open_file(filename).parse + feature.filename = filename + feature.line = line success = FeatureRunner.new(feature, line).run successful = false unless success break if fail_fast? && !successful diff --git a/test/spinach/runner_test.rb b/test/spinach/runner_test.rb index 70698b36..14a21fdc 100644 --- a/test/spinach/runner_test.rb +++ b/test/spinach/runner_test.rb @@ -76,7 +76,7 @@ @feature_runner = stub filenames.each do |filename| Spinach::Parser.stubs(:open_file).with(filename).returns parser = stub - parser.stubs(:parse).returns feature = stub + parser.stubs(:parse).returns feature = Spinach::Feature.new Spinach::Runner::FeatureRunner.stubs(:new). with(feature, anything). returns(@feature_runner) @@ -101,13 +101,35 @@ runner.run.must_equal false end + describe 'when line set' do + let(:filename) { 'features/cool_feature.feature' } + let(:line) { 12 } + let(:filenames) { ["#{filename}:#{line}"] } + let(:runner) { Spinach::Runner.new(filenames) } + + it 'sets filename and line on the feature' do + @feature_runner = stub + Spinach::Parser.stubs(:open_file).with(filename).returns parser = stub + parser.stubs(:parse).returns feature = Spinach::Feature.new + Spinach::Runner::FeatureRunner.stubs(:new). + with(feature, anything). + returns(@feature_runner) + runner.stubs(required_files: []) + @feature_runner.stubs(:run).returns(true) + + runner.run.must_equal true + feature.filename.must_equal filename + feature.line.must_equal line + end + end + describe "when fail_fast set" do let(:feature_runners) { [ stub, stub ] } before(:each) do filenames.each_with_index do |filename, i| Spinach::Parser.stubs(:open_file).with(filename).returns parser = stub - parser.stubs(:parse).returns feature = stub + parser.stubs(:parse).returns feature = Spinach::Feature.new Spinach::Runner::FeatureRunner.stubs(:new). with(feature, anything). returns(feature_runners[i])