rspec-core 3.0.0.beta1 → 3.0.0.beta2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (145) hide show
  1. data.tar.gz.sig +0 -0
  2. data/Changelog.md +137 -0
  3. data/README.md +2 -2
  4. data/exe/rspec +2 -23
  5. data/features/README.md +1 -5
  6. data/features/command_line/README.md +7 -10
  7. data/features/command_line/exit_status.feature +1 -1
  8. data/features/command_line/format_option.feature +1 -1
  9. data/features/command_line/init.feature +40 -1
  10. data/features/command_line/line_number_option.feature +2 -2
  11. data/features/command_line/ruby.feature +5 -4
  12. data/features/configuration/enable_global_dsl.feature +54 -0
  13. data/features/example_groups/aliasing.feature +48 -0
  14. data/features/example_groups/basic_structure.feature +1 -1
  15. data/features/expectation_framework_integration/configure_expectation_framework.feature +1 -1
  16. data/features/filtering/if_and_unless.feature +0 -30
  17. data/features/formatters/custom_formatter.feature +32 -0
  18. data/features/formatters/regression_tests.feature +95 -0
  19. data/features/hooks/around_hooks.feature +1 -0
  20. data/features/hooks/before_and_after_hooks.feature +2 -2
  21. data/features/mock_framework_integration/use_flexmock.feature +11 -13
  22. data/features/mock_framework_integration/use_mocha.feature +11 -13
  23. data/features/mock_framework_integration/use_rr.feature +11 -13
  24. data/features/mock_framework_integration/use_rspec.feature +11 -13
  25. data/features/pending_and_skipped_examples/README.md +3 -0
  26. data/features/pending_and_skipped_examples/pending_examples.feature +118 -0
  27. data/features/pending_and_skipped_examples/skipped_examples.feature +106 -0
  28. data/features/step_definitions/additional_cli_steps.rb +34 -0
  29. data/features/subject/explicit_subject.feature +1 -1
  30. data/features/subject/one_liner_syntax.feature +71 -0
  31. data/lib/rspec/core.rb +6 -14
  32. data/lib/rspec/core/backtrace_formatter.rb +16 -4
  33. data/lib/rspec/core/command_line.rb +2 -3
  34. data/lib/rspec/core/configuration.rb +114 -125
  35. data/lib/rspec/core/configuration_options.rb +32 -18
  36. data/lib/rspec/core/dsl.rb +80 -18
  37. data/lib/rspec/core/example.rb +84 -33
  38. data/lib/rspec/core/example_group.rb +95 -43
  39. data/lib/rspec/core/filter_manager.rb +31 -40
  40. data/lib/rspec/core/formatters.rb +137 -0
  41. data/lib/rspec/core/formatters/base_formatter.rb +28 -41
  42. data/lib/rspec/core/formatters/base_text_formatter.rb +26 -37
  43. data/lib/rspec/core/formatters/deprecation_formatter.rb +48 -27
  44. data/lib/rspec/core/formatters/documentation_formatter.rb +27 -22
  45. data/lib/rspec/core/formatters/html_formatter.rb +48 -56
  46. data/lib/rspec/core/formatters/html_printer.rb +11 -18
  47. data/lib/rspec/core/formatters/json_formatter.rb +18 -22
  48. data/lib/rspec/core/formatters/legacy_formatter.rb +227 -0
  49. data/lib/rspec/core/formatters/progress_formatter.rb +7 -10
  50. data/lib/rspec/core/hooks.rb +250 -217
  51. data/lib/rspec/core/memoized_helpers.rb +43 -9
  52. data/lib/rspec/core/mocking_adapters/flexmock.rb +29 -0
  53. data/lib/rspec/core/{mocking/with_mocha.rb → mocking_adapters/mocha.rb} +19 -16
  54. data/lib/rspec/core/mocking_adapters/null.rb +12 -0
  55. data/lib/rspec/core/mocking_adapters/rr.rb +28 -0
  56. data/lib/rspec/core/mocking_adapters/rspec.rb +30 -0
  57. data/lib/rspec/core/notifications.rb +100 -0
  58. data/lib/rspec/core/option_parser.rb +11 -18
  59. data/lib/rspec/core/pending.rb +78 -47
  60. data/lib/rspec/core/project_initializer.rb +2 -49
  61. data/lib/rspec/core/project_initializer/dot_rspec +3 -0
  62. data/lib/rspec/core/project_initializer/spec_helper.rb +82 -0
  63. data/lib/rspec/core/rake_task.rb +5 -14
  64. data/lib/rspec/core/reporter.rb +24 -32
  65. data/lib/rspec/core/ruby_project.rb +1 -1
  66. data/lib/rspec/core/runner.rb +14 -4
  67. data/lib/rspec/core/shared_example_group.rb +40 -13
  68. data/lib/rspec/core/version.rb +1 -1
  69. data/spec/command_line/order_spec.rb +15 -15
  70. data/spec/rspec/core/backtrace_formatter_spec.rb +15 -1
  71. data/spec/rspec/core/command_line_spec.rb +18 -17
  72. data/spec/rspec/core/configuration_options_spec.rb +57 -34
  73. data/spec/rspec/core/configuration_spec.rb +162 -184
  74. data/spec/rspec/core/drb_command_line_spec.rb +5 -7
  75. data/spec/rspec/core/drb_options_spec.rb +2 -2
  76. data/spec/rspec/core/dsl_spec.rb +79 -15
  77. data/spec/rspec/core/example_group_spec.rb +253 -39
  78. data/spec/rspec/core/example_spec.rb +149 -33
  79. data/spec/rspec/core/filter_manager_spec.rb +9 -26
  80. data/spec/rspec/core/formatters/base_formatter_spec.rb +2 -5
  81. data/spec/rspec/core/formatters/base_text_formatter_spec.rb +42 -145
  82. data/spec/rspec/core/formatters/deprecation_formatter_spec.rb +64 -34
  83. data/spec/rspec/core/formatters/documentation_formatter_spec.rb +15 -28
  84. data/spec/rspec/core/formatters/helpers_spec.rb +2 -2
  85. data/spec/rspec/core/formatters/{html_formatted-1.8.7.html → html_formatted-2.1.0.html} +22 -44
  86. data/spec/rspec/core/formatters/{html_formatted-1.8.7-jruby.html → html_formatted.html} +30 -49
  87. data/spec/rspec/core/formatters/html_formatter_spec.rb +35 -19
  88. data/spec/rspec/core/formatters/json_formatter_spec.rb +42 -40
  89. data/spec/rspec/core/formatters/legacy_formatter_spec.rb +137 -0
  90. data/spec/rspec/core/formatters/progress_formatter_spec.rb +38 -25
  91. data/spec/rspec/core/formatters/snippet_extractor_spec.rb +1 -1
  92. data/spec/rspec/core/formatters_spec.rb +120 -0
  93. data/spec/rspec/core/hooks_filtering_spec.rb +1 -1
  94. data/spec/rspec/core/hooks_spec.rb +13 -2
  95. data/spec/rspec/core/memoized_helpers_spec.rb +17 -8
  96. data/spec/rspec/core/metadata_spec.rb +3 -3
  97. data/spec/rspec/core/option_parser_spec.rb +53 -46
  98. data/spec/rspec/core/ordering_spec.rb +4 -4
  99. data/spec/rspec/core/pending_example_spec.rb +23 -126
  100. data/spec/rspec/core/pending_spec.rb +8 -0
  101. data/spec/rspec/core/project_initializer_spec.rb +8 -41
  102. data/spec/rspec/core/rake_task_spec.rb +15 -4
  103. data/spec/rspec/core/random_spec.rb +1 -1
  104. data/spec/rspec/core/reporter_spec.rb +50 -37
  105. data/spec/rspec/core/resources/formatter_specs.rb +9 -11
  106. data/spec/rspec/core/rspec_matchers_spec.rb +1 -1
  107. data/spec/rspec/core/ruby_project_spec.rb +3 -3
  108. data/spec/rspec/core/runner_spec.rb +65 -23
  109. data/spec/rspec/core/shared_context_spec.rb +4 -4
  110. data/spec/rspec/core/shared_example_group/collection_spec.rb +1 -1
  111. data/spec/rspec/core/shared_example_group_spec.rb +20 -11
  112. data/spec/rspec/core/warnings_spec.rb +1 -1
  113. data/spec/rspec/core/world_spec.rb +10 -10
  114. data/spec/rspec/core_spec.rb +2 -2
  115. data/spec/spec_helper.rb +12 -24
  116. data/spec/support/config_options_helper.rb +1 -3
  117. data/spec/support/formatter_support.rb +83 -0
  118. data/spec/support/isolate_load_path_mutation.rb +1 -2
  119. data/spec/support/isolated_directory.rb +1 -1
  120. data/spec/support/isolated_home_directory.rb +1 -1
  121. data/spec/support/legacy_formatter_using_sub_classing_example.rb +87 -0
  122. data/spec/support/matchers.rb +20 -0
  123. data/spec/support/mathn_integration_support.rb +2 -2
  124. data/spec/support/old_style_formatter_example.rb +69 -0
  125. data/spec/support/shared_example_groups.rb +1 -1
  126. data/spec/support/spec_files.rb +3 -3
  127. metadata +192 -69
  128. metadata.gz.sig +3 -1
  129. checksums.yaml +0 -15
  130. checksums.yaml.gz.sig +0 -2
  131. data/features/configuration/show_failures_in_pending_blocks.feature +0 -61
  132. data/features/pending/pending_examples.feature +0 -229
  133. data/features/subject/implicit_receiver.feature +0 -29
  134. data/lib/rspec/core/mocking/with_absolutely_nothing.rb +0 -11
  135. data/lib/rspec/core/mocking/with_flexmock.rb +0 -27
  136. data/lib/rspec/core/mocking/with_rr.rb +0 -27
  137. data/lib/rspec/core/mocking/with_rspec.rb +0 -27
  138. data/spec/rspec/core/formatters/html_formatted-1.8.7-rbx.html +0 -477
  139. data/spec/rspec/core/formatters/html_formatted-1.9.2.html +0 -425
  140. data/spec/rspec/core/formatters/html_formatted-1.9.3-jruby.html +0 -416
  141. data/spec/rspec/core/formatters/html_formatted-1.9.3-rbx.html +0 -477
  142. data/spec/rspec/core/formatters/html_formatted-1.9.3.html +0 -419
  143. data/spec/rspec/core/formatters/html_formatted-2.0.0.html +0 -425
  144. data/spec/support/in_sub_process.rb +0 -37
  145. data/spec/support/sandboxed_mock_space.rb +0 -100
