super_diff 0.12.1 → 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 (271) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +7 -19
  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 +42 -0
  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 +3 -1
  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 +18 -8
  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 +20 -0
  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 +15 -9
  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 +12 -7
  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 +23 -43
  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 +14 -12
  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 -42
  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 +3 -1
  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 -27
  184. data/super_diff.gemspec +20 -18
  185. metadata +15 -182
  186. data/spec/examples.txt +0 -704
  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/internal/log/test.log +0 -0
  210. data/spec/spec_helper.rb +0 -90
  211. data/spec/support/colorizer.rb +0 -9
  212. data/spec/support/command_runner.rb +0 -253
  213. data/spec/support/helpers.rb +0 -21
  214. data/spec/support/integration/helpers.rb +0 -124
  215. data/spec/support/integration/matchers/produce_output_when_run_matcher.rb +0 -104
  216. data/spec/support/integration/matchers.rb +0 -177
  217. data/spec/support/integration/test_programs/base.rb +0 -143
  218. data/spec/support/integration/test_programs/plain.rb +0 -19
  219. data/spec/support/integration/test_programs/rspec_active_record.rb +0 -20
  220. data/spec/support/integration/test_programs/rspec_active_support.rb +0 -20
  221. data/spec/support/integration/test_programs/rspec_rails.rb +0 -20
  222. data/spec/support/integration/test_programs/rspec_rails_engine.rb +0 -20
  223. data/spec/support/models/a.rb +0 -11
  224. data/spec/support/models/active_record/person.rb +0 -28
  225. data/spec/support/models/active_record/query.rb +0 -15
  226. data/spec/support/models/active_record/shipping_address.rb +0 -24
  227. data/spec/support/models/customer.rb +0 -22
  228. data/spec/support/models/empty_class.rb +0 -6
  229. data/spec/support/models/item.rb +0 -10
  230. data/spec/support/models/order.rb +0 -9
  231. data/spec/support/models/person.rb +0 -20
  232. data/spec/support/models/player.rb +0 -30
  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/operation_tree_flatteners/array_spec.rb +0 -637
  245. data/spec/unit/basic/operation_tree_flatteners/custom_object_spec.rb +0 -685
  246. data/spec/unit/basic/operation_tree_flatteners/default_object_spec.rb +0 -685
  247. data/spec/unit/basic/operation_tree_flatteners/hash_spec.rb +0 -671
  248. data/spec/unit/basic/operation_tree_flatteners/multiline_string_spec.rb +0 -131
  249. data/spec/unit/core/helpers_spec.rb +0 -68
  250. data/spec/unit/core/tiered_lines_elider_spec.rb +0 -6328
  251. data/spec/unit/core/tiered_lines_formatter_spec.rb +0 -131
  252. data/spec/unit/deprecations_spec.rb +0 -176
  253. data/spec/unit/equality_matchers/main_spec.rb +0 -1842
  254. data/spec/unit/rspec/matchers/be_compared_to_spec.rb +0 -23
  255. data/spec/unit/rspec/matchers/be_falsey_spec.rb +0 -9
  256. data/spec/unit/rspec/matchers/be_nil_spec.rb +0 -9
  257. data/spec/unit/rspec/matchers/be_predicate_spec.rb +0 -31
  258. data/spec/unit/rspec/matchers/be_spec.rb +0 -17
  259. data/spec/unit/rspec/matchers/be_truthy_spec.rb +0 -9
  260. data/spec/unit/rspec/matchers/contain_exactly_spec.rb +0 -11
  261. data/spec/unit/rspec/matchers/eq_spec.rb +0 -9
  262. data/spec/unit/rspec/matchers/have_attributes_spec.rb +0 -11
  263. data/spec/unit/rspec/matchers/have_predicate_spec.rb +0 -21
  264. data/spec/unit/rspec/matchers/include_spec.rb +0 -21
  265. data/spec/unit/rspec/matchers/match_array_spec.rb +0 -11
  266. data/spec/unit/rspec/matchers/match_spec.rb +0 -9
  267. data/spec/unit/rspec/matchers/raise_error_spec.rb +0 -77
  268. data/spec/unit/rspec/matchers/respond_to_spec.rb +0 -85
  269. data/spec/unit/rspec/object_inspection/rspec_matcher_spec.rb +0 -91
  270. data/spec/unit/rspec/object_inspection_spec.rb +0 -471
  271. data/spec/unit/super_diff_spec.rb +0 -2115
