rspec-core 3.0.0.beta2 → 3.0.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (201) hide show
  1. checksums.yaml +7 -0
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/.yardopts +1 -0
  5. data/Changelog.md +297 -57
  6. data/README.md +16 -13
  7. data/lib/rspec/core.rb +55 -84
  8. data/lib/rspec/core/backport_random.rb +35 -3
  9. data/lib/rspec/core/backtrace_formatter.rb +4 -13
  10. data/lib/rspec/core/configuration.rb +330 -114
  11. data/lib/rspec/core/configuration_options.rb +38 -22
  12. data/lib/rspec/core/drb.rb +111 -0
  13. data/lib/rspec/core/dsl.rb +8 -2
  14. data/lib/rspec/core/example.rb +203 -94
  15. data/lib/rspec/core/example_group.rb +344 -316
  16. data/lib/rspec/core/filter_manager.rb +135 -90
  17. data/lib/rspec/core/flat_map.rb +1 -0
  18. data/lib/rspec/core/formatters.rb +50 -14
  19. data/lib/rspec/core/formatters/base_formatter.rb +32 -138
  20. data/lib/rspec/core/formatters/base_text_formatter.rb +32 -253
  21. data/lib/rspec/core/formatters/console_codes.rb +65 -0
  22. data/lib/rspec/core/formatters/deprecation_formatter.rb +24 -15
  23. data/lib/rspec/core/formatters/documentation_formatter.rb +7 -10
  24. data/lib/rspec/core/formatters/helpers.rb +15 -9
  25. data/lib/rspec/core/formatters/html_formatter.rb +17 -16
  26. data/lib/rspec/core/formatters/html_printer.rb +1 -0
  27. data/lib/rspec/core/formatters/json_formatter.rb +18 -20
  28. data/lib/rspec/core/formatters/profile_formatter.rb +67 -0
  29. data/lib/rspec/core/formatters/progress_formatter.rb +6 -7
  30. data/lib/rspec/core/formatters/snippet_extractor.rb +8 -6
  31. data/lib/rspec/core/hooks.rb +131 -125
  32. data/lib/rspec/core/memoized_helpers.rb +31 -26
  33. data/lib/rspec/core/metadata.rb +277 -184
  34. data/lib/rspec/core/metadata_filter.rb +86 -0
  35. data/lib/rspec/core/minitest_assertions_adapter.rb +28 -0
  36. data/lib/rspec/core/mocking_adapters/flexmock.rb +1 -1
  37. data/lib/rspec/core/mocking_adapters/mocha.rb +1 -1
  38. data/lib/rspec/core/mocking_adapters/null.rb +1 -1
  39. data/lib/rspec/core/mocking_adapters/rr.rb +2 -1
  40. data/lib/rspec/core/mocking_adapters/rspec.rb +1 -1
  41. data/lib/rspec/core/notifications.rb +435 -24
  42. data/lib/rspec/core/option_parser.rb +16 -25
  43. data/lib/rspec/core/ordering.rb +3 -1
  44. data/lib/rspec/core/pending.rb +57 -33
  45. data/lib/rspec/core/project_initializer.rb +2 -0
  46. data/lib/rspec/core/project_initializer/spec_helper.rb +5 -4
  47. data/lib/rspec/core/rake_task.rb +45 -20
  48. data/lib/rspec/core/reporter.rb +50 -22
  49. data/lib/rspec/core/ruby_project.rb +1 -0
  50. data/lib/rspec/core/runner.rb +93 -39
  51. data/lib/rspec/core/shared_context.rb +7 -5
  52. data/lib/rspec/core/shared_example_group.rb +85 -77
  53. data/lib/rspec/core/test_unit_assertions_adapter.rb +30 -0
  54. data/lib/rspec/core/version.rb +3 -1
  55. data/lib/rspec/core/warnings.rb +35 -17
  56. data/lib/rspec/core/world.rb +57 -5
  57. metadata +56 -369
  58. metadata.gz.sig +3 -3
  59. data/features/README.md +0 -13
  60. data/features/Upgrade.md +0 -352
  61. data/features/command_line/README.md +0 -25
  62. data/features/command_line/dry_run.feature +0 -29
  63. data/features/command_line/example_name_option.feature +0 -97
  64. data/features/command_line/exit_status.feature +0 -82
  65. data/features/command_line/fail_fast.feature +0 -26
  66. data/features/command_line/format_option.feature +0 -75
  67. data/features/command_line/init.feature +0 -57
  68. data/features/command_line/line_number_appended_to_path.feature +0 -140
  69. data/features/command_line/line_number_option.feature +0 -58
  70. data/features/command_line/order.feature +0 -25
  71. data/features/command_line/pattern_option.feature +0 -49
  72. data/features/command_line/rake_task.feature +0 -122
  73. data/features/command_line/randomization.feature +0 -63
  74. data/features/command_line/require_option.feature +0 -43
  75. data/features/command_line/ruby.feature +0 -23
  76. data/features/command_line/tag.feature +0 -98
  77. data/features/command_line/warnings_option.feature +0 -29
  78. data/features/configuration/alias_example_to.feature +0 -39
  79. data/features/configuration/backtrace_exclusion_patterns.feature +0 -105
  80. data/features/configuration/custom_settings.feature +0 -84
  81. data/features/configuration/default_path.feature +0 -38
  82. data/features/configuration/deprecation_stream.feature +0 -58
  83. data/features/configuration/enable_global_dsl.feature +0 -54
  84. data/features/configuration/fail_fast.feature +0 -77
  85. data/features/configuration/failure_exit_code.feature +0 -36
  86. data/features/configuration/order_and_seed.feature +0 -3
  87. data/features/configuration/output_stream.feature +0 -24
  88. data/features/configuration/overriding_global_ordering.feature +0 -93
  89. data/features/configuration/pattern.feature +0 -38
  90. data/features/configuration/profile.feature +0 -220
  91. data/features/configuration/read_options_from_file.feature +0 -90
  92. data/features/configuration/run_all_when_everything_filtered.feature +0 -76
  93. data/features/example_groups/aliasing.feature +0 -48
  94. data/features/example_groups/basic_structure.feature +0 -55
  95. data/features/example_groups/shared_context.feature +0 -74
  96. data/features/example_groups/shared_examples.feature +0 -286
  97. data/features/expectation_framework_integration/configure_expectation_framework.feature +0 -102
  98. data/features/filtering/exclusion_filters.feature +0 -135
  99. data/features/filtering/if_and_unless.feature +0 -138
  100. data/features/filtering/inclusion_filters.feature +0 -101
  101. data/features/formatters/configurable_colors.feature +0 -31
  102. data/features/formatters/custom_formatter.feature +0 -68
  103. data/features/formatters/json_formatter.feature +0 -30
  104. data/features/formatters/regression_tests.feature +0 -95
  105. data/features/formatters/text_formatter.feature +0 -46
  106. data/features/helper_methods/arbitrary_methods.feature +0 -40
  107. data/features/helper_methods/let.feature +0 -50
  108. data/features/helper_methods/modules.feature +0 -146
  109. data/features/hooks/around_hooks.feature +0 -344
  110. data/features/hooks/before_and_after_hooks.feature +0 -427
  111. data/features/hooks/filtering.feature +0 -232
  112. data/features/metadata/current_example.feature +0 -56
  113. data/features/metadata/described_class.feature +0 -17
  114. data/features/metadata/user_defined.feature +0 -100
  115. data/features/mock_framework_integration/use_any_framework.feature +0 -106
  116. data/features/mock_framework_integration/use_flexmock.feature +0 -94
  117. data/features/mock_framework_integration/use_mocha.feature +0 -95
  118. data/features/mock_framework_integration/use_rr.feature +0 -96
  119. data/features/mock_framework_integration/use_rspec.feature +0 -95
  120. data/features/pending_and_skipped_examples/README.md +0 -3
  121. data/features/pending_and_skipped_examples/pending_examples.feature +0 -118
  122. data/features/pending_and_skipped_examples/skipped_examples.feature +0 -106
  123. data/features/spec_files/arbitrary_file_suffix.feature +0 -13
  124. data/features/step_definitions/additional_cli_steps.rb +0 -83
  125. data/features/subject/explicit_subject.feature +0 -101
  126. data/features/subject/implicit_subject.feature +0 -63
  127. data/features/subject/one_liner_syntax.feature +0 -71
  128. data/features/support/env.rb +0 -21
  129. data/features/support/require_expect_syntax_in_aruba_specs.rb +0 -16
  130. data/features/support/rubinius.rb +0 -6
  131. data/lib/rspec/core/command_line.rb +0 -35
  132. data/lib/rspec/core/drb_command_line.rb +0 -26
  133. data/lib/rspec/core/drb_options.rb +0 -87
  134. data/lib/rspec/core/formatters/legacy_formatter.rb +0 -227
  135. data/lib/rspec/core/shared_example_group/collection.rb +0 -27
  136. data/spec/command_line/order_spec.rb +0 -211
  137. data/spec/rspec/core/backtrace_formatter_spec.rb +0 -230
  138. data/spec/rspec/core/command_line_spec.rb +0 -112
  139. data/spec/rspec/core/command_line_spec_output.txt +0 -0
  140. data/spec/rspec/core/configuration_options_spec.rb +0 -409
  141. data/spec/rspec/core/configuration_spec.rb +0 -1479
  142. data/spec/rspec/core/drb_command_line_spec.rb +0 -102
  143. data/spec/rspec/core/drb_options_spec.rb +0 -193
  144. data/spec/rspec/core/dsl_spec.rb +0 -88
  145. data/spec/rspec/core/example_group_spec.rb +0 -1533
  146. data/spec/rspec/core/example_spec.rb +0 -642
  147. data/spec/rspec/core/filter_manager_spec.rb +0 -229
  148. data/spec/rspec/core/formatters/base_formatter_spec.rb +0 -64
  149. data/spec/rspec/core/formatters/base_text_formatter_spec.rb +0 -303
  150. data/spec/rspec/core/formatters/deprecation_formatter_spec.rb +0 -208
  151. data/spec/rspec/core/formatters/documentation_formatter_spec.rb +0 -75
  152. data/spec/rspec/core/formatters/helpers_spec.rb +0 -104
  153. data/spec/rspec/core/formatters/html_formatted-2.1.0.html +0 -392
  154. data/spec/rspec/core/formatters/html_formatted.html +0 -397
  155. data/spec/rspec/core/formatters/html_formatter_spec.rb +0 -122
  156. data/spec/rspec/core/formatters/json_formatter_spec.rb +0 -206
  157. data/spec/rspec/core/formatters/legacy_formatter_spec.rb +0 -137
  158. data/spec/rspec/core/formatters/progress_formatter_spec.rb +0 -43
  159. data/spec/rspec/core/formatters/snippet_extractor_spec.rb +0 -26
  160. data/spec/rspec/core/formatters_spec.rb +0 -120
  161. data/spec/rspec/core/hooks_filtering_spec.rb +0 -227
  162. data/spec/rspec/core/hooks_spec.rb +0 -294
  163. data/spec/rspec/core/memoized_helpers_spec.rb +0 -495
  164. data/spec/rspec/core/metadata_spec.rb +0 -491
  165. data/spec/rspec/core/option_parser_spec.rb +0 -262
  166. data/spec/rspec/core/ordering_spec.rb +0 -102
  167. data/spec/rspec/core/pending_example_spec.rb +0 -117
  168. data/spec/rspec/core/pending_spec.rb +0 -8
  169. data/spec/rspec/core/project_initializer_spec.rb +0 -73
  170. data/spec/rspec/core/rake_task_spec.rb +0 -146
  171. data/spec/rspec/core/random_spec.rb +0 -47
  172. data/spec/rspec/core/reporter_spec.rb +0 -155
  173. data/spec/rspec/core/resources/a_bar.rb +0 -0
  174. data/spec/rspec/core/resources/a_foo.rb +0 -0
  175. data/spec/rspec/core/resources/a_spec.rb +0 -1
  176. data/spec/rspec/core/resources/custom_example_group_runner.rb +0 -14
  177. data/spec/rspec/core/resources/formatter_specs.rb +0 -58
  178. data/spec/rspec/core/resources/utf8_encoded.rb +0 -8
  179. data/spec/rspec/core/rspec_matchers_spec.rb +0 -45
  180. data/spec/rspec/core/ruby_project_spec.rb +0 -26
  181. data/spec/rspec/core/runner_spec.rb +0 -151
  182. data/spec/rspec/core/shared_context_spec.rb +0 -102
  183. data/spec/rspec/core/shared_example_group/collection_spec.rb +0 -57
  184. data/spec/rspec/core/shared_example_group_spec.rb +0 -114
  185. data/spec/rspec/core/warnings_spec.rb +0 -29
  186. data/spec/rspec/core/world_spec.rb +0 -142
  187. data/spec/rspec/core_spec.rb +0 -91
  188. data/spec/spec_helper.rb +0 -160
  189. data/spec/support/config_options_helper.rb +0 -13
  190. data/spec/support/formatter_support.rb +0 -83
  191. data/spec/support/helper_methods.rb +0 -26
  192. data/spec/support/isolate_load_path_mutation.rb +0 -5
  193. data/spec/support/isolated_directory.rb +0 -10
  194. data/spec/support/isolated_home_directory.rb +0 -16
  195. data/spec/support/legacy_formatter_using_sub_classing_example.rb +0 -87
  196. data/spec/support/matchers.rb +0 -85
  197. data/spec/support/mathn_integration_support.rb +0 -12
  198. data/spec/support/old_style_formatter_example.rb +0 -69
  199. data/spec/support/shared_example_groups.rb +0 -13
  200. data/spec/support/spec_files.rb +0 -44
  201. data/spec/support/stderr_splitter.rb +0 -36
