spinach 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
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