shoulda 3.4.0 → 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +9 -7
  3. data/.hound.yml +3 -0
  4. data/.rubocop.yml +192 -0
  5. data/.ruby-version +1 -0
  6. data/.travis.yml +33 -2
  7. data/Appraisals +109 -8
  8. data/CHANGELOG.md +10 -0
  9. data/CONTRIBUTING.md +6 -1
  10. data/Gemfile +13 -0
  11. data/README.md +67 -74
  12. data/Rakefile +24 -10
  13. data/gemfiles/rails_4_2.gemfile +34 -0
  14. data/gemfiles/rails_4_2.gemfile.lock +240 -0
  15. data/gemfiles/rails_5_0.gemfile +32 -0
  16. data/gemfiles/rails_5_0.gemfile.lock +232 -0
  17. data/gemfiles/rails_5_1.gemfile +33 -0
  18. data/gemfiles/rails_5_1.gemfile.lock +247 -0
  19. data/gemfiles/rails_5_2.gemfile +35 -0
  20. data/gemfiles/rails_5_2.gemfile.lock +266 -0
  21. data/gemfiles/rails_6_0.gemfile +37 -0
  22. data/gemfiles/rails_6_0.gemfile.lock +291 -0
  23. data/lib/shoulda/version.rb +1 -1
  24. data/script/install_gems_in_all_appraisals +16 -0
  25. data/script/run_all_tests +16 -0
  26. data/script/supported_ruby_versions +7 -0
  27. data/script/update_gem_in_all_appraisals +17 -0
  28. data/script/update_gems_in_all_appraisals +16 -0
  29. data/shoulda.gemspec +23 -23
  30. data/test/acceptance/integrates_with_rails_test.rb +580 -0
  31. data/test/acceptance_test_helper.rb +43 -0
  32. data/test/support/acceptance/add_shoulda_to_project.rb +73 -0
  33. data/test/support/acceptance/helpers/array_helpers.rb +13 -0
  34. data/test/support/acceptance/helpers/pluralization_helpers.rb +13 -0
  35. data/test/support/acceptance/matchers/have_output.rb +33 -0
  36. data/test/support/acceptance/matchers/indicate_that_tests_were_run.rb +109 -0
  37. data/test/support/acceptance/rails_application_with_shoulda.rb +47 -0
  38. data/test/support/current_bundle.rb +61 -0
  39. data/test/support/snowglobe.rb +5 -0
  40. data/test/test_helper.rb +23 -0
  41. metadata +61 -153
  42. data/features/rails_integration.feature +0 -87
  43. data/features/step_definitions/rails_steps.rb +0 -77
  44. data/features/support/env.rb +0 -14
  45. data/gemfiles/3.0.gemfile +0 -7
  46. data/gemfiles/3.0.gemfile.lock +0 -127
  47. data/gemfiles/3.1.gemfile +0 -9
  48. data/gemfiles/3.1.gemfile.lock +0 -149
  49. data/gemfiles/3.2.gemfile +0 -9
  50. data/gemfiles/3.2.gemfile.lock +0 -146