@@ -6,20 +6,11 @@ require 'nokogiri'
6
6
  module RSpec
7
7
  module Core
8
8
  module Formatters
9
- describe HtmlFormatter, :if => RUBY_VERSION =~ /^(1.8.7|1.9.2|1.9.3|2.0.0)$/ do
10
- let(:suffix) {
11
- if ::RUBY_PLATFORM == 'java'
12
- "-jruby"
13
- elsif defined?(Rubinius)
14
- "-rbx"
15
- else
16
- ""
17
- end
18
- }
9
+ RSpec.describe HtmlFormatter do
19
10
 
20
11
  let(:root) { File.expand_path("#{File.dirname(__FILE__)}/../../../..") }
21
12
  let(:expected_file) do
22
- "#{File.dirname(__FILE__)}/html_formatted-#{::RUBY_VERSION}#{suffix}.html"
13
+ "#{File.dirname(__FILE__)}/html_formatted.html"
23
14
  end
24
15
 
25
16
  let(:generated_html) do
@@ -31,14 +22,28 @@ module RSpec
31
22
  command_line = RSpec::Core::CommandLine.new(options)
32
23
  command_line.instance_variable_get("@configuration").backtrace_formatter.inclusion_patterns = []
33
24
  command_line.run(err, out)
34
- out.string.gsub(/\d+\.\d+(s| seconds)/, "n.nnnn\\1")
25
+ html = out.string.gsub(/\d+\.\d+(s| seconds)/, "n.nnnn\\1")
26
+
27
+ actual_doc = Nokogiri::HTML(html)
28
+ actual_doc.css("div.backtrace pre").each do |elem|
29
+ # This is to minimize churn on backtrace lines that we do not
30
+ # assert on anyway.
31
+ backtrace = elem.inner_html.lines.
32
+ select {|e| e =~ /formatter_specs\.rb/ }.
33
+ map {|x| x.chomp.split(":")[0..1].join(':') }.
34
+ join("\n")
35
+
36
+ elem.inner_html = backtrace
37
+ end
38
+ actual_doc.inner_html
35
39
  end
