guard-rspec 4.3.1 → 4.4.1

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.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/.hound.yml +262 -0
  3. data/.rspec +2 -0
  4. data/.rubocop.yml +2 -0
  5. data/.rubocop_todo.yml +10 -0
  6. data/.travis.yml +2 -3
  7. data/CONTRIBUTING.md +1 -1
  8. data/Gemfile +9 -2
  9. data/Guardfile +11 -4
  10. data/README.md +8 -4
  11. data/Rakefile +23 -2
  12. data/gemfiles/Gemfile.rspec-2.14 +1 -0
  13. data/gemfiles/Gemfile.rspec-2.99 +14 -0
  14. data/gemfiles/Gemfile.rspec-3.0 +1 -0
  15. data/guard-rspec.gemspec +18 -16
  16. data/lib/guard/rspec.rb +13 -8
  17. data/lib/guard/rspec/command.rb +30 -12
  18. data/lib/guard/rspec/deprecator.rb +32 -11
  19. data/lib/guard/rspec/inspectors/base_inspector.rb +36 -15
  20. data/lib/guard/rspec/inspectors/factory.rb +7 -8
  21. data/lib/guard/rspec/inspectors/focused_inspector.rb +2 -2
  22. data/lib/guard/rspec/inspectors/keeping_inspector.rb +7 -6
  23. data/lib/guard/rspec/inspectors/simple_inspector.rb +3 -3
  24. data/lib/guard/rspec/notifier.rb +9 -5
  25. data/lib/guard/rspec/options.rb +12 -10
  26. data/lib/guard/rspec/runner.rb +41 -25
  27. data/lib/guard/rspec/templates/Guardfile +43 -15
  28. data/lib/guard/rspec/version.rb +1 -1
  29. data/lib/guard/rspec_formatter.rb +111 -0
  30. data/spec/lib/guard/rspec/command_spec.rb +48 -12
  31. data/spec/lib/guard/rspec/deprecator_spec.rb +37 -18
  32. data/spec/lib/guard/rspec/inspectors/base_inspector_spec.rb +129 -18
  33. data/spec/lib/guard/rspec/inspectors/factory_spec.rb +20 -15
  34. data/spec/lib/guard/rspec/inspectors/focused_inspector_spec.rb +79 -13
  35. data/spec/lib/guard/rspec/inspectors/keeping_inspector_spec.rb +103 -33
  36. data/spec/lib/guard/rspec/inspectors/shared_examples.rb +93 -31
  37. data/spec/lib/guard/rspec/inspectors/simple_inspector_spec.rb +52 -16
  38. data/spec/lib/guard/rspec/notifier_spec.rb +49 -27
  39. data/spec/lib/guard/rspec/runner_spec.rb +120 -77
  40. data/spec/lib/guard/rspec_formatter_spec.rb +144 -0
  41. data/spec/lib/guard/rspec_spec.rb +23 -18
  42. data/spec/spec_helper.rb +99 -14
  43. metadata +12 -7
  44. data/lib/guard/rspec/formatter.rb +0 -99
  45. data/spec/lib/guard/rspec/formatter_spec.rb +0 -122
