opal-rspec 0.8.0.alpha3 → 1.0.0.alpha1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (683) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/build.yml +7 -7
  3. data/.gitmodules +6 -0
  4. data/CHANGELOG.md +16 -1
  5. data/Gemfile +13 -0
  6. data/README.md +63 -59
  7. data/diff-lcs/spec/files_to_exclude.txt +1 -0
  8. data/diff-lcs/spec/requires.rb +4 -0
  9. data/diff-lcs/upstream/.autotest +5 -0
  10. data/diff-lcs/upstream/.fasterer.yml +3 -0
  11. data/{stubs/diff/lcs.rb → diff-lcs/upstream/.gemtest} +0 -0
  12. data/diff-lcs/upstream/.github/workflows/ci.yml +64 -0
  13. data/diff-lcs/upstream/.github/workflows/codeql-analysis.yml +70 -0
  14. data/diff-lcs/upstream/.gitignore +20 -0
  15. data/diff-lcs/upstream/.hoerc +52 -0
  16. data/diff-lcs/upstream/.rspec +1 -0
  17. data/diff-lcs/upstream/.standard.yml +6 -0
  18. data/diff-lcs/upstream/Code-of-Conduct.md +74 -0
  19. data/diff-lcs/upstream/Contributing.md +119 -0
  20. data/diff-lcs/upstream/Gemfile +28 -0
  21. data/diff-lcs/upstream/History.md +407 -0
  22. data/diff-lcs/upstream/License.md +41 -0
  23. data/diff-lcs/upstream/Manifest.txt +59 -0
  24. data/diff-lcs/upstream/README.rdoc +84 -0
  25. data/diff-lcs/upstream/Rakefile +127 -0
  26. data/diff-lcs/upstream/bin/htmldiff +35 -0
  27. data/diff-lcs/upstream/bin/ldiff +9 -0
  28. data/diff-lcs/upstream/diff-lcs.gemspec +48 -0
  29. data/diff-lcs/upstream/docs/COPYING.txt +339 -0
  30. data/diff-lcs/upstream/docs/artistic.txt +127 -0
  31. data/diff-lcs/upstream/lib/diff/lcs/array.rb +7 -0
  32. data/diff-lcs/upstream/lib/diff/lcs/backports.rb +9 -0
  33. data/diff-lcs/upstream/lib/diff/lcs/block.rb +37 -0
  34. data/diff-lcs/upstream/lib/diff/lcs/callbacks.rb +327 -0
  35. data/diff-lcs/upstream/lib/diff/lcs/change.rb +174 -0
  36. data/diff-lcs/upstream/lib/diff/lcs/htmldiff.rb +158 -0
  37. data/diff-lcs/upstream/lib/diff/lcs/hunk.rb +363 -0
  38. data/diff-lcs/upstream/lib/diff/lcs/internals.rb +308 -0
  39. data/diff-lcs/upstream/lib/diff/lcs/ldiff.rb +173 -0
  40. data/diff-lcs/upstream/lib/diff/lcs/string.rb +5 -0
  41. data/diff-lcs/upstream/lib/diff/lcs.rb +741 -0
  42. data/diff-lcs/upstream/lib/diff-lcs.rb +3 -0
  43. data/diff-lcs/upstream/spec/change_spec.rb +89 -0
  44. data/diff-lcs/upstream/spec/diff_spec.rb +51 -0
  45. data/diff-lcs/upstream/spec/fixtures/aX +1 -0
  46. data/diff-lcs/upstream/spec/fixtures/bXaX +1 -0
  47. data/diff-lcs/upstream/spec/fixtures/ds1.csv +50 -0
  48. data/diff-lcs/upstream/spec/fixtures/ds2.csv +51 -0
  49. data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff +4 -0
  50. data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff-c +7 -0
  51. data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff-e +3 -0
  52. data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff-f +3 -0
  53. data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff-u +5 -0
  54. data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff.chef +4 -0
  55. data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff.chef-c +15 -0
  56. data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff.chef-e +3 -0
  57. data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff.chef-f +3 -0
  58. data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff.chef-u +9 -0
  59. data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff.chef2 +7 -0
  60. data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff.chef2-c +20 -0
  61. data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff.chef2-d +7 -0
  62. data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff.chef2-e +7 -0
  63. data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff.chef2-f +7 -0
  64. data/diff-lcs/upstream/spec/fixtures/ldiff/output.diff.chef2-u +16 -0
  65. data/diff-lcs/upstream/spec/fixtures/new-chef +4 -0
  66. data/diff-lcs/upstream/spec/fixtures/new-chef2 +17 -0
  67. data/diff-lcs/upstream/spec/fixtures/old-chef +4 -0
  68. data/diff-lcs/upstream/spec/fixtures/old-chef2 +14 -0
  69. data/diff-lcs/upstream/spec/hunk_spec.rb +83 -0
  70. data/diff-lcs/upstream/spec/issues_spec.rb +160 -0
  71. data/diff-lcs/upstream/spec/lcs_spec.rb +56 -0
  72. data/diff-lcs/upstream/spec/ldiff_spec.rb +89 -0
  73. data/diff-lcs/upstream/spec/patch_spec.rb +416 -0
  74. data/diff-lcs/upstream/spec/sdiff_spec.rb +216 -0
  75. data/diff-lcs/upstream/spec/spec_helper.rb +376 -0
  76. data/diff-lcs/upstream/spec/traverse_balanced_spec.rb +312 -0
  77. data/diff-lcs/upstream/spec/traverse_sequences_spec.rb +137 -0
  78. data/lib/opal/rspec/runner.rb +11 -0
  79. data/lib/opal/rspec/sprockets.rb +6 -0
  80. data/lib/opal/rspec/version.rb +1 -1
  81. data/lib/opal/rspec.rb +1 -2
  82. data/lib-opal/opal/rspec/async/configuration.rb +39 -0
  83. data/lib-opal/opal/rspec/async/example.rb +80 -168
  84. data/lib-opal/opal/rspec/async/example_group.rb +71 -81
  85. data/lib-opal/opal/rspec/async/hooks.rb +98 -8
  86. data/lib-opal/opal/rspec/async/memoized_helpers.rb +32 -0
  87. data/lib-opal/opal/rspec/async/reporter.rb +6 -3
  88. data/lib-opal/opal/rspec/async/runner.rb +33 -24
  89. data/lib-opal/opal/rspec/async.rb +4 -1
  90. data/lib-opal/opal/rspec/browser.rb +0 -8
  91. data/lib-opal/opal/rspec/browser_early.rb +5 -0
  92. data/lib-opal/opal/rspec/fixes/diff-lcs/hunk.rb +164 -0
  93. data/lib-opal/opal/rspec/fixes/diff-lcs/lcs.rb +112 -0
  94. data/lib-opal/opal/rspec/fixes/diff-lcs.rb +2 -0
  95. data/lib-opal/opal/rspec/fixes/opal.rb +4 -17
  96. data/lib-opal/opal/rspec/fixes/rspec/core/example_status_persister.rb +11 -0
  97. data/lib-opal/opal/rspec/fixes/rspec/core/formatters/deprecation_formatter.rb +3 -12
  98. data/lib-opal/opal/rspec/fixes/rspec/core/formatters/exception_presenter.rb +28 -0
  99. data/lib-opal/opal/rspec/fixes/rspec/core/formatters/loader.rb +0 -32
  100. data/lib-opal/opal/rspec/fixes/rspec/core/formatters/snippet_extractor.rb +17 -0
  101. data/lib-opal/opal/rspec/fixes/rspec/core/formatters/syntax_highlighter.rb +17 -0
  102. data/lib-opal/opal/rspec/fixes/rspec/core/formatters.rb +3 -4
  103. data/lib-opal/opal/rspec/fixes/rspec/core/metadata.rb +24 -8
  104. data/lib-opal/opal/rspec/fixes/rspec/core/notifications/examples_notification.rb +3 -20
  105. data/lib-opal/opal/rspec/fixes/rspec/core/notifications.rb +0 -2
  106. data/lib-opal/opal/rspec/fixes/rspec/core.rb +1 -2
  107. data/lib-opal/opal/rspec/fixes/rspec/expectations.rb +0 -1
  108. data/lib-opal/opal/rspec/fixes/rspec/matchers/built_in/base_matcher.rb +26 -0
  109. data/lib-opal/opal/rspec/fixes/rspec/matchers/built_in.rb +1 -3
  110. data/lib-opal/opal/rspec/fixes/rspec/matchers/expecteds_for_multiple_diffs.rb +13 -0
  111. data/lib-opal/opal/rspec/fixes/rspec/matchers.rb +1 -1
  112. data/lib-opal/opal/rspec/fixes/rspec/mocks/error_generator.rb +26 -10
  113. data/lib-opal/opal/rspec/fixes/rspec/mocks/proxy.rb +19 -0
  114. data/lib-opal/opal/rspec/fixes/rspec/mocks.rb +1 -3
  115. data/lib-opal/opal/rspec/fixes/rspec/support/differ.rb +29 -0
  116. data/lib-opal/opal/rspec/fixes/rspec/support/encoded_string.rb +9 -5
  117. data/lib-opal/opal/rspec/fixes/rspec/support/ruby_features.rb +22 -0
  118. data/lib-opal/opal/rspec/fixes/rspec/support/source.rb +15 -0
  119. data/lib-opal/opal/rspec/fixes/rspec/support.rb +3 -3
  120. data/lib-opal/opal/rspec/fixes/rspec.rb +0 -1
  121. data/lib-opal/opal/rspec/fixes.rb +1 -0
  122. data/lib-opal/opal/rspec/formatter/document_io.rb +1 -1
  123. data/lib-opal/opal/rspec/formatter/html_printer.rb +1 -1
  124. data/lib-opal/opal/rspec/pre_require_fixes.rb +1 -5
  125. data/lib-opal/opal/rspec/requires.rb +32 -19
  126. data/lib-opal/opal/rspec/sprockets_runner.rb.erb +1 -0
  127. data/lib-opal/opal/rspec.rb +3 -0
  128. data/opal-rspec.gemspec +1 -1
  129. data/rspec/upstream/.document +1 -1
  130. data/rspec/upstream/.github/FUNDING.yml +5 -0
  131. data/rspec/upstream/.gitignore +1 -0
  132. data/rspec/upstream/LICENSE.md +27 -0
  133. data/rspec/upstream/README.md +26 -26
  134. data/rspec/upstream/Rakefile +1 -1
  135. data/rspec/upstream/certs/rspec.pem +32 -20
  136. data/rspec/upstream/certs/samphippen.asc +18 -0
  137. data/rspec/upstream/code_of_conduct.md +59 -0
  138. data/rspec/upstream/lib/rspec/version.rb +1 -1
  139. data/rspec/upstream/rspec.gemspec +7 -2
  140. data/rspec-core/upstream/.document +1 -1
  141. data/rspec-core/upstream/.github/FUNDING.yml +5 -0
  142. data/rspec-core/upstream/.github/workflows/ci.yml +150 -0
  143. data/rspec-core/upstream/.gitignore +2 -0
  144. data/rspec-core/upstream/.rspec +1 -0
  145. data/rspec-core/upstream/.rubocop.yml +64 -12
  146. data/rspec-core/upstream/.rubocop_rspec_base.yml +224 -38
  147. data/rspec-core/upstream/.rubocop_todo.yml +1031 -0
  148. data/rspec-core/upstream/.yardopts +2 -1
  149. data/rspec-core/upstream/BUILD_DETAIL.md +149 -0
  150. data/rspec-core/upstream/CODE_OF_CONDUCT.md +59 -0
  151. data/rspec-core/upstream/CONTRIBUTING.md +86 -0
  152. data/rspec-core/upstream/Changelog.md +721 -2
  153. data/rspec-core/upstream/DEV-README.md +2 -2
  154. data/rspec-core/upstream/DEVELOPMENT.md +131 -0
  155. data/rspec-core/upstream/Filtering.md +173 -0
  156. data/rspec-core/upstream/Gemfile +78 -9
  157. data/rspec-core/upstream/ISSUE_TEMPLATE.md +24 -0
  158. data/rspec-core/upstream/{License.txt → LICENSE.md} +6 -5
  159. data/rspec-core/upstream/README.md +165 -24
  160. data/rspec-core/upstream/REPORT_TEMPLATE.md +43 -0
  161. data/rspec-core/upstream/Rakefile +1 -1
  162. data/rspec-core/upstream/benchmarks/allocations/1000_groups_1_example.rb +124 -0
  163. data/rspec-core/upstream/benchmarks/allocations/1_group_1000_examples.rb +63 -0
  164. data/rspec-core/upstream/benchmarks/allocations/helper.rb +30 -0
  165. data/rspec-core/upstream/benchmarks/allocations/running_1000_groups_1_example.rb +100 -0
  166. data/rspec-core/upstream/benchmarks/allocations/running_1_group_1000_examples.rb +60 -0
  167. data/rspec-core/upstream/benchmarks/capture_block_vs_yield.rb +208 -0
  168. data/rspec-core/upstream/benchmarks/flat_map_vs_inject.rb +55 -0
  169. data/rspec-core/upstream/benchmarks/hash_functions.rb +74 -0
  170. data/rspec-core/upstream/benchmarks/keys_each_vs_each_key.rb +43 -0
  171. data/rspec-core/upstream/benchmarks/module_inclusion_filtering.rb +89 -0
  172. data/rspec-core/upstream/benchmarks/precalculate_absolute_file_path_or_not.rb +29 -0
  173. data/rspec-core/upstream/benchmarks/shuffle_vs_sort_by_for_random_ordering.rb +131 -0
  174. data/rspec-core/upstream/benchmarks/singleton_example_groups/helper.rb +122 -0
  175. data/rspec-core/upstream/benchmarks/singleton_example_groups/with_config_hooks.rb +28 -0
  176. data/rspec-core/upstream/benchmarks/singleton_example_groups/with_config_hooks_module_inclusions_and_shared_context_inclusions.rb +35 -0
  177. data/rspec-core/upstream/benchmarks/singleton_example_groups/with_module_inclusions.rb +28 -0
  178. data/rspec-core/upstream/benchmarks/singleton_example_groups/with_no_config_hooks_or_inclusions.rb +22 -0
  179. data/rspec-core/upstream/benchmarks/singleton_example_groups/with_shared_context_inclusions.rb +28 -0
  180. data/rspec-core/upstream/benchmarks/threadsafe_let_block.rb +312 -0
  181. data/rspec-core/upstream/cucumber.yml +7 -2
  182. data/rspec-core/upstream/features/.nav +5 -1
  183. data/rspec-core/upstream/features/README.md +2 -2
  184. data/rspec-core/upstream/features/clear_examples.feature +106 -0
  185. data/rspec-core/upstream/features/command_line/bisect.feature +178 -0
  186. data/rspec-core/upstream/features/command_line/example_matches_name_option.feature +131 -0
  187. data/rspec-core/upstream/features/command_line/example_name_option.feature +2 -0
  188. data/rspec-core/upstream/features/command_line/fail_fast.feature +21 -4
  189. data/rspec-core/upstream/features/command_line/init.feature +2 -2
  190. data/rspec-core/upstream/features/command_line/line_number_appended_to_path.feature +2 -2
  191. data/rspec-core/upstream/features/command_line/only_failures.feature +113 -0
  192. data/rspec-core/upstream/features/command_line/order.md +8 -1
  193. data/rspec-core/upstream/features/command_line/pattern_option.feature +6 -3
  194. data/rspec-core/upstream/features/command_line/rake_task.feature +3 -3
  195. data/rspec-core/upstream/features/command_line/randomization.feature +5 -2
  196. data/rspec-core/upstream/features/command_line/ruby.feature +6 -2
  197. data/rspec-core/upstream/features/command_line/tag.feature +13 -11
  198. data/rspec-core/upstream/features/command_line/warnings_option.feature +20 -3
  199. data/rspec-core/upstream/features/configuration/backtrace_exclusion_patterns.feature +45 -29
  200. data/rspec-core/upstream/features/configuration/color.feature +22 -0
  201. data/rspec-core/upstream/features/configuration/custom_settings.feature +9 -13
  202. data/rspec-core/upstream/features/configuration/default_path.feature +1 -1
  203. data/rspec-core/upstream/features/configuration/enable_global_dsl.feature +15 -1
  204. data/rspec-core/upstream/features/configuration/error_exit_code.feature +52 -0
  205. data/rspec-core/upstream/features/configuration/fail_fast.feature +42 -12
  206. data/rspec-core/upstream/features/configuration/fail_if_no_examples.feature +31 -0
  207. data/rspec-core/upstream/features/configuration/failure_exit_code.feature +26 -0
  208. data/rspec-core/upstream/features/configuration/overriding_global_ordering.feature +1 -1
  209. data/rspec-core/upstream/features/configuration/pattern.feature +1 -1
  210. data/rspec-core/upstream/features/configuration/profile.feature +25 -0
  211. data/rspec-core/upstream/features/configuration/read_options_from_file.feature +25 -19
  212. data/rspec-core/upstream/features/configuration/run_all_when_everything_filtered.feature +4 -0
  213. data/rspec-core/upstream/features/core_standalone.feature +2 -0
  214. data/rspec-core/upstream/features/example_groups/basic_structure.feature +1 -0
  215. data/rspec-core/upstream/features/example_groups/shared_context.feature +55 -5
  216. data/rspec-core/upstream/features/example_groups/shared_examples.feature +59 -15
  217. data/rspec-core/upstream/features/expectation_framework_integration/aggregating_failures.feature +602 -0
  218. data/rspec-core/upstream/features/expectation_framework_integration/configure_expectation_framework.feature +13 -5
  219. data/rspec-core/upstream/features/filtering/filter_run_when_matching.feature +75 -0
  220. data/rspec-core/upstream/features/formatters/configurable_colors.feature +23 -4
  221. data/rspec-core/upstream/features/helper_methods/let.feature +3 -0
  222. data/rspec-core/upstream/features/helper_methods/modules.feature +6 -0
  223. data/rspec-core/upstream/features/hooks/around_hooks.feature +36 -6
  224. data/rspec-core/upstream/features/hooks/before_and_after_hooks.feature +47 -5
  225. data/rspec-core/upstream/features/hooks/filtering.feature +199 -4
  226. data/rspec-core/upstream/features/hooks/when_first_matching_example_defined.feature +70 -0
  227. data/rspec-core/upstream/features/metadata/current_scope.feature +87 -0
  228. data/rspec-core/upstream/features/metadata/described_class.feature +12 -5
  229. data/rspec-core/upstream/features/metadata/user_defined.feature +3 -3
  230. data/rspec-core/upstream/features/mock_framework_integration/use_any_framework.feature +1 -1
  231. data/rspec-core/upstream/features/mock_framework_integration/use_flexmock.feature +5 -5
  232. data/rspec-core/upstream/features/mock_framework_integration/use_mocha.feature +5 -5
  233. data/rspec-core/upstream/features/mock_framework_integration/use_rr.feature +5 -5
  234. data/rspec-core/upstream/features/mock_framework_integration/use_rspec.feature +6 -6
  235. data/rspec-core/upstream/features/pending_and_skipped_examples/pending_examples.feature +8 -7
  236. data/rspec-core/upstream/features/pending_and_skipped_examples/skipped_examples.feature +49 -22
  237. data/rspec-core/upstream/features/step_definitions/additional_cli_steps.rb +142 -12
  238. data/rspec-core/upstream/features/step_definitions/core_standalone_steps.rb +6 -2
  239. data/rspec-core/upstream/features/subject/implicit_subject.feature +3 -2
  240. data/rspec-core/upstream/features/subject/one_liner_syntax.feature +9 -5
  241. data/rspec-core/upstream/features/support/diff_lcs_versions.rb +17 -0
  242. data/rspec-core/upstream/features/support/env.rb +20 -7
  243. data/rspec-core/upstream/features/support/jruby.rb +8 -0
  244. data/rspec-core/upstream/features/support/require_expect_syntax_in_aruba_specs.rb +6 -3
  245. data/rspec-core/upstream/features/support/rubinius.rb +5 -1
  246. data/rspec-core/upstream/features/support/ruby_27_support.rb +7 -0
  247. data/rspec-core/upstream/features/support/send_sigint_during_bisect.rb +21 -0
  248. data/rspec-core/upstream/lib/rspec/autorun.rb +1 -0
  249. data/rspec-core/upstream/lib/rspec/core/backtrace_formatter.rb +3 -4
  250. data/rspec-core/upstream/lib/rspec/core/bisect/coordinator.rb +62 -0
  251. data/rspec-core/upstream/lib/rspec/core/bisect/example_minimizer.rb +173 -0
  252. data/rspec-core/upstream/lib/rspec/core/bisect/fork_runner.rb +138 -0
  253. data/rspec-core/upstream/lib/rspec/core/bisect/server.rb +61 -0
  254. data/rspec-core/upstream/lib/rspec/core/bisect/shell_command.rb +126 -0
  255. data/rspec-core/upstream/lib/rspec/core/bisect/shell_runner.rb +73 -0
  256. data/rspec-core/upstream/lib/rspec/core/bisect/utilities.rb +69 -0
  257. data/rspec-core/upstream/lib/rspec/core/configuration.rb +1157 -212
  258. data/rspec-core/upstream/lib/rspec/core/configuration_options.rb +82 -22
  259. data/rspec-core/upstream/lib/rspec/core/did_you_mean.rb +46 -0
  260. data/rspec-core/upstream/lib/rspec/core/drb.rb +10 -1
  261. data/rspec-core/upstream/lib/rspec/core/dsl.rb +10 -5
  262. data/rspec-core/upstream/lib/rspec/core/example.rb +271 -107
  263. data/rspec-core/upstream/lib/rspec/core/example_group.rb +426 -127
  264. data/rspec-core/upstream/lib/rspec/core/example_status_persister.rb +235 -0
  265. data/rspec-core/upstream/lib/rspec/core/filter_manager.rb +76 -104
  266. data/rspec-core/upstream/lib/rspec/core/flat_map.rb +6 -4
  267. data/rspec-core/upstream/lib/rspec/core/formatters/base_bisect_formatter.rb +45 -0
  268. data/rspec-core/upstream/lib/rspec/core/formatters/base_formatter.rb +7 -4
  269. data/rspec-core/upstream/lib/rspec/core/formatters/base_text_formatter.rb +15 -16
  270. data/rspec-core/upstream/lib/rspec/core/formatters/bisect_drb_formatter.rb +29 -0
  271. data/rspec-core/upstream/lib/rspec/core/formatters/bisect_progress_formatter.rb +157 -0
  272. data/rspec-core/upstream/lib/rspec/core/formatters/console_codes.rb +28 -16
  273. data/rspec-core/upstream/lib/rspec/core/formatters/deprecation_formatter.rb +14 -13
  274. data/rspec-core/upstream/lib/rspec/core/formatters/documentation_formatter.rb +47 -13
  275. data/rspec-core/upstream/lib/rspec/core/formatters/exception_presenter.rb +525 -0
  276. data/rspec-core/upstream/lib/rspec/core/formatters/failure_list_formatter.rb +23 -0
  277. data/rspec-core/upstream/lib/rspec/core/formatters/fallback_message_formatter.rb +28 -0
  278. data/rspec-core/upstream/lib/rspec/core/formatters/helpers.rb +40 -9
  279. data/rspec-core/upstream/lib/rspec/core/formatters/html_formatter.rb +20 -16
  280. data/rspec-core/upstream/lib/rspec/core/formatters/html_printer.rb +27 -18
  281. data/rspec-core/upstream/lib/rspec/core/formatters/html_snippet_extractor.rb +120 -0
  282. data/rspec-core/upstream/lib/rspec/core/formatters/json_formatter.rb +15 -7
  283. data/rspec-core/upstream/lib/rspec/core/formatters/profile_formatter.rb +10 -7
  284. data/rspec-core/upstream/lib/rspec/core/formatters/progress_formatter.rb +1 -0
  285. data/rspec-core/upstream/lib/rspec/core/formatters/protocol.rb +62 -43
  286. data/rspec-core/upstream/lib/rspec/core/formatters/snippet_extractor.rb +115 -85
  287. data/rspec-core/upstream/lib/rspec/core/formatters/syntax_highlighter.rb +91 -0
  288. data/rspec-core/upstream/lib/rspec/core/formatters.rb +71 -32
  289. data/rspec-core/upstream/lib/rspec/core/hooks.rb +303 -248
  290. data/rspec-core/upstream/lib/rspec/core/invocations.rb +87 -0
  291. data/rspec-core/upstream/lib/rspec/core/memoized_helpers.rb +155 -47
  292. data/rspec-core/upstream/lib/rspec/core/metadata.rb +102 -41
  293. data/rspec-core/upstream/lib/rspec/core/metadata_filter.rb +209 -49
  294. data/rspec-core/upstream/lib/rspec/core/minitest_assertions_adapter.rb +5 -2
  295. data/rspec-core/upstream/lib/rspec/core/mocking_adapters/flexmock.rb +1 -1
  296. data/rspec-core/upstream/lib/rspec/core/mocking_adapters/mocha.rb +8 -8
  297. data/rspec-core/upstream/lib/rspec/core/notifications.rb +180 -201
  298. data/rspec-core/upstream/lib/rspec/core/option_parser.rb +159 -58
  299. data/rspec-core/upstream/lib/rspec/core/ordering.rb +40 -26
  300. data/rspec-core/upstream/lib/rspec/core/output_wrapper.rb +29 -0
  301. data/rspec-core/upstream/lib/rspec/core/pending.rb +19 -25
  302. data/rspec-core/upstream/lib/rspec/core/profiler.rb +34 -0
  303. data/rspec-core/upstream/lib/rspec/core/project_initializer/.rspec +0 -1
  304. data/rspec-core/upstream/lib/rspec/core/project_initializer/spec/spec_helper.rb +31 -22
  305. data/rspec-core/upstream/lib/rspec/core/project_initializer.rb +1 -1
  306. data/rspec-core/upstream/lib/rspec/core/rake_task.rb +73 -72
  307. data/rspec-core/upstream/lib/rspec/core/reporter.rb +134 -18
  308. data/rspec-core/upstream/lib/rspec/core/ruby_project.rb +13 -5
  309. data/rspec-core/upstream/lib/rspec/core/runner.rb +99 -45
  310. data/rspec-core/upstream/lib/rspec/core/sandbox.rb +37 -0
  311. data/rspec-core/upstream/lib/rspec/core/set.rb +54 -0
  312. data/rspec-core/upstream/lib/rspec/core/shared_example_group.rb +126 -37
  313. data/rspec-core/upstream/lib/rspec/core/shell_escape.rb +49 -0
  314. data/rspec-core/upstream/lib/rspec/core/test_unit_assertions_adapter.rb +3 -3
  315. data/rspec-core/upstream/lib/rspec/core/version.rb +1 -1
  316. data/rspec-core/upstream/lib/rspec/core/warnings.rb +2 -2
  317. data/rspec-core/upstream/lib/rspec/core/world.rb +164 -60
  318. data/rspec-core/upstream/lib/rspec/core.rb +64 -21
  319. data/rspec-core/upstream/maintenance-branch +1 -1
  320. data/rspec-core/upstream/rspec-core.gemspec +16 -11
  321. data/rspec-core/upstream/script/ci_functions.sh +73 -0
  322. data/rspec-core/upstream/script/clone_all_rspec_repos +2 -2
  323. data/rspec-core/upstream/script/cucumber.sh +8 -0
  324. data/rspec-core/upstream/script/custom_build_functions.sh +22 -0
  325. data/rspec-core/upstream/script/functions.sh +125 -89
  326. data/rspec-core/upstream/script/legacy_setup.sh +20 -0
  327. data/rspec-core/upstream/script/predicate_functions.sh +162 -0
  328. data/rspec-core/upstream/script/rspec_with_simplecov +6 -6
  329. data/rspec-core/upstream/script/run_build +14 -9
  330. data/rspec-core/upstream/script/run_rubocop +14 -0
  331. data/rspec-core/upstream/script/update_rubygems_and_install_bundler +20 -0
  332. data/rspec-expectations/upstream/.document +1 -1
  333. data/rspec-expectations/upstream/.github/FUNDING.yml +5 -0
  334. data/rspec-expectations/upstream/.github/workflows/ci.yml +150 -0
  335. data/rspec-expectations/upstream/.gitignore +2 -0
  336. data/rspec-expectations/upstream/.rubocop.yml +126 -2
  337. data/rspec-expectations/upstream/.rubocop_rspec_base.yml +224 -38
  338. data/rspec-expectations/upstream/.rubocop_todo.yml +335 -0
  339. data/rspec-expectations/upstream/.yardopts +1 -1
  340. data/rspec-expectations/upstream/BUILD_DETAIL.md +149 -0
  341. data/rspec-expectations/upstream/CODE_OF_CONDUCT.md +59 -0
  342. data/rspec-expectations/upstream/CONTRIBUTING.md +86 -0
  343. data/rspec-expectations/upstream/Changelog.md +454 -4
  344. data/rspec-expectations/upstream/DEV-README.md +3 -3
  345. data/rspec-expectations/upstream/DEVELOPMENT.md +131 -0
  346. data/rspec-expectations/upstream/Gemfile +77 -9
  347. data/rspec-expectations/upstream/ISSUE_TEMPLATE.md +24 -0
  348. data/{rspec-mocks/upstream/License.txt → rspec-expectations/upstream/LICENSE.md} +5 -4
  349. data/rspec-expectations/upstream/README.md +73 -31
  350. data/rspec-expectations/upstream/REPORT_TEMPLATE.md +43 -0
  351. data/rspec-expectations/upstream/Rakefile +13 -10
  352. data/rspec-expectations/upstream/Should.md +13 -5
  353. data/rspec-expectations/upstream/benchmarks/2.x_vs_3.x_matcher_dsl_implementation.rb +1 -2
  354. data/rspec-expectations/upstream/benchmarks/caller_vs_raise_for_backtrace.rb +77 -0
  355. data/rspec-expectations/upstream/benchmarks/count_vs_select_size.rb +68 -0
  356. data/rspec-expectations/upstream/benchmarks/default_messages_as_methods_v_blocks.rb +1 -1
  357. data/rspec-expectations/upstream/benchmarks/gsub_vs_tr_single_character.rb +28 -0
  358. data/rspec-expectations/upstream/benchmarks/include_matcher.rb +249 -0
  359. data/rspec-expectations/upstream/benchmarks/include_v_superclass.rb +0 -1
  360. data/rspec-expectations/upstream/benchmarks/match_array/failing_with_duplicate_items.rb +1 -1
  361. data/rspec-expectations/upstream/benchmarks/output_stringio_vs_tempfile.rb +31 -0
  362. data/rspec-expectations/upstream/benchmarks/set_vs_array_include.rb +1 -3
  363. data/rspec-expectations/upstream/cucumber.yml +9 -4
  364. data/rspec-expectations/upstream/features/.nav +1 -0
  365. data/rspec-expectations/upstream/features/aggregating_failures.feature +56 -0
  366. data/rspec-expectations/upstream/features/built_in_matchers/README.md +3 -3
  367. data/rspec-expectations/upstream/features/built_in_matchers/all.feature +3 -2
  368. data/rspec-expectations/upstream/features/built_in_matchers/be_within.feature +1 -1
  369. data/rspec-expectations/upstream/features/built_in_matchers/change.feature +8 -6
  370. data/rspec-expectations/upstream/features/built_in_matchers/comparisons.feature +33 -1
  371. data/rspec-expectations/upstream/features/built_in_matchers/contain_exactly.feature +1 -0
  372. data/rspec-expectations/upstream/features/built_in_matchers/cover.feature +3 -3
  373. data/rspec-expectations/upstream/features/built_in_matchers/exist.feature +1 -1
  374. data/rspec-expectations/upstream/features/built_in_matchers/have_attributes.feature +1 -2
  375. data/rspec-expectations/upstream/features/built_in_matchers/include.feature +74 -17
  376. data/rspec-expectations/upstream/features/built_in_matchers/match.feature +2 -2
  377. data/rspec-expectations/upstream/features/built_in_matchers/output.feature +67 -4
  378. data/rspec-expectations/upstream/features/built_in_matchers/predicates.feature +56 -19
  379. data/rspec-expectations/upstream/features/built_in_matchers/raise_error.feature +16 -2
  380. data/rspec-expectations/upstream/features/built_in_matchers/respond_to.feature +191 -3
  381. data/rspec-expectations/upstream/features/built_in_matchers/satisfy.feature +17 -8
  382. data/rspec-expectations/upstream/features/built_in_matchers/throw_symbol.feature +1 -1
  383. data/rspec-expectations/upstream/features/built_in_matchers/types.feature +34 -34
  384. data/rspec-expectations/upstream/features/built_in_matchers/yield.feature +2 -2
  385. data/rspec-expectations/upstream/features/composing_matchers.feature +4 -4
  386. data/rspec-expectations/upstream/features/custom_matchers/define_block_matcher.feature +78 -0
  387. data/rspec-expectations/upstream/features/custom_matchers/define_diffable_matcher.feature +115 -3
  388. data/rspec-expectations/upstream/features/custom_matchers/define_matcher.feature +173 -21
  389. data/rspec-expectations/upstream/features/custom_matchers/define_matcher_with_fluent_interface.feature +21 -2
  390. data/rspec-expectations/upstream/features/define_negated_matcher.feature +2 -1
  391. data/rspec-expectations/upstream/features/diffing.feature +29 -1
  392. data/rspec-expectations/upstream/features/implicit_docstrings.feature +8 -8
  393. data/rspec-expectations/upstream/features/step_definitions/additional_cli_steps.rb +11 -7
  394. data/rspec-expectations/upstream/features/support/diff_lcs_versions.rb +25 -0
  395. data/rspec-expectations/upstream/features/support/disallow_certain_apis.rb +3 -3
  396. data/rspec-expectations/upstream/features/support/env.rb +11 -11
  397. data/rspec-expectations/upstream/features/support/rubinius.rb +1 -1
  398. data/rspec-expectations/upstream/features/support/ruby_features.rb +39 -0
  399. data/rspec-expectations/upstream/features/syntax_configuration.feature +9 -9
  400. data/rspec-expectations/upstream/features/test_frameworks/minitest.feature +69 -2
  401. data/rspec-expectations/upstream/lib/rspec/expectations/block_snippet_extractor.rb +253 -0
  402. data/rspec-expectations/upstream/lib/rspec/expectations/configuration.rb +84 -1
  403. data/rspec-expectations/upstream/lib/rspec/expectations/expectation_target.rb +82 -38
  404. data/rspec-expectations/upstream/lib/rspec/expectations/fail_with.rb +11 -6
  405. data/rspec-expectations/upstream/lib/rspec/expectations/failure_aggregator.rb +212 -0
  406. data/rspec-expectations/upstream/lib/rspec/expectations/handler.rb +27 -12
  407. data/rspec-expectations/upstream/lib/rspec/expectations/minitest_integration.rb +43 -2
  408. data/rspec-expectations/upstream/lib/rspec/expectations/syntax.rb +5 -5
  409. data/rspec-expectations/upstream/lib/rspec/expectations/version.rb +1 -1
  410. data/rspec-expectations/upstream/lib/rspec/expectations.rb +15 -1
  411. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/all.rb +1 -0
  412. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/base_matcher.rb +77 -11
  413. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/be.rb +28 -114
  414. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/be_between.rb +1 -1
  415. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/be_instance_of.rb +5 -1
  416. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/be_kind_of.rb +5 -1
  417. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/be_within.rb +4 -4
  418. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/change.rb +168 -55
  419. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/compound.rb +61 -29
  420. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/contain_exactly.rb +73 -12
  421. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/count_expectation.rb +169 -0
  422. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/eq.rb +3 -38
  423. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/eql.rb +2 -2
  424. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/equal.rb +3 -3
  425. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/exist.rb +7 -3
  426. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/has.rb +90 -24
  427. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/have_attributes.rb +37 -7
  428. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/include.rb +124 -23
  429. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/match.rb +79 -2
  430. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/operators.rb +14 -5
  431. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/output.rb +56 -1
  432. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/raise_error.rb +126 -29
  433. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/respond_to.rb +118 -9
  434. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/satisfy.rb +28 -7
  435. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/{start_and_end_with.rb → start_or_end_with.rb} +20 -8
  436. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/throw_symbol.rb +11 -5
  437. data/rspec-expectations/upstream/lib/rspec/matchers/built_in/yield.rb +110 -155
  438. data/rspec-expectations/upstream/lib/rspec/matchers/built_in.rb +4 -3
  439. data/rspec-expectations/upstream/lib/rspec/matchers/composable.rb +23 -35
  440. data/rspec-expectations/upstream/lib/rspec/matchers/dsl.rb +179 -26
  441. data/rspec-expectations/upstream/lib/rspec/matchers/english_phrasing.rb +58 -0
  442. data/rspec-expectations/upstream/lib/rspec/matchers/expecteds_for_multiple_diffs.rb +82 -0
  443. data/rspec-expectations/upstream/lib/rspec/matchers/fail_matchers.rb +42 -0
  444. data/rspec-expectations/upstream/lib/rspec/matchers/generated_descriptions.rb +1 -2
  445. data/rspec-expectations/upstream/lib/rspec/matchers/matcher_delegator.rb +2 -0
  446. data/rspec-expectations/upstream/lib/rspec/matchers/matcher_protocol.rb +72 -66
  447. data/rspec-expectations/upstream/lib/rspec/matchers.rb +227 -150
  448. data/rspec-expectations/upstream/maintenance-branch +1 -1
  449. data/rspec-expectations/upstream/rspec-expectations.gemspec +13 -8
  450. data/rspec-expectations/upstream/script/ci_functions.sh +73 -0
  451. data/rspec-expectations/upstream/script/clone_all_rspec_repos +2 -2
  452. data/rspec-expectations/upstream/script/cucumber.sh +8 -0
  453. data/rspec-expectations/upstream/script/functions.sh +125 -89
  454. data/rspec-expectations/upstream/script/legacy_setup.sh +20 -0
  455. data/rspec-expectations/upstream/script/predicate_functions.sh +162 -0
  456. data/rspec-expectations/upstream/script/run_build +14 -9
  457. data/rspec-expectations/upstream/script/run_rubocop +14 -0
  458. data/rspec-expectations/upstream/script/update_rubygems_and_install_bundler +20 -0
  459. data/rspec-mocks/upstream/.document +1 -1
  460. data/rspec-mocks/upstream/.github/FUNDING.yml +5 -0
  461. data/rspec-mocks/upstream/.github/workflows/ci.yml +150 -0
  462. data/rspec-mocks/upstream/.gitignore +2 -0
  463. data/rspec-mocks/upstream/.rubocop.yml +28 -9
  464. data/rspec-mocks/upstream/.rubocop_rspec_base.yml +224 -38
  465. data/rspec-mocks/upstream/.rubocop_todo.yml +573 -0
  466. data/rspec-mocks/upstream/.yardopts +1 -1
  467. data/rspec-mocks/upstream/BUILD_DETAIL.md +149 -0
  468. data/rspec-mocks/upstream/CODE_OF_CONDUCT.md +59 -0
  469. data/rspec-mocks/upstream/CONTRIBUTING.md +86 -0
  470. data/rspec-mocks/upstream/Changelog.md +398 -3
  471. data/rspec-mocks/upstream/DEV-README.md +3 -3
  472. data/rspec-mocks/upstream/DEVELOPMENT.md +131 -0
  473. data/rspec-mocks/upstream/Gemfile +77 -10
  474. data/rspec-mocks/upstream/ISSUE_TEMPLATE.md +24 -0
  475. data/{rspec-expectations/upstream/License.txt → rspec-mocks/upstream/LICENSE.md} +5 -4
  476. data/rspec-mocks/upstream/README.md +83 -17
  477. data/rspec-mocks/upstream/REPORT_TEMPLATE.md +43 -0
  478. data/rspec-mocks/upstream/Rakefile +3 -3
  479. data/rspec-mocks/upstream/benchmarks/accessing_configuration_via_method_vs_cache.rb +52 -0
  480. data/rspec-mocks/upstream/benchmarks/allocations/1_object_1000_mocks.rb +76 -0
  481. data/rspec-mocks/upstream/benchmarks/allocations/helper.rb +17 -0
  482. data/rspec-mocks/upstream/benchmarks/each_value_v_values_each.rb +4 -5
  483. data/rspec-mocks/upstream/benchmarks/find_original_method_early.rb +1 -1
  484. data/rspec-mocks/upstream/benchmarks/method_defined_at_any_visibility.rb +3 -3
  485. data/rspec-mocks/upstream/benchmarks/thread_safety.rb +1 -1
  486. data/rspec-mocks/upstream/benchmarks/transfer_nested_constants.rb +1 -1
  487. data/rspec-mocks/upstream/cucumber.yml +8 -1
  488. data/rspec-mocks/upstream/features/.nav +2 -0
  489. data/rspec-mocks/upstream/features/basics/allowing_messages.feature +1 -1
  490. data/rspec-mocks/upstream/features/basics/expecting_messages.feature +40 -1
  491. data/rspec-mocks/upstream/features/basics/null_object_doubles.feature +1 -1
  492. data/rspec-mocks/upstream/features/basics/partial_test_doubles.feature +1 -1
  493. data/rspec-mocks/upstream/features/basics/scope.feature +5 -5
  494. data/rspec-mocks/upstream/features/basics/spies.feature +17 -30
  495. data/rspec-mocks/upstream/features/basics/test_doubles.feature +4 -4
  496. data/rspec-mocks/upstream/features/configuring_responses/README.md +2 -0
  497. data/rspec-mocks/upstream/features/configuring_responses/calling_the_original_implementation.feature +2 -2
  498. data/rspec-mocks/upstream/features/configuring_responses/mixed_responses.feature +25 -0
  499. data/rspec-mocks/upstream/features/configuring_responses/raising_an_error.feature +1 -0
  500. data/rspec-mocks/upstream/features/configuring_responses/wrapping_the_original_implementation.feature +3 -3
  501. data/rspec-mocks/upstream/features/configuring_responses/yielding.feature +2 -2
  502. data/rspec-mocks/upstream/features/mutating_constants/README.md +1 -1
  503. data/rspec-mocks/upstream/features/old_syntax/any_instance.feature +3 -3
  504. data/rspec-mocks/upstream/features/old_syntax/should_receive.feature +3 -1
  505. data/rspec-mocks/upstream/features/outside_rspec/any_test_framework.feature +116 -0
  506. data/rspec-mocks/upstream/features/outside_rspec/minitest.feature +202 -46
  507. data/rspec-mocks/upstream/features/outside_rspec/standalone.feature +5 -5
  508. data/rspec-mocks/upstream/features/setting_constraints/matching_arguments.feature +54 -27
  509. data/rspec-mocks/upstream/features/setting_constraints/message_order.feature +2 -2
  510. data/rspec-mocks/upstream/features/setting_constraints/receive_counts.feature +18 -0
  511. data/rspec-mocks/upstream/features/step_definitions/additional_cli_steps.rb +4 -4
  512. data/rspec-mocks/upstream/features/support/disallow_certain_apis.rb +3 -2
  513. data/rspec-mocks/upstream/features/support/env.rb +12 -12
  514. data/rspec-mocks/upstream/features/support/rubinius.rb +1 -1
  515. data/rspec-mocks/upstream/features/verifying_doubles/README.md +2 -2
  516. data/rspec-mocks/upstream/features/verifying_doubles/class_doubles.feature +1 -1
  517. data/rspec-mocks/upstream/features/verifying_doubles/dynamic_classes.feature +41 -5
  518. data/rspec-mocks/upstream/features/verifying_doubles/instance_doubles.feature +5 -3
  519. data/rspec-mocks/upstream/features/working_with_legacy_code/any_instance.feature +8 -6
  520. data/rspec-mocks/upstream/features/working_with_legacy_code/message_chains.feature +16 -1
  521. data/rspec-mocks/upstream/lib/rspec/mocks/any_instance/chain.rb +3 -1
  522. data/rspec-mocks/upstream/lib/rspec/mocks/any_instance/error_generator.rb +31 -0
  523. data/rspec-mocks/upstream/lib/rspec/mocks/any_instance/expect_chain_chain.rb +1 -5
  524. data/rspec-mocks/upstream/lib/rspec/mocks/any_instance/expectation_chain.rb +7 -5
  525. data/rspec-mocks/upstream/lib/rspec/mocks/any_instance/message_chains.rb +1 -3
  526. data/rspec-mocks/upstream/lib/rspec/mocks/any_instance/recorder.rb +42 -14
  527. data/rspec-mocks/upstream/lib/rspec/mocks/any_instance/stub_chain.rb +13 -7
  528. data/rspec-mocks/upstream/lib/rspec/mocks/any_instance/stub_chain_chain.rb +1 -5
  529. data/rspec-mocks/upstream/lib/rspec/mocks/any_instance.rb +1 -0
  530. data/rspec-mocks/upstream/lib/rspec/mocks/argument_list_matcher.rb +53 -10
  531. data/rspec-mocks/upstream/lib/rspec/mocks/argument_matchers.rb +66 -26
  532. data/rspec-mocks/upstream/lib/rspec/mocks/configuration.rb +59 -4
  533. data/rspec-mocks/upstream/lib/rspec/mocks/error_generator.rb +235 -108
  534. data/rspec-mocks/upstream/lib/rspec/mocks/example_methods.rb +82 -27
  535. data/rspec-mocks/upstream/lib/rspec/mocks/instance_method_stasher.rb +12 -1
  536. data/rspec-mocks/upstream/lib/rspec/mocks/matchers/have_received.rb +30 -17
  537. data/rspec-mocks/upstream/lib/rspec/mocks/matchers/receive.rb +28 -1
  538. data/rspec-mocks/upstream/lib/rspec/mocks/matchers/receive_message_chain.rb +17 -1
  539. data/rspec-mocks/upstream/lib/rspec/mocks/matchers/receive_messages.rb +6 -0
  540. data/rspec-mocks/upstream/lib/rspec/mocks/message_chain.rb +0 -4
  541. data/rspec-mocks/upstream/lib/rspec/mocks/message_expectation.rb +430 -304
  542. data/rspec-mocks/upstream/lib/rspec/mocks/method_double.rb +46 -15
  543. data/rspec-mocks/upstream/lib/rspec/mocks/method_reference.rb +78 -19
  544. data/rspec-mocks/upstream/lib/rspec/mocks/minitest_integration.rb +68 -0
  545. data/rspec-mocks/upstream/lib/rspec/mocks/mutate_const.rb +23 -8
  546. data/rspec-mocks/upstream/lib/rspec/mocks/object_reference.rb +81 -23
  547. data/rspec-mocks/upstream/lib/rspec/mocks/proxy.rb +135 -41
  548. data/rspec-mocks/upstream/lib/rspec/mocks/space.rb +33 -16
  549. data/rspec-mocks/upstream/lib/rspec/mocks/standalone.rb +1 -1
  550. data/rspec-mocks/upstream/lib/rspec/mocks/syntax.rb +18 -22
  551. data/rspec-mocks/upstream/lib/rspec/mocks/targets.rb +51 -24
  552. data/rspec-mocks/upstream/lib/rspec/mocks/test_double.rb +42 -6
  553. data/rspec-mocks/upstream/lib/rspec/mocks/verifying_double.rb +15 -21
  554. data/rspec-mocks/upstream/lib/rspec/mocks/{verifying_message_expecation.rb → verifying_message_expectation.rb} +11 -18
  555. data/rspec-mocks/upstream/lib/rspec/mocks/verifying_proxy.rb +60 -11
  556. data/rspec-mocks/upstream/lib/rspec/mocks/version.rb +1 -1
  557. data/rspec-mocks/upstream/lib/rspec/mocks.rb +8 -1
  558. data/rspec-mocks/upstream/maintenance-branch +1 -1
  559. data/rspec-mocks/upstream/rspec-mocks.gemspec +14 -6
  560. data/rspec-mocks/upstream/script/ci_functions.sh +73 -0
  561. data/rspec-mocks/upstream/script/clone_all_rspec_repos +2 -2
  562. data/rspec-mocks/upstream/script/cucumber.sh +8 -0
  563. data/rspec-mocks/upstream/script/functions.sh +125 -89
  564. data/rspec-mocks/upstream/script/legacy_setup.sh +20 -0
  565. data/rspec-mocks/upstream/script/predicate_functions.sh +162 -0
  566. data/rspec-mocks/upstream/script/run_build +14 -9
  567. data/rspec-mocks/upstream/script/run_rubocop +14 -0
  568. data/rspec-mocks/upstream/script/update_rubygems_and_install_bundler +20 -0
  569. data/{stubs/diff/lcs/assertions.rb → rspec-mocks/upstream/tmp/.gitkeep} +0 -0
  570. data/rspec-support/upstream/.github/FUNDING.yml +5 -0
  571. data/rspec-support/upstream/.github/workflows/ci.yml +150 -0
  572. data/rspec-support/upstream/.gitignore +4 -0
  573. data/rspec-support/upstream/.rubocop.yml +33 -1
  574. data/rspec-support/upstream/.rubocop_rspec_base.yml +224 -38
  575. data/rspec-support/upstream/.rubocop_todo.yml +424 -0
  576. data/rspec-support/upstream/BUILD_DETAIL.md +149 -0
  577. data/rspec-support/upstream/CODE_OF_CONDUCT.md +59 -0
  578. data/rspec-support/upstream/CONTRIBUTING.md +86 -0
  579. data/rspec-support/upstream/Changelog.md +287 -0
  580. data/rspec-support/upstream/DEVELOPMENT.md +131 -0
  581. data/rspec-support/upstream/Gemfile +52 -4
  582. data/rspec-support/upstream/ISSUE_TEMPLATE.md +24 -0
  583. data/rspec-support/upstream/{LICENSE.txt → LICENSE.md} +3 -2
  584. data/rspec-support/upstream/README.md +29 -6
  585. data/rspec-support/upstream/REPORT_TEMPLATE.md +43 -0
  586. data/rspec-support/upstream/Rakefile +9 -5
  587. data/rspec-support/upstream/benchmarks/caller_vs_caller_locations.rb +19 -0
  588. data/rspec-support/upstream/benchmarks/caller_vs_caller_locations_vs_raise.rb +153 -0
  589. data/rspec-support/upstream/benchmarks/class_exec_vs_klass_exec.rb +43 -0
  590. data/rspec-support/upstream/benchmarks/map_hash.rb +70 -0
  591. data/rspec-support/upstream/benchmarks/ripper.rb +44 -0
  592. data/rspec-support/upstream/benchmarks/skip_frames_for_caller_filter.rb +27 -0
  593. data/rspec-support/upstream/lib/rspec/support/caller_filter.rb +35 -15
  594. data/rspec-support/upstream/lib/rspec/support/comparable_version.rb +46 -0
  595. data/rspec-support/upstream/lib/rspec/support/differ.rb +35 -34
  596. data/rspec-support/upstream/lib/rspec/support/directory_maker.rb +3 -1
  597. data/rspec-support/upstream/lib/rspec/support/encoded_string.rb +103 -11
  598. data/rspec-support/upstream/lib/rspec/support/fuzzy_matcher.rb +5 -5
  599. data/rspec-support/upstream/lib/rspec/support/matcher_definition.rb +11 -0
  600. data/rspec-support/upstream/lib/rspec/support/method_signature_verifier.rb +192 -26
  601. data/rspec-support/upstream/lib/rspec/support/mutex.rb +73 -0
  602. data/rspec-support/upstream/lib/rspec/support/object_formatter.rb +275 -0
  603. data/rspec-support/upstream/lib/rspec/support/recursive_const_methods.rb +1 -1
  604. data/rspec-support/upstream/lib/rspec/support/reentrant_mutex.rb +78 -0
  605. data/rspec-support/upstream/lib/rspec/support/ruby_features.rb +168 -15
  606. data/rspec-support/upstream/lib/rspec/support/source/location.rb +21 -0
  607. data/rspec-support/upstream/lib/rspec/support/source/node.rb +110 -0
  608. data/rspec-support/upstream/lib/rspec/support/source/token.rb +94 -0
  609. data/rspec-support/upstream/lib/rspec/support/source.rb +85 -0
  610. data/rspec-support/upstream/lib/rspec/support/spec/deprecation_helpers.rb +17 -29
  611. data/rspec-support/upstream/lib/rspec/support/spec/diff_helpers.rb +31 -0
  612. data/rspec-support/upstream/lib/rspec/support/spec/in_sub_process.rb +41 -17
  613. data/rspec-support/upstream/lib/rspec/support/spec/library_wide_checks.rb +150 -0
  614. data/rspec-support/upstream/lib/rspec/support/spec/shell_out.rb +39 -3
  615. data/rspec-support/upstream/lib/rspec/support/spec/stderr_splitter.rb +27 -4
  616. data/rspec-support/upstream/lib/rspec/support/spec/string_matcher.rb +45 -0
  617. data/rspec-support/upstream/lib/rspec/support/spec/with_isolated_directory.rb +5 -1
  618. data/rspec-support/upstream/lib/rspec/support/spec.rb +17 -7
  619. data/rspec-support/upstream/lib/rspec/support/version.rb +1 -1
  620. data/rspec-support/upstream/lib/rspec/support/warnings.rb +3 -3
  621. data/rspec-support/upstream/lib/rspec/support/with_keywords_when_needed.rb +33 -0
  622. data/rspec-support/upstream/lib/rspec/support.rb +81 -3
  623. data/rspec-support/upstream/maintenance-branch +1 -1
  624. data/rspec-support/upstream/rspec-support.gemspec +10 -4
  625. data/rspec-support/upstream/script/ci_functions.sh +73 -0
  626. data/rspec-support/upstream/script/clone_all_rspec_repos +2 -2
  627. data/rspec-support/upstream/script/cucumber.sh +8 -0
  628. data/rspec-support/upstream/script/functions.sh +125 -89
  629. data/rspec-support/upstream/script/legacy_setup.sh +20 -0
  630. data/rspec-support/upstream/script/predicate_functions.sh +162 -0
  631. data/rspec-support/upstream/script/run_build +14 -9
  632. data/rspec-support/upstream/script/run_rubocop +14 -0
  633. data/rspec-support/upstream/script/update_rubygems_and_install_bundler +20 -0
  634. data/stubs/{diff/lcs/block.rb → coderay.rb} +0 -0
  635. data/stubs/{diff/lcs/callbacks.rb → drb/acl.rb} +0 -0
  636. data/stubs/{diff/lcs/change.rb → erb/version.rb} +0 -0
  637. data/stubs/{diff/lcs/hunk.rb → open3.rb} +0 -0
  638. data/stubs/{diff/lcs/internals.rb → psych.rb} +0 -0
  639. data/stubs/{optparse.rb → ripper.rb} +0 -0
  640. data/stubs/{prettyprint.rb → thread_order.rb} +0 -0
  641. data/tasks/testing.rake +7 -3
  642. metadata +270 -61
  643. data/gemfiles/.bundle/config +0 -2
  644. data/gemfiles/opal_0.11.gemfile +0 -14
  645. data/gemfiles/opal_master.gemfile +0 -14
  646. data/lib-opal/opal/rspec/async/core_ext.rb +0 -23
  647. data/lib-opal/opal/rspec/async/legacy.rb +0 -49
  648. data/lib-opal/opal/rspec/fixes/rspec/caller_filter.rb +0 -6
  649. data/lib-opal/opal/rspec/fixes/rspec/core/example.rb +0 -20
  650. data/lib-opal/opal/rspec/fixes/rspec/core/formatters/backtrace_formatter.rb +0 -20
  651. data/lib-opal/opal/rspec/fixes/rspec/core/formatters/console_codes.rb +0 -11
  652. data/lib-opal/opal/rspec/fixes/rspec/core/formatters/generated_deprecation_message.rb +0 -15
  653. data/lib-opal/opal/rspec/fixes/rspec/core/formatters/json_formatter.rb +0 -15
  654. data/lib-opal/opal/rspec/fixes/rspec/core/notifications/failed_example_notification.rb +0 -20
  655. data/lib-opal/opal/rspec/fixes/rspec/core/notifications/summary_notification.rb +0 -21
  656. data/lib-opal/opal/rspec/fixes/rspec/core/warnings.rb +0 -27
  657. data/lib-opal/opal/rspec/fixes/rspec/expectations/fail_with.rb +0 -21
  658. data/lib-opal/opal/rspec/fixes/rspec/matchers/built_in/all.rb +0 -10
  659. data/lib-opal/opal/rspec/fixes/rspec/matchers/built_in/compound.rb +0 -15
  660. data/lib-opal/opal/rspec/fixes/rspec/matchers/built_in/yield.rb +0 -21
  661. data/lib-opal/opal/rspec/fixes/rspec/matchers/pretty.rb +0 -15
  662. data/lib-opal/opal/rspec/fixes/rspec/mocks/space.rb +0 -41
  663. data/lib-opal/opal/rspec/fixes/rspec/mocks/test_double.rb +0 -39
  664. data/lib-opal/opal/rspec/fixes/rspec/mocks/verifying_double.rb +0 -29
  665. data/lib-opal/opal/rspec/fixes/rspec/support/recursive_const_methods.rb +0 -7
  666. data/lib-opal/opal/rspec/fixes/rspec/support/spec/stderr_splitter.rb +0 -13
  667. data/lib-opal/opal/rspec/fixes/rspec/support/spec.rb +0 -1
  668. data/lib-opal/opal/rspec/fixes/rspec/support/warnings.rb +0 -16
  669. data/rspec/upstream/License.txt +0 -24
  670. data/rspec-core/upstream/.travis.yml +0 -35
  671. data/rspec-core/upstream/benchmarks/sort_by_v_shuffle.rb +0 -83
  672. data/rspec-core/upstream/features/Upgrade.md +0 -352
  673. data/rspec-core/upstream/lib/rspec/core/backport_random.rb +0 -336
  674. data/rspec-expectations/upstream/.travis.yml +0 -35
  675. data/rspec-expectations/upstream/lib/rspec/matchers/pretty.rb +0 -77
  676. data/rspec-mocks/upstream/.travis.yml +0 -35
  677. data/rspec-support/upstream/.travis.yml +0 -35
  678. data/rspec-support/upstream/lib/rspec/support/os.rb +0 -18
  679. data/rspec-support/upstream/lib/rspec/support/spec/prevent_load_time_warnings.rb +0 -44
  680. data/rspec-support/upstream/lib/rspec/support/version_checker.rb +0 -53
  681. data/stubs/shellwords.rb +0 -0
  682. data/stubs/uri.rb +0 -0
  683. data/vendor/spec_runner.js +0 -64