36
40
 
37
41
  let(:expected_html) do
38
- unless File.file?(expected_file)
39
- raise "There is no HTML file with expected content for this platform: #{expected_file}"
42
+ if File.file?(expected_file)
43
+ File.read(expected_file)
44
+ else
45
+ pending "There is no HTML file with expected content for this platform: #{expected_file}"
40
46
  end
41
- File.read(expected_file)
42
47
  end
43
48
 
44
49
  before do
@@ -64,7 +69,18 @@ module RSpec
64
69
  select {|e| e =~ /formatter_specs\.rb/}
65
70
  end
66
71
 
67
- describe 'produced HTML' do
72
+ describe 'produced HTML', :if => RUBY_VERSION <= '2.0.0' do
73
+ # Rubies before 2 are a wild west of different outputs, and it's not
74
+ # worth the effort to maintain accurate fixtures for all of them.
75
+ # Since we are verifying fixtures on other rubies, if this code at
76
+ # least runs we can be reasonably confident the output is right since
77
+ # behaviour variances that we care about across versions is neglible.
78
+ it 'is present' do
79
+ expect(generated_html).to be
80
+ end
81
+ end
82
+
83
+ describe 'produced HTML', :slow, :if => RUBY_VERSION >= '2.0.0' do
68
84
  def build_and_verify_formatter_output