@@ -0,0 +1,144 @@
1
+ require "guard/rspec_formatter"
2
+
3
+ RSpec.describe Guard::RSpecFormatter do
4
+ describe "::TEMPORARY_FILE_PATH" do
5
+ subject { Pathname.new(described_class::TEMPORARY_FILE_PATH) }
6
+ it { is_expected.to be_relative }
7
+ end
8
+
9
+ describe "#write_summary" do
10
+ let(:writer) do
11
+ StringIO.new
12
+ end
13
+
14
+ let(:formatter) do
15
+ described_class.new(StringIO.new).tap do |formatter|
16
+ allow(formatter).to receive(:_write) do |&block|
17
+ block.call writer
18
+ end
19
+ end
20
+ end
21
+
22
+ let(:result) do
23
+ writer.rewind
24
+ writer.read
25
+ end
26
+
27
+ context "without stubbed IO" do
28
+ let(:formatter) do
29
+ described_class.new(StringIO.new)
30
+ end
31
+
32
+ it "creates temporary file and and writes to it" do
33
+ file = File.expand_path(described_class::TEMPORARY_FILE_PATH)
34
+
35
+ expect(FileUtils).to receive(:mkdir_p).
36
+ with(File.dirname(file)) {}
37
+
38
+ expect(File).to receive(:open).
39
+ with(file, "w") do |_, _, &block|
40
+ block.call writer
41
+ end
42
+
43
+ formatter.write_summary(123, 1, 2, 3)
44
+ end
45
+ end
46
+
47
+ context "with failures" do
48
+ let(:spec_filename) { "failed_location_spec.rb" }
49
+
50
+ let(:failed_example) do
51
+ double(
52
+ execution_result: { status: "failed" },
53
+ metadata: { location: spec_filename }
54
+ )
55
+ end
56
+
57
+ def expected_output(spec_filename)
58
+ /^3 examples, 1 failures in 123\.0 seconds\n#{spec_filename}\n$/
59
+ end
60
+
61
+ it "writes summary line and failed location in tmp dir" do
62
+ allow(formatter).to receive(:examples) { [failed_example] }
63
+ formatter.write_summary(123, 3, 1, 0)
64
+ expect(result).to match expected_output(spec_filename)
65
+ end
66
+
67
+ it "writes only uniq filenames out" do
68
+ allow(formatter).to receive(:examples).
69
+ and_return([failed_example, failed_example])
70
+
71
+ formatter.write_summary(123, 3, 1, 0)
72
+ expect(result).to match expected_output(spec_filename)
73
+ end
74
+
75
+ context "for rspec 3" do
76
+ let(:notification) do
77
+ Struct.new(:duration, :example_count, :failure_count, :pending_count).
78
+ new(123, 3, 1, 0)
79
+ end
80
+ before do
81
+ allow(formatter.class).to receive(:rspec_3?).and_return(true)
82
+ end
83
+
84
+ it "writes summary line and failed location" do
85
+ allow(formatter).to receive(:examples) { [failed_example] }
86
+ formatter.dump_summary(notification)
87
+ expect(result).to match expected_output(spec_filename)
88
+ end
89
+ end
90
+ end
91
+
92
+ it "should find the spec file for shared examples" do
93
+ metadata = {
94
+ location: "./spec/support/breadcrumbs.rb:75",
95
+ example_group: { location: "./spec/requests/breadcrumbs_spec.rb:218" }
96
+ }
97
+
98
+ result = described_class.extract_spec_location(metadata)
99
+ expect(result).to start_with "./spec/requests/breadcrumbs_spec.rb"
100
+ end
101
+
102
+ # Skip location because of rspec issue
103
+ # https://github.com/rspec/rspec-core/issues/1243
104
+ it "returns only the spec file without line number for shared examples" do
105
+ metadata = {
106
+ location: "./spec/support/breadcrumbs.rb:75",
107
+ example_group: { location: "./spec/requests/breadcrumbs_spec.rb:218" }
108
+ }
109
+ expect(described_class.extract_spec_location(metadata)).
110
+ to eq "./spec/requests/breadcrumbs_spec.rb"
111
+ end
112
+
113
+ context "when a shared examples has no location" do
114
+ it "should return location of the root spec" do
115
+ metadata = {
116
+ location: "./spec/support/breadcrumbs.rb:75",
117
+ example_group: {}
118
+ }
119
+
120
+ expect(STDERR).to receive(:puts).
121
+ with("no spec file found for #{metadata[:location]}") {}
122
+
123
+ expect(described_class.extract_spec_location(metadata)).
124
+ to eq metadata[:location]
125
+ end
126
+ end
127
+
128
+ context "with only success" do
129
+ it "notifies success" do
130
+ formatter.write_summary(123, 3, 0, 0)
131
+ expect(result).to match /^3 examples, 0 failures in 123\.0 seconds\n$/
132
+ end
133
+ end
134
+
135
+ context "with pending" do
136
+ it "notifies pending too" do
137
+ formatter.write_summary(123, 3, 0, 1)
138
+ expect(result).to match(
139
+ /^3 examples, 0 failures \(1 pending\) in 123\.0 seconds\n$/
140
+ )
141
+ end
142
+ end
143
+ end
144
+ end
@@ -1,50 +1,56 @@
1
- require 'spec_helper'
1
+ require "guard/compat/test/helper"
2
+ require "guard/rspec"
2
3
 
