super_diff 0.13.0 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (275) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/lib/super_diff/active_record/differs/active_record_relation.rb +2 -0
  4. data/lib/super_diff/active_record/differs.rb +3 -1
  5. data/lib/super_diff/active_record/inspection_tree_builders/active_record_model.rb +7 -5
  6. data/lib/super_diff/active_record/inspection_tree_builders/active_record_relation.rb +12 -10
  7. data/lib/super_diff/active_record/inspection_tree_builders.rb +4 -2
  8. data/lib/super_diff/active_record/monkey_patches.rb +4 -2
  9. data/lib/super_diff/active_record/object_inspection.rb +6 -4
  10. data/lib/super_diff/active_record/operation_tree_builders/active_record_model.rb +3 -1
  11. data/lib/super_diff/active_record/operation_tree_builders/active_record_relation.rb +3 -1
  12. data/lib/super_diff/active_record/operation_tree_builders.rb +4 -2
  13. data/lib/super_diff/active_record/operation_tree_flatteners/active_record_relation.rb +4 -2
  14. data/lib/super_diff/active_record/operation_tree_flatteners.rb +3 -1
  15. data/lib/super_diff/active_record/operation_trees/active_record_relation.rb +2 -0
  16. data/lib/super_diff/active_record/operation_trees.rb +3 -1
  17. data/lib/super_diff/active_record.rb +10 -8
  18. data/lib/super_diff/active_support/differs/hash_with_indifferent_access.rb +2 -0
  19. data/lib/super_diff/active_support/differs.rb +3 -1
  20. data/lib/super_diff/active_support/inspection_tree_builders/hash_with_indifferent_access.rb +16 -14
  21. data/lib/super_diff/active_support/inspection_tree_builders/ordered_options.rb +16 -14
  22. data/lib/super_diff/active_support/inspection_tree_builders.rb +4 -2
  23. data/lib/super_diff/active_support/object_inspection.rb +6 -4
  24. data/lib/super_diff/active_support/operation_tree_builders/hash_with_indifferent_access.rb +6 -4
  25. data/lib/super_diff/active_support/operation_tree_builders.rb +3 -1
  26. data/lib/super_diff/active_support/operation_tree_flatteners/hash_with_indifferent_access.rb +4 -2
  27. data/lib/super_diff/active_support/operation_tree_flatteners.rb +3 -1
  28. data/lib/super_diff/active_support/operation_trees/hash_with_indifferent_access.rb +2 -0
  29. data/lib/super_diff/active_support/operation_trees.rb +3 -1
  30. data/lib/super_diff/active_support.rb +8 -6
  31. data/lib/super_diff/basic/diff_formatters/collection.rb +18 -18
  32. data/lib/super_diff/basic/diff_formatters/multiline_string.rb +2 -0
  33. data/lib/super_diff/basic/diff_formatters.rb +4 -2
  34. data/lib/super_diff/basic/differs/array.rb +2 -0
  35. data/lib/super_diff/basic/differs/custom_object.rb +3 -1
  36. data/lib/super_diff/basic/differs/date_like.rb +2 -0
  37. data/lib/super_diff/basic/differs/default_object.rb +3 -1
  38. data/lib/super_diff/basic/differs/hash.rb +2 -0
  39. data/lib/super_diff/basic/differs/multiline_string.rb +2 -0
  40. data/lib/super_diff/basic/differs/time_like.rb +2 -0
  41. data/lib/super_diff/basic/differs.rb +11 -9
  42. data/lib/super_diff/basic/inspection_tree_builders/array.rb +5 -3
  43. data/lib/super_diff/basic/inspection_tree_builders/custom_object.rb +5 -3
  44. data/lib/super_diff/basic/inspection_tree_builders/data_object.rb +6 -4
  45. data/lib/super_diff/basic/inspection_tree_builders/date_like.rb +7 -5
  46. data/lib/super_diff/basic/inspection_tree_builders/default_object.rb +7 -5
  47. data/lib/super_diff/basic/inspection_tree_builders/hash.rb +7 -5
  48. data/lib/super_diff/basic/inspection_tree_builders/primitive.rb +2 -0
  49. data/lib/super_diff/basic/inspection_tree_builders/range_object.rb +19 -0
  50. data/lib/super_diff/basic/inspection_tree_builders/time_like.rb +8 -8
  51. data/lib/super_diff/basic/inspection_tree_builders.rb +15 -9
  52. data/lib/super_diff/basic/operation_tree_builders/array.rb +6 -4
  53. data/lib/super_diff/basic/operation_tree_builders/custom_object.rb +3 -1
  54. data/lib/super_diff/basic/operation_tree_builders/data_object.rb +4 -2
  55. data/lib/super_diff/basic/operation_tree_builders/date_like.rb +2 -0
  56. data/lib/super_diff/basic/operation_tree_builders/default_object.rb +32 -31
  57. data/lib/super_diff/basic/operation_tree_builders/hash.rb +49 -46
  58. data/lib/super_diff/basic/operation_tree_builders/multiline_string.rb +5 -3
  59. data/lib/super_diff/basic/operation_tree_builders/time_like.rb +5 -3
  60. data/lib/super_diff/basic/operation_tree_builders.rb +12 -10
  61. data/lib/super_diff/basic/operation_tree_flatteners/array.rb +4 -2
  62. data/lib/super_diff/basic/operation_tree_flatteners/collection.rb +11 -11
  63. data/lib/super_diff/basic/operation_tree_flatteners/custom_object.rb +5 -3
  64. data/lib/super_diff/basic/operation_tree_flatteners/default_object.rb +6 -5
  65. data/lib/super_diff/basic/operation_tree_flatteners/hash.rb +5 -3
  66. data/lib/super_diff/basic/operation_tree_flatteners/multiline_string.rb +3 -1
  67. data/lib/super_diff/basic/operation_tree_flatteners.rb +8 -6
  68. data/lib/super_diff/basic/operation_trees/array.rb +2 -0
  69. data/lib/super_diff/basic/operation_trees/custom_object.rb +2 -0
  70. data/lib/super_diff/basic/operation_trees/default_object.rb +6 -4
  71. data/lib/super_diff/basic/operation_trees/hash.rb +2 -0
  72. data/lib/super_diff/basic/operation_trees/multiline_string.rb +3 -1
  73. data/lib/super_diff/basic/operation_trees.rb +9 -7
  74. data/lib/super_diff/basic.rb +9 -6
  75. data/lib/super_diff/core/abstract_differ.rb +2 -0
  76. data/lib/super_diff/core/abstract_inspection_tree_builder.rb +2 -0
  77. data/lib/super_diff/core/abstract_operation_tree.rb +4 -2
  78. data/lib/super_diff/core/abstract_operation_tree_builder.rb +15 -18
  79. data/lib/super_diff/core/abstract_operation_tree_flattener.rb +5 -3
  80. data/lib/super_diff/core/binary_operation.rb +3 -1
  81. data/lib/super_diff/core/colorized_document_extensions.rb +2 -0
  82. data/lib/super_diff/core/configuration.rb +14 -38
  83. data/lib/super_diff/core/differ_dispatcher.rb +4 -2
  84. data/lib/super_diff/core/gem_version.rb +2 -0
  85. data/lib/super_diff/core/helpers.rb +13 -11
  86. data/lib/super_diff/core/implementation_checks.rb +6 -2
  87. data/lib/super_diff/core/inspection_tree.rb +38 -38
  88. data/lib/super_diff/core/inspection_tree_builder_dispatcher.rb +5 -5
  89. data/lib/super_diff/core/inspection_tree_nodes/as_lines_when_rendering_to_lines.rb +3 -1
  90. data/lib/super_diff/core/inspection_tree_nodes/as_prefix_when_rendering_to_lines.rb +2 -0
  91. data/lib/super_diff/core/inspection_tree_nodes/as_prelude_when_rendering_to_lines.rb +2 -0
  92. data/lib/super_diff/core/inspection_tree_nodes/as_single_line.rb +2 -0
  93. data/lib/super_diff/core/inspection_tree_nodes/base.rb +9 -9
  94. data/lib/super_diff/core/inspection_tree_nodes/inspection.rb +2 -0
  95. data/lib/super_diff/core/inspection_tree_nodes/nesting.rb +2 -0
  96. data/lib/super_diff/core/inspection_tree_nodes/only_when.rb +5 -1
  97. data/lib/super_diff/core/inspection_tree_nodes/text.rb +2 -0
  98. data/lib/super_diff/core/inspection_tree_nodes/when_empty.rb +3 -1
  99. data/lib/super_diff/core/inspection_tree_nodes/when_non_empty.rb +3 -1
  100. data/lib/super_diff/core/inspection_tree_nodes/when_rendering_to_lines.rb +3 -1
  101. data/lib/super_diff/core/inspection_tree_nodes/when_rendering_to_string.rb +2 -0
  102. data/lib/super_diff/core/inspection_tree_nodes.rb +16 -14
  103. data/lib/super_diff/core/line.rb +9 -7
  104. data/lib/super_diff/core/no_differ_available_error.rb +7 -5
  105. data/lib/super_diff/core/no_inspection_tree_builder_available_error.rb +5 -3
  106. data/lib/super_diff/core/no_operation_tree_available_error.rb +4 -2
  107. data/lib/super_diff/core/no_operation_tree_builder_available_error.rb +7 -5
  108. data/lib/super_diff/core/operation_tree_builder_dispatcher.rb +3 -3
  109. data/lib/super_diff/core/operation_tree_finder.rb +8 -8
  110. data/lib/super_diff/core/prefix_for_next_inspection_tree_node.rb +2 -0
  111. data/lib/super_diff/core/prelude_for_next_inspection_tree_node.rb +2 -0
  112. data/lib/super_diff/core/recursion_guard.rb +6 -4
  113. data/lib/super_diff/core/tiered_lines.rb +2 -0
  114. data/lib/super_diff/core/tiered_lines_elider.rb +53 -54
  115. data/lib/super_diff/core/tiered_lines_formatter.rb +6 -4
  116. data/lib/super_diff/core/unary_operation.rb +2 -0
  117. data/lib/super_diff/core.rb +31 -29
  118. data/lib/super_diff/csi/bold_sequence.rb +2 -0
  119. data/lib/super_diff/csi/color.rb +4 -4
  120. data/lib/super_diff/csi/color_sequence_block.rb +3 -1
  121. data/lib/super_diff/csi/colorized_document.rb +7 -9
  122. data/lib/super_diff/csi/document.rb +15 -18
  123. data/lib/super_diff/csi/eight_bit_color.rb +32 -37
  124. data/lib/super_diff/csi/four_bit_color.rb +12 -9
  125. data/lib/super_diff/csi/reset_sequence.rb +2 -0
  126. data/lib/super_diff/csi/twenty_four_bit_color.rb +22 -21
  127. data/lib/super_diff/csi/uncolorized_document.rb +2 -0
  128. data/lib/super_diff/csi.rb +12 -10
  129. data/lib/super_diff/differs.rb +6 -4
  130. data/lib/super_diff/equality_matchers/array.rb +18 -16
  131. data/lib/super_diff/equality_matchers/base.rb +6 -4
  132. data/lib/super_diff/equality_matchers/default.rb +5 -3
  133. data/lib/super_diff/equality_matchers/defaults.rb +2 -0
  134. data/lib/super_diff/equality_matchers/hash.rb +18 -16
  135. data/lib/super_diff/equality_matchers/main.rb +3 -1
  136. data/lib/super_diff/equality_matchers/multiline_string.rb +18 -16
  137. data/lib/super_diff/equality_matchers/primitive.rb +15 -13
  138. data/lib/super_diff/equality_matchers/singleline_string.rb +16 -14
  139. data/lib/super_diff/equality_matchers.rb +11 -9
  140. data/lib/super_diff/errors.rb +4 -2
  141. data/lib/super_diff/object_inspection.rb +17 -15
  142. data/lib/super_diff/operation_tree_builders.rb +6 -4
  143. data/lib/super_diff/operation_tree_flatteners.rb +6 -4
  144. data/lib/super_diff/operation_trees.rb +6 -4
  145. data/lib/super_diff/operations.rb +4 -2
  146. data/lib/super_diff/rails.rb +4 -2
  147. data/lib/super_diff/rspec/augmented_matcher.rb +3 -1
  148. data/lib/super_diff/rspec/differ.rb +16 -7
  149. data/lib/super_diff/rspec/differs/collection_containing_exactly.rb +2 -0
  150. data/lib/super_diff/rspec/differs/collection_including.rb +2 -0
  151. data/lib/super_diff/rspec/differs/hash_including.rb +2 -0
  152. data/lib/super_diff/rspec/differs/object_having_attributes.rb +2 -0
  153. data/lib/super_diff/rspec/differs.rb +6 -4
  154. data/lib/super_diff/rspec/inspection_tree_builders/collection_containing_exactly.rb +12 -10
  155. data/lib/super_diff/rspec/inspection_tree_builders/collection_including.rb +10 -8
  156. data/lib/super_diff/rspec/inspection_tree_builders/double.rb +20 -18
  157. data/lib/super_diff/rspec/inspection_tree_builders/generic_describable_matcher.rb +2 -0
  158. data/lib/super_diff/rspec/inspection_tree_builders/hash_including.rb +10 -8
  159. data/lib/super_diff/rspec/inspection_tree_builders/instance_of.rb +2 -0
  160. data/lib/super_diff/rspec/inspection_tree_builders/kind_of.rb +2 -0
  161. data/lib/super_diff/rspec/inspection_tree_builders/object_having_attributes.rb +12 -10
  162. data/lib/super_diff/rspec/inspection_tree_builders/primitive.rb +2 -0
  163. data/lib/super_diff/rspec/inspection_tree_builders/value_within.rb +6 -4
  164. data/lib/super_diff/rspec/inspection_tree_builders.rb +12 -10
  165. data/lib/super_diff/rspec/matcher_text_builders/base.rb +12 -12
  166. data/lib/super_diff/rspec/matcher_text_builders/be_predicate.rb +19 -17
  167. data/lib/super_diff/rspec/matcher_text_builders/contain_exactly.rb +3 -1
  168. data/lib/super_diff/rspec/matcher_text_builders/have_predicate.rb +7 -5
  169. data/lib/super_diff/rspec/matcher_text_builders/match.rb +6 -4
  170. data/lib/super_diff/rspec/matcher_text_builders/raise_error.rb +5 -3
  171. data/lib/super_diff/rspec/matcher_text_builders/respond_to.rb +20 -18
  172. data/lib/super_diff/rspec/matcher_text_builders.rb +9 -7
  173. data/lib/super_diff/rspec/matcher_text_template.rb +34 -39
  174. data/lib/super_diff/rspec/object_inspection.rb +7 -5
  175. data/lib/super_diff/rspec/operation_tree_builders/collection_containing_exactly.rb +4 -4
  176. data/lib/super_diff/rspec/operation_tree_builders/collection_including.rb +2 -0
  177. data/lib/super_diff/rspec/operation_tree_builders/hash_including.rb +2 -0
  178. data/lib/super_diff/rspec/operation_tree_builders/object_having_attributes.rb +2 -0
  179. data/lib/super_diff/rspec/operation_tree_builders.rb +6 -4
  180. data/lib/super_diff/rspec-rails.rb +4 -2
  181. data/lib/super_diff/rspec.rb +15 -13
  182. data/lib/super_diff/version.rb +3 -1
  183. data/lib/super_diff.rb +24 -26
  184. data/super_diff.gemspec +20 -19
  185. metadata +6 -185
  186. data/spec/examples.txt +0 -450
  187. data/spec/integration/rails/active_record_spec.rb +0 -21
  188. data/spec/integration/rails/active_support_spec.rb +0 -19
  189. data/spec/integration/rails/engines_spec.rb +0 -25
  190. data/spec/integration/rails/hash_with_indifferent_access_spec.rb +0 -21
  191. data/spec/integration/rspec/be_falsey_matcher_spec.rb +0 -58
  192. data/spec/integration/rspec/be_matcher_spec.rb +0 -605
  193. data/spec/integration/rspec/be_nil_matcher_spec.rb +0 -57
  194. data/spec/integration/rspec/be_predicate_matcher_spec.rb +0 -615
  195. data/spec/integration/rspec/be_truthy_matcher_spec.rb +0 -62
  196. data/spec/integration/rspec/contain_exactly_matcher_spec.rb +0 -377
  197. data/spec/integration/rspec/eq_matcher_spec.rb +0 -1066
  198. data/spec/integration/rspec/generic_describable_matchers_spec.rb +0 -177
  199. data/spec/integration/rspec/have_attributes_matcher_spec.rb +0 -443
  200. data/spec/integration/rspec/have_predicate_matcher_spec.rb +0 -478
  201. data/spec/integration/rspec/include_matcher_spec.rb +0 -452
  202. data/spec/integration/rspec/magic_metadata_spec.rb +0 -51
  203. data/spec/integration/rspec/match_array_matcher_spec.rb +0 -424
  204. data/spec/integration/rspec/match_matcher_spec.rb +0 -1359
  205. data/spec/integration/rspec/raise_error_matcher_spec.rb +0 -1488
  206. data/spec/integration/rspec/respond_to_matcher_spec.rb +0 -999
  207. data/spec/integration/rspec/third_party_matcher_spec.rb +0 -245
  208. data/spec/integration/rspec/unhandled_errors_spec.rb +0 -150
  209. data/spec/spec_helper.rb +0 -91
  210. data/spec/support/colorizer.rb +0 -9
  211. data/spec/support/command_runner.rb +0 -253
  212. data/spec/support/helpers.rb +0 -21
  213. data/spec/support/integration/helpers.rb +0 -124
  214. data/spec/support/integration/matchers/produce_output_when_run_matcher.rb +0 -104
  215. data/spec/support/integration/matchers.rb +0 -177
  216. data/spec/support/integration/test_programs/base.rb +0 -143
  217. data/spec/support/integration/test_programs/plain.rb +0 -19
  218. data/spec/support/integration/test_programs/rspec_active_record.rb +0 -20
  219. data/spec/support/integration/test_programs/rspec_active_support.rb +0 -20
  220. data/spec/support/integration/test_programs/rspec_rails.rb +0 -20
  221. data/spec/support/integration/test_programs/rspec_rails_engine.rb +0 -20
  222. data/spec/support/models/a.rb +0 -11
  223. data/spec/support/models/active_record/person.rb +0 -28
  224. data/spec/support/models/active_record/query.rb +0 -15
  225. data/spec/support/models/active_record/shipping_address.rb +0 -24
  226. data/spec/support/models/customer.rb +0 -22
  227. data/spec/support/models/empty_class.rb +0 -6
  228. data/spec/support/models/item.rb +0 -10
  229. data/spec/support/models/order.rb +0 -9
  230. data/spec/support/models/person.rb +0 -20
  231. data/spec/support/models/player.rb +0 -30
  232. data/spec/support/models/point.rb +0 -7
  233. data/spec/support/models/shipping_address.rb +0 -25
  234. data/spec/support/shared_examples/active_record.rb +0 -428
  235. data/spec/support/shared_examples/active_support.rb +0 -188
  236. data/spec/support/shared_examples/elided_diffs.rb +0 -938
  237. data/spec/support/shared_examples/hash_with_indifferent_access.rb +0 -749
  238. data/spec/support/shared_examples/key.rb +0 -123
  239. data/spec/support/unit/helpers.rb +0 -24
  240. data/spec/support/unit/matchers/be_deprecated_in_favor_of.rb +0 -39
  241. data/spec/support/unit/matchers/match_output.rb +0 -40
  242. data/spec/unit/active_record/object_inspection_spec.rb +0 -289
  243. data/spec/unit/active_support/object_inspection_spec.rb +0 -170
  244. data/spec/unit/basic/inspection_tree_builders/data_object_spec.rb +0 -146
  245. data/spec/unit/basic/operation_tree_builders/data_object_spec.rb +0 -82
  246. data/spec/unit/basic/operation_tree_flatteners/array_spec.rb +0 -637
  247. data/spec/unit/basic/operation_tree_flatteners/custom_object_spec.rb +0 -685
  248. data/spec/unit/basic/operation_tree_flatteners/default_object_spec.rb +0 -685
  249. data/spec/unit/basic/operation_tree_flatteners/hash_spec.rb +0 -671
  250. data/spec/unit/basic/operation_tree_flatteners/multiline_string_spec.rb +0 -131
  251. data/spec/unit/core/configuration_no_rspec_spec.rb +0 -58
  252. data/spec/unit/core/configuration_spec.rb +0 -176
  253. data/spec/unit/core/helpers_spec.rb +0 -68
  254. data/spec/unit/core/tiered_lines_elider_spec.rb +0 -6328
  255. data/spec/unit/core/tiered_lines_formatter_spec.rb +0 -131
  256. data/spec/unit/deprecations_spec.rb +0 -176
  257. data/spec/unit/equality_matchers/main_spec.rb +0 -1842
  258. data/spec/unit/rspec/matchers/be_compared_to_spec.rb +0 -23
  259. data/spec/unit/rspec/matchers/be_falsey_spec.rb +0 -9
  260. data/spec/unit/rspec/matchers/be_nil_spec.rb +0 -9
  261. data/spec/unit/rspec/matchers/be_predicate_spec.rb +0 -31
  262. data/spec/unit/rspec/matchers/be_spec.rb +0 -17
  263. data/spec/unit/rspec/matchers/be_truthy_spec.rb +0 -9
  264. data/spec/unit/rspec/matchers/contain_exactly_spec.rb +0 -11
  265. data/spec/unit/rspec/matchers/eq_spec.rb +0 -9
  266. data/spec/unit/rspec/matchers/have_attributes_spec.rb +0 -11
  267. data/spec/unit/rspec/matchers/have_predicate_spec.rb +0 -21
  268. data/spec/unit/rspec/matchers/include_spec.rb +0 -21
  269. data/spec/unit/rspec/matchers/match_array_spec.rb +0 -11
  270. data/spec/unit/rspec/matchers/match_spec.rb +0 -9
  271. data/spec/unit/rspec/matchers/raise_error_spec.rb +0 -77
  272. data/spec/unit/rspec/matchers/respond_to_spec.rb +0 -85
  273. data/spec/unit/rspec/object_inspection/rspec_matcher_spec.rb +0 -91
  274. data/spec/unit/rspec/object_inspection_spec.rb +0 -471
  275. data/spec/unit/super_diff_spec.rb +0 -2115