69
85
  Dir.chdir(root) do
70
86
  actual_doc = Nokogiri::HTML(generated_html)
@@ -88,15 +104,15 @@ module RSpec
88
104
  end
89
105
  end
90
106
 
91
- it "produces HTML identical to the one we designed manually" do
107
+ it "is identical to the one we designed manually" do
92
108
  build_and_verify_formatter_output
93
109
  end
94
110
 
95
111
  context 'with mathn loaded' do
96
112
  include MathnIntegrationSupport
97
113
 
98
- it "produces HTML identical to the one we designed manually" do
99
- with_mathn_loaded{ build_and_verify_formatter_output }
114
+ it "is identical to the one we designed manually", :slow do
115
+ with_mathn_loaded { build_and_verify_formatter_output }
100
116
  end
101
117
  end
102
118
  end
@@ -11,30 +11,28 @@ require 'rspec/core/reporter'
11
11
  # it "shows the pending message if one was given"
12
12
  # it "shows the seed if run was randomized"
13
13
  # it "lists pending specs that were fixed"
14
- describe RSpec::Core::Formatters::JsonFormatter do
15
- let(:output) { StringIO.new }
16
- let(:formatter) { RSpec::Core::Formatters::JsonFormatter.new(output) }
17
- let(:config) { RSpec::Core::Configuration.new }
18
- let(:reporter) { RSpec::Core::Reporter.new(config, formatter) }
14
+ RSpec.describe RSpec::Core::Formatters::JsonFormatter do
15
+ include FormatterSupport
19
16
 
20
17
  it "outputs json (brittle high level functional test)" do
21
18
  group = RSpec::Core::ExampleGroup.describe("one apiece") do
22
19
  it("succeeds") { expect(1).to eq 1 }
23
20
  it("fails") { fail "eek" }
24
- it("pends") { pending "world peace" }
21
+ it("pends") { pending "world peace"; fail "eek" }
25
22
  end
26
23
  succeeding_line = __LINE__ - 4
27
24
  failing_line = __LINE__ - 4
28
25
  pending_line = __LINE__ - 4
29
26
 
30
27
  now = Time.now
31
- Time.stub(:now).and_return(now)
28
+ allow(Time).to receive(:now).and_return(now)
32
29
  reporter.report(2) do |r|
33
30
  group.run(r)
34
31
  end
35
32
 
36
33
  # grab the actual backtrace -- kind of a cheat
37
- failing_backtrace = formatter.output_hash[:examples][1][:exception][:backtrace]
34
+ examples = formatter.output_hash[:examples]
35
+ failing_backtrace = examples[1][:exception][:backtrace]
38
36
  this_file = relative_path(__FILE__)
39
37
 
40
38
  expected = {
@@ -45,6 +43,7 @@ describe RSpec::Core::Formatters::JsonFormatter do
45
43
  :status => "passed",
46
44
  :file_path => this_file,
47
45
  :line_number => succeeding_line,
46
+ :run_time => formatter.output_hash[:examples][0][:run_time]
48
47
  },
49
48
  {
50
49
  :description => "fails",
@@ -52,7 +51,12 @@ describe RSpec::Core::Formatters::JsonFormatter do
52
51
  :status => "failed",
53
52
  :file_path => this_file,
54
53
  :line_number => failing_line,
55
- :exception => {:class => "RuntimeError", :message => "eek", :backtrace => failing_backtrace}
54
+ :run_time => formatter.output_hash[:examples][1][:run_time],
55
+ :exception => {
56
+ :class => "RuntimeError",
57
+ :message => "eek",
58
+ :backtrace => failing_backtrace
59
+ }
56
60
  },