@@ -0,0 +1,43 @@
1
+ require_relative 'support/current_bundle'
2
+
3
+ Tests::CurrentBundle.instance.assert_appraisal!
4
+
5
+ #---
6
+
7
+ require 'test_helper'
8
+
9
+ require_relative 'support/acceptance/rails_application_with_shoulda'
10
+ require_relative 'support/acceptance/matchers/have_output'
11
+ require_relative 'support/acceptance/matchers/indicate_that_tests_were_run'
12
+
13
+ class AcceptanceTest < Minitest::Test
14
+ include AcceptanceTests::Matchers
15
+
16
+ private
17
+
18
+ def app
19
+ @app ||= AcceptanceTests::RailsApplicationWithShoulda.new
20
+ end
21
+ end
22
+
23
+ begin
24
+ require 'rails/test_unit/reporter'
25
+
26
+ # Patch Rails' reporter for Minitest so that it looks for the test
27
+ # correctly under Minitest 5.11
28
+ # See: <https://github.com/rails/rails/pull/31624>
29
+ Rails::TestUnitReporter.class_eval do
30
+ def format_rerun_snippet(result)
31
+ location, line =
32
+ if result.respond_to?(:source_location)
33
+ result.source_location
34
+ else
35
+ result.method(result.name).source_location
36
+ end
37
+
38
+ "#{executable} #{relative_path_for(location)}:#{line}"
39
+ end
40
+ end
41
+ rescue LoadError
42
+ # Okay, rails/test_unit/reporter isn't a thing, no big deal
43
+ end
@@ -0,0 +1,73 @@
1
+ module AcceptanceTests
2
+ class AddShouldaToProject
3
+ ROOT_DIRECTORY = Pathname.new('../../..').expand_path(__FILE__)
4
+
5
+ def self.call(app, options)
6
+ new(app, options).call
7
+ end
8
+
9
+ def initialize(app, options)
10
+ @app = app
11
+ @options = options
12
+ end
13
+
14
+ def call
15
+ app.add_gem 'shoulda', gem_options
16
+
17
+ unless options[:with_configuration] === false
18
+ add_configuration_block_to_test_helper
19
+ end
20
+ end
21
+
22
+ private
23
+
24
+ attr_reader :app, :options
25
+
26
+ def test_framework
27
+ options[:test_framework]
28
+ end
29
+
30
+ def libraries
31
+ options.fetch(:libraries, [])
32
+ end
33
+
34
+ def gem_options
35
+ gem_options = { path: ROOT_DIRECTORY }
36
+
37
+ if options[:manually]
38
+ gem_options[:require] = false
39
+ end
40
+
41
+ gem_options
42
+ end
43
+
44
+ def add_configuration_block_to_test_helper
45
+ content = <<-CONTENT
46
+ Shoulda::Matchers.configure do |config|
47
+ config.integrate do |with|
48
+ #{test_framework_config}
49
+ #{library_config}
50
+ end
51
+ end
52
+ CONTENT
53
+
54
+ if options[:manually]
55
+ content = "require 'shoulda'\n#{content}"
56
+ end
57
+
58
+ app.append_to_file('test/test_helper.rb', content)
59
+ end
60
+
61
+ def test_framework_config
62
+ if test_framework
63
+ "with.test_framework :#{test_framework}\n"
64
+ else
65
+ ''
66
+ end
67
+ end
68
+
69
+ def library_config
70
+ libraries.map { |library| "with.library :#{library}" }.join("\n")
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,13 @@
1
+ module AcceptanceTests
2
+ module ArrayHelpers
3
+ def to_sentence(array)
4
+ if array.size == 1
5
+ array[0]
6
+ elsif array.size == 2
7
+ array.join(' and ')
8
+ else
9
+ to_sentence(array[1..-2].join(', '), [array[-1]])
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ module AcceptanceTests
2
+ module PluralizationHelpers
3
+ def pluralize(count, singular_version, plural_version = nil)
4
+ plural_version ||= singular_version + 's'
5
+
6
+ if count == 1
7
+ "#{count} #{singular_version}"
8
+ else
9
+ "#{count} #{plural_version}"
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,33 @@
1
+ module AcceptanceTests
2
+ module Matchers
3
+ # rubocop:disable Naming/PredicateName
4
+ def have_output(output)
5
+ HaveOutputMatcher.new(output)
6
+ end
7
+ # rubocop:enable Naming/PredicateName
8
+
9
+ class HaveOutputMatcher
10
+ def initialize(output)
11
+ @output = output
12
+ end
13
+
14
+ def matches?(runner)
15
+ @runner = runner
16
+ runner.has_output?(output)
17
+ end
18
+
19
+ def failure_message
20
+ "Expected command to have output, but did not.\n\n" +
21
+ "Command: #{runner.formatted_command}\n\n" +
22
+ "Expected output:\n" +
23
+ output.inspect + "\n\n" +
24
+ "Actual output:\n" +
25
+ runner.output
26
+ end
27
+
28
+ protected
29
+
30
+ attr_reader :output, :runner
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,109 @@
1
+ require_relative '../helpers/array_helpers'
2
+ require_relative '../helpers/pluralization_helpers'
3
+
4
+ module AcceptanceTests
5
+ module Matchers
6
+ def indicate_that_tests_were_run(series)
7
+ IndicateThatTestsWereRunMatcher.new(series)
8
+ end
9
+
10
+ class IndicateThatTestsWereRunMatcher
11
+ include ArrayHelpers
12
+ include PluralizationHelpers
13
+
14
+ def initialize(expected_numbers)
15
+ @expected_numbers = expected_numbers
16
+ end
17
+
18
+ def matches?(runner)
19
+ @runner = runner
20
+ Set.new(expected_numbers).subset?(Set.new(actual_numbers))
21
+ end
22
+
23
+ def failure_message
24
+ "Expected output to indicate that #{some_tests_were_run}.\n" +
25
+ "#{formatted_expected_numbers}\n" +
26
+ "#{formatted_actual_numbers}\n\n" +
27
+ "Output:\n\n" +
28
+ actual_output
29
+ end
30
+
31
+ protected
32
+
33
+ attr_reader :expected_numbers, :runner
34
+
35
+ private
36
+
37
+ def some_tests_were_run
38
+ if some_tests_were_run_clauses.size > 1
39
+ "#{to_sentence(some_tests_were_run_clauses)} were run"
40
+ else
41
+ "#{some_tests_were_run_clauses} was run"
42
+ end
43
+ end
44
+
45
+ def some_tests_were_run_clauses
46
+ expected_numbers.map do |type, number|
47
+ if number == 1
48
+ "#{number} #{type.to_s.chop}"
49
+ else
50
+ "#{number} #{type}"
51
+ end
52
+ end
53
+ end
54
+
55
+ def formatted_expected_numbers
56
+ "Expected numbers: #{format_hash(expected_numbers)}"
57
+ end
58
+
59
+ def formatted_actual_numbers
60
+ report_line = find_report_line_in(actual_output)
61
+
62
+ if report_line
63
+ "Actual numbers: #{report_line.inspect}"
64
+ else
65
+ 'Actual numbers: (n/a)'
66
+ end
67
+ end
68
+
69
+ def actual_numbers
70
+ numbers = parse(
71
+ actual_output,
72
+ [:tests, :assertions, :failures, :errors, :skips],
73
+ )
74
+ numbers || {}
75
+ end
76
+
77
+ def actual_output
78
+ runner.output
79
+ end
80
+
81
+ def parse(text, pieces)
82
+ report_line = find_report_line_in(text)
83
+
84
+ if report_line
85
+ pieces.inject({}) do |hash, piece|
86
+ number = report_line.match(/(\d+) #{piece}/)[1].to_i
87
+ hash.merge(piece => number)
88
+ end
89
+ end
90
+ end
91
+
92
+ def find_report_line_in(text)
93
+ lines = text.split(/\n/)
94
+
95
+ index_of_line_with_time = lines.find_index do |line|
96
+ line =~ /\AFinished in \d\.\d+s\Z/
97
+ end
98
+
99
+ if index_of_line_with_time
100
+ lines[index_of_line_with_time + 1]
101
+ end
102
+ end
103
+
104
+ def format_hash(hash)
105
+ '{' + hash.map { |k, v| "#{k}: #{v.inspect}" }.join(', ') + '}'
106
+ end
107
+ end
108
+ end
109
+ end
@@ -0,0 +1,47 @@
1
+ require_relative 'add_shoulda_to_project'
2
+ require_relative '../snowglobe'
3
+
4
+ module AcceptanceTests
5
+ class RailsApplicationWithShoulda < Snowglobe::RailsApplication
6
+ def create
7
+ super
8
+
9
+ bundle.updating do
10
+ bundle.add_gem 'minitest-reporters'
11
+ AddShouldaToProject.call(
12
+ self,
13
+ test_framework: :minitest,
14
+ libraries: [:rails],
15
+ )
16
+ end
17
+
18
+ fs.append_to_file 'test/test_helper.rb', <<-FILE
19
+ require 'minitest/autorun'
20
+ require 'minitest/reporters'
21
+
22
+ Minitest::Reporters.use!(Minitest::Reporters::SpecReporter.new)
23
+
24
+ begin
25
+ require "rails/test_unit/reporter"
26
+
27
+ # Patch Rails' reporter for Minitest so that it looks for the test
28
+ # correctly under Minitest 5.11
29
+ # See: <https://github.com/rails/rails/pull/31624>
30
+ Rails::TestUnitReporter.class_eval do
31
+ def format_rerun_snippet(result)
32
+ location, line = if result.respond_to?(:source_location)
33
+ result.source_location
34
+ else
35
+ result.method(result.name).source_location
36
+ end
37
+
38
+ "\#{executable} \#{relative_path_for(location)}:\#{line}"
39
+ end
40
+ end
41
+ rescue LoadError
42
+ # Okay, rails/test_unit/reporter isn't a thing, no big deal
43
+ end
44
+ FILE
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,61 @@
1
+ require 'bundler'
2
+ require 'appraisal'
3
+
4
+ module Tests
5
+ class CurrentBundle
6
+ AppraisalNotSpecified = Class.new(ArgumentError)
7
+
8
+ include Singleton
9
+
10
+ def assert_appraisal!
11
+ unless appraisal_in_use?
12
+ message = <<MSG
13
+
14
+
15
+ Please run tests starting with `appraisal <appraisal_name>`.
16
+ Possible appraisals are: #{available_appraisals}
17
+
18
+ MSG
19
+ raise AppraisalNotSpecified, message
20
+ end
21
+ end
22
+
23
+ def appraisal_in_use?
24
+ path.dirname == root.join('gemfiles')
25
+ end
26
+
27
+ def current_or_latest_appraisal
28
+ current_appraisal || latest_appraisal
29
+ end
30
+
31
+ def latest_appraisal
32
+ available_appraisals.max
33
+ end
34
+
35
+ private
36
+
37
+ def available_appraisals
38
+ appraisals = []
39
+
40
+ Appraisal::AppraisalFile.each do |appraisal|
41
+ appraisals << appraisal.name
42
+ end
43
+
44
+ appraisals
45
+ end
46
+
47
+ def current_appraisal
48
+ if appraisal_in_use?
49
+ File.basename(path, '.gemfile')
50
+ end
51
+ end
52
+
53
+ def path
54
+ Bundler.default_gemfile
55
+ end
56
+
57
+ def root
58
+ Pathname.new('../../..').expand_path(__FILE__)
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,5 @@
1
+ require 'snowglobe'
2
+
3
+ Snowglobe.configure do |config|
4
+ config.project_name = 'shoulda'
5
+ end
@@ -0,0 +1,23 @@
1
+ require 'bundler/setup'
2
+ require 'pry'
3
+ require 'pry-byebug'
4
+ require 'minitest/autorun'
5
+ require 'minitest/reporters'
6
+ require 'warnings_logger'
7
+
8
+ require_relative '../lib/shoulda'
9
+
10
+ Minitest::Reporters.use!(Minitest::Reporters::SpecReporter.new)
11
+
12
+ WarningsLogger::Spy.call(
13
+ project_name: 'shoulda',
14
+ project_directory: Pathname.new('../..').expand_path(__FILE__),
15
+ )
16
+
17
+ Shoulda::Matchers.configure do |config|
18
+ config.integrate do |with|
19
+ with.test_framework :minitest
20
+ end
21
+ end
22
+
23
+ $VERBOSE = true
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shoulda
3
3
  version: !ruby/object:Gem::Version
4
- prerelease:
5
- version: 3.4.0
4
+ version: 4.0.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Tammer Saleh
@@ -13,207 +12,116 @@ authors:
13
12
  autorequire:
14
13
  bindir: bin
15
14
  cert_chain: []
16
- date: 2013-03-18 00:00:00.000000000 Z
15
+ date: 2020-06-13 00:00:00.000000000 Z
17
16
  dependencies:
18
17
  - !ruby/object:Gem::Dependency
19
- prerelease: false
20
18
  name: shoulda-context
21
- type: :runtime
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ~>
25
- - !ruby/object:Gem::Version
26
- version: '1.0'
27
- - - ! '>='
28
- - !ruby/object:Gem::Version
29
- version: 1.0.1
30
- none: false
31
19
  requirement: !ruby/object:Gem::Requirement
32
20
  requirements:
33
- - - ~>
34
- - !ruby/object:Gem::Version
35
- version: '1.0'
36
- - - ! '>='
21
+ - - "~>"
37
22
  - !ruby/object:Gem::Version
38
- version: 1.0.1
39
- none: false
40
- - !ruby/object:Gem::Dependency
41
- prerelease: false
42
- name: shoulda-matchers
23
+ version: '2.0'
43
24
  type: :runtime
44
- version_requirements: !ruby/object:Gem::Requirement
45
- requirements:
46
- - - ~>
47
- - !ruby/object:Gem::Version
48
- version: '1.0'
49
- - - ! '>='
50
- - !ruby/object:Gem::Version
51
- version: 1.4.1
52
- none: false
53
- requirement: !ruby/object:Gem::Requirement
54
- requirements:
55
- - - ~>
56
- - !ruby/object:Gem::Version
57
- version: '1.0'
58
- - - ! '>='
59
- - !ruby/object:Gem::Version
60
- version: 1.4.1
61
- none: false
62
- - !ruby/object:Gem::Dependency
63
- prerelease: false
64
- name: appraisal
65
- type: :development
66
- version_requirements: !ruby/object:Gem::Requirement
67
- requirements:
68
- - - ~>
69
- - !ruby/object:Gem::Version
70
- version: 0.4.0
71
- none: false
72
- requirement: !ruby/object:Gem::Requirement
73
- requirements:
74
- - - ~>
75
- - !ruby/object:Gem::Version
76
- version: 0.4.0
77
- none: false
78
- - !ruby/object:Gem::Dependency
79
- prerelease: false
80
- name: rails
81
- type: :development
82
- version_requirements: !ruby/object:Gem::Requirement
83
- requirements:
84
- - - '='
85
- - !ruby/object:Gem::Version
86
- version: 3.0.12
87
- none: false
88
- requirement: !ruby/object:Gem::Requirement
89
- requirements:
90
- - - '='
91
- - !ruby/object:Gem::Version
92
- version: 3.0.12
93
- none: false
94
- - !ruby/object:Gem::Dependency
95
- prerelease: false
96
- name: sqlite3
97
- type: :development
98
- version_requirements: !ruby/object:Gem::Requirement
99
- requirements:
100
- - - ~>
101
- - !ruby/object:Gem::Version
102
- version: 1.3.2
103
- none: false
104
- requirement: !ruby/object:Gem::Requirement
105
- requirements:
106
- - - ~>
107
- - !ruby/object:Gem::Version
108
- version: 1.3.2
109
- none: false
110
- - !ruby/object:Gem::Dependency
111
25
  prerelease: false
112
- name: rspec-rails
113
- type: :development
114
26
  version_requirements: !ruby/object:Gem::Requirement
115
27
  requirements:
116
- - - ~>
117
- - !ruby/object:Gem::Version
118
- version: 2.7.0
119
- none: false
120
- requirement: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - ~>
28
+ - - "~>"
123
29
  - !ruby/object:Gem::Version
124
- version: 2.7.0
125
- none: false
30
+ version: '2.0'
126
31
  - !ruby/object:Gem::Dependency
127
- prerelease: false
128
- name: cucumber
129
- type: :development
130
- version_requirements: !ruby/object:Gem::Requirement
131
- requirements:
132
- - - ~>
133
- - !ruby/object:Gem::Version
134
- version: 1.1.0
135
- none: false
32
+ name: shoulda-matchers
136
33
  requirement: !ruby/object:Gem::Requirement
137
34
  requirements:
138
- - - ~>
35
+ - - "~>"
139
36
  - !ruby/object:Gem::Version
140
- version: 1.1.0
141
- none: false
142
- - !ruby/object:Gem::Dependency
37
+ version: '4.0'
38
+ type: :runtime
143
39
  prerelease: false
144
- name: aruba
145
- type: :development
146
40
  version_requirements: !ruby/object:Gem::Requirement
147
41
  requirements:
148
- - - ~>
149
- - !ruby/object:Gem::Version
150
- version: 0.4.11
151
- none: false
152
- requirement: !ruby/object:Gem::Requirement
153
- requirements:
154
- - - ~>
42
+ - - "~>"
155
43
  - !ruby/object:Gem::Version
156
- version: 0.4.11
157
- none: false
44
+ version: '4.0'
158
45
  description: Making tests easy on the fingers and eyes
159
46
  email: support@thoughtbot.com
160
47
  executables: []
161
48
  extensions: []
162
49
  extra_rdoc_files: []
163
50
  files:
164
- - .autotest
165
- - .gitignore
166
- - .travis.yml
51
+ - ".autotest"
52
+ - ".gitignore"
53
+ - ".hound.yml"
54
+ - ".rubocop.yml"
55
+ - ".ruby-version"
56
+ - ".travis.yml"
167
57
  - Appraisals
58
+ - CHANGELOG.md
168
59
  - CONTRIBUTING.md
169
60
  - Gemfile
170
61
  - MIT-LICENSE
171
62
  - README.md
172
63
  - Rakefile
173
- - features/rails_integration.feature
174
- - features/step_definitions/rails_steps.rb
175
- - features/support/env.rb
176
- - gemfiles/3.0.gemfile
177
- - gemfiles/3.0.gemfile.lock
178
- - gemfiles/3.1.gemfile
179
- - gemfiles/3.1.gemfile.lock
180
- - gemfiles/3.2.gemfile
181
- - gemfiles/3.2.gemfile.lock
64
+ - gemfiles/rails_4_2.gemfile
65
+ - gemfiles/rails_4_2.gemfile.lock
66
+ - gemfiles/rails_5_0.gemfile
67
+ - gemfiles/rails_5_0.gemfile.lock
68
+ - gemfiles/rails_5_1.gemfile
69
+ - gemfiles/rails_5_1.gemfile.lock
70
+ - gemfiles/rails_5_2.gemfile
71
+ - gemfiles/rails_5_2.gemfile.lock
72
+ - gemfiles/rails_6_0.gemfile
73
+ - gemfiles/rails_6_0.gemfile.lock
182
74
  - lib/shoulda.rb
183
75
  - lib/shoulda/version.rb
76
+ - script/install_gems_in_all_appraisals
77
+ - script/run_all_tests
78
+ - script/supported_ruby_versions
79
+ - script/update_gem_in_all_appraisals
80
+ - script/update_gems_in_all_appraisals
184
81
  - shoulda.gemspec
82
+ - test/acceptance/integrates_with_rails_test.rb
83
+ - test/acceptance_test_helper.rb
84
+ - test/support/acceptance/add_shoulda_to_project.rb
85
+ - test/support/acceptance/helpers/array_helpers.rb
86
+ - test/support/acceptance/helpers/pluralization_helpers.rb
87
+ - test/support/acceptance/matchers/have_output.rb
88
+ - test/support/acceptance/matchers/indicate_that_tests_were_run.rb
89
+ - test/support/acceptance/rails_application_with_shoulda.rb
90
+ - test/support/current_bundle.rb
91
+ - test/support/snowglobe.rb
92
+ - test/test_helper.rb
185
93
  homepage: https://github.com/thoughtbot/shoulda
186
94
  licenses:
187
95
  - MIT
96
+ metadata: {}
188
97
  post_install_message:
189
98
  rdoc_options: []
190
99
  require_paths:
191
100
  - lib
192
101
  required_ruby_version: !ruby/object:Gem::Requirement
193
102
  requirements:
194
- - - ! '>='
103
+ - - ">="
195
104
  - !ruby/object:Gem::Version
196
- segments:
197
- - 0
198
- hash: 1378977218323282975
199
105
  version: '0'
200
- none: false
201
106
  required_rubygems_version: !ruby/object:Gem::Requirement
202
107
  requirements:
203
- - - ! '>='
108
+ - - ">="
204
109
  - !ruby/object:Gem::Version
205
- segments:
206
- - 0
207
- hash: 1378977218323282975
208
110
  version: '0'
209
- none: false
210
111
  requirements: []
211
- rubyforge_project:
212
- rubygems_version: 1.8.23
112
+ rubygems_version: 3.1.2
213
113
  signing_key:
214
- specification_version: 3
114
+ specification_version: 4
215
115
  summary: Making tests easy on the fingers and eyes
216
116
  test_files:
217
- - features/rails_integration.feature
218
- - features/step_definitions/rails_steps.rb
219
- - features/support/env.rb
117
+ - test/acceptance/integrates_with_rails_test.rb
118
+ - test/acceptance_test_helper.rb
119
+ - test/support/acceptance/add_shoulda_to_project.rb
120
+ - test/support/acceptance/helpers/array_helpers.rb
121
+ - test/support/acceptance/helpers/pluralization_helpers.rb
122
+ - test/support/acceptance/matchers/have_output.rb
123
+ - test/support/acceptance/matchers/indicate_that_tests_were_run.rb
124
+ - test/support/acceptance/rails_application_with_shoulda.rb
125
+ - test/support/current_bundle.rb
126
+ - test/support/snowglobe.rb
127
+ - test/test_helper.rb