3
- describe Guard::RSpec do
4
+ RSpec.describe Guard::RSpec do
4
5
  let(:default_options) { Guard::RSpec::Options::DEFAULTS }
5
6
  let(:options) { {} }
6
7
  let(:plugin) { Guard::RSpec.new(options) }
7
8
  let(:runner) { double(Guard::RSpec::Runner) }
8
- before {
9
+
10
+ before do
9
11
  allow(Guard::UI).to receive(:info)
10
12
  allow(Guard::RSpec::Deprecator).to receive(:warns_about_deprecated_options)
11
13
  allow(Guard::RSpec::Runner).to receive(:new) { runner }
12
- }
14
+ end
13
15
 
14
- describe '.initialize' do
15
- it 'instanciates with default and custom options' do
16
+ describe ".initialize" do
17
+ it "instanciates with default and custom options" do
16
18
  guard_rspec = Guard::RSpec.new(foo: :bar)
17
19
  expect(guard_rspec.options).to eq(default_options.merge(foo: :bar))
18
20
  end
19
21
 
20
- it 'instanciates Runner with all default and custom options' do
21
- expect(Guard::RSpec::Runner).to receive(:new).with(default_options.merge(foo: :bar))
22
+ it "instanciates Runner with all default and custom options" do
23
+ expect(Guard::RSpec::Runner).to receive(:new).
24
+ with(default_options.merge(foo: :bar))
22
25
  Guard::RSpec.new(foo: :bar)
23
26
  end
24
27
 
25
- it 'warns deprecated options' do
26
- expect(Guard::RSpec::Deprecator).to receive(:warns_about_deprecated_options).with(default_options.merge(foo: :bar))
28
+ it "warns deprecated options" do
29
+ expect(Guard::RSpec::Deprecator).
30
+ to receive(:warns_about_deprecated_options).
31
+ with(default_options.merge(foo: :bar))
32
+
27
33
  Guard::RSpec.new(foo: :bar)
28
34
  end
29
35
  end
30
36
 
31
- describe '#start' do
37
+ describe "#start" do
32
38
  it "doesn't call #run_all by default" do
33
39
  expect(plugin).to_not receive(:run_all)
34
40
  plugin.start
35
41
  end
36
42
 
37
- context 'with all_on_start at true' do
43
+ context "with all_on_start at true" do
38
44
  let(:options) { { all_on_start: true } }
39
45
 
40
- it 'calls #run_all' do
46
+ it "calls #run_all" do
41
47
  expect(plugin).to receive(:run_all)
42
48
  plugin.start
43
49
  end
44
50
  end
45
51
  end
46
52
 
47
- describe '#run_all' do
53
+ describe "#run_all" do
48
54
  it "runs all specs via runner" do
49
55
  expect(runner).to receive(:run_all) { true }
50
56
  plugin.run_all
@@ -57,15 +63,15 @@ describe Guard::RSpec do
57
63
  end
58
64
  end
59
65
 
60
- describe '#reload' do
66
+ describe "#reload" do
61
67
  it "reloads via runner" do
62
68
  expect(runner).to receive(:reload)
63
69
  plugin.reload
64
70
  end
65
71
  end
66
72
 
67
- describe '#run_on_modifications' do
68
- let(:paths) { %w[path1 path2] }
73
+ describe "#run_on_modifications" do
74
+ let(:paths) { %w(path1 path2) }
69
75
  it "runs all specs via runner" do
70
76
  expect(runner).to receive(:run).with(paths) { true }
71
77
  plugin.run_on_modifications(paths)
@@ -84,4 +90,3 @@ describe Guard::RSpec do
84
90
  end
85
91
 
86
92
  end
87
-
data/spec/spec_helper.rb CHANGED
@@ -1,24 +1,109 @@
1
- require 'rspec'
2
- require 'guard/rspec'
1
+ require "rspec"
3
2
 
4
- if ENV['CI']
5
- require 'coveralls'
3
+ if ENV["CI"]
4
+ require "coveralls"
6
5
  Coveralls.wear!
7
6
  end
8
7
 
9
- rspec_major_version = RSpec::Version::STRING.to_i
8
+ rspec_version = ::RSpec::Version::STRING.to_f
9
+ old_rspec = (rspec_version < 3)
10
10
 
11
+ # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
11
12
  RSpec.configure do |config|