57
61
  {
58
62
  :description => "pends",
@@ -60,6 +64,7 @@ describe RSpec::Core::Formatters::JsonFormatter do
60
64
  :status => "pending",
61
65
  :file_path => this_file,
62
66
  :line_number => pending_line,
67
+ :run_time => formatter.output_hash[:examples][2][:run_time]
63
68
  },
64
69
  ],
65
70
  :summary => {
@@ -76,7 +81,7 @@ describe RSpec::Core::Formatters::JsonFormatter do
76
81
 
77
82
  describe "#stop" do
78
83
  it "adds all examples to the output hash" do
79
- formatter.stop
84
+ send_notification :stop, null_notification
80
85
  expect(formatter.output_hash[:examples]).not_to be_nil
81
86
  end
82
87
  end
@@ -84,43 +89,40 @@ describe RSpec::Core::Formatters::JsonFormatter do
84
89
  describe "#close" do
85
90
  it "outputs the results as a JSON string" do
86
91
  expect(output.string).to eq ""
87
- formatter.close
88
- expect(output.string).to eq({}.to_json)
92
+ send_notification :close, null_notification
93
+ expect(output.string).to eq("{}")
89
94
  end
90
95
  end
91
96
 
92
97
  describe "#message" do
93
98
  it "adds a message to the messages list" do
94
- formatter.message("good job")
99
+ send_notification :message, message_notification("good job")
95
100
  expect(formatter.output_hash[:messages]).to eq ["good job"]
96
101
  end
97
102
  end
98
103
 
99
104
  describe "#dump_summary" do
100
105
  it "adds summary info to the output hash" do
101
- values = { :duration => 1.0, :example_count => 2, :failure_count => 1, :pending_count => 1 }
102
- formatter.dump_summary(values[:duration], values[:example_count], values[:failure_count], values[:pending_count])
103
- summary = formatter.output_hash[:summary]
104
- values.each do |key,value|
105
- expect(summary[key]).to eq value
106
- end
106
+ send_notification :dump_summary, summary_notification(1.0, 10, 3, 4)
107
+ expect(formatter.output_hash[:summary]).to include(
108
+ :duration => 1.0, :example_count => 10, :failure_count => 3,
109
+ :pending_count => 4
110
+ )
107
111
  summary_line = formatter.output_hash[:summary_line]
108
- expect(summary_line).to eq "2 examples, 1 failure, 1 pending"
112
+ expect(summary_line).to eq "10 examples, 3 failures, 4 pending"
109
113
  end
110
114
  end
111
115
 
112
- describe "#dump_profile_slowest_examples" do
116
+ describe "#dump_profile_slowest_examples", :slow do
113
117
 
114
118
  before do
115
119
  group = RSpec::Core::ExampleGroup.describe("group") do
116
- # Use a sleep so there is some measurable time, to ensure
117
- # the reported percent is 100%, not 0%.
118
- example("example") { sleep 0.001 }
120
+ example("example") { }
119
121
  end
120
- group.run(double('reporter').as_null_object)
122
+ group.run(reporter)
121
123
 
122
- formatter.stub(:examples) { group.examples }
123
- RSpec.configuration.stub(:profile_examples) { 10 }
124
+ allow(formatter).to receive(:examples) { group.examples }
125
+ allow(RSpec.configuration).to receive(:profile_examples) { 10 }
124
126
  end
125
127
 
126
128
  it "names the example" do
@@ -139,23 +141,23 @@ describe RSpec::Core::Formatters::JsonFormatter do
139
141
  end
140
142
  end
141
143
 
142
- describe "#dump_profile_slowest_example_groups" do
144
+ describe "#dump_profile_slowest_example_groups", :slow do
143
145
  let(:group) do
144
146
  RSpec::Core::ExampleGroup.describe("slow group") do
145
- # Use a sleep so there is some measurable time, to ensure
146
- # the reported percent is 100%, not 0%.
147
- example("example") { sleep 0.01 }
147
+ example("example") do |example|
148
+ # make it look slow without actually taking up precious time
149
+ example.clock = class_double(RSpec::Core::Time, :now => RSpec::Core::Time.now + 0.5)
150
+ end
148
151
  end
149
152
  end
150
- let(:rpt) { double('reporter').as_null_object }
151
153
 
152
154
  before do
153
- RSpec.configuration.stub(:profile_examples) { 10 }
154
- group.run(rpt)
155
+ allow(RSpec.configuration).to receive(:profile_examples) { 10 }
156
+ group.run(reporter)
155
157
  end
156
158
 
157
159
  context "with one example group" do
158
- before { formatter.stub(:examples) { group.examples } }
160
+ before { allow(formatter).to receive(:examples) { group.examples } }
159
161
 
160
162
  it "doesn't profile a single example group" do
161
163
  formatter.dump_profile_slowest_example_groups
@@ -163,15 +165,15 @@ describe RSpec::Core::Formatters::JsonFormatter do
163
165
  end
164
166
  end
165
167
 
166
- context "with multiple example groups" do
168
+ context "with multiple example groups", :slow do
167
169
  before do
168
170
  group2 = RSpec::Core::ExampleGroup.describe("fast group") do
169
- example("example 1") { sleep 0.004 }
170
- example("example 2") { sleep 0.007 }
171
+ example("example 1") { }
172
+ example("example 2") { }
171
173
  end
172
- group2.run(rpt)
174
+ group2.run(reporter)
173
175
 
174
- formatter.stub(:examples) { group.examples + group2.examples }
176
+ allow(formatter).to receive(:examples) { group.examples + group2.examples }
175
177
  end
176
178
 
177
179
  it "provides the slowest example groups" do
@@ -0,0 +1,137 @@
1
+ require 'spec_helper'
2
+ require 'rspec/core/formatters/legacy_formatter'
3
+ require 'support/old_style_formatter_example'
4
+ require 'support/legacy_formatter_using_sub_classing_example'
5
+
6
+ RSpec.describe RSpec::Core::Formatters::LegacyFormatter do
7
+ include FormatterSupport
8
+
9
+ it 'can access attributes provided by base class accessors in #initialize' do
10
+ klass = Class.new(LegacyFormatterUsingSubClassing) do
11
+ def initialize(*args)
12
+ example_count
13
+ super
14
+ end
15
+ end
16
+
17
+ config.add_formatter klass
18
+ expect(config.formatters.first).to be_a(RSpec::Core::Formatters::LegacyFormatter)
19
+ expect(config.formatters.first.formatter).to be_a(klass)
20
+ end
21
+
22
+ [OldStyleFormatterExample, LegacyFormatterUsingSubClassing].each do |klass|
23
+
24
+ describe "#{klass}" do
25
+ let(:described_class) { klass }
26
+
27
+ describe "#start" do
28
+ it "notifies formatter of start" do
29
+ send_notification :start, count_notification(5)
30
+ expect(output.string).to include "Started 5 examples"
31
+ end
32
+ end
33
+
34
+ describe "#example_group_started" do
35
+ it "notifies formatter of example_group_started" do
36
+ send_notification :example_group_started, group_notification
37
+ expect(output.string).to include "Started Group"
38
+ end
39
+ end
40
+
41
+ describe "#example_group_finished" do
42
+ it "notifies formatter of example_group_finished" do
43
+ send_notification :example_group_finished, group_notification
44
+ expect(output.string).to include "Finished Group"
45
+ end
46
+ end
47
+
48
+ describe "#example_started" do
49
+ it "notifies formatter of example_started" do
50
+ send_notification :example_started, example_notification
51
+ expect(output.string).to include "Started Example"
52
+ end
53
+ end
54
+
55
+ describe "#example_passed" do
56
+ it "notifies formatter of example_passed" do
57
+ send_notification :example_passed, example_notification
58
+ expect(output.string).to include "."
59
+ end
60
+ end
61
+
62
+ describe "#example_pending" do
63
+ it "notifies formatter of example_pending" do
64
+ send_notification :example_pending, example_notification
65
+ expect(output.string).to include "P"
66
+ end
67
+ end
68
+
69
+ describe "#example_failed" do
70
+ it "notifies formatter of example_failed" do
71
+ send_notification :example_failed, example_notification
72
+ expect(output.string).to include "F"
73
+ end
74
+ end
75
+
76
+ describe "#message" do
77
+ it "notifies formatter of message" do
78
+ send_notification :message, message_notification("A Message")
79
+ expect(output.string).to include "A Message"
80
+ end
81
+ end
82
+
83
+ describe "#stop" do
84
+ it "notifies formatter of stop" do
85
+ send_notification :stop, null_notification
86
+ expect(output.string).to include "Stopped"
87
+ end
88
+ end
89
+
90
+ describe "#start_dump" do
91
+ it "notifies formatter of start_dump" do
92
+ send_notification :start_dump, null_notification
93
+ expect(output.string).to include "Dumping!"
94
+ end
95
+ end
96
+
97
+ describe "#dump_failures" do
98
+ it "notifies formatter of dump_failures" do
99
+ send_notification :dump_failures, null_notification
100
+ expect(output.string).to include "Failures:"
101
+ end
102
+ end
103
+
104
+ describe "#dump_summary" do
105
+ it "notifies formatter of dump_summary" do
106
+ duration, count, failures, pending = 3.5, 10, 3, 2
107
+ send_notification :dump_summary, summary_notification(duration, count, failures, pending)
108
+ expect(output.string).to(
109
+ match("Finished in 3.5").
110
+ and match("3/10 failed.").
111
+ and match("2 pending.")
112
+ )
113
+ end
114
+ end
115
+
116
+ describe "#dump_pending" do
117
+ it "notifies formatter of dump_pending" do
118
+ send_notification :dump_pending, null_notification
119
+ expect(output.string).to match "Pending:"
120
+ end
121
+ end
122
+
123
+ describe "#seed" do
124
+ it "notifies formatter of seed" do
125
+ send_notification :seed, seed_notification(17)
126
+ expect(output.string).to match "Randomized with seed 17"
127
+ end
128
+ end
129
+
130
+ describe "#close" do
131
+ it "notifies formatter of close" do
132
+ send_notification :close, null_notification
133
+ end
134
+ end
135
+ end
136
+ end
137
+ end
@@ -1,30 +1,43 @@
1
1
  require 'spec_helper'
2
2
  require 'rspec/core/formatters/progress_formatter'
3
3
 
4
- describe RSpec::Core::Formatters::ProgressFormatter do
5
-
6
- before do
7
- @output = StringIO.new
8
- @formatter = RSpec::Core::Formatters::ProgressFormatter.new(@output)
9
- @formatter.start(2)
10
- @formatter.stub(:color_enabled?).and_return(false)
11
- end
12
-
13
- it "produces line break on start dump" do
14
- @formatter.start_dump
15
- expect(@output.string).to eq("\n")
16
- end
17
-
18
- it "produces standard summary without pending when pending has a 0 count" do
19
- @formatter.start_dump
20
- @formatter.dump_summary(0.00001, 2, 0, 0)
21
- expect(@output.string).to match(/2 examples, 0 failures/i)
22
- expect(@output.string).not_to match(/0 pending/i)
23
- end
24
-
25
- it "pushes nothing on start" do
26
- @formatter.start(4)
27
- expect(@output.string).to eq("")
28
- end
4
+ RSpec.describe RSpec::Core::Formatters::ProgressFormatter do
5
+ include FormatterSupport
29
6
 
7
+ before do
8
+ send_notification :start, count_notification(2)
9
+ allow(formatter).to receive(:color_enabled?).and_return(false)
10
+ end
11
+
12
+ it 'prints a . on example_passed' do
13
+ send_notification :example_passed, example_notification
14
+ expect(output.string).to eq(".")
15
+ end
16
+
17
+ it 'prints a * on example_pending' do
18
+ send_notification :example_pending, example_notification
19
+ expect(output.string).to eq("*")
20
+ end
21
+
22
+ it 'prints a F on example_failed' do
23
+ send_notification :example_failed, example_notification
24
+ expect(output.string).to eq("F")
25
+ end
26
+
27
+ it "produces standard summary without pending when pending has a 0 count" do
28
+ send_notification :dump_summary, summary_notification(0.00001, 2, 0, 0)
29
+ expect(output.string).to match(/^\n/)
30
+ expect(output.string).to match(/2 examples, 0 failures/i)
31
+ expect(output.string).not_to match(/0 pending/i)
32
+ end
33
+
34
+ it "pushes nothing on start" do
35
+ #start already sent
36
+ expect(output.string).to eq("")
37
+ end
38
+
39
+ it "pushes nothing on start dump" do
40
+ send_notification :start_dump, null_notification
41
+ expect(output.string).to eq("\n")
42
+ end
30
43
  end