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,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