12
- if rspec_major_version < 3
13
- config.color_enabled = true
14
- config.treat_symbols_as_metadata_keys_with_true_values = true
15
- else
16
- config.color = true
13
+ config.expect_with :rspec do |expectations|
14
+ # This option will default to `true` in RSpec 4. It makes the `description`
15
+ # and `failure_message` of custom matchers include text for helper methods
16
+ # defined using `chain`, e.g.:
17
+ # be_bigger_than(2).and_smaller_than(4).description
18
+ # # => "be bigger than 2 and smaller than 4"
19
+ # ...rather than:
20
+ # # => "be bigger than 2"
21
+
22
+ unless old_rspec
23
+ if rspec_version > 3.0
24
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
25
+ end
26
+ end
17
27
  end
18
- config.order = :random
19
- config.filter_run focus: ENV['CI'] != 'true'
28
+
29
+ # rspec-mocks config goes here. You can use an alternate test double
30
+ # library (such as bogus or mocha) by changing the `mock_with` option here.
31
+ config.mock_with :rspec do |mocks|
32
+ # Prevents you from mocking or stubbing a method that does not exist on
33
+ # a real object. This is generally recommended, and will default to
34
+ # `true` in RSpec 4.
35
+ unless old_rspec
36
+ mocks.verify_partial_doubles = true
37
+ end
38
+
39
+ end
40
+
41
+ # These two settings work together to allow you to limit a spec run
42
+ # to individual examples or groups you care about by tagging them with
43
+ # `:focus` metadata. When nothing is tagged with `:focus`, all examples
44
+ # get run.
45
+ config.filter_run focus: ENV["CI"] != "true"
20
46
  config.run_all_when_everything_filtered = true
21
- config.expect_with :rspec do |c|
22
- c.syntax = :expect
47
+
48
+ # Limits the available syntax to the non-monkey patched syntax that is
49
+ # recommended.
50
+ # For more details, see:
51
+ # - http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax
52
+ # - http://teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
53
+ # - http://myronmars.to/n/dev-blog/2014/05/notable-changes-in-rspec-3#new__config_option_to_disable_rspeccore_monkey_patching
54
+
55
+ unless old_rspec
56
+ config.disable_monkey_patching!
57
+ end
58
+
59
+ # This setting enables warnings. It's recommended, but in some cases may
60
+ # be too noisy due to issues in dependencies.
61
+ # config.warnings = true
62
+
63
+ # Many RSpec users commonly either run the entire suite or an individual
64
+ # file, and it's useful to allow more verbose output when running an
65
+ # individual spec file.
66
+ if config.files_to_run.one?
67
+ # Use the documentation formatter for detailed output,
68
+ # unless a formatter has already been configured
69
+ # (e.g. via a command-line flag).
70
+ config.default_formatter = "doc"
71
+ end
72
+
73
+ # Print the 10 slowest examples and example groups at the
74
+ # end of the spec run, to help surface which specs are running
75
+ # particularly slow.
76
+ # config.profile_examples = 10
77
+
78
+ # Run specs in random order to surface order dependencies. If you find an
79
+ # order dependency and want to debug it, you can fix the order by providing
80
+ # the seed, which is printed after each run.
81
+ # --seed 1234
82
+ config.order = :random
83
+
84
+ # Seed global randomization in this process using the `--seed` CLI option.
85
+ # Setting this allows you to use `--seed` to deterministically reproduce
86
+ # test failures related to randomization by passing the same `--seed` value
87
+ # as the one that triggered the failure.
88
+ Kernel.srand config.seed
89
+
90
+ config.raise_errors_for_deprecations!
91
+
92
+ config.before do
93
+ allow(Dir).to receive(:[]) do |*args|
94
+ abort "stub me: Dir[#{args.first}]!"
95
+ end
96
+
97
+ %w(directory? delete readlines).each do |meth|
98
+ allow(File).to receive(meth.to_sym) do |*args|
99
+ abort "stub me: File.#{meth}(#{args.map(&:inspect) * ","})!"
100
+ end
101
+ end
102
+
103
+ %w(mkdir).each do |meth|
104
+ allow(FileUtils).to receive(meth.to_sym) do |*args|
105
+ abort "stub me: FileUtils.#{meth}(#{args.map(&:inspect) * ","})!"
106
+ end
107
+ end
23
108
  end