@@ -0,0 +1,741 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Diff; end unless defined? Diff
4
+
5
+ # == How Diff Works (by Mark-Jason Dominus)
6
+ #
7
+ # I once read an article written by the authors of +diff+; they said that they
8
+ # hard worked very hard on the algorithm until they found the right one.
9
+ #
10
+ # I think what they ended up using (and I hope someone will correct me, because
11
+ # I am not very confident about this) was the `longest common subsequence'
12
+ # method. In the LCS problem, you have two sequences of items:
13
+ #
14
+ # a b c d f g h j q z
15
+ # a b c d e f g i j k r x y z
16
+ #
17
+ # and you want to find the longest sequence of items that is present in both
18
+ # original sequences in the same order. That is, you want to find a new
19
+ # sequence *S* which can be obtained from the first sequence by deleting some
20
+ # items, and from the second sequence by deleting other items. You also want
21
+ # *S* to be as long as possible. In this case *S* is:
22
+ #
23
+ # a b c d f g j z
24
+ #
25
+ # From there it's only a small step to get diff-like output:
26
+ #
27
+ # e h i k q r x y
28
+ # + - + + - + + +
29
+ #
30
+ # This module solves the LCS problem. It also includes a canned function to
31
+ # generate +diff+-like output.
32
+ #
33
+ # It might seem from the example above that the LCS of two sequences is always
34
+ # pretty obvious, but that's not always the case, especially when the two
35
+ # sequences have many repeated elements. For example, consider
36
+ #
37
+ # a x b y c z p d q
38
+ # a b c a x b y c z
39
+ #
40
+ # A naive approach might start by matching up the +a+ and +b+ that appear at
41
+ # the beginning of each sequence, like this:
42
+ #
43
+ # a x b y c z p d q
44
+ # a b c a b y c z
45
+ #
46
+ # This finds the common subsequence +a b c z+. But actually, the LCS is +a x b
47
+ # y c z+:
48
+ #
49
+ # a x b y c z p d q
50
+ # a b c a x b y c z
51
+ module Diff::LCS
52
+ VERSION = "1.5.0"
53
+ end
54
+
55
+ require "diff/lcs/callbacks"
56
+ require "diff/lcs/internals"
57
+
58
+ module Diff::LCS
59
+ # Returns an Array containing the longest common subsequence(s) between
60
+ # +self+ and +other+. See Diff::LCS#lcs.
61
+ #
62
+ # lcs = seq1.lcs(seq2)
63
+ #
64
+ # A note when using objects: Diff::LCS only works properly when each object
65
+ # can be used as a key in a Hash, which typically means that the objects must
66
+ # implement Object#eql? in a way that two identical values compare
67
+ # identically for key purposes. That is:
68
+ #
69
+ # O.new('a').eql?(O.new('a')) == true
70
+ def lcs(other, &block) # :yields: self[i] if there are matched subsequences
71
+ Diff::LCS.lcs(self, other, &block)
72
+ end
73
+
74
+ # Returns the difference set between +self+ and +other+. See Diff::LCS#diff.
75
+ def diff(other, callbacks = nil, &block)
76
+ Diff::LCS.diff(self, other, callbacks, &block)
77
+ end
78
+
79
+ # Returns the balanced ("side-by-side") difference set between +self+ and
80
+ # +other+. See Diff::LCS#sdiff.
81
+ def sdiff(other, callbacks = nil, &block)
82
+ Diff::LCS.sdiff(self, other, callbacks, &block)
83
+ end
84
+
85
+ # Traverses the discovered longest common subsequences between +self+ and
86
+ # +other+. See Diff::LCS#traverse_sequences.
87
+ def traverse_sequences(other, callbacks = nil, &block)
88
+ Diff::LCS.traverse_sequences(self, other, callbacks || Diff::LCS::SequenceCallbacks, &block)
89
+ end
90
+
91
+ # Traverses the discovered longest common subsequences between +self+ and
92
+ # +other+ using the alternate, balanced algorithm. See
93
+ # Diff::LCS#traverse_balanced.
94
+ def traverse_balanced(other, callbacks = nil, &block)
95
+ Diff::LCS.traverse_balanced(self, other, callbacks || Diff::LCS::BalancedCallbacks, &block)
96
+ end
97
+
98
+ # Attempts to patch +self+ with the provided +patchset+. A new sequence based
99
+ # on +self+ and the +patchset+ will be created. See Diff::LCS#patch. Attempts
100
+ # to autodiscover the direction of the patch.
101
+ def patch(patchset)
102
+ Diff::LCS.patch(self, patchset)
103
+ end
104
+ alias_method :unpatch, :patch
105
+
106
+ # Attempts to patch +self+ with the provided +patchset+. A new sequence based
107
+ # on +self+ and the +patchset+ will be created. See Diff::LCS#patch. Does no
108
+ # patch direction autodiscovery.
109
+ def patch!(patchset)
110
+ Diff::LCS.patch!(self, patchset)
111
+ end
112
+
113
+ # Attempts to unpatch +self+ with the provided +patchset+. A new sequence
114
+ # based on +self+ and the +patchset+ will be created. See Diff::LCS#unpatch.
115
+ # Does no patch direction autodiscovery.
116
+ def unpatch!(patchset)
117
+ Diff::LCS.unpatch!(self, patchset)
118
+ end
119
+
120
+ # Attempts to patch +self+ with the provided +patchset+, using #patch!. If
121
+ # the sequence this is used on supports #replace, the value of +self+ will be
122
+ # replaced. See Diff::LCS#patch. Does no patch direction autodiscovery.
123
+ def patch_me(patchset)
124
+ if respond_to? :replace
125
+ replace(patch!(patchset))
126
+ else
127
+ patch!(patchset)
128
+ end
129
+ end
130
+
131
+ # Attempts to unpatch +self+ with the provided +patchset+, using #unpatch!.
132
+ # If the sequence this is used on supports #replace, the value of +self+ will
133
+ # be replaced. See Diff::LCS#unpatch. Does no patch direction autodiscovery.
134
+ def unpatch_me(patchset)
135
+ if respond_to? :replace
136
+ replace(unpatch!(patchset))
137
+ else
138
+ unpatch!(patchset)
139
+ end
140
+ end
141
+ end
142
+
143
+ class << Diff::LCS
144
+ def lcs(seq1, seq2, &block) # :yields: seq1[i] for each matched
145
+ matches = Diff::LCS::Internals.lcs(seq1, seq2)
146
+ ret = []
147
+ string = seq1.is_a? String
148
+ matches.each_index do |i|
149
+ next if matches[i].nil?
150
+
151
+ v = string ? seq1[i, 1] : seq1[i]
152
+ v = block[v] if block
153
+ ret << v
154
+ end
155
+ ret
156
+ end
157
+ alias_method :LCS, :lcs
158
+
159
+ # #diff computes the smallest set of additions and deletions necessary to
160
+ # turn the first sequence into the second, and returns a description of these
161
+ # changes.
162
+ #
163
+ # See Diff::LCS::DiffCallbacks for the default behaviour. An alternate
164
+ # behaviour may be implemented with Diff::LCS::ContextDiffCallbacks. If a
165
+ # Class argument is provided for +callbacks+, #diff will attempt to
166
+ # initialise it. If the +callbacks+ object (possibly initialised) responds to
167
+ # #finish, it will be called.
168
+ def diff(seq1, seq2, callbacks = nil, &block) # :yields: diff changes
169
+ diff_traversal(:diff, seq1, seq2, callbacks || Diff::LCS::DiffCallbacks, &block)
170
+ end
171
+
172
+ # #sdiff computes all necessary components to show two sequences and their
173
+ # minimized differences side by side, just like the Unix utility
174
+ # <em>sdiff</em> does:
175
+ #
176
+ # old < -
177
+ # same same
178
+ # before | after
179
+ # - > new
180
+ #
181
+ # See Diff::LCS::SDiffCallbacks for the default behaviour. An alternate
182
+ # behaviour may be implemented with Diff::LCS::ContextDiffCallbacks. If a
183
+ # Class argument is provided for +callbacks+, #diff will attempt to
184
+ # initialise it. If the +callbacks+ object (possibly initialised) responds to
185
+ # #finish, it will be called.
186
+ #
187
+ # Each element of a returned array is a Diff::LCS::ContextChange object,
188
+ # which can be implicitly converted to an array.
189
+ #
190
+ # Diff::LCS.sdiff(a, b).each do |action, (old_pos, old_element), (new_pos, new_element)|
191
+ # case action
192
+ # when '!'
193
+ # # replace
194
+ # when '-'
195
+ # # delete
196
+ # when '+'
197
+ # # insert
198
+ # end
199
+ # end
200
+ def sdiff(seq1, seq2, callbacks = nil, &block) # :yields: diff changes
201
+ diff_traversal(:sdiff, seq1, seq2, callbacks || Diff::LCS::SDiffCallbacks, &block)
202
+ end
203
+
204
+ # #traverse_sequences is the most general facility provided by this module;
205
+ # #diff and #lcs are implemented as calls to it.
206
+ #
207
+ # The arguments to #traverse_sequences are the two sequences to traverse, and
208
+ # a callback object, like this:
209
+ #
210
+ # traverse_sequences(seq1, seq2, Diff::LCS::ContextDiffCallbacks.new)
211
+ #
212
+ # == Callback Methods
213
+ #
214
+ # Optional callback methods are <em>emphasized</em>.
215
+ #
216
+ # callbacks#match:: Called when +a+ and +b+ are pointing to
217
+ # common elements in +A+ and +B+.
218
+ # callbacks#discard_a:: Called when +a+ is pointing to an
219
+ # element not in +B+.
220
+ # callbacks#discard_b:: Called when +b+ is pointing to an
221
+ # element not in +A+.
222
+ # <em>callbacks#finished_a</em>:: Called when +a+ has reached the end of
223
+ # sequence +A+.
224
+ # <em>callbacks#finished_b</em>:: Called when +b+ has reached the end of
225
+ # sequence +B+.
226
+ #
227
+ # == Algorithm
228
+ #
229
+ # a---+
230
+ # v
231
+ # A = a b c e h j l m n p
232
+ # B = b c d e f j k l m r s t
233
+ # ^
234
+ # b---+
235
+ #
236
+ # If there are two arrows (+a+ and +b+) pointing to elements of sequences +A+
237
+ # and +B+, the arrows will initially point to the first elements of their
238
+ # respective sequences. #traverse_sequences will advance the arrows through
239
+ # the sequences one element at a time, calling a method on the user-specified
240
+ # callback object before each advance. It will advance the arrows in such a
241
+ # way that if there are elements <tt>A[i]</tt> and <tt>B[j]</tt> which are
242
+ # both equal and part of the longest common subsequence, there will be some
243
+ # moment during the execution of #traverse_sequences when arrow +a+ is
244
+ # pointing to <tt>A[i]</tt> and arrow +b+ is pointing to <tt>B[j]</tt>. When
245
+ # this happens, #traverse_sequences will call <tt>callbacks#match</tt> and
246
+ # then it will advance both arrows.
247
+ #
248
+ # Otherwise, one of the arrows is pointing to an element of its sequence that
249
+ # is not part of the longest common subsequence. #traverse_sequences will
250
+ # advance that arrow and will call <tt>callbacks#discard_a</tt> or
251
+ # <tt>callbacks#discard_b</tt>, depending on which arrow it advanced. If both
252
+ # arrows point to elements that are not part of the longest common
253
+ # subsequence, then #traverse_sequences will advance arrow +a+ and call the
254
+ # appropriate callback, then it will advance arrow +b+ and call the appropriate
255
+ # callback.
256
+ #
257
+ # The methods for <tt>callbacks#match</tt>, <tt>callbacks#discard_a</tt>, and
258
+ # <tt>callbacks#discard_b</tt> are invoked with an event comprising the
259
+ # action ("=", "+", or "-", respectively), the indicies +i+ and +j+, and the
260
+ # elements <tt>A[i]</tt> and <tt>B[j]</tt>. Return values are discarded by
261
+ # #traverse_sequences.
262
+ #
263
+ # === End of Sequences
264
+ #
265
+ # If arrow +a+ reaches the end of its sequence before arrow +b+ does,
266
+ # #traverse_sequence will try to call <tt>callbacks#finished_a</tt> with the
267
+ # last index and element of +A+ (<tt>A[-1]</tt>) and the current index and
268
+ # element of +B+ (<tt>B[j]</tt>). If <tt>callbacks#finished_a</tt> does not
269
+ # exist, then <tt>callbacks#discard_b</tt> will be called on each element of
270
+ # +B+ until the end of the sequence is reached (the call will be done with
271
+ # <tt>A[-1]</tt> and <tt>B[j]</tt> for each element).
272
+ #
273
+ # If +b+ reaches the end of +B+ before +a+ reaches the end of +A+,
274
+ # <tt>callbacks#finished_b</tt> will be called with the current index and
275
+ # element of +A+ (<tt>A[i]</tt>) and the last index and element of +B+
276
+ # (<tt>A[-1]</tt>). Again, if <tt>callbacks#finished_b</tt> does not exist on
277
+ # the callback object, then <tt>callbacks#discard_a</tt> will be called on
278
+ # each element of +A+ until the end of the sequence is reached (<tt>A[i]</tt>
279
+ # and <tt>B[-1]</tt>).
280
+ #
281
+ # There is a chance that one additional <tt>callbacks#discard_a</tt> or
282
+ # <tt>callbacks#discard_b</tt> will be called after the end of the sequence
283
+ # is reached, if +a+ has not yet reached the end of +A+ or +b+ has not yet
284
+ # reached the end of +B+.
285
+ def traverse_sequences(seq1, seq2, callbacks = Diff::LCS::SequenceCallbacks) # :yields: change events
286
+ callbacks ||= Diff::LCS::SequenceCallbacks
287
+ matches = Diff::LCS::Internals.lcs(seq1, seq2)
288
+
289
+ run_finished_a = run_finished_b = false
290
+ string = seq1.is_a?(String)
291
+
292
+ a_size = seq1.size
293
+ b_size = seq2.size
294
+ ai = bj = 0
295
+
296
+ matches.each do |b_line|
297
+ if b_line.nil?
298
+ unless seq1[ai].nil?
299
+ ax = string ? seq1[ai, 1] : seq1[ai]
300
+ bx = string ? seq2[bj, 1] : seq2[bj]
301
+
302
+ event = Diff::LCS::ContextChange.new("-", ai, ax, bj, bx)
303
+ event = yield event if block_given?
304
+ callbacks.discard_a(event)
305
+ end
306
+ else
307
+ ax = string ? seq1[ai, 1] : seq1[ai]
308
+
309
+ loop do
310
+ break unless bj < b_line
311
+
312
+ bx = string ? seq2[bj, 1] : seq2[bj]
313
+ event = Diff::LCS::ContextChange.new("+", ai, ax, bj, bx)
314
+ event = yield event if block_given?
315
+ callbacks.discard_b(event)
316
+ bj += 1
317
+ end
318
+ bx = string ? seq2[bj, 1] : seq2[bj]
319
+ event = Diff::LCS::ContextChange.new("=", ai, ax, bj, bx)
320
+ event = yield event if block_given?
321
+ callbacks.match(event)
322
+ bj += 1
323
+ end
324
+ ai += 1
325
+ end
326
+
327
+ # The last entry (if any) processed was a match. +ai+ and +bj+ point just
328
+ # past the last matching lines in their sequences.
329
+ while (ai < a_size) || (bj < b_size)
330
+ # last A?
331
+ if ai == a_size && bj < b_size
332
+ if callbacks.respond_to?(:finished_a) && !run_finished_a
333
+ ax = string ? seq1[-1, 1] : seq1[-1]
334
+ bx = string ? seq2[bj, 1] : seq2[bj]
335
+ event = Diff::LCS::ContextChange.new(">", (a_size - 1), ax, bj, bx)
336
+ event = yield event if block_given?
337
+ callbacks.finished_a(event)
338
+ run_finished_a = true
339
+ else
340
+ ax = string ? seq1[ai, 1] : seq1[ai]
341
+ loop do
342
+ bx = string ? seq2[bj, 1] : seq2[bj]
343
+ event = Diff::LCS::ContextChange.new("+", ai, ax, bj, bx)
344
+ event = yield event if block_given?
345
+ callbacks.discard_b(event)
346
+ bj += 1
347
+ break unless bj < b_size
348
+ end
349
+ end
350
+ end
351
+
352
+ # last B?
353
+ if bj == b_size && ai < a_size
354
+ if callbacks.respond_to?(:finished_b) && !run_finished_b
355
+ ax = string ? seq1[ai, 1] : seq1[ai]
356
+ bx = string ? seq2[-1, 1] : seq2[-1]
357
+ event = Diff::LCS::ContextChange.new("<", ai, ax, (b_size - 1), bx)
358
+ event = yield event if block_given?
359
+ callbacks.finished_b(event)
360
+ run_finished_b = true
361
+ else
362
+ bx = string ? seq2[bj, 1] : seq2[bj]
363
+ loop do
364
+ ax = string ? seq1[ai, 1] : seq1[ai]
365
+ event = Diff::LCS::ContextChange.new("-", ai, ax, bj, bx)
366
+ event = yield event if block_given?
367
+ callbacks.discard_a(event)
368
+ ai += 1
369
+ break unless bj < b_size
370
+ end
371
+ end
372
+ end
373
+
374
+ if ai < a_size
375
+ ax = string ? seq1[ai, 1] : seq1[ai]
376
+ bx = string ? seq2[bj, 1] : seq2[bj]
377
+ event = Diff::LCS::ContextChange.new("-", ai, ax, bj, bx)
378
+ event = yield event if block_given?
379
+ callbacks.discard_a(event)
380
+ ai += 1
381
+ end
382
+
383
+ if bj < b_size
384
+ ax = string ? seq1[ai, 1] : seq1[ai]
385
+ bx = string ? seq2[bj, 1] : seq2[bj]
386
+ event = Diff::LCS::ContextChange.new("+", ai, ax, bj, bx)
387
+ event = yield event if block_given?
388
+ callbacks.discard_b(event)
389
+ bj += 1
390
+ end
391
+ end
392
+ end
393
+
394
+ # #traverse_balanced is an alternative to #traverse_sequences. It uses a
395
+ # different algorithm to iterate through the entries in the computed longest
396
+ # common subsequence. Instead of viewing the changes as insertions or
397
+ # deletions from one of the sequences, #traverse_balanced will report
398
+ # <em>changes</em> between the sequences.
399
+ #
400
+ # The arguments to #traverse_balanced are the two sequences to traverse and a
401
+ # callback object, like this:
402
+ #
403
+ # traverse_balanced(seq1, seq2, Diff::LCS::ContextDiffCallbacks.new)
404
+ #
405
+ # #sdiff is implemented with #traverse_balanced.
406
+ #
407
+ # == Callback Methods
408
+ #
409
+ # Optional callback methods are <em>emphasized</em>.
410
+ #
411
+ # callbacks#match:: Called when +a+ and +b+ are pointing to
412
+ # common elements in +A+ and +B+.
413
+ # callbacks#discard_a:: Called when +a+ is pointing to an
414
+ # element not in +B+.
415
+ # callbacks#discard_b:: Called when +b+ is pointing to an
416
+ # element not in +A+.
417
+ # <em>callbacks#change</em>:: Called when +a+ and +b+ are pointing to
418
+ # the same relative position, but
419
+ # <tt>A[a]</tt> and <tt>B[b]</tt> are not
420
+ # the same; a <em>change</em> has
421
+ # occurred.
422
+ #
423
+ # #traverse_balanced might be a bit slower than #traverse_sequences,
424
+ # noticable only while processing huge amounts of data.
425
+ #
426
+ # == Algorithm
427
+ #
428
+ # a---+
429
+ # v
430
+ # A = a b c e h j l m n p
431
+ # B = b c d e f j k l m r s t
432
+ # ^
433
+ # b---+
434
+ #
435
+ # === Matches
436
+ #
437
+ # If there are two arrows (+a+ and +b+) pointing to elements of sequences +A+
438
+ # and +B+, the arrows will initially point to the first elements of their
439
+ # respective sequences. #traverse_sequences will advance the arrows through
440
+ # the sequences one element at a time, calling a method on the user-specified
441
+ # callback object before each advance. It will advance the arrows in such a
442
+ # way that if there are elements <tt>A[i]</tt> and <tt>B[j]</tt> which are
443
+ # both equal and part of the longest common subsequence, there will be some
444
+ # moment during the execution of #traverse_sequences when arrow +a+ is
445
+ # pointing to <tt>A[i]</tt> and arrow +b+ is pointing to <tt>B[j]</tt>. When
446
+ # this happens, #traverse_sequences will call <tt>callbacks#match</tt> and
447
+ # then it will advance both arrows.
448
+ #
449
+ # === Discards
450
+ #
451
+ # Otherwise, one of the arrows is pointing to an element of its sequence that
452
+ # is not part of the longest common subsequence. #traverse_sequences will
453
+ # advance that arrow and will call <tt>callbacks#discard_a</tt> or
454
+ # <tt>callbacks#discard_b</tt>, depending on which arrow it advanced.
455
+ #
456
+ # === Changes
457
+ #
458
+ # If both +a+ and +b+ point to elements that are not part of the longest
459
+ # common subsequence, then #traverse_sequences will try to call
460
+ # <tt>callbacks#change</tt> and advance both arrows. If
461
+ # <tt>callbacks#change</tt> is not implemented, then
462
+ # <tt>callbacks#discard_a</tt> and <tt>callbacks#discard_b</tt> will be
463
+ # called in turn.
464
+ #
465
+ # The methods for <tt>callbacks#match</tt>, <tt>callbacks#discard_a</tt>,
466
+ # <tt>callbacks#discard_b</tt>, and <tt>callbacks#change</tt> are invoked
467
+ # with an event comprising the action ("=", "+", "-", or "!", respectively),
468
+ # the indicies +i+ and +j+, and the elements <tt>A[i]</tt> and <tt>B[j]</tt>.
469
+ # Return values are discarded by #traverse_balanced.
470
+ #
471
+ # === Context
472
+ #
473
+ # Note that +i+ and +j+ may not be the same index position, even if +a+ and
474
+ # +b+ are considered to be pointing to matching or changed elements.
475
+ def traverse_balanced(seq1, seq2, callbacks = Diff::LCS::BalancedCallbacks)
476
+ matches = Diff::LCS::Internals.lcs(seq1, seq2)
477
+ a_size = seq1.size
478
+ b_size = seq2.size
479
+ ai = bj = mb = 0
480
+ ma = -1
481
+ string = seq1.is_a?(String)
482
+
483
+ # Process all the lines in the match vector.
484
+ loop do
485
+ # Find next match indices +ma+ and +mb+
486
+ loop do
487
+ ma += 1
488
+ break unless ma < matches.size && matches[ma].nil?
489
+ end
490
+
491
+ break if ma >= matches.size # end of matches?
492
+
493
+ mb = matches[ma]
494
+
495
+ # Change(seq2)
496
+ while (ai < ma) || (bj < mb)
497
+ ax = string ? seq1[ai, 1] : seq1[ai]
498
+ bx = string ? seq2[bj, 1] : seq2[bj]
499
+
500
+ case [(ai < ma), (bj < mb)]
501
+ when [true, true]
502
+ if callbacks.respond_to?(:change)
503
+ event = Diff::LCS::ContextChange.new("!", ai, ax, bj, bx)
504
+ event = yield event if block_given?
505
+ callbacks.change(event)
506
+ ai += 1
507
+ else
508
+ event = Diff::LCS::ContextChange.new("-", ai, ax, bj, bx)
509
+ event = yield event if block_given?
510
+ callbacks.discard_a(event)
511
+ ai += 1
512
+ ax = string ? seq1[ai, 1] : seq1[ai]
513
+ event = Diff::LCS::ContextChange.new("+", ai, ax, bj, bx)
514
+ event = yield event if block_given?
515
+ callbacks.discard_b(event)
516
+ end
517
+
518
+ bj += 1
519
+ when [true, false]
520
+ event = Diff::LCS::ContextChange.new("-", ai, ax, bj, bx)
521
+ event = yield event if block_given?
522
+ callbacks.discard_a(event)
523
+ ai += 1
524
+ when [false, true]
525
+ event = Diff::LCS::ContextChange.new("+", ai, ax, bj, bx)
526
+ event = yield event if block_given?
527
+ callbacks.discard_b(event)
528
+ bj += 1
529
+ end
530
+ end
531
+
532
+ # Match
533
+ ax = string ? seq1[ai, 1] : seq1[ai]
534
+ bx = string ? seq2[bj, 1] : seq2[bj]
535
+ event = Diff::LCS::ContextChange.new("=", ai, ax, bj, bx)
536
+ event = yield event if block_given?
537
+ callbacks.match(event)
538
+ ai += 1
539
+ bj += 1
540
+ end
541
+
542
+ while (ai < a_size) || (bj < b_size)
543
+ ax = string ? seq1[ai, 1] : seq1[ai]
544
+ bx = string ? seq2[bj, 1] : seq2[bj]
545
+
546
+ case [(ai < a_size), (bj < b_size)]
547
+ when [true, true]
548
+ if callbacks.respond_to?(:change)
549
+ event = Diff::LCS::ContextChange.new("!", ai, ax, bj, bx)
550
+ event = yield event if block_given?
551
+ callbacks.change(event)
552
+ ai += 1
553
+ else
554
+ event = Diff::LCS::ContextChange.new("-", ai, ax, bj, bx)
555
+ event = yield event if block_given?
556
+ callbacks.discard_a(event)
557
+ ai += 1
558
+ ax = string ? seq1[ai, 1] : seq1[ai]
559
+ event = Diff::LCS::ContextChange.new("+", ai, ax, bj, bx)
560
+ event = yield event if block_given?
561
+ callbacks.discard_b(event)
562
+ end
563
+
564
+ bj += 1
565
+ when [true, false]
566
+ event = Diff::LCS::ContextChange.new("-", ai, ax, bj, bx)
567
+ event = yield event if block_given?
568
+ callbacks.discard_a(event)
569
+ ai += 1
570
+ when [false, true]
571
+ event = Diff::LCS::ContextChange.new("+", ai, ax, bj, bx)
572
+ event = yield event if block_given?
573
+ callbacks.discard_b(event)
574
+ bj += 1
575
+ end
576
+ end
577
+ end
578
+
579
+ # standard:disable Style/HashSyntax
580
+ PATCH_MAP = { # :nodoc:
581
+ :patch => {"+" => "+", "-" => "-", "!" => "!", "=" => "="}.freeze,
582
+ :unpatch => {"+" => "-", "-" => "+", "!" => "!", "=" => "="}.freeze
583
+ }.freeze
584
+ # standard:enable Style/HashSyntax
585
+
586
+ # Applies a +patchset+ to the sequence +src+ according to the +direction+
587
+ # (<tt>:patch</tt> or <tt>:unpatch</tt>), producing a new sequence.
588
+ #
589
+ # If the +direction+ is not specified, Diff::LCS::patch will attempt to
590
+ # discover the direction of the +patchset+.
591
+ #
592
+ # A +patchset+ can be considered to apply forward (<tt>:patch</tt>) if the
593
+ # following expression is true:
594
+ #
595
+ # patch(s1, diff(s1, s2)) -> s2
596
+ #
597
+ # A +patchset+ can be considered to apply backward (<tt>:unpatch</tt>) if the
598
+ # following expression is true:
599
+ #
600
+ # patch(s2, diff(s1, s2)) -> s1
601
+ #
602
+ # If the +patchset+ contains no changes, the +src+ value will be returned as
603
+ # either <tt>src.dup</tt> or +src+. A +patchset+ can be deemed as having no
604
+ # changes if the following predicate returns true:
605
+ #
606
+ # patchset.empty? or
607
+ # patchset.flatten(1).all? { |change| change.unchanged? }
608
+ #
609
+ # === Patchsets
610
+ #
611
+ # A +patchset+ is always an enumerable sequence of changes, hunks of changes,
612
+ # or a mix of the two. A hunk of changes is an enumerable sequence of
613
+ # changes:
614
+ #
615
+ # [ # patchset
616
+ # # change
617
+ # [ # hunk
618
+ # # change
619
+ # ]
620
+ # ]
621
+ #
622
+ # The +patch+ method accepts <tt>patchset</tt>s that are enumerable sequences
623
+ # containing either Diff::LCS::Change objects (or a subclass) or the array
624
+ # representations of those objects. Prior to application, array
625
+ # representations of Diff::LCS::Change objects will be reified.
626
+ def patch(src, patchset, direction = nil)
627
+ # Normalize the patchset.
628
+ has_changes, patchset = Diff::LCS::Internals.analyze_patchset(patchset)
629
+
630
+ return src.respond_to?(:dup) ? src.dup : src unless has_changes
631
+
632
+ string = src.is_a?(String)
633
+ # Start with a new empty type of the source's class
634
+ res = src.class.new
635
+
636
+ direction ||= Diff::LCS::Internals.intuit_diff_direction(src, patchset)
637
+
638
+ ai = bj = 0
639
+
640
+ patch_map = PATCH_MAP[direction]
641
+
642
+ patchset.each do |change|
643
+ # Both Change and ContextChange support #action
644
+ action = patch_map[change.action]
645
+
646
+ case change
647
+ when Diff::LCS::ContextChange
648
+ case direction
649
+ when :patch
650
+ el = change.new_element
651
+ op = change.old_position
652
+ np = change.new_position
653
+ when :unpatch
654
+ el = change.old_element
655
+ op = change.new_position
656
+ np = change.old_position
657
+ end
658
+
659
+ case action
660
+ when "-" # Remove details from the old string
661
+ while ai < op
662
+ res << (string ? src[ai, 1] : src[ai])
663
+ ai += 1
664
+ bj += 1
665
+ end
666
+ ai += 1
667
+ when "+"
668
+ while bj < np
669
+ res << (string ? src[ai, 1] : src[ai])
670
+ ai += 1
671
+ bj += 1
672
+ end
673
+
674
+ res << el
675
+ bj += 1
676
+ when "="
677
+ # This only appears in sdiff output with the SDiff callback.
678
+ # Therefore, we only need to worry about dealing with a single
679
+ # element.
680
+ res << el
681
+
682
+ ai += 1
683
+ bj += 1
684
+ when "!"
685
+ while ai < op
686
+ res << (string ? src[ai, 1] : src[ai])
687
+ ai += 1
688
+ bj += 1
689
+ end
690
+
691
+ bj += 1
692
+ ai += 1
693
+
694
+ res << el
695
+ end
696
+ when Diff::LCS::Change
697
+ case action
698
+ when "-"
699
+ while ai < change.position
700
+ res << (string ? src[ai, 1] : src[ai])
701
+ ai += 1
702
+ bj += 1
703
+ end
704
+ ai += 1
705
+ when "+"
706
+ while bj < change.position
707
+ res << (string ? src[ai, 1] : src[ai])
708
+ ai += 1
709
+ bj += 1
710
+ end
711
+
712
+ bj += 1
713
+
714
+ res << change.element
715
+ end
716
+ end
717
+ end
718
+
719
+ while ai < src.size
720
+ res << (string ? src[ai, 1] : src[ai])
721
+ ai += 1
722
+ bj += 1
723
+ end
724
+
725
+ res
726
+ end
727
+
728
+ # Given a set of patchset, convert the current version to the prior version.
729
+ # Does no auto-discovery.
730
+ def unpatch!(src, patchset)
731
+ patch(src, patchset, :unpatch)
732
+ end
733
+
734
+ # Given a set of patchset, convert the current version to the next version.
735
+ # Does no auto-discovery.
736
+ def patch!(src, patchset)
737
+ patch(src, patchset, :patch)
738
+ end
739
+ end
740
+
741
+ require "diff/lcs/backports"