spinach 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -4,11 +4,11 @@ Feature: Error reporting
4
4
  I want spinach to give me a comprehensive error reporting
5
5
 
6
6
  Scenario: Error reporting without backtrace
7
- Given I have a feature with some errors
7
+ Given I have a feature with some failures
8
8
  When I run "spinach"
9
- Then I should see the error count along with their messages
9
+ Then I should see the failure count along with their messages
10
10
 
11
11
  Scenario: Error reporting with backtrace
12
- Given I have a feature with some errors
12
+ Given I have a feature with some failures
13
13
  When I run "spinach --backtrace"
14
14
  Then I should see the error count along with their messages and backtrace
@@ -0,0 +1,9 @@
1
+ Feature: RSpec compatibility
2
+ In order to use rspec in my step definitions
3
+ As a RSpec developer
4
+ I want spinach to detect my rspec failures as failures instead of errors
5
+
6
+ Scenario: An expectation fails
7
+ Given I have a feature with some failed expectations
8
+ When I run "spinach" with rspec
9
+ Then I should see the failure count along with their messages
@@ -1,17 +1,18 @@
1
1
  Feature "Error reporting" do
2
2
  include Integration::SpinachRunner
3
+ include Integration::ErrorReporting
3
4
 
4
- Given "I have a feature with some errors" do
5
- write_file('features/feature_with_errors.feature',
6
- 'Feature: Feature with errors
5
+ Given "I have a feature with some failures" do
6
+ write_file('features/feature_with_failures.feature',
7
+ 'Feature: Feature with failures
7
8
 
8
9
  Scenario: This scenario will fail
9
10
  Given true is false
10
11
  Then remove all the files in my hard drive
11
12
  ')
12
13
 
13
- write_file('features/steps/error_feature.rb',
14
- 'Feature "Feature with errors" do
14
+ write_file('features/steps/failure_feature.rb',
15
+ 'Feature "Feature with failures" do
15
16
  Given "true is false" do
16
17
  true.must_equal false
17
18
  end
@@ -23,30 +24,20 @@ Feature "Error reporting" do
23
24
  end
24
25
 
25
26
  When 'I run "spinach"' do
26
- run_feature 'features/feature_with_errors.feature'
27
+ run_feature 'features/feature_with_failures.feature'
27
28
  end
28
29
 
29
30
  When 'I run "spinach --backtrace"' do
30
- run_feature 'features/feature_with_errors.feature', '--backtrace'
31
+ run_feature 'features/feature_with_failures.feature', append: '--backtrace'
31
32
  end
32
33
 
33
- Then 'I should see the error count along with their messages' do
34
- check_error_messages
34
+ Then 'I should see the failure count along with their messages' do
35
+ check_error_messages(1)
35
36
  all_stderr.wont_match /gems.*minitest.*assert_equal/
36
37
  end
37
38
 
38
39
  Then 'I should see the error count along with their messages and backtrace' do
39
- check_error_messages
40
+ check_error_messages(1)
40
41
  check_backtrace
41
42
  end
42
-
43
- private
44
- def check_error_messages
45
- all_stderr.must_match /Failures \(1\)/
46
- end
47
-
48
- def check_backtrace
49
- all_stderr.must_match /Failures \(1\)/
50
- all_stderr.must_match /gems.*minitest.*assert_equal/
51
- end
52
43
  end
@@ -13,7 +13,7 @@ Feature "Feature name guessing" do
13
13
 
14
14
  And 'I write a class named "MyCoolFeature"' do
15
15
  write_file('features/steps/my_cool_feature.rb',
16
- 'class MyCoolFeature < Spinach::Feature
16
+ 'class MyCoolFeature < Spinach::FeatureSteps
17
17
  When "this is so meta" do
18
18
  end
19
19
 
@@ -0,0 +1,33 @@
1
+ Feature "RSpec compatibility" do
2
+ include Integration::SpinachRunner
3
+ include Integration::ErrorReporting
4
+
5
+ Given "I have a feature with some failed expectations" do
6
+ write_file('features/feature_with_failures.feature',
7
+ 'Feature: Feature with failures
8
+
9
+ Scenario: This scenario will fail
10
+ Given true is false
11
+ Then remove all the files in my hard drive
12
+ ')
13
+
14
+ write_file('features/steps/failure_feature.rb',
15
+ 'Feature "Feature with failures" do
16
+ Given "true is false" do
17
+ true.should == false
18
+ end
19
+
20
+ Then "remove all the files in my hard drive" do
21
+ # joking!
22
+ end
23
+ end')
24
+ end
25
+
26
+ When "I run \"spinach\" with rspec" do
27
+ run_feature 'features/feature_with_failures.feature', suite: :rspec
28
+ end
29
+
30
+ Then "I should see the failure count along with their messages" do
31
+ check_error_messages(1)
32
+ end
33
+ end
@@ -0,0 +1 @@
1
+ require 'minitest/spec'
@@ -0,0 +1,16 @@
1
+ require 'aruba/api'
2
+
3
+ module Integration
4
+ module ErrorReporting
5
+ include Aruba::Api
6
+
7
+ def check_error_messages(n = 1)
8
+ all_stderr.must_match /Failures \(1\)/
9
+ end
10
+
11
+ def check_backtrace(n = 1)
12
+ all_stderr.must_match /Failures \(1\)/
13
+ all_stderr.must_match /gems.*(minitest|rspec).*assert_equal/
14
+ end
15
+ end
16
+ end
@@ -4,9 +4,31 @@ module Integration
4
4
  module SpinachRunner
5
5
  include Aruba::Api
6
6
 
7
- private
8
- def run_feature(command, options=nil)
9
- run "../../bin/spinach #{command} #{options}"
7
+ def self.included(base)
8
+ base.class_eval do
9
+ before do
10
+ in_current_dir do
11
+ FileUtils.rmdir('features')
12
+ end
13
+ end
14
+ end
15
+ end
16
+
17
+ def run_feature(command, options={})
18
+ options[:suite] ||= :minitest
19
+ use_minitest if options[:suite] == :minitest
20
+ use_rspec if options[:suite] == :rspec
21
+ run "../../bin/spinach #{command} #{options[:append]}"
22
+ end
23
+
24
+ def use_minitest
25
+ write_file('features/support/minitest.rb',
26
+ "require 'minitest/spec'")
27
+ end
28
+
29
+ def use_rspec
30
+ write_file('features/support/minitest.rb',
31
+ "require 'rspec'")
10
32
  end
11
33
  end
12
34
  end
data/lib/spinach.rb CHANGED
@@ -5,7 +5,7 @@ require_relative 'spinach/exceptions'
5
5
  require_relative 'spinach/runner'
6
6
  require_relative 'spinach/parser'
7
7
  require_relative 'spinach/dsl'
8
- require_relative 'spinach/feature'
8
+ require_relative 'spinach/feature_steps'
9
9
  require_relative 'spinach/reporter'
10
10
  require_relative 'spinach/cli'
11
11
 
@@ -51,6 +51,6 @@ module Spinach
51
51
  @@features.detect do |feature|
52
52
  feature.feature_name.to_s == name.to_s ||
53
53
  feature.name == klass
54
- end || raise(Spinach::FeatureNotFoundException, [klass, name])
54
+ end || raise(Spinach::FeatureStepsNotFoundException, [klass, name])
55
55
  end
56
56
  end
@@ -1,21 +1,21 @@
1
1
  require 'capybara'
2
2
  require 'capybara/dsl'
3
- require_relative 'feature'
3
+ require_relative 'feature_steps'
4
4
 
5
5
  module Spinach
6
- class Feature
6
+ class FeatureSteps
7
7
  # Spinach's capybara module makes Capybara DSL available in all features.
8
8
  #
9
9
  # @example
10
10
  # require 'spinach/capybara'
11
- # class CapybaraFeature < Spinach::Feature
11
+ # class CapybaraFeature < Spinach::FeatureSteps
12
12
  # Given "I go to the home page" do
13
13
  # visit '/'
14
14
  # end
15
15
  # end
16
16
  #
17
17
  module Capybara
18
- # Enhances a Feature with Capybara goodness.
18
+ # Enhances a FeatureSteps with Capybara goodness.
19
19
  #
20
20
  # @param [Class] base
21
21
  # The host class.
@@ -20,10 +20,11 @@ module Spinach
20
20
  # to run.
21
21
  #
22
22
  class Config
23
- attr_writer :step_definitions_path, :default_reporter, :support_path
23
+ attr_writer :step_definitions_path, :default_reporter, :support_path,
24
+ :failure_exceptions
24
25
 
25
- # The "step definitions path" holds the place where your feature classes
26
- # will be searched for. Defaults to 'features/steps'
26
+ # The "step definitions path" holds the place where your feature step
27
+ # classes will be searched for. Defaults to 'features/steps'
27
28
  #
28
29
  # @return [String]
29
30
  # The step definitions path.
@@ -82,5 +83,15 @@ module Spinach
82
83
  def []=(attribute, value)
83
84
  self.send("#{attribute}=", value)
84
85
  end
86
+
87
+ # The failure exceptions return an array of exceptions to be captured and
88
+ # considered as failures (as opposite of errors)
89
+ #
90
+ # @return [Array<Exception>]
91
+ #
92
+ # @api public
93
+ def failure_exceptions
94
+ @failure_exceptions ||= []
95
+ end
85
96
  end
86
97
  end
data/lib/spinach/dsl.rb CHANGED
@@ -39,7 +39,7 @@ module Spinach
39
39
  # Action to perform in that step.
40
40
  #
41
41
  # @example
42
- # class MyFeature < Spinach::Feature
42
+ # class MyFeature < Spinach::FeatureSteps
43
43
  # When "I go to the toilet" do
44
44
  # @sittin_on_the_toilet.must_equal true
45
45
  # end
@@ -61,7 +61,7 @@ module Spinach
61
61
  # The name.
62
62
  #
63
63
  # @example
64
- # class MyFeature < Spinach::Feature
64
+ # class MyFeature < Spinach::FeatureSteps
65
65
  # feature "Satisfy needs"
66
66
  # end
67
67
  #
@@ -2,7 +2,7 @@ module Spinach
2
2
  # This class represents the exception raised when Spinach can't find a class
3
3
  # for a feature.
4
4
  #
5
- class FeatureNotFoundException < StandardError
5
+ class FeatureStepsNotFoundException < StandardError
6
6
  # @param [Array] options
7
7
  # An array consisting of the missing class and the feature.
8
8
  #
@@ -12,11 +12,18 @@ module Spinach
12
12
  end
13
13
 
14
14
  # @return [String]
15
- # A custom message when a feature class is not found.
15
+ # A custom message when feature steps aren't found.
16
16
  #
17
17
  # @api public
18
18
  def message
19
- "Could not find class for `#{@feature}` feature. Please create a #{@missing_class}.rb file at #{Spinach.config[:step_definitions_path]}"
19
+ [%Q{Could not find steps for `#{@feature}` feature.
20
+ Please create the file #{Spinach::Support.underscore(@missing_class)}.rb
21
+ at #{Spinach.config[:step_definitions_path]}, with:}.gsub(/^\s{6,7}/, ''),
22
+ %Q{class #{@missing_class} << Spinach::FeatureSteps
23
+ #
24
+ # define your steps here
25
+ #
26
+ end}.gsub(/^\s{6,7}/, '')].join("\n\n").red
20
27
  end
21
28
  end
22
29
 
@@ -1,12 +1,8 @@
1
- require 'minitest/spec'
2
- MiniTest::Spec.new nil
3
-
4
1
  module Spinach
5
2
  # The feature class is the class which all the features must inherit from.
6
3
  #
7
- class Feature
4
+ class FeatureSteps
8
5
  include DSL
9
- include MiniTest::Assertions
10
6
 
11
7
  # Registers the feature class for later use.
12
8
  #
@@ -22,7 +18,7 @@ end
22
18
 
23
19
  # Syntactic sugar. Define the "Feature do" syntax.
24
20
  Object.send(:define_method, :Feature) do |name, &block|
25
- Class.new(Spinach::Feature) do
21
+ Class.new(Spinach::FeatureSteps) do
26
22
  feature name
27
23
  class_eval &block
28
24
  end
@@ -60,6 +60,9 @@ module Spinach
60
60
  # @api public
61
61
  def run
62
62
  require_dependencies
63
+ require_suites
64
+
65
+ run_hook :before_run
63
66
 
64
67
  successful = true
65
68
 
@@ -82,6 +85,12 @@ module Spinach
82
85
  end
83
86
  end
84
87
 
88
+ # Requires the test suite support
89
+ #
90
+ def require_suites
91
+ require_relative 'suites'
92
+ end
93
+
85
94
  # @return [Array<String>] files
86
95
  # The step definition files.
87
96
  #
@@ -46,7 +46,7 @@ module Spinach
46
46
  begin
47
47
  feature.execute_step(step['name'])
48
48
  run_hook :on_successful_step, step
49
- rescue MiniTest::Assertion => e
49
+ rescue *Spinach.config[:failure_exceptions] => e
50
50
  @exception = e
51
51
  run_hook :on_failed_step, step, @exception
52
52
  rescue Spinach::StepNotDefinedException => e
@@ -0,0 +1,2 @@
1
+ require_relative 'suites/minitest' if defined?(MiniTest::Unit)
2
+ require_relative 'suites/rspec' if defined?(RSpec::Expectations)
@@ -0,0 +1,3 @@
1
+ MiniTest::Spec.new nil if defined?(MiniTest::Spec)
2
+ Spinach.config[:failure_exceptions] << MiniTest::Assertion
3
+ Spinach::FeatureSteps.send(:include, MiniTest::Assertions)
@@ -0,0 +1 @@
1
+ Spinach.config[:failure_exceptions] << RSpec::Expectations::ExpectationNotMetError
@@ -16,5 +16,27 @@ module Spinach
16
16
  def self.camelize(name)
17
17
  name.to_s.strip.split(/[^a-z0-9]/i).map{|w| w.capitalize}.join
18
18
  end
19
+
20
+ # Makes an underscored, lowercase form from the expression in the string.
21
+ #
22
+ # Changes '::' to '/' to convert namespaces to paths.
23
+ #
24
+ # Examples:
25
+ # "ActiveRecord".underscore # => "active_record"
26
+ # "ActiveRecord::Errors".underscore # => active_record/errors
27
+ #
28
+ # As a rule of thumb you can think of +underscore+ as the inverse of +camelize+,
29
+ # though there are cases where that does not hold:
30
+ #
31
+ # "SSLError".underscore.camelize # => "SslError"
32
+ def self.underscore(camel_cased_word)
33
+ word = camel_cased_word.to_s.dup
34
+ word.gsub!(/::/, '/')
35
+ word.gsub!(/([A-Z]+)([A-Z][a-z])/,'\1_\2')
36
+ word.gsub!(/([a-z\\d])([A-Z])/,'\1_\2')
37
+ word.tr!("-", "_")
38
+ word.downcase!
39
+ word
40
+ end
19
41
  end
20
42
  end
@@ -1,4 +1,4 @@
1
1
  module Spinach
2
2
  # Spianch version.
3
- VERSION = "0.1.0"
3
+ VERSION = "0.1.1"
4
4
  end
data/spinach.gemspec CHANGED
@@ -21,6 +21,7 @@ Gem::Specification.new do |gem|
21
21
  gem.add_development_dependency 'aruba'
22
22
  gem.add_development_dependency 'pry'
23
23
  gem.add_development_dependency 'simplecov'
24
+ gem.add_development_dependency 'rspec'
24
25
 
25
26
  gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
26
27
  gem.files = `git ls-files`.split("\n")
@@ -0,0 +1,26 @@
1
+ require_relative 'test_helper'
2
+
3
+ describe Spinach::FeatureStepsNotFoundException do
4
+ subject do
5
+ Spinach::FeatureStepsNotFoundException.new(['ThisFeatureDoesNotExist', 'This feature does not exist'])
6
+ end
7
+
8
+ describe 'message' do
9
+ it 'tells the user that the steps could not be found' do
10
+ subject.message.must_include 'Could not find steps for `This feature does not exist` feature.'
11
+ end
12
+
13
+ it 'tells the user to create the file' do
14
+ subject.message.must_include 'Please create the file this_feature_does_not_exist.rb'
15
+ end
16
+
17
+ it 'tells the user where to create the file respecting the step definitions path' do
18
+ Spinach.config.stubs(:step_definitions_path).returns('my/path')
19
+ subject.message.must_include 'at my/path, with:'
20
+ end
21
+
22
+ it 'tells the user what to write in the file' do
23
+ subject.message.must_include 'class ThisFeatureDoesNotExist << Spinach::FeatureSteps'
24
+ end
25
+ end
26
+ end
@@ -2,7 +2,7 @@ require 'test_helper'
2
2
  require 'spinach/capybara'
3
3
  require 'sinatra'
4
4
 
5
- describe Spinach::Feature::Capybara do
5
+ describe Spinach::FeatureSteps::Capybara do
6
6
  before do
7
7
  @sinatra_app = Sinatra::Application.new do
8
8
  get '/' do
@@ -12,8 +12,8 @@ describe Spinach::Feature::Capybara do
12
12
 
13
13
  Capybara.app = @sinatra_app
14
14
 
15
- @feature = Class.new(Spinach::Feature) do
16
- include Spinach::Feature::Capybara
15
+ @feature = Class.new(Spinach::FeatureSteps) do
16
+ include Spinach::FeatureSteps::Capybara
17
17
  Given 'Hello' do
18
18
  end
19
19
  Then 'Goodbye' do
@@ -1,25 +1,45 @@
1
1
  require_relative '../test_helper'
2
2
 
3
3
  describe Spinach::Config do
4
+ before do
5
+ @config = Spinach::Config.new
6
+ end
7
+
4
8
  describe '#step_definitions_path' do
5
9
  it 'returns a default' do
6
- (Spinach.config[:step_definitions_path].kind_of? String).must_equal true
10
+ @config[:step_definitions_path].must_be_kind_of String
7
11
  end
8
12
 
9
13
  it 'can be overwritten' do
10
- Spinach.config[:step_definitions_path] = 'steps'
11
- Spinach.config[:step_definitions_path].must_equal 'steps'
14
+ @config[:step_definitions_path] = 'steps'
15
+ @config[:step_definitions_path].must_equal 'steps'
12
16
  end
13
17
  end
14
18
 
15
19
  describe '#support_path' do
16
20
  it 'returns a default' do
17
- (Spinach.config[:support_path].kind_of? String).must_equal true
21
+ @config[:support_path].must_be_kind_of String
18
22
  end
19
23
 
20
24
  it 'can be overwritten' do
21
- Spinach.config[:support_path] = 'support'
22
- Spinach.config[:support_path].must_equal 'support'
25
+ @config[:support_path] = 'support'
26
+ @config[:support_path].must_equal 'support'
27
+ end
28
+ end
29
+
30
+ describe '#failure_exceptions' do
31
+ it 'returns a default' do
32
+ @config[:failure_exceptions].must_be_kind_of Array
33
+ end
34
+
35
+ it 'can be overwritten' do
36
+ @config[:failure_exceptions] = [1, 2, 3]
37
+ @config[:failure_exceptions].must_equal [1,2,3]
38
+ end
39
+
40
+ it 'allows adding elements' do
41
+ @config[:failure_exceptions] << RuntimeError
42
+ @config[:failure_exceptions].must_include RuntimeError
23
43
  end
24
44
  end
25
45
  end
@@ -1,21 +1,17 @@
1
1
  require_relative '../test_helper'
2
2
 
3
- describe Spinach::Feature do
3
+ describe Spinach::FeatureSteps do
4
4
  describe 'ancestors' do
5
- it 'includes minitest helpers' do
6
- Spinach::Feature.ancestors.must_include MiniTest::Assertions
7
- end
8
-
9
5
  it 'is extended by the DSL' do
10
- Spinach::Feature.ancestors.must_include Spinach::DSL
6
+ Spinach::FeatureSteps.ancestors.must_include Spinach::DSL
11
7
  end
12
8
  end
13
9
 
14
10
  describe 'class methods' do
15
11
  describe '#inherited' do
16
12
  it 'registers any feature subclass' do
17
- @feature1 = Class.new(Spinach::Feature)
18
- @feature2 = Class.new(Spinach::Feature)
13
+ @feature1 = Class.new(Spinach::FeatureSteps)
14
+ @feature2 = Class.new(Spinach::FeatureSteps)
19
15
  @feature3 = Class.new
20
16
 
21
17
  Spinach.features.must_include @feature1
@@ -27,7 +23,7 @@ describe Spinach::Feature do
27
23
 
28
24
  describe 'instance methods' do
29
25
  let(:feature) do
30
- Class.new(Spinach::Feature) do
26
+ Class.new(Spinach::FeatureSteps) do
31
27
  When 'I go to the toilet' do
32
28
  @pee = true
33
29
  end
@@ -0,0 +1,15 @@
1
+ require_relative '../../test_helper'
2
+
3
+ describe "minitest suite" do
4
+ before do
5
+ require_relative '../../../lib/spinach/suites/minitest'
6
+ end
7
+
8
+ it "adds MiniTest::Assertion into the failure exceptions" do
9
+ Spinach.config[:failure_exceptions].must_include MiniTest::Assertion
10
+ end
11
+
12
+ it "extends the FeatureSteps class with MiniTest DSL" do
13
+ Spinach::FeatureSteps.ancestors.must_include MiniTest::Assertions
14
+ end
15
+ end
@@ -22,4 +22,37 @@ describe Spinach::Support do
22
22
  Spinach::Support.camelize('feature name').must_equal 'FeatureName'
23
23
  end
24
24
  end
25
+
26
+ describe '#underscore' do
27
+ it 'changes dashes to underscores' do
28
+ Spinach::Support.underscore('feature-name').must_equal 'feature_name'
29
+ end
30
+
31
+ it 'downcases the text' do
32
+ Spinach::Support.underscore('FEATURE').must_equal 'feature'
33
+ end
34
+
35
+ it 'converts namespaces to paths' do
36
+ Spinach::Support.underscore('Spinach::Support').must_equal 'spinach/support'
37
+ end
38
+
39
+ it 'prepends underscores to uppercase letters' do
40
+ Spinach::Support.underscore('FeatureName').must_equal 'feature_name'
41
+ end
42
+
43
+ it 'only prepends underscores to the last uppercase letter' do
44
+ Spinach::Support.underscore('SSLError').must_equal 'ssl_error'
45
+ end
46
+
47
+ it 'does not modify the original string' do
48
+ text = 'FeatureName'
49
+ underscored_text = Spinach::Support.underscore(text)
50
+
51
+ text.wont_equal underscored_text
52
+ end
53
+
54
+ it 'accepts non string values' do
55
+ Spinach::Support.underscore(:FeatureName).must_equal 'feature_name'
56
+ end
57
+ end
25
58
  end
data/test/spinach_test.rb CHANGED
@@ -43,19 +43,7 @@ describe Spinach do
43
43
  it 'raises when it cannot find the class' do
44
44
  exception = proc {
45
45
  Spinach.find_feature('This feature does not exist')
46
- }.must_raise Spinach::FeatureNotFoundException
47
-
48
- exception.message.must_equal 'Could not find class for `This feature does not exist` feature. Please create a ThisFeatureDoesNotExist.rb file at features/steps'
49
- end
50
-
51
- it 'uses Spinach.config[:step_definitions_path] to tell the user where to wirte the steps' do
52
- Spinach.config.stubs(:step_definitions_path).returns('my/path/')
53
-
54
- exception = proc {
55
- Spinach.find_feature('This feature does not exist')
56
- }.must_raise Spinach::FeatureNotFoundException
57
-
58
- exception.message.must_match %r{my/path}
46
+ }.must_raise Spinach::FeatureStepsNotFoundException
59
47
  end
60
48
  end
61
49
  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.1.0
4
+ version: 0.1.1
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-10-08 00:00:00.000000000Z
15
+ date: 2011-10-09 00:00:00.000000000Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: gherkin
19
- requirement: &70114139294460 !ruby/object:Gem::Requirement
19
+ requirement: &70133830838360 !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: *70114139294460
27
+ version_requirements: *70133830838360
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: minitest
30
- requirement: &70114139294040 !ruby/object:Gem::Requirement
30
+ requirement: &70133830837940 !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: *70114139294040
38
+ version_requirements: *70133830837940
39
39
  - !ruby/object:Gem::Dependency
40
40
  name: colorize
41
- requirement: &70114139293620 !ruby/object:Gem::Requirement
41
+ requirement: &70133830837520 !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: *70114139293620
49
+ version_requirements: *70133830837520
50
50
  - !ruby/object:Gem::Dependency
51
51
  name: hooks
52
- requirement: &70114139293200 !ruby/object:Gem::Requirement
52
+ requirement: &70133830837100 !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: *70114139293200
60
+ version_requirements: *70133830837100
61
61
  - !ruby/object:Gem::Dependency
62
62
  name: purdytest
63
- requirement: &70114139292780 !ruby/object:Gem::Requirement
63
+ requirement: &70133830836680 !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: *70114139292780
71
+ version_requirements: *70133830836680
72
72
  - !ruby/object:Gem::Dependency
73
73
  name: rake
74
- requirement: &70114139292360 !ruby/object:Gem::Requirement
74
+ requirement: &70133830836260 !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: *70114139292360
82
+ version_requirements: *70133830836260
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: mocha
85
- requirement: &70114139291940 !ruby/object:Gem::Requirement
85
+ requirement: &70133830835840 !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: *70114139291940
93
+ version_requirements: *70133830835840
94
94
  - !ruby/object:Gem::Dependency
95
95
  name: sinatra
96
- requirement: &70114139291520 !ruby/object:Gem::Requirement
96
+ requirement: &70133830835420 !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: *70114139291520
104
+ version_requirements: *70133830835420
105
105
  - !ruby/object:Gem::Dependency
106
106
  name: capybara
107
- requirement: &70114139291100 !ruby/object:Gem::Requirement
107
+ requirement: &70133830835000 !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: *70114139291100
115
+ version_requirements: *70133830835000
116
116
  - !ruby/object:Gem::Dependency
117
117
  name: aruba
118
- requirement: &70114139290680 !ruby/object:Gem::Requirement
118
+ requirement: &70133830834580 !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: *70114139290680
126
+ version_requirements: *70133830834580
127
127
  - !ruby/object:Gem::Dependency
128
128
  name: pry
129
- requirement: &70114139290260 !ruby/object:Gem::Requirement
129
+ requirement: &70133830834160 !ruby/object:Gem::Requirement
130
130
  none: false
131
131
  requirements:
132
132
  - - ! '>='
@@ -134,10 +134,10 @@ dependencies:
134
134
  version: '0'
135
135
  type: :development
136
136
  prerelease: false
137
- version_requirements: *70114139290260
137
+ version_requirements: *70133830834160
138
138
  - !ruby/object:Gem::Dependency
139
139
  name: simplecov
140
- requirement: &70114139289840 !ruby/object:Gem::Requirement
140
+ requirement: &70133830833740 !ruby/object:Gem::Requirement
141
141
  none: false
142
142
  requirements:
143
143
  - - ! '>='
@@ -145,7 +145,18 @@ dependencies:
145
145
  version: '0'
146
146
  type: :development
147
147
  prerelease: false
148
- version_requirements: *70114139289840
148
+ version_requirements: *70133830833740
149
+ - !ruby/object:Gem::Dependency
150
+ name: rspec
151
+ requirement: &70133830833320 !ruby/object:Gem::Requirement
152
+ none: false
153
+ requirements:
154
+ - - ! '>='
155
+ - !ruby/object:Gem::Version
156
+ version: '0'
157
+ type: :development
158
+ prerelease: false
159
+ version_requirements: *70133830833320
149
160
  description: Spinach is a BDD framework on top of gherkin
150
161
  email:
151
162
  - info@codegram.com
@@ -169,9 +180,13 @@ files:
169
180
  - features/error_reporting.feature
170
181
  - features/exit_status.feature
171
182
  - features/feature_name_guessing.feature
183
+ - features/rspec_compatibility.feature
172
184
  - features/steps/error_reporting.rb
173
185
  - features/steps/exit_status.rb
174
186
  - features/steps/feature_name_guessing.rb
187
+ - features/steps/rspec_compatibility.rb
188
+ - features/support/env.rb
189
+ - features/support/error_reporting.rb
175
190
  - features/support/spinach_runner.rb
176
191
  - lib/spinach.rb
177
192
  - lib/spinach/capybara.rb
@@ -179,27 +194,32 @@ files:
179
194
  - lib/spinach/config.rb
180
195
  - lib/spinach/dsl.rb
181
196
  - lib/spinach/exceptions.rb
182
- - lib/spinach/feature.rb
197
+ - lib/spinach/feature_steps.rb
183
198
  - lib/spinach/parser.rb
184
199
  - lib/spinach/reporter.rb
185
200
  - lib/spinach/reporter/stdout.rb
186
201
  - lib/spinach/runner.rb
187
202
  - lib/spinach/runner/feature.rb
188
203
  - lib/spinach/runner/scenario.rb
204
+ - lib/spinach/suites.rb
205
+ - lib/spinach/suites/minitest.rb
206
+ - lib/spinach/suites/rspec.rb
189
207
  - lib/spinach/support.rb
190
208
  - lib/spinach/version.rb
191
209
  - spinach.gemspec
210
+ - test/exceptions_test.rb
192
211
  - test/spinach/capybara_test.rb
193
212
  - test/spinach/cli_test.rb
194
213
  - test/spinach/config_test.rb
195
214
  - test/spinach/dsl_test.rb
196
- - test/spinach/feature_test.rb
215
+ - test/spinach/feature_steps_test.rb
197
216
  - test/spinach/parser_test.rb
198
217
  - test/spinach/reporter/stdout_test.rb
199
218
  - test/spinach/reporter_test.rb
200
219
  - test/spinach/runner/feature_test.rb
201
220
  - test/spinach/runner/scenario_test.rb
202
221
  - test/spinach/runner_test.rb
222
+ - test/spinach/suites/minitest_test.rb
203
223
  - test/spinach/support_test.rb
204
224
  - test/spinach_test.rb
205
225
  - test/test_helper.rb
@@ -231,21 +251,27 @@ test_files:
231
251
  - features/error_reporting.feature
232
252
  - features/exit_status.feature
233
253
  - features/feature_name_guessing.feature
254
+ - features/rspec_compatibility.feature
234
255
  - features/steps/error_reporting.rb
235
256
  - features/steps/exit_status.rb
236
257
  - features/steps/feature_name_guessing.rb
258
+ - features/steps/rspec_compatibility.rb
259
+ - features/support/env.rb
260
+ - features/support/error_reporting.rb
237
261
  - features/support/spinach_runner.rb
262
+ - test/exceptions_test.rb
238
263
  - test/spinach/capybara_test.rb
239
264
  - test/spinach/cli_test.rb
240
265
  - test/spinach/config_test.rb
241
266
  - test/spinach/dsl_test.rb
242
- - test/spinach/feature_test.rb
267
+ - test/spinach/feature_steps_test.rb
243
268
  - test/spinach/parser_test.rb
244
269
  - test/spinach/reporter/stdout_test.rb
245
270
  - test/spinach/reporter_test.rb
246
271
  - test/spinach/runner/feature_test.rb
247
272
  - test/spinach/runner/scenario_test.rb
248
273
  - test/spinach/runner_test.rb
274
+ - test/spinach/suites/minitest_test.rb
249
275
  - test/spinach/support_test.rb
250
276
  - test/spinach_test.rb
251
277
  - test/test_helper.rb