@@ -1,377 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe "Integration with RSpec's #contain_exactly matcher",
4
- type: :integration do
5
- context "when a few number of values are given" do
6
- it "produces the correct failure message when used in the positive" do
7
- as_both_colored_and_uncolored do |color_enabled|
8
- snippet = <<~TEST.strip
9
- actual = ["Marty", "Jennifer", "Doc"]
10
- expected = ["Einie", "Marty"]
11
- expect(actual).to contain_exactly(*expected)
12
- TEST
13
- program = make_plain_test_program(snippet, color_enabled: color_enabled)
14
-
15
- expected_output =
16
- build_expected_output(
17
- color_enabled: color_enabled,
18
- snippet: "expect(actual).to contain_exactly(*expected)",
19
- expectation:
20
- proc do
21
- line do
22
- plain "Expected "
23
- actual %|["Marty", "Jennifer", "Doc"]|
24
- plain " to contain exactly "
25
- expected %|"Einie"|
26
- plain " and "
27
- expected %|"Marty"|
28
- plain "."
29
- end
30
- end,
31
- diff:
32
- proc do
33
- plain_line " ["
34
- plain_line %| "Marty",|
35
- actual_line %|+ "Jennifer",|
36
- actual_line %|+ "Doc",|
37
- # expected_line %|- "Einie"| # TODO
38
- expected_line %|- "Einie",|
39
- plain_line " ]"
40
- end
41
- )
42
-
43
- expect(program).to produce_output_when_run(expected_output).in_color(
44
- color_enabled
45
- )
46
- end
47
- end
48
-
49
- it "produces the correct failure message when used in the negative" do
50
- as_both_colored_and_uncolored do |color_enabled|
51
- snippet = <<~TEST.strip
52
- values = ["Einie", "Marty"]
53
- expect(values).not_to contain_exactly(*values)
54
- TEST
55
- program = make_plain_test_program(snippet, color_enabled: color_enabled)
56
-
57
- expected_output =
58
- build_expected_output(
59
- color_enabled: color_enabled,
60
- snippet: "expect(values).not_to contain_exactly(*values)",
61
- expectation:
62
- proc do
63
- line do
64
- plain "Expected "
65
- actual %|["Einie", "Marty"]|
66
- plain " not to contain exactly "
67
- expected %|"Einie"|
68
- plain " and "
69
- expected %|"Marty"|
70
- plain "."
71
- end
72
- end
73
- )
74
-
75
- expect(program).to produce_output_when_run(expected_output).in_color(
76
- color_enabled
77
- )
78
- end
79
- end
80
- end
81
-
82
- context "when a large number of values are given" do
83
- context "and they are only simple strings" do
84
- it "produces the correct failure message when used in the positive" do
85
- as_both_colored_and_uncolored do |color_enabled|
86
- snippet = <<~TEST.strip
87
- actual = [
88
- "Marty McFly",
89
- "Doc Brown",
90
- "Einie",
91
- "Lorraine McFly"
92
- ]
93
- expected = [
94
- "Doc Brown",
95
- "Marty McFly",
96
- "Biff Tannen",
97
- "George McFly",
98
- "Lorraine McFly"
99
- ]
100
- expect(actual).to contain_exactly(*expected)
101
- TEST
102
- program =
103
- make_plain_test_program(snippet, color_enabled: color_enabled)
104
-
105
- expected_output =
106
- build_expected_output(
107
- color_enabled: color_enabled,
108
- snippet: "expect(actual).to contain_exactly(*expected)",
109
- expectation:
110
- proc do
111
- line do
112
- plain " Expected "
113
- actual %|["Marty McFly", "Doc Brown", "Einie", "Lorraine McFly"]|
114
- end
115
-
116
- line do
117
- plain "to contain exactly "
118
- expected %|"Doc Brown"|
119
- plain ", "
120
- expected %|"Marty McFly"|
121
- plain ", "
122
- expected %|"Biff Tannen"|
123
- plain ", "
124
- expected %|"George McFly"|
125
- plain " and "
126
- expected %|"Lorraine McFly"|
127
- end
128
- end,
129
- diff:
130
- proc do
131
- plain_line " ["
132
- plain_line %| "Marty McFly",|
133
- plain_line %| "Doc Brown",|
134
- plain_line %| "Lorraine McFly",|
135
- actual_line %|+ "Einie",|
136
- expected_line %|- "Biff Tannen",|
137
- # expected_line %|- "George McFly"| # TODO
138
- expected_line %|- "George McFly",|
139
- plain_line " ]"
140
- end
141
- )
142
-
143
- expect(program).to produce_output_when_run(expected_output).in_color(
144
- color_enabled
145
- )
146
- end
147
- end
148
-
149
- it "produces the correct failure message when used in the negative" do
150
- as_both_colored_and_uncolored do |color_enabled|
151
- snippet = <<~TEST.strip
152
- values = [
153
- "Marty McFly",
154
- "Doc Brown",
155
- "Einie",
156
- "Lorraine McFly"
157
- ]
158
- expect(values).not_to contain_exactly(*values)
159
- TEST
160
- program =
161
- make_plain_test_program(snippet, color_enabled: color_enabled)
162
-
163
- expected_output =
164
- build_expected_output(
165
- color_enabled: color_enabled,
166
- snippet: "expect(values).not_to contain_exactly(*values)",
167
- newline_before_expectation: true,
168
- expectation:
169
- proc do
170
- line do
171
- plain " Expected "
172
- actual %|["Marty McFly", "Doc Brown", "Einie", "Lorraine McFly"]|
173
- end
174
-
175
- line do
176
- plain "not to contain exactly "
177
- expected %|"Marty McFly"|
178
- plain ", "
179
- expected %|"Doc Brown"|
180
- plain ", "
181
- expected %|"Einie"|
182
- plain " and "
183
- expected %|"Lorraine McFly"|
184
- end
185
- end
186
- )
187
-
188
- expect(program).to produce_output_when_run(expected_output).in_color(
189
- color_enabled
190
- )
191
- end
192
- end
193
- end
194
-
195
- context "and some of them are regexen" do
196
- it "produces the correct failure message when used in the positive" do
197
- as_both_colored_and_uncolored do |color_enabled|
198
- snippet = <<~TEST
199
- actual = [
200
- "Marty McFly",
201
- "Doc Brown",
202
- "Einie",
203
- "Lorraine McFly"
204
- ]
205
- expected = [
206
- / Brown$/,
207
- "Marty McFly",
208
- "Biff Tannen",
209
- /Georg McFly/,
210
- /Lorrain McFly/
211
- ]
212
- expect(actual).to contain_exactly(*expected)
213
- TEST
214
- program =
215
- make_plain_test_program(snippet, color_enabled: color_enabled)
216
-
217
- expected_output =
218
- build_expected_output(
219
- color_enabled: color_enabled,
220
- snippet: "expect(actual).to contain_exactly(*expected)",
221
- expectation:
222
- proc do
223
- line do
224
- plain " Expected "
225
- actual %|["Marty McFly", "Doc Brown", "Einie", "Lorraine McFly"]|
226
- end
227
-
228
- line do
229
- plain "to contain exactly "
230
- expected "/ Brown$/"
231
- plain ", "
232
- expected %|"Marty McFly"|
233
- plain ", "
234
- expected %|"Biff Tannen"|
235
- plain ", "
236
- expected "/Georg McFly/"
237
- plain " and "
238
- expected "/Lorrain McFly/"
239
- end
240
- end,
241
- diff:
242
- proc do
243
- plain_line " ["
244
- plain_line %| "Marty McFly",|
245
- plain_line %| "Doc Brown",|
246
- actual_line %|+ "Einie",|
247
- actual_line %|+ "Lorraine McFly",|
248
- expected_line %|- "Biff Tannen",|
249
- expected_line "- /Georg McFly/,"
250
- # expected_line %|- /Lorrain McFly/| # TODO
251
- expected_line "- /Lorrain McFly/,"
252
- plain_line " ]"
253
- end
254
- )
255
-
256
- expect(program).to produce_output_when_run(expected_output).in_color(
257
- color_enabled
258
- )
259
- end
260
- end
261
-
262
- it "produces the correct failure message when used in the negative" do
263
- as_both_colored_and_uncolored do |color_enabled|
264
- snippet = <<~TEST
265
- values = [
266
- / Brown$/,
267
- "Marty McFly",
268
- "Biff Tannen",
269
- /Georg McFly/,
270
- /Lorrain McFly/
271
- ]
272
- expect(values).not_to contain_exactly(*values)
273
- TEST
274
- program =
275
- make_plain_test_program(snippet, color_enabled: color_enabled)
276
-
277
- expected_output =
278
- build_expected_output(
279
- color_enabled: color_enabled,
280
- snippet: "expect(values).not_to contain_exactly(*values)",
281
- newline_before_expectation: true,
282
- expectation:
283
- proc do
284
- line do
285
- plain " Expected "
286
- actual %|[/ Brown$/, "Marty McFly", "Biff Tannen", /Georg McFly/, /Lorrain McFly/]|
287
- end
288
-
289
- line do
290
- plain "not to contain exactly "
291
- expected "/ Brown$/"
292
- plain ", "
293
- expected %|"Marty McFly"|
294
- plain ", "
295
- expected %|"Biff Tannen"|
296
- plain ", "
297
- expected "/Georg McFly/"
298
- plain " and "
299
- expected "/Lorrain McFly/"
300
- end
301
- end
302
- )
303
-
304
- expect(program).to produce_output_when_run(expected_output).in_color(
305
- color_enabled
306
- )
307
- end
308
- end
309
- end
310
-
311
- context "and some of them are RSpec matchers" do
312
- it "produces the correct failure message" do
313
- as_both_colored_and_uncolored do |color_enabled|
314
- snippet = <<~TEST.strip
315
- actual = [
316
- { foo: "bar" },
317
- double(baz: "qux"),
318
- { blargh: "riddle" }
319
- ]
320
- expected = [
321
- a_hash_including(foo: "bar"),
322
- a_collection_containing_exactly("zing"),
323
- an_object_having_attributes(baz: "qux"),
324
- ]
325
- expect(actual).to contain_exactly(*expected)
326
- TEST
327
- program =
328
- make_plain_test_program(snippet, color_enabled: color_enabled)
329
-
330
- expected_output =
331
- build_expected_output(
332
- color_enabled: color_enabled,
333
- snippet: "expect(actual).to contain_exactly(*expected)",
334
- expectation:
335
- proc do
336
- line do
337
- plain " Expected "
338
- actual %|[{ foo: "bar" }, #<Double (anonymous) baz: "qux">, { blargh: "riddle" }]|
339
- end
340
-
341
- line do
342
- plain "to contain exactly "
343
- expected %|#<a hash including (foo: "bar")>|
344
- plain ", "
345
- expected %|#<a collection containing exactly ("zing")>|
346
- plain " and "
347
- expected %|#<an object having attributes (baz: "qux")>|
348
- end
349
- end,
350
- diff:
351
- proc do
352
- plain_line " ["
353
- plain_line " {"
354
- plain_line %| foo: "bar"|
355
- plain_line " },"
356
- plain_line " #<Double (anonymous) {"
357
- plain_line %| baz: "qux"|
358
- plain_line " }>,"
359
- actual_line "+ {"
360
- actual_line %|+ blargh: "riddle"|
361
- actual_line "+ },"
362
- expected_line "- #<a collection containing exactly ("
363
- expected_line %|- "zing"|
364
- # expected_line %|- )>| # TODO
365
- expected_line "- )>,"
366
- plain_line " ]"
367
- end
368
- )
369
-
370
- expect(program).to produce_output_when_run(expected_output).in_color(
371
- color_enabled
372
- )
373
- end
374
- end
375
- end
376
- end
377
- end