24
109
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: guard-rspec
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.3.1
4
+ version: 4.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thibaud Guillaume-Gentil
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-23 00:00:00.000000000 Z
11
+ date: 2014-12-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: guard
@@ -30,7 +30,7 @@ dependencies:
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '2.14'
33
+ version: 2.99.0
34
34
  - - "<"
35
35
  - !ruby/object:Gem::Version
36
36
  version: '4.0'
@@ -40,7 +40,7 @@ dependencies:
40
40
  requirements:
41
41
  - - ">="
42
42
  - !ruby/object:Gem::Version
43
- version: '2.14'
43
+ version: 2.99.0
44
44
  - - "<"
45
45
  - !ruby/object:Gem::Version
46
46
  version: '4.0'
@@ -99,6 +99,10 @@ extensions: []
99
99
  extra_rdoc_files: []
100
100
  files:
101
101
  - ".gitignore"
102
+ - ".hound.yml"
103
+ - ".rspec"
104
+ - ".rubocop.yml"
105
+ - ".rubocop_todo.yml"
102
106
  - ".travis.yml"
103
107
  - CONTRIBUTING.md
104
108
  - Gemfile
@@ -107,12 +111,12 @@ files:
107
111
  - README.md
108
112
  - Rakefile
109
113
  - gemfiles/Gemfile.rspec-2.14
114
+ - gemfiles/Gemfile.rspec-2.99
110
115
  - gemfiles/Gemfile.rspec-3.0
111
116
  - guard-rspec.gemspec
112
117
  - lib/guard/rspec.rb
113
118
  - lib/guard/rspec/command.rb
114
119
  - lib/guard/rspec/deprecator.rb
115
- - lib/guard/rspec/formatter.rb
116
120
  - lib/guard/rspec/inspectors/base_inspector.rb
117
121
  - lib/guard/rspec/inspectors/factory.rb
118
122
  - lib/guard/rspec/inspectors/focused_inspector.rb
@@ -123,9 +127,9 @@ files:
123
127
  - lib/guard/rspec/runner.rb
124
128
  - lib/guard/rspec/templates/Guardfile
125
129
  - lib/guard/rspec/version.rb
130
+ - lib/guard/rspec_formatter.rb
126
131
  - spec/lib/guard/rspec/command_spec.rb
127
132
  - spec/lib/guard/rspec/deprecator_spec.rb
128
- - spec/lib/guard/rspec/formatter_spec.rb
129
133
  - spec/lib/guard/rspec/inspectors/base_inspector_spec.rb
130
134
  - spec/lib/guard/rspec/inspectors/factory_spec.rb
131
135
  - spec/lib/guard/rspec/inspectors/focused_inspector_spec.rb
@@ -134,6 +138,7 @@ files:
134
138
  - spec/lib/guard/rspec/inspectors/simple_inspector_spec.rb
135
139
  - spec/lib/guard/rspec/notifier_spec.rb
136
140
  - spec/lib/guard/rspec/runner_spec.rb
141
+ - spec/lib/guard/rspec_formatter_spec.rb
137
142
  - spec/lib/guard/rspec_spec.rb
138
143
  - spec/spec_helper.rb
139
144
  homepage: https://rubygems.org/gems/guard-rspec
@@ -163,7 +168,6 @@ summary: Guard gem for RSpec
163
168
  test_files:
164
169
  - spec/lib/guard/rspec/command_spec.rb
165
170
  - spec/lib/guard/rspec/deprecator_spec.rb
166
- - spec/lib/guard/rspec/formatter_spec.rb
167
171
  - spec/lib/guard/rspec/inspectors/base_inspector_spec.rb
168
172
  - spec/lib/guard/rspec/inspectors/factory_spec.rb
169
173
  - spec/lib/guard/rspec/inspectors/focused_inspector_spec.rb
@@ -172,5 +176,6 @@ test_files:
172
176
  - spec/lib/guard/rspec/inspectors/simple_inspector_spec.rb
173
177
  - spec/lib/guard/rspec/notifier_spec.rb
174
178
  - spec/lib/guard/rspec/runner_spec.rb
179
+ - spec/lib/guard/rspec_formatter_spec.rb
175
180
  - spec/lib/guard/rspec_spec.rb
176
181
  - spec/spec_helper.rb