spinach 0.0.5 → 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/.travis.yml CHANGED
@@ -4,5 +4,5 @@ rvm:
4
4
  - 1.9.2
5
5
  - 1.9.3
6
6
  - ruby-head
7
- - rbx-2.0
8
- - jruby
7
+ # - rbx-2.0
8
+ # - jruby
data/bin/spinach CHANGED
@@ -6,10 +6,4 @@ rescue LoadError
6
6
  require_relative '../lib/spinach'
7
7
  end
8
8
 
9
- features = if ARGV.any?
10
- ARGV
11
- else
12
- Dir.glob(File.join 'features', '**', '*.feature')
13
- end
14
-
15
- Spinach::Runner.new(features).run
9
+ exit Spinach::Cli.new(ARGV).run
@@ -0,0 +1,14 @@
1
+ Feature: Error reporting
2
+ In order to receive a clear output and chase my errors
3
+ As a developer
4
+ I want spinach to give me a comprehensive error reporting
5
+
6
+ Scenario: Error reporting without backtrace
7
+ Given I have a feature with some errors
8
+ When I run "spinach"
9
+ Then I should see the error count along with their messages
10
+
11
+ Scenario: Error reporting with backtrace
12
+ Given I have a feature with some errors
13
+ When I run "spinach --backtrace"
14
+ Then I should see the error count along with their messages and backtrace
@@ -0,0 +1,14 @@
1
+ Feature: Exit status
2
+ In order to receive a standard exit code
3
+ As a developer
4
+ I want spinach to return exit status properly
5
+
6
+ Scenario: It succeeds
7
+ Given I have a feature that has no error or failure
8
+ When I run it
9
+ Then the exit status should be 0
10
+
11
+ Scenario: It fails
12
+ Given I have a feature that has a failure
13
+ When I run it
14
+ Then the exit status should be 1
@@ -0,0 +1,56 @@
1
+ Feature "Error reporting" do
2
+ include Integration::SpinachRunner
3
+
4
+ Given "I have a feature with some errors" do
5
+ write_file('features/feature_with_errors.feature',
6
+ 'Feature: Feature with errors
7
+
8
+ Scenario: This scenario will fail
9
+ Given true is false
10
+ Then remove all the files in my hard drive
11
+ ')
12
+
13
+ write_file('features/steps/error_feature.rb',
14
+ 'Feature "Feature with errors" do
15
+ Given "true is false" do
16
+ true.must_equal false
17
+ end
18
+
19
+ Then "remove all the files in my hard drive" do
20
+ # joking!
21
+ end
22
+ end')
23
+ end
24
+
25
+ When 'I run "spinach"' do
26
+ run_feature 'features/feature_with_errors.feature'
27
+ end
28
+
29
+ When 'I run "spinach --backtrace"' do
30
+ run_feature 'features/feature_with_errors.feature', '--backtrace'
31
+ end
32
+
33
+ Then 'I should see the error count along with their messages' do
34
+ check_error_messages
35
+ all_stdout.wont_match /gems.*minitest.*assert_equal/
36
+ end
37
+
38
+ Then 'I should see the error count along with their messages and backtrace' do
39
+ check_error_messages
40
+ check_backtrace
41
+ end
42
+
43
+ private
44
+
45
+ def check_error_messages
46
+ all_stdout.must_include "Error summary"
47
+ all_stdout.must_match /errors.*This scenario will fail.*line 4/
48
+ end
49
+
50
+ def check_backtrace
51
+ all_stdout.must_include "Error summary"
52
+ all_stdout.must_match /errors.*This scenario will fail.*line 4/
53
+ all_stdout.must_match /gems.*minitest.*assert_equal/
54
+ end
55
+
56
+ end
@@ -0,0 +1,50 @@
1
+ require 'aruba/api'
2
+
3
+ Feature "Exit status" do
4
+ include Integration::SpinachRunner
5
+
6
+ Given "I have a feature that has no error or failure" do
7
+ write_file('features/success_feature.feature',
8
+ 'Feature: A success feature
9
+
10
+ Scenario: This is scenario will succeed
11
+ Then I succeed
12
+ ')
13
+ write_file('features/steps/success_feature.rb',
14
+ 'Feature "A success feature" do
15
+ Then "I succeed" do
16
+ end
17
+ end')
18
+ @feature = "features/success_feature.feature"
19
+ end
20
+
21
+ Given "I have a feature that has a failure" do
22
+ write_file('features/failure_feature.feature',
23
+ 'Feature: A failure feature
24
+
25
+ Scenario: This is scenario will fail
26
+ Then I fail
27
+ ')
28
+ write_file('features/steps/failure_feature.rb',
29
+ 'Feature "A failure feature" do
30
+ Then "I fail" do
31
+ true.must_equal false
32
+ end
33
+ end')
34
+ @feature = "features/failure_feature.feature"
35
+ end
36
+
37
+ When "I run it" do
38
+ run_feature @feature
39
+ all_stdout # Hack to get a correct exit status
40
+ end
41
+
42
+ Then "the exit status should be 0" do
43
+ last_exit_status.must_equal 0
44
+ end
45
+
46
+ Then "the exit status should be 1" do
47
+ last_exit_status.must_equal 1
48
+ end
49
+
50
+ end
@@ -1,7 +1,5 @@
1
- require 'aruba/api'
2
-
3
1
  Feature "Feature name guessing" do
4
- include Aruba::Api
2
+ include Integration::SpinachRunner
5
3
 
6
4
  Given 'I am writing a feature called "My cool feature"' do
7
5
  write_file('features/my_cool_feature.feature',
@@ -15,7 +13,7 @@ Feature "Feature name guessing" do
15
13
 
16
14
  And 'I write a class named "MyCoolFeature"' do
17
15
  write_file('features/steps/my_cool_feature.rb',
18
- 'Feature "My cool feature" do
16
+ 'class MyCoolFeature < Spinach::Feature
19
17
  When "this is so meta" do
20
18
  end
21
19
 
@@ -32,9 +30,4 @@ Feature "Feature name guessing" do
32
30
  all_stderr.must_be_empty
33
31
  end
34
32
 
35
- private
36
-
37
- def run_feature(command)
38
- run "../../bin/spinach #{command}"
39
- end
40
33
  end
@@ -0,0 +1,14 @@
1
+ require 'aruba/api'
2
+
3
+ module Integration
4
+ module SpinachRunner
5
+ include Aruba::Api
6
+
7
+ private
8
+
9
+ def run_feature(command, options=nil)
10
+ run "../../bin/spinach #{command} #{options}"
11
+ end
12
+
13
+ end
14
+ end
@@ -0,0 +1,67 @@
1
+ require 'optparse'
2
+
3
+ module Spinach
4
+ # The cli is a class responsible of handling all the command line interface
5
+ # logic
6
+ #
7
+ class Cli
8
+ # @param [Array<String>] arguments
9
+ # the command line arguments
10
+ def initialize(args = ARGV)
11
+ @args = args
12
+ end
13
+
14
+ # Runs all the feature
15
+ #
16
+ # @return [Boolean]
17
+ # the exit status - true for success, false for failure
18
+ def run
19
+ init_reporter
20
+ parse_options
21
+ features = if @args.any?
22
+ @args
23
+ else
24
+ Dir.glob(File.join 'features', '**', '*.feature')
25
+ end
26
+ Spinach::Runner.new(features).run
27
+ end
28
+
29
+ # Inits the reporter with a default one
30
+ def init_reporter
31
+ Spinach.config.default_reporter =
32
+ Spinach::Reporter::Stdout.new(options[:reporter])
33
+ end
34
+
35
+ # Returns a hash of options, separated by its type:
36
+ #
37
+ # @example
38
+ # {
39
+ # reporter: { backtrace: true }
40
+ # }
41
+ #
42
+ # @return [Hash]
43
+ def options
44
+ @options ||= parse_options
45
+ end
46
+
47
+ private
48
+
49
+ def parse_options
50
+ reporter_options = {}
51
+ reporter_options[:backtrace] = false
52
+
53
+ OptionParser.new do |opts|
54
+ opts.on('-b', '--backtrace', "Show backtrace of errors") do |v|
55
+ reporter_options[:backtrace] = v
56
+ end
57
+ opts.on_tail('--version', "Show version") do
58
+ puts Spinach::VERSION
59
+ exit
60
+ end
61
+ end.parse!(@args)
62
+ {reporter: reporter_options}
63
+ end
64
+
65
+
66
+ end
67
+ end
@@ -9,31 +9,34 @@ module Spinach
9
9
  # Prints the feature name to the standard output
10
10
  #
11
11
  def feature(name)
12
- puts "\nFeature: #{name}".white.underline
12
+ puts "\n#{'Feature:'.magenta} #{name.light_magenta}"
13
13
  end
14
14
 
15
15
  # Prints the scenario name to the standard ouput
16
16
  #
17
17
  def scenario(name)
18
- puts "\n Scenario: #{name}".white
18
+ puts "\n #{'Scenario:'.green} #{name.light_green}"
19
+ puts
19
20
  end
20
21
 
21
22
  # Prints the step name to the standard output. If failed, it puts an
22
23
  # F! before
23
24
  #
24
25
  def step(keyword, name, result)
25
- case result
26
+ color, symbol = case result
26
27
  when :success
27
- puts " #{keyword} #{name}".green
28
+ [:green, '']
28
29
  when :undefined_step
29
- puts " ? #{keyword} #{name}".yellow
30
+ [:yellow, '?']
30
31
  when :failure
31
- puts " #{keyword} #{name}".red
32
+ [:red, '']
32
33
  when :error
33
- puts " ! #{keyword} #{name}".red
34
+ [:red, '!']
34
35
  when :skip
35
- puts " ~ #{keyword} #{name}".cyan
36
+ [:cyan, '~']
36
37
  end
38
+ puts " #{symbol.colorize(:"light_#{color}")} #{keyword.colorize(:"light_#{color}")} #{name.colorize(color)}"
39
+
37
40
  end
38
41
 
39
42
  # Prints a blank line at the end
@@ -44,20 +47,28 @@ module Spinach
44
47
 
45
48
  def error_summary(errors)
46
49
  puts
47
- puts " #{"Error summary".underline}"
48
- puts
50
+ puts " ! Error summary for this feature (#{errors.length})".light_white
49
51
  errors.each do |error, step, line, scenario|
50
52
  step_file = error.backtrace.detect do |f|
51
53
  f =~ /<class:#{scenario.feature.class}>/
52
54
  end
53
55
  step_file = step_file.split(':')[0..1].join(':') if step_file
54
56
 
57
+ color = if error.kind_of?(Spinach::StepNotDefinedException)
58
+ :light_yellow
59
+ else
60
+ :light_red
61
+ end
62
+
55
63
  puts
56
- puts " #{scenario.feature_name.light_white} :: #{scenario.name.light_blue} :: #{step.light_green} (line #{line})"
57
- puts " #{step_file}" if step_file
58
- puts
59
- puts " * #{error.message}".red
60
- puts error.backtrace.map {|e| " #{e}"}
64
+ puts " #{scenario.feature_name} :: #{scenario.name} :: #{step.colorize(color)} (line #{line})"
65
+ puts " #{step_file}" if step_file
66
+ error.message.split("\n").each do |line|
67
+ puts " #{line}".colorize(color)
68
+ end
69
+ if options[:backtrace]
70
+ puts error.backtrace.map {|e| " #{e}"}
71
+ end
61
72
  puts
62
73
  end
63
74
  end
@@ -7,10 +7,13 @@ module Spinach
7
7
  #
8
8
  class Reporter
9
9
  # Initialize a reporter with an empty error container.
10
- def initialize
10
+ def initialize(options = {})
11
11
  @errors = []
12
+ @options = options
12
13
  end
13
14
 
15
+ attr_accessor :options
16
+
14
17
  # Receives this hook when a feature is invoked
15
18
  # @param [String] name
16
19
  # the feature name
@@ -45,7 +45,7 @@ module Spinach
45
45
  # the parsed scenarios for this runner's feature
46
46
  #
47
47
  def scenarios
48
- @scenarios ||= data['elements']
48
+ @scenarios ||= (data['elements'] || [])
49
49
  end
50
50
 
51
51
  # Runs this feature
@@ -64,6 +64,9 @@ module Spinach
64
64
 
65
65
  unless failures.length.zero?
66
66
  reporter.error_summary(failures)
67
+ return false
68
+ else
69
+ return true
67
70
  end
68
71
  end
69
72
 
@@ -46,10 +46,11 @@ module Spinach
46
46
  require_dependencies
47
47
 
48
48
  filenames.each do |filename|
49
- Feature.new(filename, reporter).run
49
+ success = Feature.new(filename, reporter).run
50
+ @failed = true unless success
50
51
  end
51
52
  reporter.end
52
-
53
+ @failed ? false : true
53
54
  end
54
55
 
55
56
  # Requires step definitions and support files
@@ -1,3 +1,3 @@
1
1
  module Spinach
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.6"
3
3
  end
data/lib/spinach.rb CHANGED
@@ -7,6 +7,7 @@ require_relative 'spinach/parser'
7
7
  require_relative 'spinach/dsl'
8
8
  require_relative 'spinach/feature'
9
9
  require_relative 'spinach/reporter'
10
+ require_relative 'spinach/cli'
10
11
 
11
12
 
12
13
  # Spinach is a BDD framework in top of gherkin. Its main goals are:
@@ -0,0 +1,45 @@
1
+ require_relative '../test_helper'
2
+
3
+ describe Spinach::Cli do
4
+ describe "#options" do
5
+ it "defaults" do
6
+ cli = Spinach::Cli.new([])
7
+ options = cli.options
8
+ options[:reporter][:backtrace].must_equal false
9
+ end
10
+ describe "backtrace" do
11
+ %w{-b --backtrace}.each do |opt|
12
+ it "sets the backtrace if #{opt}" do
13
+ cli = Spinach::Cli.new([opt])
14
+ options = cli.options
15
+ options[:reporter][:backtrace].must_equal true
16
+ end
17
+ end
18
+ end
19
+ end
20
+ describe "#init_reporter" do
21
+ it "inits the default reporter" do
22
+ Spinach.config.default_reporter.wont_equal nil
23
+ end
24
+ end
25
+ describe "#run" do
26
+ describe "when a particular feature list is passed" do
27
+ it "runs the feature" do
28
+ cli = Spinach::Cli.new(['features/some_feature.feature'])
29
+ Spinach::Runner.expects(:new).with(['features/some_feature.feature']).
30
+ returns(stub(:run))
31
+ cli.run
32
+ end
33
+ end
34
+ describe "when no feature is passed" do
35
+ it "runs the feature" do
36
+ cli = Spinach::Cli.new([])
37
+ Dir.expects(:glob).with('features/**/*.feature').
38
+ returns(['features/some_feature.feature'])
39
+ Spinach::Runner.expects(:new).with(['features/some_feature.feature']).
40
+ returns(stub(:run))
41
+ cli.run
42
+ end
43
+ end
44
+ end
45
+ end
@@ -12,7 +12,7 @@ describe Spinach::Reporter::Stdout do
12
12
  out = capture_stdout do
13
13
  @reporter.feature "User authentication"
14
14
  end
15
- out.string.must_include "\nFeature: User authentication"
15
+ out.string.must_match /Feature:.*User authentication/
16
16
  end
17
17
  end
18
18
 
@@ -21,7 +21,7 @@ describe Spinach::Reporter::Stdout do
21
21
  out = capture_stdout do
22
22
  @reporter.scenario "User logs in"
23
23
  end
24
- out.string.must_include " Scenario: User logs in"
24
+ out.string.must_match /Scenario:.*User logs in/
25
25
  end
26
26
  end
27
27
 
@@ -35,7 +35,7 @@ describe Spinach::Reporter::Stdout do
35
35
  @reporter.step "Given", "I say goodbye", :success
36
36
  end
37
37
  out.string.must_include "✔"
38
- out.string.must_include "Given I say goodbye"
38
+ out.string.must_match /Given.*I say goodbye/
39
39
  end
40
40
  end
41
41
 
@@ -45,7 +45,7 @@ describe Spinach::Reporter::Stdout do
45
45
  @reporter.step "Given", "I say goodbye", :undefined_step
46
46
  end
47
47
  out.string.must_include "?"
48
- out.string.must_include "Given I say goodbye"
48
+ out.string.must_match /Given.*I say goodbye/
49
49
  end
50
50
  end
51
51
 
@@ -55,7 +55,7 @@ describe Spinach::Reporter::Stdout do
55
55
  @reporter.step "Given", "I say goodbye", :failure
56
56
  end
57
57
  out.string.must_include "✘"
58
- out.string.must_include "Given I say goodbye"
58
+ out.string.must_match /Given.*I say goodbye/
59
59
  end
60
60
  end
61
61
 
@@ -65,7 +65,7 @@ describe Spinach::Reporter::Stdout do
65
65
  @reporter.step "Given", "I say goodbye", :error
66
66
  end
67
67
  out.string.must_include "!"
68
- out.string.must_include "Given I say goodbye"
68
+ out.string.must_match /Given.*I say goodbye/
69
69
  end
70
70
  end
71
71
 
@@ -75,7 +75,7 @@ describe Spinach::Reporter::Stdout do
75
75
  @reporter.step "Given", "I say nothing", :skip
76
76
  end
77
77
  out.string.must_include "~"
78
- out.string.must_include "Given I say nothing"
78
+ out.string.must_match /Given.*I say nothing/
79
79
  end
80
80
  end
81
81
  end
@@ -90,7 +90,7 @@ describe Spinach::Reporter::Stdout do
90
90
  end
91
91
 
92
92
  describe "#error_summary" do
93
- it "outputs an error summary" do
93
+ before do
94
94
  make_error = proc do |message|
95
95
  stub(
96
96
  message: message,
@@ -106,13 +106,30 @@ describe Spinach::Reporter::Stdout do
106
106
  )
107
107
  end
108
108
 
109
- errors = [
109
+ @errors = [
110
110
  [make_error.('omg'), "some_file", "3", make_scenario.('feature')],
111
111
  [make_error.('wtf'), "other_file", "9", make_scenario.('feature')],
112
112
  ]
113
113
 
114
+ end
115
+
116
+ it "outputs an error summary" do
114
117
  out = capture_stdout do
115
- @reporter.error_summary(errors)
118
+ @reporter.error_summary(@errors)
119
+ end
120
+ out.string.must_include "omg"
121
+ out.string.must_include "some_file"
122
+ out.string.must_include "(line 3)"
123
+ out.string.must_include "wtf"
124
+ out.string.must_include "other_file"
125
+ out.string.must_include "(line 9)"
126
+ out.string.wont_include "foo:1"
127
+ out.string.wont_include "bar:2"
128
+ end
129
+ it "outputs an error summary with backtrace" do
130
+ @reporter.options[:backtrace] = true
131
+ out = capture_stdout do
132
+ @reporter.error_summary(@errors)
116
133
  end
117
134
  out.string.must_include "omg"
118
135
  out.string.must_include "some_file"
@@ -120,7 +137,6 @@ describe Spinach::Reporter::Stdout do
120
137
  out.string.must_include "wtf"
121
138
  out.string.must_include "other_file"
122
139
  out.string.must_include "(line 9)"
123
-
124
140
  out.string.must_include "foo:1"
125
141
  out.string.must_include "bar:2"
126
142
  end
@@ -80,6 +80,20 @@ describe Spinach::Runner::Feature do
80
80
  @feature.run
81
81
  end
82
82
 
83
+ it "returns true if the execution succeeds" do
84
+ @feature.stubs(reporter: stub_everything)
85
+ Spinach::Runner::Scenario.any_instance.
86
+ expects(run: nil).times(3)
87
+ @feature.run.must_equal true
88
+ end
89
+
90
+ it "returns false if the execution fails" do
91
+ @feature.stubs(reporter: stub_everything)
92
+ Spinach::Runner::Scenario.any_instance.
93
+ expects(run: stub_everything).times(3)
94
+ @feature.run.must_equal false
95
+ end
96
+
83
97
  it 'calls only the given scenario' do
84
98
  @filename = 'feature/a_cool_feature.feature:12'
85
99
  @feature = Spinach::Runner::Feature.new(@filename, @reporter)
@@ -42,7 +42,7 @@ describe Spinach::Runner::Scenario do
42
42
  @scenario.run
43
43
  end
44
44
 
45
- describe 'rescues exceptions' do
45
+ describe 'when throwing exceptions' do
46
46
  it 'rescues a MiniTest::Assertion' do
47
47
  @feature.expects(:execute_step).raises(MiniTest::Assertion)
48
48
  @reporter.expects(:step).with(anything, anything, :failure)
@@ -61,10 +61,17 @@ describe Spinach::Runner::Scenario do
61
61
  @scenario.run
62
62
  end
63
63
 
64
- it 'runs a step' do
65
- @reporter.expects(:step).with(anything, anything, :success).times(3)
66
- @scenario.run
64
+ it "returns an failure" do
65
+ @feature.expects(:execute_step).raises(MiniTest::Assertion)
66
+ @scenario.run.wont_equal nil
67
67
  end
68
+
68
69
  end
70
+
71
+ it 'runs a step' do
72
+ @reporter.expects(:step).with(anything, anything, :success).times(3)
73
+ @scenario.run.must_equal nil
74
+ end
75
+
69
76
  end
70
77
  end
@@ -40,14 +40,21 @@ describe Spinach::Runner do
40
40
  end
41
41
  end
42
42
  describe "#run" do
43
- it "instantiates a new Feature and runs it with every file" do
44
- feature = stub(run: nil)
43
+ before do
44
+ @feature = stub
45
45
  @runner.stubs(reporter: stub_everything)
46
46
  @filenames.each do |filename|
47
47
  Spinach::Runner::Feature.expects(:new).
48
48
  with(filename, anything).
49
- returns(feature)
49
+ returns(@feature)
50
50
  end
51
+ end
52
+ it "instantiates a new Feature and runs it with every file" do
53
+ @feature.stubs(run: true)
54
+ @runner.run.must_equal true
55
+ end
56
+ it "returns false if it fails" do
57
+ @feature.stubs(run: false)
51
58
  @runner.run
52
59
  end
53
60
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spinach
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -12,11 +12,11 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2011-09-30 00:00:00.000000000Z
15
+ date: 2011-10-02 00:00:00.000000000Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: gherkin
19
- requirement: &70176176690420 !ruby/object:Gem::Requirement
19
+ requirement: &70159042831880 !ruby/object:Gem::Requirement
20
20
  none: false
21
21
  requirements:
22
22
  - - ! '>='
@@ -24,10 +24,10 @@ dependencies:
24
24
  version: '0'
25
25
  type: :runtime
26
26
  prerelease: false
27
- version_requirements: *70176176690420
27
+ version_requirements: *70159042831880
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: minitest
30
- requirement: &70176176690000 !ruby/object:Gem::Requirement
30
+ requirement: &70159042831460 !ruby/object:Gem::Requirement
31
31
  none: false
32
32
  requirements:
33
33
  - - ! '>='
@@ -35,10 +35,10 @@ dependencies:
35
35
  version: '0'
36
36
  type: :runtime
37
37
  prerelease: false
38
- version_requirements: *70176176690000
38
+ version_requirements: *70159042831460
39
39
  - !ruby/object:Gem::Dependency
40
40
  name: colorize
41
- requirement: &70176176720300 !ruby/object:Gem::Requirement
41
+ requirement: &70159042861760 !ruby/object:Gem::Requirement
42
42
  none: false
43
43
  requirements:
44
44
  - - ! '>='
@@ -46,10 +46,10 @@ dependencies:
46
46
  version: '0'
47
47
  type: :runtime
48
48
  prerelease: false
49
- version_requirements: *70176176720300
49
+ version_requirements: *70159042861760
50
50
  - !ruby/object:Gem::Dependency
51
51
  name: activesupport
52
- requirement: &70176176719880 !ruby/object:Gem::Requirement
52
+ requirement: &70159042861340 !ruby/object:Gem::Requirement
53
53
  none: false
54
54
  requirements:
55
55
  - - ! '>='
@@ -57,10 +57,10 @@ dependencies:
57
57
  version: '0'
58
58
  type: :runtime
59
59
  prerelease: false
60
- version_requirements: *70176176719880
60
+ version_requirements: *70159042861340
61
61
  - !ruby/object:Gem::Dependency
62
62
  name: purdytest
63
- requirement: &70176176719460 !ruby/object:Gem::Requirement
63
+ requirement: &70159042860920 !ruby/object:Gem::Requirement
64
64
  none: false
65
65
  requirements:
66
66
  - - ! '>='
@@ -68,10 +68,10 @@ dependencies:
68
68
  version: '0'
69
69
  type: :development
70
70
  prerelease: false
71
- version_requirements: *70176176719460
71
+ version_requirements: *70159042860920
72
72
  - !ruby/object:Gem::Dependency
73
73
  name: rake
74
- requirement: &70176176719040 !ruby/object:Gem::Requirement
74
+ requirement: &70159042860500 !ruby/object:Gem::Requirement
75
75
  none: false
76
76
  requirements:
77
77
  - - ! '>='
@@ -79,10 +79,10 @@ dependencies:
79
79
  version: '0'
80
80
  type: :development
81
81
  prerelease: false
82
- version_requirements: *70176176719040
82
+ version_requirements: *70159042860500
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: mocha
85
- requirement: &70176176718620 !ruby/object:Gem::Requirement
85
+ requirement: &70159042860080 !ruby/object:Gem::Requirement
86
86
  none: false
87
87
  requirements:
88
88
  - - ! '>='
@@ -90,10 +90,10 @@ dependencies:
90
90
  version: '0'
91
91
  type: :development
92
92
  prerelease: false
93
- version_requirements: *70176176718620
93
+ version_requirements: *70159042860080
94
94
  - !ruby/object:Gem::Dependency
95
95
  name: sinatra
96
- requirement: &70176176718200 !ruby/object:Gem::Requirement
96
+ requirement: &70159042859660 !ruby/object:Gem::Requirement
97
97
  none: false
98
98
  requirements:
99
99
  - - ! '>='
@@ -101,10 +101,10 @@ dependencies:
101
101
  version: '0'
102
102
  type: :development
103
103
  prerelease: false
104
- version_requirements: *70176176718200
104
+ version_requirements: *70159042859660
105
105
  - !ruby/object:Gem::Dependency
106
106
  name: capybara
107
- requirement: &70176176717780 !ruby/object:Gem::Requirement
107
+ requirement: &70159042859240 !ruby/object:Gem::Requirement
108
108
  none: false
109
109
  requirements:
110
110
  - - ! '>='
@@ -112,10 +112,10 @@ dependencies:
112
112
  version: '0'
113
113
  type: :development
114
114
  prerelease: false
115
- version_requirements: *70176176717780
115
+ version_requirements: *70159042859240
116
116
  - !ruby/object:Gem::Dependency
117
117
  name: aruba
118
- requirement: &70176176717360 !ruby/object:Gem::Requirement
118
+ requirement: &70159042858820 !ruby/object:Gem::Requirement
119
119
  none: false
120
120
  requirements:
121
121
  - - ! '>='
@@ -123,10 +123,10 @@ dependencies:
123
123
  version: '0'
124
124
  type: :development
125
125
  prerelease: false
126
- version_requirements: *70176176717360
126
+ version_requirements: *70159042858820
127
127
  - !ruby/object:Gem::Dependency
128
128
  name: pry
129
- requirement: &70176176716940 !ruby/object:Gem::Requirement
129
+ requirement: &70159042858400 !ruby/object:Gem::Requirement
130
130
  none: false
131
131
  requirements:
132
132
  - - ! '>='
@@ -134,7 +134,7 @@ dependencies:
134
134
  version: '0'
135
135
  type: :development
136
136
  prerelease: false
137
- version_requirements: *70176176716940
137
+ version_requirements: *70159042858400
138
138
  description: Spinach is a BDD framework on top of gherkin
139
139
  email:
140
140
  - info@codegram.com
@@ -158,10 +158,16 @@ files:
158
158
  - examples/steps/user_logs_in.rb
159
159
  - examples/user_logs_in.feature
160
160
  - examples/user_logs_in.rb
161
+ - features/error_reporting.feature
162
+ - features/exit_status.feature
161
163
  - features/feature_name_guessing.feature
164
+ - features/steps/error_reporting.rb
165
+ - features/steps/exit_status.rb
162
166
  - features/steps/feature_name_guessing.rb
167
+ - features/support/spinach_runner.rb
163
168
  - lib/spinach.rb
164
169
  - lib/spinach/capybara.rb
170
+ - lib/spinach/cli.rb
165
171
  - lib/spinach/config.rb
166
172
  - lib/spinach/dsl.rb
167
173
  - lib/spinach/exceptions.rb
@@ -176,6 +182,7 @@ files:
176
182
  - lib/spinach/version.rb
177
183
  - spinach.gemspec
178
184
  - test/spinach/capybara_test.rb
185
+ - test/spinach/cli_test.rb
179
186
  - test/spinach/config_test.rb
180
187
  - test/spinach/dsl_test.rb
181
188
  - test/spinach/feature_test.rb
@@ -213,9 +220,15 @@ signing_key:
213
220
  specification_version: 3
214
221
  summary: Spinach is a BDD framework on top of gherkin
215
222
  test_files:
223
+ - features/error_reporting.feature
224
+ - features/exit_status.feature
216
225
  - features/feature_name_guessing.feature
226
+ - features/steps/error_reporting.rb
227
+ - features/steps/exit_status.rb
217
228
  - features/steps/feature_name_guessing.rb
229
+ - features/support/spinach_runner.rb
218
230
  - test/spinach/capybara_test.rb
231
+ - test/spinach/cli_test.rb
219
232
  - test/spinach/config_test.rb
220
233
  - test/spinach/dsl_test.rb
221
234
  - test/spinach/feature_test.rb