rspec-core 3.0.0.beta2 → 3.0.0.rc1
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.
- checksums.yaml +7 -0
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/.yardopts +1 -0
- data/Changelog.md +297 -57
- data/README.md +16 -13
- data/lib/rspec/core.rb +55 -84
- data/lib/rspec/core/backport_random.rb +35 -3
- data/lib/rspec/core/backtrace_formatter.rb +4 -13
- data/lib/rspec/core/configuration.rb +330 -114
- data/lib/rspec/core/configuration_options.rb +38 -22
- data/lib/rspec/core/drb.rb +111 -0
- data/lib/rspec/core/dsl.rb +8 -2
- data/lib/rspec/core/example.rb +203 -94
- data/lib/rspec/core/example_group.rb +344 -316
- data/lib/rspec/core/filter_manager.rb +135 -90
- data/lib/rspec/core/flat_map.rb +1 -0
- data/lib/rspec/core/formatters.rb +50 -14
- data/lib/rspec/core/formatters/base_formatter.rb +32 -138
- data/lib/rspec/core/formatters/base_text_formatter.rb +32 -253
- data/lib/rspec/core/formatters/console_codes.rb +65 -0
- data/lib/rspec/core/formatters/deprecation_formatter.rb +24 -15
- data/lib/rspec/core/formatters/documentation_formatter.rb +7 -10
- data/lib/rspec/core/formatters/helpers.rb +15 -9
- data/lib/rspec/core/formatters/html_formatter.rb +17 -16
- data/lib/rspec/core/formatters/html_printer.rb +1 -0
- data/lib/rspec/core/formatters/json_formatter.rb +18 -20
- data/lib/rspec/core/formatters/profile_formatter.rb +67 -0
- data/lib/rspec/core/formatters/progress_formatter.rb +6 -7
- data/lib/rspec/core/formatters/snippet_extractor.rb +8 -6
- data/lib/rspec/core/hooks.rb +131 -125
- data/lib/rspec/core/memoized_helpers.rb +31 -26
- data/lib/rspec/core/metadata.rb +277 -184
- data/lib/rspec/core/metadata_filter.rb +86 -0
- data/lib/rspec/core/minitest_assertions_adapter.rb +28 -0
- data/lib/rspec/core/mocking_adapters/flexmock.rb +1 -1
- data/lib/rspec/core/mocking_adapters/mocha.rb +1 -1
- data/lib/rspec/core/mocking_adapters/null.rb +1 -1
- data/lib/rspec/core/mocking_adapters/rr.rb +2 -1
- data/lib/rspec/core/mocking_adapters/rspec.rb +1 -1
- data/lib/rspec/core/notifications.rb +435 -24
- data/lib/rspec/core/option_parser.rb +16 -25
- data/lib/rspec/core/ordering.rb +3 -1
- data/lib/rspec/core/pending.rb +57 -33
- data/lib/rspec/core/project_initializer.rb +2 -0
- data/lib/rspec/core/project_initializer/spec_helper.rb +5 -4
- data/lib/rspec/core/rake_task.rb +45 -20
- data/lib/rspec/core/reporter.rb +50 -22
- data/lib/rspec/core/ruby_project.rb +1 -0
- data/lib/rspec/core/runner.rb +93 -39
- data/lib/rspec/core/shared_context.rb +7 -5
- data/lib/rspec/core/shared_example_group.rb +85 -77
- data/lib/rspec/core/test_unit_assertions_adapter.rb +30 -0
- data/lib/rspec/core/version.rb +3 -1
- data/lib/rspec/core/warnings.rb +35 -17
- data/lib/rspec/core/world.rb +57 -5
- metadata +56 -369
- metadata.gz.sig +3 -3
- data/features/README.md +0 -13
- data/features/Upgrade.md +0 -352
- data/features/command_line/README.md +0 -25
- data/features/command_line/dry_run.feature +0 -29
- data/features/command_line/example_name_option.feature +0 -97
- data/features/command_line/exit_status.feature +0 -82
- data/features/command_line/fail_fast.feature +0 -26
- data/features/command_line/format_option.feature +0 -75
- data/features/command_line/init.feature +0 -57
- data/features/command_line/line_number_appended_to_path.feature +0 -140
- data/features/command_line/line_number_option.feature +0 -58
- data/features/command_line/order.feature +0 -25
- data/features/command_line/pattern_option.feature +0 -49
- data/features/command_line/rake_task.feature +0 -122
- data/features/command_line/randomization.feature +0 -63
- data/features/command_line/require_option.feature +0 -43
- data/features/command_line/ruby.feature +0 -23
- data/features/command_line/tag.feature +0 -98
- data/features/command_line/warnings_option.feature +0 -29
- data/features/configuration/alias_example_to.feature +0 -39
- data/features/configuration/backtrace_exclusion_patterns.feature +0 -105
- data/features/configuration/custom_settings.feature +0 -84
- data/features/configuration/default_path.feature +0 -38
- data/features/configuration/deprecation_stream.feature +0 -58
- data/features/configuration/enable_global_dsl.feature +0 -54
- data/features/configuration/fail_fast.feature +0 -77
- data/features/configuration/failure_exit_code.feature +0 -36
- data/features/configuration/order_and_seed.feature +0 -3
- data/features/configuration/output_stream.feature +0 -24
- data/features/configuration/overriding_global_ordering.feature +0 -93
- data/features/configuration/pattern.feature +0 -38
- data/features/configuration/profile.feature +0 -220
- data/features/configuration/read_options_from_file.feature +0 -90
- data/features/configuration/run_all_when_everything_filtered.feature +0 -76
- data/features/example_groups/aliasing.feature +0 -48
- data/features/example_groups/basic_structure.feature +0 -55
- data/features/example_groups/shared_context.feature +0 -74
- data/features/example_groups/shared_examples.feature +0 -286
- data/features/expectation_framework_integration/configure_expectation_framework.feature +0 -102
- data/features/filtering/exclusion_filters.feature +0 -135
- data/features/filtering/if_and_unless.feature +0 -138
- data/features/filtering/inclusion_filters.feature +0 -101
- data/features/formatters/configurable_colors.feature +0 -31
- data/features/formatters/custom_formatter.feature +0 -68
- data/features/formatters/json_formatter.feature +0 -30
- data/features/formatters/regression_tests.feature +0 -95
- data/features/formatters/text_formatter.feature +0 -46
- data/features/helper_methods/arbitrary_methods.feature +0 -40
- data/features/helper_methods/let.feature +0 -50
- data/features/helper_methods/modules.feature +0 -146
- data/features/hooks/around_hooks.feature +0 -344
- data/features/hooks/before_and_after_hooks.feature +0 -427
- data/features/hooks/filtering.feature +0 -232
- data/features/metadata/current_example.feature +0 -56
- data/features/metadata/described_class.feature +0 -17
- data/features/metadata/user_defined.feature +0 -100
- data/features/mock_framework_integration/use_any_framework.feature +0 -106
- data/features/mock_framework_integration/use_flexmock.feature +0 -94
- data/features/mock_framework_integration/use_mocha.feature +0 -95
- data/features/mock_framework_integration/use_rr.feature +0 -96
- data/features/mock_framework_integration/use_rspec.feature +0 -95
- data/features/pending_and_skipped_examples/README.md +0 -3
- data/features/pending_and_skipped_examples/pending_examples.feature +0 -118
- data/features/pending_and_skipped_examples/skipped_examples.feature +0 -106
- data/features/spec_files/arbitrary_file_suffix.feature +0 -13
- data/features/step_definitions/additional_cli_steps.rb +0 -83
- data/features/subject/explicit_subject.feature +0 -101
- data/features/subject/implicit_subject.feature +0 -63
- data/features/subject/one_liner_syntax.feature +0 -71
- data/features/support/env.rb +0 -21
- data/features/support/require_expect_syntax_in_aruba_specs.rb +0 -16
- data/features/support/rubinius.rb +0 -6
- data/lib/rspec/core/command_line.rb +0 -35
- data/lib/rspec/core/drb_command_line.rb +0 -26
- data/lib/rspec/core/drb_options.rb +0 -87
- data/lib/rspec/core/formatters/legacy_formatter.rb +0 -227
- data/lib/rspec/core/shared_example_group/collection.rb +0 -27
- data/spec/command_line/order_spec.rb +0 -211
- data/spec/rspec/core/backtrace_formatter_spec.rb +0 -230
- data/spec/rspec/core/command_line_spec.rb +0 -112
- data/spec/rspec/core/command_line_spec_output.txt +0 -0
- data/spec/rspec/core/configuration_options_spec.rb +0 -409
- data/spec/rspec/core/configuration_spec.rb +0 -1479
- data/spec/rspec/core/drb_command_line_spec.rb +0 -102
- data/spec/rspec/core/drb_options_spec.rb +0 -193
- data/spec/rspec/core/dsl_spec.rb +0 -88
- data/spec/rspec/core/example_group_spec.rb +0 -1533
- data/spec/rspec/core/example_spec.rb +0 -642
- data/spec/rspec/core/filter_manager_spec.rb +0 -229
- data/spec/rspec/core/formatters/base_formatter_spec.rb +0 -64
- data/spec/rspec/core/formatters/base_text_formatter_spec.rb +0 -303
- data/spec/rspec/core/formatters/deprecation_formatter_spec.rb +0 -208
- data/spec/rspec/core/formatters/documentation_formatter_spec.rb +0 -75
- data/spec/rspec/core/formatters/helpers_spec.rb +0 -104
- data/spec/rspec/core/formatters/html_formatted-2.1.0.html +0 -392
- data/spec/rspec/core/formatters/html_formatted.html +0 -397
- data/spec/rspec/core/formatters/html_formatter_spec.rb +0 -122
- data/spec/rspec/core/formatters/json_formatter_spec.rb +0 -206
- data/spec/rspec/core/formatters/legacy_formatter_spec.rb +0 -137
- data/spec/rspec/core/formatters/progress_formatter_spec.rb +0 -43
- data/spec/rspec/core/formatters/snippet_extractor_spec.rb +0 -26
- data/spec/rspec/core/formatters_spec.rb +0 -120
- data/spec/rspec/core/hooks_filtering_spec.rb +0 -227
- data/spec/rspec/core/hooks_spec.rb +0 -294
- data/spec/rspec/core/memoized_helpers_spec.rb +0 -495
- data/spec/rspec/core/metadata_spec.rb +0 -491
- data/spec/rspec/core/option_parser_spec.rb +0 -262
- data/spec/rspec/core/ordering_spec.rb +0 -102
- data/spec/rspec/core/pending_example_spec.rb +0 -117
- data/spec/rspec/core/pending_spec.rb +0 -8
- data/spec/rspec/core/project_initializer_spec.rb +0 -73
- data/spec/rspec/core/rake_task_spec.rb +0 -146
- data/spec/rspec/core/random_spec.rb +0 -47
- data/spec/rspec/core/reporter_spec.rb +0 -155
- data/spec/rspec/core/resources/a_bar.rb +0 -0
- data/spec/rspec/core/resources/a_foo.rb +0 -0
- data/spec/rspec/core/resources/a_spec.rb +0 -1
- data/spec/rspec/core/resources/custom_example_group_runner.rb +0 -14
- data/spec/rspec/core/resources/formatter_specs.rb +0 -58
- data/spec/rspec/core/resources/utf8_encoded.rb +0 -8
- data/spec/rspec/core/rspec_matchers_spec.rb +0 -45
- data/spec/rspec/core/ruby_project_spec.rb +0 -26
- data/spec/rspec/core/runner_spec.rb +0 -151
- data/spec/rspec/core/shared_context_spec.rb +0 -102
- data/spec/rspec/core/shared_example_group/collection_spec.rb +0 -57
- data/spec/rspec/core/shared_example_group_spec.rb +0 -114
- data/spec/rspec/core/warnings_spec.rb +0 -29
- data/spec/rspec/core/world_spec.rb +0 -142
- data/spec/rspec/core_spec.rb +0 -91
- data/spec/spec_helper.rb +0 -160
- data/spec/support/config_options_helper.rb +0 -13
- data/spec/support/formatter_support.rb +0 -83
- data/spec/support/helper_methods.rb +0 -26
- data/spec/support/isolate_load_path_mutation.rb +0 -5
- data/spec/support/isolated_directory.rb +0 -10
- data/spec/support/isolated_home_directory.rb +0 -16
- data/spec/support/legacy_formatter_using_sub_classing_example.rb +0 -87
- data/spec/support/matchers.rb +0 -85
- data/spec/support/mathn_integration_support.rb +0 -12
- data/spec/support/old_style_formatter_example.rb +0 -69
- data/spec/support/shared_example_groups.rb +0 -13
- data/spec/support/spec_files.rb +0 -44
- data/spec/support/stderr_splitter.rb +0 -36
@@ -1,206 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'rspec/core/formatters/json_formatter'
|
3
|
-
require 'json'
|
4
|
-
require 'rspec/core/reporter'
|
5
|
-
|
6
|
-
# todo, someday:
|
7
|
-
# it "lists the groups (describe and context) separately"
|
8
|
-
# it "includes full 'execution_result'"
|
9
|
-
# it "relativizes backtrace paths"
|
10
|
-
# it "includes profile information (implements dump_profile)"
|
11
|
-
# it "shows the pending message if one was given"
|
12
|
-
# it "shows the seed if run was randomized"
|
13
|
-
# it "lists pending specs that were fixed"
|
14
|
-
RSpec.describe RSpec::Core::Formatters::JsonFormatter do
|
15
|
-
include FormatterSupport
|
16
|
-
|
17
|
-
it "outputs json (brittle high level functional test)" do
|
18
|
-
group = RSpec::Core::ExampleGroup.describe("one apiece") do
|
19
|
-
it("succeeds") { expect(1).to eq 1 }
|
20
|
-
it("fails") { fail "eek" }
|
21
|
-
it("pends") { pending "world peace"; fail "eek" }
|
22
|
-
end
|
23
|
-
succeeding_line = __LINE__ - 4
|
24
|
-
failing_line = __LINE__ - 4
|
25
|
-
pending_line = __LINE__ - 4
|
26
|
-
|
27
|
-
now = Time.now
|
28
|
-
allow(Time).to receive(:now).and_return(now)
|
29
|
-
reporter.report(2) do |r|
|
30
|
-
group.run(r)
|
31
|
-
end
|
32
|
-
|
33
|
-
# grab the actual backtrace -- kind of a cheat
|
34
|
-
examples = formatter.output_hash[:examples]
|
35
|
-
failing_backtrace = examples[1][:exception][:backtrace]
|
36
|
-
this_file = relative_path(__FILE__)
|
37
|
-
|
38
|
-
expected = {
|
39
|
-
:examples => [
|
40
|
-
{
|
41
|
-
:description => "succeeds",
|
42
|
-
:full_description => "one apiece succeeds",
|
43
|
-
:status => "passed",
|
44
|
-
:file_path => this_file,
|
45
|
-
:line_number => succeeding_line,
|
46
|
-
:run_time => formatter.output_hash[:examples][0][:run_time]
|
47
|
-
},
|
48
|
-
{
|
49
|
-
:description => "fails",
|
50
|
-
:full_description => "one apiece fails",
|
51
|
-
:status => "failed",
|
52
|
-
:file_path => this_file,
|
53
|
-
:line_number => failing_line,
|
54
|
-
:run_time => formatter.output_hash[:examples][1][:run_time],
|
55
|
-
:exception => {
|
56
|
-
:class => "RuntimeError",
|
57
|
-
:message => "eek",
|
58
|
-
:backtrace => failing_backtrace
|
59
|
-
}
|
60
|
-
},
|
61
|
-
{
|
62
|
-
:description => "pends",
|
63
|
-
:full_description => "one apiece pends",
|
64
|
-
:status => "pending",
|
65
|
-
:file_path => this_file,
|
66
|
-
:line_number => pending_line,
|
67
|
-
:run_time => formatter.output_hash[:examples][2][:run_time]
|
68
|
-
},
|
69
|
-
],
|
70
|
-
:summary => {
|
71
|
-
:duration => formatter.output_hash[:summary][:duration],
|
72
|
-
:example_count => 3,
|
73
|
-
:failure_count => 1,
|
74
|
-
:pending_count => 1,
|
75
|
-
},
|
76
|
-
:summary_line => "3 examples, 1 failure, 1 pending"
|
77
|
-
}
|
78
|
-
expect(formatter.output_hash).to eq expected
|
79
|
-
expect(output.string).to eq expected.to_json
|
80
|
-
end
|
81
|
-
|
82
|
-
describe "#stop" do
|
83
|
-
it "adds all examples to the output hash" do
|
84
|
-
send_notification :stop, null_notification
|
85
|
-
expect(formatter.output_hash[:examples]).not_to be_nil
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
describe "#close" do
|
90
|
-
it "outputs the results as a JSON string" do
|
91
|
-
expect(output.string).to eq ""
|
92
|
-
send_notification :close, null_notification
|
93
|
-
expect(output.string).to eq("{}")
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
|
-
describe "#message" do
|
98
|
-
it "adds a message to the messages list" do
|
99
|
-
send_notification :message, message_notification("good job")
|
100
|
-
expect(formatter.output_hash[:messages]).to eq ["good job"]
|
101
|
-
end
|
102
|
-
end
|
103
|
-
|
104
|
-
describe "#dump_summary" do
|
105
|
-
it "adds summary info to the output hash" do
|
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
|
-
)
|
111
|
-
summary_line = formatter.output_hash[:summary_line]
|
112
|
-
expect(summary_line).to eq "10 examples, 3 failures, 4 pending"
|
113
|
-
end
|
114
|
-
end
|
115
|
-
|
116
|
-
describe "#dump_profile_slowest_examples", :slow do
|
117
|
-
|
118
|
-
before do
|
119
|
-
group = RSpec::Core::ExampleGroup.describe("group") do
|
120
|
-
example("example") { }
|
121
|
-
end
|
122
|
-
group.run(reporter)
|
123
|
-
|
124
|
-
allow(formatter).to receive(:examples) { group.examples }
|
125
|
-
allow(RSpec.configuration).to receive(:profile_examples) { 10 }
|
126
|
-
end
|
127
|
-
|
128
|
-
it "names the example" do
|
129
|
-
formatter.dump_profile_slowest_examples
|
130
|
-
expect(formatter.output_hash[:profile][:examples].first[:full_description]).to eq("group example")
|
131
|
-
end
|
132
|
-
|
133
|
-
it "provides example execution time" do
|
134
|
-
formatter.dump_profile_slowest_examples
|
135
|
-
expect(formatter.output_hash[:profile][:examples].first[:run_time]).not_to be_nil
|
136
|
-
end
|
137
|
-
|
138
|
-
it "has the summary of profile information" do
|
139
|
-
formatter.dump_profile_slowest_examples
|
140
|
-
expect(formatter.output_hash[:profile].keys).to match_array([:examples, :slowest, :total])
|
141
|
-
end
|
142
|
-
end
|
143
|
-
|
144
|
-
describe "#dump_profile_slowest_example_groups", :slow do
|
145
|
-
let(:group) do
|
146
|
-
RSpec::Core::ExampleGroup.describe("slow group") do
|
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
|
151
|
-
end
|
152
|
-
end
|
153
|
-
|
154
|
-
before do
|
155
|
-
allow(RSpec.configuration).to receive(:profile_examples) { 10 }
|
156
|
-
group.run(reporter)
|
157
|
-
end
|
158
|
-
|
159
|
-
context "with one example group" do
|
160
|
-
before { allow(formatter).to receive(:examples) { group.examples } }
|
161
|
-
|
162
|
-
it "doesn't profile a single example group" do
|
163
|
-
formatter.dump_profile_slowest_example_groups
|
164
|
-
expect(formatter.output_hash[:profile][:groups]).to be_empty
|
165
|
-
end
|
166
|
-
end
|
167
|
-
|
168
|
-
context "with multiple example groups", :slow do
|
169
|
-
before do
|
170
|
-
group2 = RSpec::Core::ExampleGroup.describe("fast group") do
|
171
|
-
example("example 1") { }
|
172
|
-
example("example 2") { }
|
173
|
-
end
|
174
|
-
group2.run(reporter)
|
175
|
-
|
176
|
-
allow(formatter).to receive(:examples) { group.examples + group2.examples }
|
177
|
-
end
|
178
|
-
|
179
|
-
it "provides the slowest example groups" do
|
180
|
-
formatter.dump_profile_slowest_example_groups
|
181
|
-
expect(formatter.output_hash).not_to be_empty
|
182
|
-
end
|
183
|
-
|
184
|
-
it "provides information" do
|
185
|
-
formatter.dump_profile_slowest_example_groups
|
186
|
-
expect(formatter.output_hash[:profile][:groups].first.keys).to match_array([:total_time, :count, :description, :average, :location])
|
187
|
-
end
|
188
|
-
|
189
|
-
it "ranks the example groups by average time" do
|
190
|
-
formatter.dump_profile_slowest_example_groups
|
191
|
-
expect(formatter.output_hash[:profile][:groups].first[:description]).to eq("slow group")
|
192
|
-
end
|
193
|
-
end
|
194
|
-
|
195
|
-
it "depends on parent_groups to get the top level example group" do
|
196
|
-
ex = ""
|
197
|
-
group.describe("group 2") do
|
198
|
-
describe "group 3" do
|
199
|
-
ex = example("nested example 1")
|
200
|
-
end
|
201
|
-
end
|
202
|
-
|
203
|
-
expect(ex.example_group.parent_groups.last).to eq(group)
|
204
|
-
end
|
205
|
-
end
|
206
|
-
end
|
@@ -1,137 +0,0 @@
|
|
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,43 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'rspec/core/formatters/progress_formatter'
|
3
|
-
|
4
|
-
RSpec.describe RSpec::Core::Formatters::ProgressFormatter do
|
5
|
-
include FormatterSupport
|
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
|
43
|
-
end
|
@@ -1,26 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'rspec/core/formatters/snippet_extractor'
|
3
|
-
|
4
|
-
module RSpec
|
5
|
-
module Core
|
6
|
-
module Formatters
|
7
|
-
RSpec.describe SnippetExtractor do
|
8
|
-
it "falls back on a default message when it doesn't understand a line" do
|
9
|
-
expect(RSpec::Core::Formatters::SnippetExtractor.new.snippet_for("blech")).to eq(["# Couldn't get snippet for blech", 1])
|
10
|
-
end
|
11
|
-
|
12
|
-
it "falls back on a default message when it doesn't find the file" do
|
13
|
-
expect(RSpec::Core::Formatters::SnippetExtractor.new.lines_around("blech", 8)).to eq("# Couldn't get snippet for blech")
|
14
|
-
end
|
15
|
-
|
16
|
-
it "falls back on a default message when it gets a security error" do
|
17
|
-
message = nil
|
18
|
-
safely do
|
19
|
-
message = RSpec::Core::Formatters::SnippetExtractor.new.lines_around("blech", 8)
|
20
|
-
end
|
21
|
-
expect(message).to eq("# Couldn't get snippet for blech")
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
@@ -1,120 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
module RSpec::Core::Formatters
|
4
|
-
describe Loader do
|
5
|
-
|
6
|
-
describe "#add(formatter)" do
|
7
|
-
let(:loader) { Loader.new reporter }
|
8
|
-
let(:output) { StringIO.new }
|
9
|
-
let(:path) { File.join(Dir.tmpdir, 'output.txt') }
|
10
|
-
let(:reporter) { double "reporter", :register_listener => nil }
|
11
|
-
|
12
|
-
it "adds to the list of formatters" do
|
13
|
-
loader.add :documentation, output
|
14
|
-
expect(loader.formatters.first).to be_an_instance_of(DocumentationFormatter)
|
15
|
-
end
|
16
|
-
|
17
|
-
it "finds a formatter by name (w/ Symbol)" do
|
18
|
-
loader.add :documentation, output
|
19
|
-
expect(loader.formatters.first).to be_an_instance_of(DocumentationFormatter)
|
20
|
-
end
|
21
|
-
|
22
|
-
it "finds a formatter by name (w/ String)" do
|
23
|
-
loader.add 'documentation', output
|
24
|
-
expect(loader.formatters.first).to be_an_instance_of(DocumentationFormatter)
|
25
|
-
end
|
26
|
-
|
27
|
-
it "finds a formatter by class" do
|
28
|
-
formatter_class = Class.new(BaseTextFormatter)
|
29
|
-
Loader.formatters[formatter_class] = []
|
30
|
-
loader.add formatter_class, output
|
31
|
-
expect(loader.formatters.first).to be_an_instance_of(formatter_class)
|
32
|
-
end
|
33
|
-
|
34
|
-
it "finds a formatter by class name" do
|
35
|
-
stub_const("CustomFormatter", Class.new(BaseFormatter))
|
36
|
-
Loader.formatters[CustomFormatter] = []
|
37
|
-
loader.add "CustomFormatter", output
|
38
|
-
expect(loader.formatters.first).to be_an_instance_of(CustomFormatter)
|
39
|
-
end
|
40
|
-
|
41
|
-
it "handles formatters that dont implement notifications" do
|
42
|
-
formatter_class = Struct.new(:output)
|
43
|
-
loader.add formatter_class, output
|
44
|
-
expect(loader.formatters.first).to be_an_instance_of(RSpec::Core::Formatters::LegacyFormatter)
|
45
|
-
end
|
46
|
-
|
47
|
-
context "when a legacy formatter is added" do
|
48
|
-
formatter_class = Struct.new(:output)
|
49
|
-
|
50
|
-
it "issues a deprecation" do
|
51
|
-
expect_warn_deprecation_with_call_site(__FILE__, __LINE__ + 2,
|
52
|
-
/The #{formatter_class} formatter uses the deprecated formatter interface/)
|
53
|
-
loader.add formatter_class, output
|
54
|
-
end
|
55
|
-
|
56
|
-
it "does not mistakenly add in the progress formatter" do
|
57
|
-
# When we issue a deprecation warning it triggers `setup_defaults`,
|
58
|
-
# which adds the progress formatter if it thinks no formatter has been
|
59
|
-
# added yet.
|
60
|
-
allow(RSpec).to receive(:warn_deprecation) do
|
61
|
-
loader.setup_default(StringIO.new, StringIO.new)
|
62
|
-
end
|
63
|
-
|
64
|
-
loader.add formatter_class, output
|
65
|
-
|
66
|
-
expect(loader.formatters.grep(RSpec::Core::Formatters::ProgressFormatter)).to eq([])
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
it "finds a formatter by class fully qualified name" do
|
71
|
-
stub_const("RSpec::CustomFormatter", (Class.new(BaseFormatter)))
|
72
|
-
Loader.formatters[RSpec::CustomFormatter] = []
|
73
|
-
loader.add "RSpec::CustomFormatter", output
|
74
|
-
expect(loader.formatters.first).to be_an_instance_of(RSpec::CustomFormatter)
|
75
|
-
end
|
76
|
-
|
77
|
-
it "requires a formatter file based on its fully qualified name" do
|
78
|
-
expect(loader).to receive(:require).with('rspec/custom_formatter') do
|
79
|
-
stub_const("RSpec::CustomFormatter", (Class.new(BaseFormatter)))
|
80
|
-
Loader.formatters[RSpec::CustomFormatter] = []
|
81
|
-
end
|
82
|
-
loader.add "RSpec::CustomFormatter", output
|
83
|
-
expect(loader.formatters.first).to be_an_instance_of(RSpec::CustomFormatter)
|
84
|
-
end
|
85
|
-
|
86
|
-
it "raises NameError if class is unresolvable" do
|
87
|
-
expect(loader).to receive(:require).with('rspec/custom_formatter3')
|
88
|
-
expect { loader.add "RSpec::CustomFormatter3", output }.to raise_error(NameError)
|
89
|
-
end
|
90
|
-
|
91
|
-
it "raises ArgumentError if formatter is unknown" do
|
92
|
-
expect { loader.add :progresss, output }.to raise_error(ArgumentError)
|
93
|
-
end
|
94
|
-
|
95
|
-
context "with a 2nd arg defining the output" do
|
96
|
-
it "creates a file at that path and sets it as the output" do
|
97
|
-
loader.add('doc', path)
|
98
|
-
expect(loader.formatters.first.output).to be_a(File)
|
99
|
-
expect(loader.formatters.first.output.path).to eq(path)
|
100
|
-
end
|
101
|
-
end
|
102
|
-
|
103
|
-
context "when a duplicate formatter exists" do
|
104
|
-
before { loader.add :documentation, output }
|
105
|
-
|
106
|
-
it "doesn't add the formatter for the same output target" do
|
107
|
-
expect {
|
108
|
-
loader.add :documentation, output
|
109
|
-
}.not_to change { loader.formatters.length }
|
110
|
-
end
|
111
|
-
|
112
|
-
it "adds the formatter for different output targets" do
|
113
|
-
expect {
|
114
|
-
loader.add :documentation, path
|
115
|
-
}.to change { loader.formatters.length }
|
116
|
-
end
|
117
|
-
end
|
118
|
-
end
|
119
|
-
end
|
120
|
-
end
|