@@ -1,16 +0,0 @@
1
- if defined?(Cucumber)
2
- require 'shellwords'
3
- Before do
4
- set_env('SPEC_OPTS', "-r#{Shellwords.escape(__FILE__)}")
5
- end
6
- else
7
- RSpec.configure do |rspec|
8
- rspec.mock_with :rspec do |mocks|
9
- mocks.syntax = :expect
10
- end
11
-
12
- rspec.expect_with :rspec do |expectations|
13
- expectations.syntax = :expect
14
- end
15
- end
16
- end
@@ -1,6 +0,0 @@
1
- # Required until https://github.com/rubinius/rubinius/issues/2430 is resolved
2
- ENV['RBXOPT'] = "#{ENV["RBXOPT"]} -Xcompiler.no_rbc"
3
-
4
- Around "@unsupported-on-rbx" do |scenario, block|
5
- block.call unless defined?(Rubinius)
6
- end
@@ -1,35 +0,0 @@
1
- module RSpec
2
- module Core
3
- class CommandLine
4
- def initialize(options, configuration=RSpec::configuration, world=RSpec::world)
5
- if Array === options
6
- options = ConfigurationOptions.new(options)
7
- end
8
- @options = options
9
- @configuration = configuration
10
- @world = world
11
- end
12
-
13
- # Configures and runs a suite
14
- #
15
- # @param [IO] err
16
- # @param [IO] out
17
- def run(err, out)
18
- @configuration.error_stream = err
19
- @configuration.output_stream = out if @configuration.output_stream == $stdout
20
- @options.configure(@configuration)
21
- @configuration.load_spec_files
22
- @world.announce_filters
23
-
24
- @configuration.reporter.report(@world.example_count) do |reporter|
25
- begin
26
- @configuration.hooks.run(:before, :suite)
27
- @world.ordered_example_groups.map {|g| g.run(reporter) }.all? ? 0 : @configuration.failure_exit_code
28
- ensure
29
- @configuration.hooks.run(:after, :suite)
30
- end
31
- end
32
- end
33
- end
34
- end
35
- end
@@ -1,26 +0,0 @@
1
- require 'drb/drb'
2
- require 'rspec/core/drb_options'
3
-
4
- module RSpec
5
- module Core
6
- class DRbCommandLine
7
- def initialize(options)
8
- @options = options
9
- end
10
-
11
- def drb_port
12
- @options.options[:drb_port] || ENV['RSPEC_DRB'] || 8989
13
- end
14
-
15
- def run(err, out)
16
- begin
17
- DRb.start_service("druby://localhost:0")
18
- rescue SocketError, Errno::EADDRNOTAVAIL
19
- DRb.start_service("druby://:0")
20
- end
21
- spec_server = DRbObject.new_with_uri("druby://127.0.0.1:#{drb_port}")
22
- spec_server.run(@options.drb_argv, err, out)
23
- end
24
- end
25
- end
26
- end
@@ -1,87 +0,0 @@
1
- # Builds command line arguments to pass to the rspec command over DRb
2
-
3
- module RSpec::Core
4
- # @private
5
- class DrbOptions
6
- def initialize(submitted_options, filter_manager)
7
- @submitted_options = submitted_options
8
- @filter_manager = filter_manager
9
- end
10
-
11
- def options
12
- argv = []
13
- argv << "--color" if @submitted_options[:color]
14
- argv << "--profile" if @submitted_options[:profile_examples]
15
- argv << "--backtrace" if @submitted_options[:full_backtrace]
16
- argv << "--tty" if @submitted_options[:tty]
17
- argv << "--fail-fast" if @submitted_options[:fail_fast]
18
- argv << "--options" << @submitted_options[:custom_options_file] if @submitted_options[:custom_options_file]
19
- argv << "--order" << @submitted_options[:order] if @submitted_options[:order]
20
-
21
- add_failure_exit_code(argv)
22
- add_full_description(argv)
23
- add_line_numbers(argv)
24
- add_filter(argv, :inclusion, @filter_manager.inclusions)
25
- add_filter(argv, :exclusion, @filter_manager.exclusions)
26
- add_formatters(argv)
27
- add_libs(argv)
28
- add_requires(argv)
29
-
30
- argv + @submitted_options[:files_or_directories_to_run]
31
- end
32
-
33
- def add_failure_exit_code(argv)
34
- if @submitted_options[:failure_exit_code]
35
- argv << "--failure-exit-code" << @submitted_options[:failure_exit_code].to_s
36
- end
37
- end
38
-
39
- def add_full_description(argv)
40
- if @submitted_options[:full_description]
41
- # The argument to --example is regexp-escaped before being stuffed
42
- # into a regexp when received for the first time (see OptionParser).
43
- # Hence, merely grabbing the source of this regexp will retain the
44
- # backslashes, so we must remove them.
45
- @submitted_options[:full_description].each do |description|
46
- argv << "--example" << description.source.delete('\\')
47
- end
48
- end
49
- end
50
-
51
- def add_line_numbers(argv)
52
- if @submitted_options[:line_numbers]
53
- argv.push(*@submitted_options[:line_numbers].inject([]){|a,l| a << "--line_number" << l})
54
- end
55
- end
56
-
57
- CONDITIONAL_FILTERS = [:if, :unless]
58
-
59
- def add_filter(argv, name, hash)
60
- hash.each_pair do |k, v|
61
- next if CONDITIONAL_FILTERS.include?(k)
62
- tag = name == :inclusion ? k.to_s : "~#{k}"
63
- tag << ":#{v}" if v.is_a?(String)
64
- argv << "--tag" << tag
65
- end unless hash.empty?
66
- end
67
-
68
- def add_formatters(argv)
69
- @submitted_options[:formatters].each do |pair|
70
- argv << "--format" << pair[0]
71
- argv << "--out" << pair[1] if pair[1]
72
- end if @submitted_options[:formatters]
73
- end
74
-
75
- def add_libs(argv)
76
- @submitted_options[:libs].each do |path|
77
- argv << "-I" << path
78
- end if @submitted_options[:libs]
79
- end
80
-
81
- def add_requires(argv)
82
- @submitted_options[:requires].each do |path|
83
- argv << "--require" << path
84
- end if @submitted_options[:requires]
85
- end
86
- end
87
- end
@@ -1,227 +0,0 @@
1
- require 'rspec/core/formatters/helpers'
2
- require 'stringio'
3
-
4
- module RSpec
5
- module Core
6
- module Formatters
7
-
8
- # The `LegacyFormatter` is used to wrap older RSpec 2.x style formatters
9
- # for the new 3.x implementation. It takes care of registering all the
10
- # old notifications and translating them to the older formatter.
11
- #
12
- # @see RSpec::Core::Formatters::BaseFormatter
13
- class LegacyFormatter
14
- NOTIFICATIONS = %W[start message example_group_started example_group_finished example_started
15
- example_passed example_failed example_pending start_dump dump_pending
16
- dump_failures dump_summary seed close stop deprecation deprecation_summary]
17
-
18
- module LegacyInterface
19
-
20
- def start(count)
21
- super Notifications::CountNotification.new(count)
22
- end
23
-
24
- def example_group_started(group)
25
- super Notifications::GroupNotification.new(group) if defined?(super)
26
- end
27
-
28
- def example_group_finished(group)
29
- super Notifications::GroupNotification.new(group) if defined?(super)
30
- end
31
-
32
- def example_started(example)
33
- super Notifications::ExampleNotification.new(example) if defined?(super)
34
- end
35
-
36
- def example_passed(example)
37
- super Notifications::ExampleNotification.new(example) if defined?(super)
38
- end
39
-
40
- def example_pending(example)
41
- super Notifications::ExampleNotification.new(example) if defined?(super)
42
- end
43
-
44
- def example_failed(example)
45
- super Notifications::ExampleNotification.new(example) if defined?(super)
46
- end
47
-
48
- def message(message)
49
- super Notifications::MessageNotification.new(message) if defined?(super)
50
- end
51
-
52
- attr_reader :duration, :example_count, :failure_count, :pending_count
53
- def dump_summary(duration, examples, failures, pending)
54
- @duration = duration
55
- @example_count = examples
56
- @failure_count = failures
57
- @pending_count = pending
58
- super Notifications::SummaryNotification.new(duration, examples, failures, pending) if defined?(super)
59
- end
60
-
61
- def seed(seed)
62
- super Notifications::SeedNotification.new(seed, true) if defined?(super)
63
- end
64
-
65
-
66
- def start_dump
67
- super(Notifications::NullNotification) if defined?(super)
68
- end
69
-
70
- def dump_failures
71
- super(Notifications::NullNotification) if defined?(super)
72
- end
73
-
74
- def dump_pending
75
- super(Notifications::NullNotification) if defined?(super)
76
- end
77
-
78
- def dump_profile
79
- super(Notifications::NullNotification) if defined?(super)
80
- end
81
-
82
- def close
83
- super(Notifications::NullNotification) if defined?(super)
84
- end
85
-
86
- def stop
87
- super(Notifications::NullNotification) if defined?(super)
88
- end
89
- end
90
-
91
- # @api private
92
- attr_reader :formatter
93
-
94
- # @api public
95
- #
96
- # @param formatter
97
- def initialize(formatter_class, *args)
98
- if formatter_class.ancestors.include?(BaseFormatter)
99
- formatter_class.class_eval do
100
- include LegacyInterface
101
- end
102
- end
103
- @formatter = formatter_class.new(*args)
104
- end
105
-
106
- # @api public
107
- #
108
- # This method is invoked during the setup phase to register
109
- # a formatters with the reporter
110
- #
111
- def notifications
112
- @notifications ||= NOTIFICATIONS.select { |m| @formatter.respond_to? m }
113
- end
114
-
115
- # @api public
116
- #
117
- # @param example_count
118
- def start(notification)
119
- @formatter.start notification.count
120
- end
121
-
122
- # @api public
123
- #
124
- # @param example_group
125
- def example_group_started(notification)
126
- @formatter.example_group_started notification.group
127
- end
128
-
129
- # @api public
130
- #
131
- # @param example_group
132
- def example_group_finished(notification)
133
- @formatter.example_group_finished notification.group
134
- end
135
-
136
- # @api public
137
- #
138
- # @param example
139
- def example_started(notification)
140
- @formatter.example_started notification.example
141
- end
142
-
143
- # @api public
144
- #
145
- # @param example
146
- def example_passed(notification)
147
- @formatter.example_passed notification.example
148
- end
149
-
150
- # @api public
151
- #
152
- # @param example
153
- def example_pending(notification)
154
- @formatter.example_pending notification.example
155
- end
156
-
157
- # @api public
158
- #
159
- # @param example
160
- def example_failed(notification)
161
- @formatter.example_failed notification.example
162
- end
163
-
164
- # @api public
165
- #
166
- # @param message
167
- def message(notification)
168
- @formatter.message notification.message
169
- end
170
-
171
- # @api public
172
- #
173
- def stop(notification)
174
- @formatter.stop
175
- end
176
-
177
- # @api public
178
- #
179
- def start_dump(notification)
180
- @formatter.start_dump
181
- end
182
-
183
- # @api public
184
- #
185
- def dump_failures(notification)
186
- @formatter.dump_failures
187
- end
188
-
189
- # @api public
190
- #
191
- # @param duration
192
- # @param example_count
193
- # @param failure_count
194
- # @param pending_count
195
- def dump_summary(summary)
196
- @formatter.dump_summary summary.duration, summary.example_count, summary.failure_count, summary.pending_count
197
- end
198
-
199
- # @api public
200
- #
201
- def dump_pending(notification)
202
- @formatter.dump_pending
203
- end
204
-
205
- # @api public
206
- #
207
- def dump_profile(notification)
208
- @formatter.dump_profile
209
- end
210
-
211
- # @api public
212
- #
213
- # @param seed
214
- def seed(notification)
215
- @formatter.seed notification.seed
216
- end
217
-
218
- # @api public
219
- #
220
- def close(notification)
221
- @formatter.close
222
- end
223
-
224
- end
225
- end
226
- end
227
- end
@@ -1,27 +0,0 @@
1
- module RSpec
2
- module Core
3
- module SharedExampleGroup
4
- class Collection
5
-
6
- def initialize(sources, examples)
7
- @sources, @examples = sources, examples
8
- end
9
-
10
- def [](key)
11
- fetch_examples(key)
12
- end
13
-
14
- private
15
-
16
- def fetch_examples(key)
17
- @examples[source_for key][key]
18
- end
19
-
20
- def source_for(key)
21
- @sources.reverse.find { |source| @examples[source].has_key? key }
22
- end
23
-
24
- end
25
- end
26
- end
27
- end
@@ -1,211 +0,0 @@
1
- require 'spec_helper'
2
-
3
- RSpec.describe 'command line', :ui, :slow do
4
- let(:stderr) { StringIO.new }
5
- let(:stdout) { StringIO.new }
6
-
7
- before :all do
8
- write_file 'spec/simple_spec.rb', """
9
- RSpec.describe 'group 1' do
10
- specify('group 1 example 1') {}
11
- specify('group 1 example 2') {}
12
- specify('group 1 example 3') {}
13
- describe 'group 1-1' do
14
- specify('group 1-1 example 1') {}
15
- specify('group 1-1 example 2') {}
16
- specify('group 1-1 example 3') {}
17
- end
18
- end
19
- """
20
-
21
- write_file 'spec/simple_spec2.rb', """
22
- RSpec.describe 'group 2' do
23
- specify('group 2 example 1') {}
24
- specify('group 2 example 2') {}
25
- specify('group 2 example 3') {}
26
- describe 'group 2-1' do
27
- specify('group 2-1 example 1') {}
28
- specify('group 2-1 example 2') {}
29
- specify('group 2-1 example 3') {}
30
- end
31
- end
32
- """
33
-
34
- write_file 'spec/order_spec.rb', """
35
- RSpec.describe 'group 1' do
36
- specify('group 1 example 1') {}
37
- specify('group 1 example 2') {}
38
- specify('group 1 example 3') {}
39
- specify('group 1 example 4') {}
40
- specify('group 1 example 5') {}
41
- specify('group 1 example 6') {}
42
- specify('group 1 example 7') {}
43
- specify('group 1 example 8') {}
44
- specify('group 1 example 9') {}
45
- specify('group 1 example 10') {}
46
-
47
- describe 'group 1-1' do
48
- specify('group 1-1 example 1') {}
49
- specify('group 1-1 example 2') {}
50
- specify('group 1-1 example 3') {}
51
- specify('group 1-1 example 4') {}
52
- specify('group 1-1 example 5') {}
53
- specify('group 1-1 example 6') {}
54
- specify('group 1-1 example 7') {}
55
- specify('group 1-1 example 8') {}
56
- specify('group 1-1 example 9') {}
57
- specify('group 1-1 example 10') {}
58
- end
59
-
60
- describe('group 1-2') { specify('example') {} }
61
- describe('group 1-3') { specify('example') {} }
62
- describe('group 1-4') { specify('example') {} }
63
- describe('group 1-5') { specify('example') {} }
64
- describe('group 1-6') { specify('example') {} }
65
- describe('group 1-7') { specify('example') {} }
66
- describe('group 1-8') { specify('example') {} }
67
- describe('group 1-9') { specify('example') {} }
68
- describe('group 1-10') { specify('example') {} }
69
- end
70
-
71
- RSpec.describe('group 2') { specify('example') {} }
72
- RSpec.describe('group 3') { specify('example') {} }
73
- RSpec.describe('group 4') { specify('example') {} }
74
- RSpec.describe('group 5') { specify('example') {} }
75
- RSpec.describe('group 6') { specify('example') {} }
76
- RSpec.describe('group 7') { specify('example') {} }
77
- RSpec.describe('group 8') { specify('example') {} }
78
- RSpec.describe('group 9') { specify('example') {} }
79
- RSpec.describe('group 10') { specify('example') {} }
80
- """
81
- end
82
-
83
- describe '--order rand' do
84
- it 'runs the examples and groups in a different order each time' do
85
- run_command 'spec/order_spec.rb --order rand -f doc'
86
- original_seed = srand
87
- RSpec.configuration.seed = srand # reset seed in same process
88
- run_command 'spec/order_spec.rb --order rand -f doc'
89
- srand original_seed
90
-
91
- expect(stdout.string).to match(/Randomized with seed \d+/)
92
-
93
- top_level_groups {|first_run, second_run| expect(first_run).to_not eq(second_run)}
94
- nested_groups {|first_run, second_run| expect(first_run).to_not eq(second_run)}
95
- examples('group 1') {|first_run, second_run| expect(first_run).to_not eq(second_run)}
96
- examples('group 1-1') {|first_run, second_run| expect(first_run).to_not eq(second_run)}
97
- end
98
- end
99
-
100
- describe '--order rand:SEED' do
101
- it 'runs the examples and groups in the same order each time' do
102
- 2.times { run_command 'spec/order_spec.rb --order rand:123 -f doc' }
103
-
104
- expect(stdout.string).to match(/Randomized with seed 123/)
105
-
106
- top_level_groups {|first_run, second_run| expect(first_run).to eq(second_run)}
107
- nested_groups {|first_run, second_run| expect(first_run).to eq(second_run)}
108
- examples('group 1') {|first_run, second_run| expect(first_run).to eq(second_run)}
109
- examples('group 1-1') {|first_run, second_run| expect(first_run).to eq(second_run)}
110
- end
111
- end
112
-
113
- describe '--seed SEED' do
114
- it "forces '--order rand' and runs the examples and groups in the same order each time" do
115
- 2.times { run_command 'spec/order_spec.rb --seed 123 -f doc' }
116
-
117
- expect(stdout.string).to match(/Randomized with seed 123/)
118
-
119
- top_level_groups {|first_run, second_run| expect(first_run).to eq(second_run)}
120
- nested_groups {|first_run, second_run| expect(first_run).to eq(second_run)}
121
- examples('group 1') {|first_run, second_run| expect(first_run).to eq(second_run)}
122
- examples('group 1-1') {|first_run, second_run| expect(first_run).to eq(second_run)}
123
- end
124
-
125
- it "runs examples in the same order, regardless of the order in which files are given" do
126
- run_command 'spec/simple_spec.rb spec/simple_spec2.rb --seed 1337 -f doc'
127
- run_command 'spec/simple_spec2.rb spec/simple_spec.rb --seed 1337 -f doc'
128
-
129
- top_level_groups {|first_run, second_run| expect(first_run).to eq(second_run)}
130
- nested_groups {|first_run, second_run| expect(first_run).to eq(second_run)}
131
- end
132
- end
133
-
134
- describe '--order defined on CLI with --order rand in .rspec' do
135
- after { remove_file '.rspec' }
136
-
137
- it "overrides --order rand with --order defined" do
138
- write_file '.rspec', '--order rand'
139
-
140
- run_command 'spec/order_spec.rb --order defined -f doc'
141
-
142
- expect(stdout.string).not_to match(/Randomized/)
143
-
144
- expect(stdout.string).to match(
145
- /group 1.*group 1 example 1.*group 1 example 2.*group 1-1.*group 1-2.*group 2.*/m
146
- )
147
- end
148
- end
149
-
150
- context 'when a custom order is configured' do
151
- after { remove_file 'spec/custom_order_spec.rb' }
152
-
153
- before do
154
- write_file 'spec/custom_order_spec.rb', """
155
- RSpec.configure do |config|
156
- config.register_ordering :global do |list|
157
- list.sort_by { |item| item.description }
158
- end
159
- end
160
-
161
- RSpec.describe 'group B' do
162
- specify('group B example D') {}
163
- specify('group B example B') {}
164
- specify('group B example A') {}
165
- specify('group B example C') {}
166
- end
167
-
168
- RSpec.describe 'group A' do
169
- specify('group A example 1') {}
170
- end
171
- """
172
- end
173
-
174
- it 'orders the groups and examples by the provided strategy' do
175
- run_command 'spec/custom_order_spec.rb -f doc'
176
-
177
- top_level_groups { |groups| expect(groups.flatten).to eq(['group A', 'group B']) }
178
- examples('group B') do |examples|
179
- letters = examples.flatten.map { |e| e[/(.)\z/, 1] }
180
- expect(letters).to eq(['A', 'B', 'C', 'D'])
181
- end
182
- end
183
- end
184
-
185
- def examples(group)
186
- yield split_in_half(stdout.string.scan(/^\s+#{group} example.*$/))
187
- end
188
-
189
- def top_level_groups
190
- yield example_groups_at_level(0)
191
- end
192
-
193
- def nested_groups
194
- yield example_groups_at_level(2)
195
- end
196
-
197
- def example_groups_at_level(level)
198
- split_in_half(stdout.string.scan(/^\s{#{level*2}}group.*$/))
199
- end
200
-
201
- def split_in_half(array)
202
- length, midpoint = array.length, array.length / 2
203
- return array.slice(0, midpoint), array.slice(midpoint, length)
204
- end
205
-
206
- def run_command(cmd)
207
- in_current_dir do
208
- RSpec::Core::Runner.run(cmd.split, stderr, stdout)
209
- end
210
- end
211
- end