@@ -1,424 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe "Integration with RSpec's #match_array 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 match_array(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 match_array(expected)",
19
- expectation:
20
- proc do
21
- line do
22
- plain "Expected "
23
- actual %|["Marty", "Jennifer", "Doc"]|
24
- plain " to match array with "
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 match_array(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 match_array(values)",
61
- expectation:
62
- proc do
63
- line do
64
- plain "Expected "
65
- actual %|["Einie", "Marty"]|
66
- plain " not to match array with "
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 match_array(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 match_array(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 match array with "
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 match_array(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 match_array(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 match array with "
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 match_array(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 match_array(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 match array with "
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 match_array(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 match_array(values)",
281
- newline_before_expectation: true,
282
- expectation:
283
- proc do
284
- line do
285
- plain " Expected "
286
- # rubocop:disable Metrics/LineLength
287
- actual %|[/ Brown$/, "Marty McFly", "Biff Tannen", /Georg McFly/, /Lorrain McFly/]|
288
- # rubocop:enable Metrics/LineLength
289
- end
290
-
291
- line do
292
- plain "not to match array with "
293
- expected "/ Brown$/"
294
- plain ", "
295
- expected %|"Marty McFly"|
296
- plain ", "
297
- expected %|"Biff Tannen"|
298
- plain ", "
299
- expected "/Georg McFly/"
300
- plain " and "
301
- expected "/Lorrain McFly/"
302
- end
303
- end
304
- )
305
-
306
- expect(program).to produce_output_when_run(expected_output).in_color(
307
- color_enabled
308
- )
309
- end
310
- end
311
- end
312
-
313
- context "and some of them are RSpec matchers" do
314
- it "produces the correct failure message" do
315
- as_both_colored_and_uncolored do |color_enabled|
316
- snippet = <<~TEST.strip
317
- actual = [
318
- { foo: "bar" },
319
- double(baz: "qux"),
320
- { blargh: "riddle" }
321
- ]
322
- expected = [
323
- a_hash_including(foo: "bar"),
324
- a_collection_containing_exactly("zing"),
325
- an_object_having_attributes(baz: "qux"),
326
- ]
327
- expect(actual).to match_array(expected)
328
- TEST
329
- program =
330
- make_plain_test_program(snippet, color_enabled: color_enabled)
331
-
332
- expected_output =
333
- build_expected_output(
334
- color_enabled: color_enabled,
335
- snippet: "expect(actual).to match_array(expected)",
336
- expectation:
337
- proc do
338
- line do
339
- plain " Expected "
340
- # rubocop:disable Metrics/LineLength
341
- actual %|[{ foo: "bar" }, #<Double (anonymous) baz: "qux">, { blargh: "riddle" }]|
342
- # rubocop:enable Metrics/LineLength
343
- end
344
-
345
- line do
346
- plain "to match array with "
347
- expected %|#<a hash including (foo: "bar")>|
348
- plain ", "
349
- expected %|#<a collection containing exactly ("zing")>|
350
- plain " and "
351
- expected %|#<an object having attributes (baz: "qux")>|
352
- end
353
- end,
354
- diff:
355
- proc do
356
- plain_line " ["
357
- plain_line " {"
358
- plain_line %| foo: "bar"|
359
- plain_line " },"
360
- plain_line " #<Double (anonymous) {"
361
- plain_line %| baz: "qux"|
362
- plain_line " }>,"
363
- actual_line "+ {"
364
- actual_line %|+ blargh: "riddle"|
365
- actual_line "+ },"
366
- expected_line "- #<a collection containing exactly ("
367
- expected_line %|- "zing"|
368
- # expected_line %|- )>| # TODO
369
- expected_line "- )>,"
370
- plain_line " ]"
371
- end
372
- )
373
-
374
- expect(program).to produce_output_when_run(expected_output).in_color(
375
- color_enabled
376
- )
377
- end
378
- end
379
- end
380
- end
381
-
382
- context "when the input value is not an array, and especially not a value that could be turned into one" do
383
- it "produces the correct failure message, as though an array had been given" do
384
- as_both_colored_and_uncolored do |color_enabled|
385
- snippet = <<~TEST.strip
386
- actual = [:marty, :jennifer, :doc]
387
- expected = :einie
388
- expect(actual).to match_array(expected)
389
- TEST
390
- program = make_plain_test_program(snippet, color_enabled: color_enabled)
391
-
392
- expected_output =
393
- build_expected_output(
394
- color_enabled: color_enabled,
395
- snippet: "expect(actual).to match_array(expected)",
396
- expectation:
397
- proc do
398
- line do
399
- plain "Expected "
400
- actual "[:marty, :jennifer, :doc]"
401
- plain " to match array with "
402
- expected ":einie"
403
- plain "."
404
- end
405
- end,
406
- diff:
407
- proc do
408
- plain_line " ["
409
- actual_line "+ :marty,"
410
- actual_line "+ :jennifer,"
411
- actual_line "+ :doc,"
412
- # expected_line %|- :einie| # TODO
413
- expected_line "- :einie,"
414
- plain_line " ]"
415
- end
416
- )
417
-
418
- expect(program).to produce_output_when_run(expected_output).in_color(
419
- color_enabled
420
- )
421
- end
422
- end
423
- end
424
- end