super_diff 0.12.1 → 0.15.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 (272) 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/monkey_patches.rb +129 -56
  175. data/lib/super_diff/rspec/object_inspection.rb +7 -5
  176. data/lib/super_diff/rspec/operation_tree_builders/collection_containing_exactly.rb +4 -4
  177. data/lib/super_diff/rspec/operation_tree_builders/collection_including.rb +2 -0
  178. data/lib/super_diff/rspec/operation_tree_builders/hash_including.rb +2 -0
  179. data/lib/super_diff/rspec/operation_tree_builders/object_having_attributes.rb +2 -0
  180. data/lib/super_diff/rspec/operation_tree_builders.rb +6 -4
  181. data/lib/super_diff/rspec-rails.rb +4 -2
  182. data/lib/super_diff/rspec.rb +27 -14
  183. data/lib/super_diff/version.rb +3 -1
  184. data/lib/super_diff.rb +24 -27
  185. data/super_diff.gemspec +20 -18
  186. metadata +15 -182
  187. data/spec/examples.txt +0 -704
  188. data/spec/integration/rails/active_record_spec.rb +0 -21
  189. data/spec/integration/rails/active_support_spec.rb +0 -19
  190. data/spec/integration/rails/engines_spec.rb +0 -25
  191. data/spec/integration/rails/hash_with_indifferent_access_spec.rb +0 -21
  192. data/spec/integration/rspec/be_falsey_matcher_spec.rb +0 -58
  193. data/spec/integration/rspec/be_matcher_spec.rb +0 -605
  194. data/spec/integration/rspec/be_nil_matcher_spec.rb +0 -57
  195. data/spec/integration/rspec/be_predicate_matcher_spec.rb +0 -615
  196. data/spec/integration/rspec/be_truthy_matcher_spec.rb +0 -62
  197. data/spec/integration/rspec/contain_exactly_matcher_spec.rb +0 -377
  198. data/spec/integration/rspec/eq_matcher_spec.rb +0 -1066
  199. data/spec/integration/rspec/generic_describable_matchers_spec.rb +0 -177
  200. data/spec/integration/rspec/have_attributes_matcher_spec.rb +0 -443
  201. data/spec/integration/rspec/have_predicate_matcher_spec.rb +0 -478
  202. data/spec/integration/rspec/include_matcher_spec.rb +0 -452
  203. data/spec/integration/rspec/magic_metadata_spec.rb +0 -51
  204. data/spec/integration/rspec/match_array_matcher_spec.rb +0 -424
  205. data/spec/integration/rspec/match_matcher_spec.rb +0 -1359
  206. data/spec/integration/rspec/raise_error_matcher_spec.rb +0 -1488
  207. data/spec/integration/rspec/respond_to_matcher_spec.rb +0 -999
  208. data/spec/integration/rspec/third_party_matcher_spec.rb +0 -245
  209. data/spec/integration/rspec/unhandled_errors_spec.rb +0 -150
  210. data/spec/internal/log/test.log +0 -0
  211. data/spec/spec_helper.rb +0 -90
  212. data/spec/support/colorizer.rb +0 -9
  213. data/spec/support/command_runner.rb +0 -253
  214. data/spec/support/helpers.rb +0 -21
  215. data/spec/support/integration/helpers.rb +0 -124
  216. data/spec/support/integration/matchers/produce_output_when_run_matcher.rb +0 -104
  217. data/spec/support/integration/matchers.rb +0 -177
  218. data/spec/support/integration/test_programs/base.rb +0 -143
  219. data/spec/support/integration/test_programs/plain.rb +0 -19
  220. data/spec/support/integration/test_programs/rspec_active_record.rb +0 -20
  221. data/spec/support/integration/test_programs/rspec_active_support.rb +0 -20
  222. data/spec/support/integration/test_programs/rspec_rails.rb +0 -20
  223. data/spec/support/integration/test_programs/rspec_rails_engine.rb +0 -20
  224. data/spec/support/models/a.rb +0 -11
  225. data/spec/support/models/active_record/person.rb +0 -28
  226. data/spec/support/models/active_record/query.rb +0 -15
  227. data/spec/support/models/active_record/shipping_address.rb +0 -24
  228. data/spec/support/models/customer.rb +0 -22
  229. data/spec/support/models/empty_class.rb +0 -6
  230. data/spec/support/models/item.rb +0 -10
  231. data/spec/support/models/order.rb +0 -9
  232. data/spec/support/models/person.rb +0 -20
  233. data/spec/support/models/player.rb +0 -30
  234. data/spec/support/models/shipping_address.rb +0 -25
  235. data/spec/support/shared_examples/active_record.rb +0 -428
  236. data/spec/support/shared_examples/active_support.rb +0 -188
  237. data/spec/support/shared_examples/elided_diffs.rb +0 -938
  238. data/spec/support/shared_examples/hash_with_indifferent_access.rb +0 -749
  239. data/spec/support/shared_examples/key.rb +0 -123
  240. data/spec/support/unit/helpers.rb +0 -24
  241. data/spec/support/unit/matchers/be_deprecated_in_favor_of.rb +0 -39
  242. data/spec/support/unit/matchers/match_output.rb +0 -40
  243. data/spec/unit/active_record/object_inspection_spec.rb +0 -289
  244. data/spec/unit/active_support/object_inspection_spec.rb +0 -170
  245. data/spec/unit/basic/operation_tree_flatteners/array_spec.rb +0 -637
  246. data/spec/unit/basic/operation_tree_flatteners/custom_object_spec.rb +0 -685
  247. data/spec/unit/basic/operation_tree_flatteners/default_object_spec.rb +0 -685
  248. data/spec/unit/basic/operation_tree_flatteners/hash_spec.rb +0 -671
  249. data/spec/unit/basic/operation_tree_flatteners/multiline_string_spec.rb +0 -131
  250. data/spec/unit/core/helpers_spec.rb +0 -68
  251. data/spec/unit/core/tiered_lines_elider_spec.rb +0 -6328
  252. data/spec/unit/core/tiered_lines_formatter_spec.rb +0 -131
  253. data/spec/unit/deprecations_spec.rb +0 -176
  254. data/spec/unit/equality_matchers/main_spec.rb +0 -1842
  255. data/spec/unit/rspec/matchers/be_compared_to_spec.rb +0 -23
  256. data/spec/unit/rspec/matchers/be_falsey_spec.rb +0 -9
  257. data/spec/unit/rspec/matchers/be_nil_spec.rb +0 -9
  258. data/spec/unit/rspec/matchers/be_predicate_spec.rb +0 -31
  259. data/spec/unit/rspec/matchers/be_spec.rb +0 -17
  260. data/spec/unit/rspec/matchers/be_truthy_spec.rb +0 -9
  261. data/spec/unit/rspec/matchers/contain_exactly_spec.rb +0 -11
  262. data/spec/unit/rspec/matchers/eq_spec.rb +0 -9
  263. data/spec/unit/rspec/matchers/have_attributes_spec.rb +0 -11
  264. data/spec/unit/rspec/matchers/have_predicate_spec.rb +0 -21
  265. data/spec/unit/rspec/matchers/include_spec.rb +0 -21
  266. data/spec/unit/rspec/matchers/match_array_spec.rb +0 -11
  267. data/spec/unit/rspec/matchers/match_spec.rb +0 -9
  268. data/spec/unit/rspec/matchers/raise_error_spec.rb +0 -77
  269. data/spec/unit/rspec/matchers/respond_to_spec.rb +0 -85
  270. data/spec/unit/rspec/object_inspection/rspec_matcher_spec.rb +0 -91
  271. data/spec/unit/rspec/object_inspection_spec.rb +0 -471
  272. data/spec/unit/super_diff_spec.rb +0 -2115
@@ -1,1066 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe "Integration with RSpec's #eq matcher", type: :integration do
4
- context "when comparing two different integers" do
5
- it "produces the correct failure message when used in the positive" do
6
- as_both_colored_and_uncolored do |color_enabled|
7
- snippet = "expect(1).to eq(42)"
8
- program = make_plain_test_program(snippet, color_enabled: color_enabled)
9
-
10
- expected_output =
11
- build_expected_output(
12
- color_enabled: color_enabled,
13
- snippet: snippet,
14
- expectation:
15
- proc do
16
- line do
17
- plain "Expected "
18
- actual "1"
19
- plain " to eq "
20
- expected "42"
21
- plain "."
22
- end
23
- end
24
- )
25
-
26
- expect(program).to produce_output_when_run(expected_output).in_color(
27
- color_enabled
28
- )
29
- end
30
- end
31
-
32
- it "produces the correct failure message when used in the negative" do
33
- as_both_colored_and_uncolored do |color_enabled|
34
- snippet = "expect(42).not_to eq(42)"
35
- program = make_plain_test_program(snippet, color_enabled: color_enabled)
36
-
37
- expected_output =
38
- build_expected_output(
39
- color_enabled: color_enabled,
40
- snippet: snippet,
41
- expectation:
42
- proc do
43
- line do
44
- plain "Expected "
45
- actual "42"
46
- plain " not to eq "
47
- expected "42"
48
- plain "."
49
- end
50
- end
51
- )
52
-
53
- expect(program).to produce_output_when_run(expected_output).in_color(
54
- color_enabled
55
- )
56
- end
57
- end
58
- end
59
-
60
- context "when comparing two different symbols" do
61
- it "produces the correct failure message when used in the positive" do
62
- as_both_colored_and_uncolored do |color_enabled|
63
- snippet = "expect(:bar).to eq(:foo)"
64
- program = make_plain_test_program(snippet, color_enabled: color_enabled)
65
-
66
- expected_output =
67
- build_expected_output(
68
- color_enabled: color_enabled,
69
- snippet: snippet,
70
- expectation:
71
- proc do
72
- line do
73
- plain "Expected "
74
- actual ":bar"
75
- plain " to eq "
76
- expected ":foo"
77
- plain "."
78
- end
79
- end
80
- )
81
-
82
- expect(program).to produce_output_when_run(expected_output).in_color(
83
- color_enabled
84
- )
85
- end
86
- end
87
-
88
- it "produces the correct failure message when used in the negative" do
89
- as_both_colored_and_uncolored do |color_enabled|
90
- snippet = "expect(:foo).not_to eq(:foo)"
91
- program = make_plain_test_program(snippet, color_enabled: color_enabled)
92
-
93
- expected_output =
94
- build_expected_output(
95
- color_enabled: color_enabled,
96
- snippet: snippet,
97
- expectation:
98
- proc do
99
- line do
100
- plain "Expected "
101
- actual ":foo"
102
- plain " not to eq "
103
- expected ":foo"
104
- plain "."
105
- end
106
- end
107
- )
108
-
109
- expect(program).to produce_output_when_run(expected_output).in_color(
110
- color_enabled
111
- )
112
- end
113
- end
114
- end
115
-
116
- context "when comparing two single-line strings" do
117
- it "produces the correct failure message when used in the positive" do
118
- as_both_colored_and_uncolored do |color_enabled|
119
- snippet = %|expect("Jennifer").to eq("Marty")|
120
- program = make_plain_test_program(snippet, color_enabled: color_enabled)
121
-
122
- expected_output =
123
- build_expected_output(
124
- color_enabled: color_enabled,
125
- snippet: %|expect("Jennifer").to eq("Marty")|,
126
- expectation:
127
- proc do
128
- line do
129
- plain "Expected "
130
- actual %|"Jennifer"|
131
- plain " to eq "
132
- expected %|"Marty"|
133
- plain "."
134
- end
135
- end
136
- )
137
-
138
- expect(program).to produce_output_when_run(expected_output).in_color(
139
- color_enabled
140
- )
141
- end
142
- end
143
-
144
- it "produces the correct failure message when used in the negative" do
145
- as_both_colored_and_uncolored do |color_enabled|
146
- snippet = %|expect("Jennifer").not_to eq("Jennifer")|
147
- program = make_plain_test_program(snippet, color_enabled: color_enabled)
148
-
149
- expected_output =
150
- build_expected_output(
151
- color_enabled: color_enabled,
152
- snippet: %|expect("Jennifer").not_to eq("Jennifer")|,
153
- expectation:
154
- proc do
155
- line do
156
- plain "Expected "
157
- actual %|"Jennifer"|
158
- plain " not to eq "
159
- expected %|"Jennifer"|
160
- plain "."
161
- end
162
- end
163
- )
164
-
165
- expect(program).to produce_output_when_run(expected_output).in_color(
166
- color_enabled
167
- )
168
- end
169
- end
170
- end
171
-
172
- context "when comparing two different Time instances" do
173
- it "produces the correct failure message when used in the positive" do
174
- as_both_colored_and_uncolored do |color_enabled|
175
- snippet = <<~RUBY
176
- actual = Time.utc(2011, 12, 13, 14, 15, 16)
177
- expected = Time.utc(2011, 12, 13, 14, 15, 16, 500_000)
178
- expect(actual).to eq(expected)
179
- RUBY
180
- program = make_plain_test_program(snippet, color_enabled: color_enabled)
181
-
182
- expected_output =
183
- build_expected_output(
184
- color_enabled: color_enabled,
185
- snippet: "expect(actual).to eq(expected)",
186
- expectation:
187
- proc do
188
- line do
189
- plain "Expected "
190
- actual "#<Time 2011-12-13 14:15:16 +00:00 (UTC)>"
191
- end
192
-
193
- line do
194
- plain " to eq "
195
- expected "#<Time 2011-12-13 14:15:16+(1/2) +00:00 (UTC)>"
196
- end
197
- end,
198
- diff:
199
- proc do
200
- plain_line " #<Time {"
201
- plain_line " year: 2011,"
202
- plain_line " month: 12,"
203
- plain_line " day: 13,"
204
- plain_line " hour: 14,"
205
- plain_line " min: 15,"
206
- plain_line " sec: 16,"
207
- expected_line "- subsec: (1/2),"
208
- actual_line "+ subsec: 0,"
209
- plain_line " zone: \"UTC\","
210
- plain_line " utc_offset: 0"
211
- plain_line " }>"
212
- end
213
- )
214
-
215
- expect(program).to produce_output_when_run(expected_output).in_color(
216
- color_enabled
217
- )
218
- end
219
- end
220
-
221
- it "produces the correct failure message when used in the negative" do
222
- as_both_colored_and_uncolored do |color_enabled|
223
- snippet = <<~RUBY
224
- time = Time.utc(2011, 12, 13, 14, 15, 16)
225
- expect(time).not_to eq(time)
226
- RUBY
227
- program = make_plain_test_program(snippet, color_enabled: color_enabled)
228
-
229
- expected_output =
230
- build_expected_output(
231
- color_enabled: color_enabled,
232
- snippet: "expect(time).not_to eq(time)",
233
- newline_before_expectation: true,
234
- expectation:
235
- proc do
236
- line do
237
- plain " Expected "
238
- actual "#<Time 2011-12-13 14:15:16 +00:00 (UTC)>"
239
- end
240
-
241
- line do
242
- plain "not to eq "
243
- expected "#<Time 2011-12-13 14:15:16 +00:00 (UTC)>"
244
- end
245
- end
246
- )
247
-
248
- expect(program).to produce_output_when_run(expected_output).in_color(
249
- color_enabled
250
- )
251
- end
252
- end
253
- end
254
-
255
- context "when comparing two different Date instances" do
256
- it "produces the correct failure message when used in the positive" do
257
- as_both_colored_and_uncolored do |color_enabled|
258
- snippet = <<~RUBY
259
- actual = Date.new(2023, 10, 14)
260
- expected = Date.new(2023, 10, 31)
261
- expect(actual).to eq(expected)
262
- RUBY
263
- program = make_plain_test_program(snippet, color_enabled: color_enabled)
264
-
265
- expected_output =
266
- build_expected_output(
267
- color_enabled: color_enabled,
268
- snippet: "expect(actual).to eq(expected)",
269
- expectation:
270
- proc do
271
- line do
272
- plain "Expected "
273
- actual "#<Date 2023-10-14>"
274
- plain " to eq "
275
- expected "#<Date 2023-10-31>"
276
- plain "."
277
- end
278
- end,
279
- diff:
280
- proc do
281
- plain_line " #<Date {"
282
- plain_line " year: 2023,"
283
- plain_line " month: 10,"
284
- expected_line "- day: 31"
285
- actual_line "+ day: 14"
286
- plain_line " }>"
287
- end
288
- )
289
-
290
- expect(program).to produce_output_when_run(expected_output).in_color(
291
- color_enabled
292
- )
293
- end
294
- end
295
-
296
- it "produces the correct failure message when used in the negative" do
297
- as_both_colored_and_uncolored do |color_enabled|
298
- snippet = <<~RUBY
299
- date = Date.new(2023, 10, 14)
300
- expect(date).not_to eq(date)
301
- RUBY
302
- program = make_plain_test_program(snippet, color_enabled: color_enabled)
303
-
304
- expected_output =
305
- build_expected_output(
306
- color_enabled: color_enabled,
307
- snippet: "expect(date).not_to eq(date)",
308
- expectation:
309
- proc do
310
- line do
311
- plain "Expected "
312
- actual "#<Date 2023-10-14>"
313
- plain " not to eq "
314
- expected "#<Date 2023-10-14>"
315
- plain "."
316
- end
317
- end
318
- )
319
-
320
- expect(program).to produce_output_when_run(expected_output).in_color(
321
- color_enabled
322
- )
323
- end
324
- end
325
- end
326
-
327
- context "when comparing a single-line string with a multi-line string" do
328
- it "produces the correct failure message" do
329
- as_both_colored_and_uncolored do |color_enabled|
330
- snippet = <<~TEST.strip
331
- actual = "This is a line\\nAnd that's another line\\n"
332
- expected = "Something entirely different"
333
- expect(actual).to eq(expected)
334
- TEST
335
- program = make_plain_test_program(snippet, color_enabled: color_enabled)
336
-
337
- expected_output =
338
- build_expected_output(
339
- color_enabled: color_enabled,
340
- snippet: "expect(actual).to eq(expected)",
341
- expectation:
342
- proc do
343
- line do
344
- plain "Expected "
345
- actual %|"This is a line\\nAnd that's another line\\n"|
346
- plain " to eq "
347
- expected %|"Something entirely different"|
348
- plain "."
349
- end
350
- end,
351
- diff:
352
- proc do
353
- expected_line "- Something entirely different"
354
- actual_line %|+ This is a line\\n|
355
- actual_line %|+ And that's another line\\n|
356
- end
357
- )
358
-
359
- expect(program).to produce_output_when_run(expected_output).in_color(
360
- color_enabled
361
- )
362
- end
363
- end
364
- end
365
-
366
- context "when comparing a multi-line string with a single-line string" do
367
- it "produces the correct failure message" do
368
- as_both_colored_and_uncolored do |color_enabled|
369
- snippet = <<~TEST.strip
370
- actual = "Something entirely different"
371
- expected = "This is a line\\nAnd that's another line\\n"
372
- expect(actual).to eq(expected)
373
- TEST
374
- program = make_plain_test_program(snippet, color_enabled: color_enabled)
375
-
376
- expected_output =
377
- build_expected_output(
378
- color_enabled: color_enabled,
379
- snippet: "expect(actual).to eq(expected)",
380
- expectation:
381
- proc do
382
- line do
383
- plain "Expected "
384
- actual %|"Something entirely different"|
385
- plain " to eq "
386
- expected %|"This is a line\\nAnd that's another line\\n"|
387
- plain "."
388
- end
389
- end,
390
- diff:
391
- proc do
392
- expected_line %|- This is a line\\n|
393
- expected_line %|- And that's another line\\n|
394
- actual_line "+ Something entirely different"
395
- end
396
- )
397
-
398
- expect(program).to produce_output_when_run(expected_output).in_color(
399
- color_enabled
400
- )
401
- end
402
- end
403
- end
404
-
405
- context "when comparing two multi-line strings" do
406
- it "produces the correct failure message when used in the positive" do
407
- as_both_colored_and_uncolored do |color_enabled|
408
- snippet = <<~TEST.strip
409
- actual = "This is a line\\nSomething completely different\\nAnd there's a line too\\n"
410
- expected = "This is a line\\nAnd that's a line\\nAnd there's a line too\\n"
411
- expect(actual).to eq(expected)
412
- TEST
413
- program = make_plain_test_program(snippet, color_enabled: color_enabled)
414
-
415
- expected_output =
416
- build_expected_output(
417
- color_enabled: color_enabled,
418
- snippet: "expect(actual).to eq(expected)",
419
- expectation:
420
- proc do
421
- line do
422
- plain "Expected "
423
- actual %|"This is a line\\nSomething completely different\\nAnd there's a line too\\n"|
424
- end
425
-
426
- line do
427
- plain " to eq "
428
- expected %|"This is a line\\nAnd that's a line\\nAnd there's a line too\\n"|
429
- end
430
- end,
431
- diff:
432
- proc do
433
- plain_line %| This is a line\\n|
434
- expected_line %|- And that's a line\\n|
435
- actual_line %|+ Something completely different\\n|
436
- plain_line %| And there's a line too\\n|
437
- end
438
- )
439
-
440
- expect(program).to produce_output_when_run(expected_output).in_color(
441
- color_enabled
442
- )
443
- end
444
- end
445
-
446
- it "produces the correct failure message when used in the negative" do
447
- as_both_colored_and_uncolored do |color_enabled|
448
- snippet = <<~TEST.strip
449
- string = "This is a line\\nAnd that's a line\\nAnd there's a line too\\n"
450
- expect(string).not_to eq(string)
451
- TEST
452
- program = make_plain_test_program(snippet, color_enabled: color_enabled)
453
-
454
- expected_output =
455
- build_expected_output(
456
- color_enabled: color_enabled,
457
- snippet: "expect(string).not_to eq(string)",
458
- newline_before_expectation: true,
459
- expectation:
460
- proc do
461
- line do
462
- plain " Expected "
463
- actual %|"This is a line\\nAnd that's a line\\nAnd there's a line too\\n"|
464
- end
465
-
466
- line do
467
- plain "not to eq "
468
- expected %|"This is a line\\nAnd that's a line\\nAnd there's a line too\\n"|
469
- end
470
- end
471
- )
472
-
473
- expect(program).to produce_output_when_run(expected_output).in_color(
474
- color_enabled
475
- )
476
- end
477
- end
478
- end
479
-
480
- context "when comparing two arrays with other data structures inside" do
481
- it "produces the correct failure message when used in the positive" do
482
- as_both_colored_and_uncolored do |color_enabled|
483
- snippet = <<~TEST
484
- actual = [
485
- [
486
- :h2,
487
- [:span, [:text, "Goodbye world"]],
488
- {
489
- id: "hero",
490
- class: "header",
491
- data: {
492
- "sticky" => false,
493
- role: "deprecated",
494
- person: SuperDiff::Test::Person.new(name: "Doc", age: 60)
495
- }
496
- }
497
- ],
498
- :br
499
- ]
500
- expected = [
501
- [
502
- :h1,
503
- [:span, [:text, "Hello world"]],
504
- {
505
- class: "header",
506
- data: {
507
- "sticky" => true,
508
- person: SuperDiff::Test::Person.new(name: "Marty", age: 60)
509
- }
510
- }
511
- ]
512
- ]
513
- expect(actual).to eq(expected)
514
- TEST
515
- program = make_plain_test_program(snippet, color_enabled: color_enabled)
516
-
517
- expected_output =
518
- build_expected_output(
519
- color_enabled: color_enabled,
520
- snippet: "expect(actual).to eq(expected)",
521
- expectation:
522
- proc do
523
- line do
524
- plain "Expected "
525
- actual %|[[:h2, [:span, [:text, "Goodbye world"]], { id: "hero", class: "header", data: { "sticky" => false, :role => "deprecated", :person => #<SuperDiff::Test::Person name: "Doc", age: 60> } }], :br]|
526
- end
527
-
528
- line do
529
- plain " to eq "
530
- expected %|[[:h1, [:span, [:text, "Hello world"]], { class: "header", data: { "sticky" => true, :person => #<SuperDiff::Test::Person name: "Marty", age: 60> } }]]|
531
- end
532
- end,
533
- diff:
534
- proc do
535
- plain_line " ["
536
- plain_line " ["
537
- expected_line "- :h1,"
538
- actual_line "+ :h2,"
539
- plain_line " ["
540
- plain_line " :span,"
541
- plain_line " ["
542
- plain_line " :text,"
543
- expected_line %|- "Hello world"|
544
- actual_line %|+ "Goodbye world"|
545
- plain_line " ]"
546
- plain_line " ],"
547
- plain_line " {"
548
- actual_line %|+ id: "hero",|
549
- plain_line %| class: "header",|
550
- plain_line " data: {"
551
- expected_line %|- "sticky" => true,|
552
- actual_line %|+ "sticky" => false,|
553
- actual_line %|+ :role => "deprecated",|
554
- plain_line " :person => #<SuperDiff::Test::Person {"
555
- expected_line %|- name: "Marty",|
556
- actual_line %|+ name: "Doc",|
557
- plain_line " age: 60"
558
- plain_line " }>"
559
- plain_line " }"
560
- plain_line " }"
561
- plain_line " ],"
562
- actual_line "+ :br"
563
- plain_line " ]"
564
- end
565
- )
566
-
567
- expect(program).to produce_output_when_run(expected_output).in_color(
568
- color_enabled
569
- )
570
- end
571
- end
572
-
573
- it "produces the correct failure message when used in the negative" do
574
- as_both_colored_and_uncolored do |color_enabled|
575
- snippet = <<~TEST
576
- value = [
577
- [
578
- :h1,
579
- [:span, [:text, "Hello world"]],
580
- {
581
- class: "header",
582
- data: {
583
- "sticky" => true,
584
- person: SuperDiff::Test::Person.new(name: "Marty", age: 60)
585
- }
586
- }
587
- ]
588
- ]
589
- expect(value).not_to eq(value)
590
- TEST
591
- program = make_plain_test_program(snippet, color_enabled: color_enabled)
592
-
593
- expected_output =
594
- build_expected_output(
595
- color_enabled: color_enabled,
596
- snippet: "expect(value).not_to eq(value)",
597
- newline_before_expectation: true,
598
- expectation:
599
- proc do
600
- line do
601
- plain " Expected "
602
- actual %|[[:h1, [:span, [:text, "Hello world"]], { class: "header", data: { "sticky" => true, :person => #<SuperDiff::Test::Person name: "Marty", age: 60> } }]]|
603
- end
604
-
605
- line do
606
- plain "not to eq "
607
- expected %|[[:h1, [:span, [:text, "Hello world"]], { class: "header", data: { "sticky" => true, :person => #<SuperDiff::Test::Person name: "Marty", age: 60> } }]]|
608
- end
609
- end
610
- )
611
-
612
- expect(program).to produce_output_when_run(expected_output).in_color(
613
- color_enabled
614
- )
615
- end
616
- end
617
- end
618
-
619
- context "when comparing two hashes with other data structures inside" do
620
- it "produces the correct failure message when used in the positive" do
621
- as_both_colored_and_uncolored do |color_enabled|
622
- snippet = <<~TEST.strip
623
- actual = {
624
- customer: {
625
- person: SuperDiff::Test::Person.new(name: "Marty McFly, Jr.", age: 17),
626
- shipping_address: {
627
- line_1: "456 Ponderosa Ct.",
628
- city: "Hill Valley",
629
- state: "CA",
630
- zip: "90382"
631
- }
632
- },
633
- items: [
634
- {
635
- name: "Fender Stratocaster",
636
- cost: 100_000,
637
- options: ["red", "blue", "green"]
638
- },
639
- { name: "Mattel Hoverboard" }
640
- ]
641
- }
642
- expected = {
643
- customer: {
644
- person: SuperDiff::Test::Person.new(name: "Marty McFly", age: 17),
645
- shipping_address: {
646
- line_1: "123 Main St.",
647
- city: "Hill Valley",
648
- state: "CA",
649
- zip: "90382"
650
- }
651
- },
652
- items: [
653
- {
654
- name: "Fender Stratocaster",
655
- cost: 100_000,
656
- options: ["red", "blue", "green"]
657
- },
658
- { name: "Chevy 4x4" }
659
- ]
660
- }
661
- expect(actual).to eq(expected)
662
- TEST
663
- program = make_plain_test_program(snippet, color_enabled: color_enabled)
664
-
665
- expected_output =
666
- build_expected_output(
667
- color_enabled: color_enabled,
668
- snippet: "expect(actual).to eq(expected)",
669
- expectation:
670
- proc do
671
- line do
672
- plain "Expected "
673
- actual %|{ customer: { person: #<SuperDiff::Test::Person name: "Marty McFly, Jr.", age: 17>, shipping_address: { line_1: "456 Ponderosa Ct.", city: "Hill Valley", state: "CA", zip: "90382" } }, items: [{ name: "Fender Stratocaster", cost: 100000, options: ["red", "blue", "green"] }, { name: "Mattel Hoverboard" }] }|
674
- end
675
-
676
- line do
677
- plain " to eq "
678
- expected %|{ customer: { person: #<SuperDiff::Test::Person name: "Marty McFly", age: 17>, shipping_address: { line_1: "123 Main St.", city: "Hill Valley", state: "CA", zip: "90382" } }, items: [{ name: "Fender Stratocaster", cost: 100000, options: ["red", "blue", "green"] }, { name: "Chevy 4x4" }] }|
679
- end
680
- end,
681
- diff:
682
- proc do
683
- plain_line " {"
684
- plain_line " customer: {"
685
- plain_line " person: #<SuperDiff::Test::Person {"
686
- expected_line %|- name: "Marty McFly",|
687
- actual_line %|+ name: "Marty McFly, Jr.",|
688
- plain_line " age: 17"
689
- plain_line " }>,"
690
- plain_line " shipping_address: {"
691
- expected_line %|- line_1: "123 Main St.",|
692
- actual_line %|+ line_1: "456 Ponderosa Ct.",|
693
- plain_line %| city: "Hill Valley",|
694
- plain_line %| state: "CA",|
695
- plain_line %| zip: "90382"|
696
- plain_line " }"
697
- plain_line " },"
698
- plain_line " items: ["
699
- plain_line " {"
700
- plain_line %| name: "Fender Stratocaster",|
701
- plain_line " cost: 100000,"
702
- plain_line " options: ["
703
- plain_line %| "red",|
704
- plain_line %| "blue",|
705
- plain_line %| "green"|
706
- plain_line " ]"
707
- plain_line " },"
708
- plain_line " {"
709
- expected_line %|- name: "Chevy 4x4"|
710
- actual_line %|+ name: "Mattel Hoverboard"|
711
- plain_line " }"
712
- plain_line " ]"
713
- plain_line " }"
714
- end
715
- )
716
-
717
- expect(program).to produce_output_when_run(expected_output).in_color(
718
- color_enabled
719
- )
720
- end
721
- end
722
-
723
- it "produces the correct failure message when used in the negative" do
724
- as_both_colored_and_uncolored do |color_enabled|
725
- snippet = <<~TEST.strip
726
- value = {
727
- customer: {
728
- person: SuperDiff::Test::Person.new(name: "Marty McFly", age: 17),
729
- shipping_address: {
730
- line_1: "123 Main St.",
731
- city: "Hill Valley",
732
- state: "CA",
733
- zip: "90382"
734
- }
735
- },
736
- items: [
737
- {
738
- name: "Fender Stratocaster",
739
- cost: 100_000,
740
- options: ["red", "blue", "green"]
741
- },
742
- { name: "Chevy 4x4" }
743
- ]
744
- }
745
- expect(value).not_to eq(value)
746
- TEST
747
- program = make_plain_test_program(snippet, color_enabled: color_enabled)
748
-
749
- expected_output =
750
- build_expected_output(
751
- color_enabled: color_enabled,
752
- snippet: "expect(value).not_to eq(value)",
753
- newline_before_expectation: true,
754
- expectation:
755
- proc do
756
- line do
757
- plain " Expected "
758
- actual %|{ customer: { person: #<SuperDiff::Test::Person name: "Marty McFly", age: 17>, shipping_address: { line_1: "123 Main St.", city: "Hill Valley", state: "CA", zip: "90382" } }, items: [{ name: "Fender Stratocaster", cost: 100000, options: ["red", "blue", "green"] }, { name: "Chevy 4x4" }] }|
759
- end
760
-
761
- line do
762
- plain "not to eq "
763
- expected %|{ customer: { person: #<SuperDiff::Test::Person name: "Marty McFly", age: 17>, shipping_address: { line_1: "123 Main St.", city: "Hill Valley", state: "CA", zip: "90382" } }, items: [{ name: "Fender Stratocaster", cost: 100000, options: ["red", "blue", "green"] }, { name: "Chevy 4x4" }] }|
764
- end
765
- end
766
- )
767
-
768
- expect(program).to produce_output_when_run(expected_output).in_color(
769
- color_enabled
770
- )
771
- end
772
- end
773
- end
774
-
775
- context "when comparing two different kinds of custom objects" do
776
- it "produces the correct failure message when used in the positive" do
777
- as_both_colored_and_uncolored do |color_enabled|
778
- snippet = <<~TEST.strip
779
- actual = SuperDiff::Test::Customer.new(
780
- name: "Doc",
781
- shipping_address: :some_shipping_address,
782
- phone: "1234567890",
783
- )
784
- expected = SuperDiff::Test::Person.new(
785
- name: "Marty",
786
- age: 31,
787
- )
788
- expect(actual).to eq(expected)
789
- TEST
790
- program = make_plain_test_program(snippet, color_enabled: color_enabled)
791
-
792
- expected_output =
793
- build_expected_output(
794
- color_enabled: color_enabled,
795
- snippet: "expect(actual).to eq(expected)",
796
- newline_before_expectation: true,
797
- expectation:
798
- proc do
799
- line do
800
- plain "Expected "
801
- actual %|#<SuperDiff::Test::Customer name: "Doc", shipping_address: :some_shipping_address, phone: "1234567890">|
802
- end
803
-
804
- line do
805
- plain " to eq "
806
- expected %|#<SuperDiff::Test::Person name: "Marty", age: 31>|
807
- end
808
- end
809
- )
810
-
811
- expect(program).to produce_output_when_run(expected_output).in_color(
812
- color_enabled
813
- )
814
- end
815
- end
816
-
817
- it "produces the correct failure message when used in the negative" do
818
- as_both_colored_and_uncolored do |color_enabled|
819
- snippet = <<~TEST.strip
820
- value = SuperDiff::Test::Person.new(
821
- name: "Marty",
822
- age: 31,
823
- )
824
- expect(value).not_to eq(value)
825
- TEST
826
- program = make_plain_test_program(snippet, color_enabled: color_enabled)
827
-
828
- expected_output =
829
- build_expected_output(
830
- color_enabled: color_enabled,
831
- snippet: "expect(value).not_to eq(value)",
832
- newline_before_expectation: true,
833
- expectation:
834
- proc do
835
- line do
836
- plain " Expected "
837
- actual %|#<SuperDiff::Test::Person name: "Marty", age: 31>|
838
- end
839
-
840
- line do
841
- plain "not to eq "
842
- expected %|#<SuperDiff::Test::Person name: "Marty", age: 31>|
843
- end
844
- end
845
- )
846
-
847
- expect(program).to produce_output_when_run(expected_output).in_color(
848
- color_enabled
849
- )
850
- end
851
- end
852
- end
853
-
854
- context "when comparing two different kinds of non-custom objects" do
855
- it "produces the correct failure message when used in the positive" do
856
- as_both_colored_and_uncolored do |color_enabled|
857
- snippet = <<~TEST.strip
858
- actual = SuperDiff::Test::Player.new(
859
- handle: "mcmire",
860
- character: "Jon",
861
- inventory: ["sword"],
862
- shields: 11.4,
863
- health: 4,
864
- ultimate: true,
865
- )
866
- expected = SuperDiff::Test::Item.new(
867
- name: "camera",
868
- quantity: 3,
869
- )
870
- expect(actual).to eq(expected)
871
- TEST
872
- program = make_plain_test_program(snippet, color_enabled: color_enabled)
873
-
874
- expected_output =
875
- build_expected_output(
876
- color_enabled: color_enabled,
877
- snippet: "expect(actual).to eq(expected)",
878
- newline_before_expectation: true,
879
- expectation:
880
- proc do
881
- line do
882
- plain "Expected "
883
- actual %|#<SuperDiff::Test::Player @character="Jon", @handle="mcmire", @health=4, @inventory=["sword"], @shields=11.4, @ultimate=true>|
884
- end
885
-
886
- line do
887
- plain " to eq "
888
- expected %|#<SuperDiff::Test::Item @name="camera", @quantity=3>|
889
- end
890
- end
891
- )
892
-
893
- expect(program).to produce_output_when_run(expected_output).in_color(
894
- color_enabled
895
- ).removing_object_ids
896
- end
897
- end
898
-
899
- it "produces the correct failure message when used in the negative" do
900
- as_both_colored_and_uncolored do |color_enabled|
901
- snippet = <<~TEST.strip
902
- value = SuperDiff::Test::Item.new(
903
- name: "camera",
904
- quantity: 3,
905
- )
906
- expect(value).not_to eq(value)
907
- TEST
908
- program = make_plain_test_program(snippet, color_enabled: color_enabled)
909
-
910
- expected_output =
911
- build_expected_output(
912
- color_enabled: color_enabled,
913
- snippet: "expect(value).not_to eq(value)",
914
- newline_before_expectation: true,
915
- expectation:
916
- proc do
917
- line do
918
- plain " Expected "
919
- actual %|#<SuperDiff::Test::Item @name="camera", @quantity=3>|
920
- end
921
-
922
- line do
923
- plain "not to eq "
924
- expected %|#<SuperDiff::Test::Item @name="camera", @quantity=3>|
925
- end
926
- end
927
- )
928
-
929
- expect(program).to produce_output_when_run(expected_output).in_color(
930
- color_enabled
931
- ).removing_object_ids
932
- end
933
- end
934
- end
935
-
936
- context "when comparing two data structures where one contains an empty array" do
937
- it "formats the array correctly in the diff" do
938
- as_both_colored_and_uncolored do |color_enabled|
939
- snippet = <<~TEST.strip
940
- actual = { foo: [] }
941
- expected = { foo: nil }
942
- expect(actual).to eq(expected)
943
- TEST
944
- program = make_plain_test_program(snippet, color_enabled: color_enabled)
945
-
946
- expected_output =
947
- build_expected_output(
948
- color_enabled: color_enabled,
949
- snippet: "expect(actual).to eq(expected)",
950
- newline_before_expectation: true,
951
- expectation:
952
- proc do
953
- line do
954
- plain "Expected "
955
- actual "{ foo: [] }"
956
- plain " to eq "
957
- expected "{ foo: nil }"
958
- plain "."
959
- end
960
- end,
961
- diff:
962
- proc do
963
- plain_line " {"
964
- expected_line "- foo: nil"
965
- actual_line "+ foo: []"
966
- plain_line " }"
967
- end
968
- )
969
-
970
- expect(program).to produce_output_when_run(expected_output).in_color(
971
- color_enabled
972
- )
973
- end
974
- end
975
- end
976
-
977
- context "when comparing two data structures where one contains an empty hash" do
978
- it "formats the hash correctly in the diff" do
979
- as_both_colored_and_uncolored do |color_enabled|
980
- snippet = <<~TEST.strip
981
- actual = { foo: {} }
982
- expected = { foo: nil }
983
- expect(actual).to eq(expected)
984
- TEST
985
- program = make_plain_test_program(snippet, color_enabled: color_enabled)
986
-
987
- expected_output =
988
- build_expected_output(
989
- color_enabled: color_enabled,
990
- snippet: "expect(actual).to eq(expected)",
991
- newline_before_expectation: true,
992
- expectation:
993
- proc do
994
- line do
995
- plain "Expected "
996
- actual "{ foo: {} }"
997
- plain " to eq "
998
- expected "{ foo: nil }"
999
- plain "."
1000
- end
1001
- end,
1002
- diff:
1003
- proc do
1004
- plain_line " {"
1005
- expected_line "- foo: nil"
1006
- actual_line "+ foo: {}"
1007
- plain_line " }"
1008
- end
1009
- )
1010
-
1011
- expect(program).to produce_output_when_run(expected_output).in_color(
1012
- color_enabled
1013
- )
1014
- end
1015
- end
1016
- end
1017
-
1018
- context "when comparing two data structures where one contains an empty object" do
1019
- it "formats the object correctly in the diff" do
1020
- as_both_colored_and_uncolored do |color_enabled|
1021
- snippet = <<~TEST.strip
1022
- actual = { foo: SuperDiff::Test::EmptyClass.new }
1023
- expected = { foo: nil }
1024
- expect(actual).to eq(expected)
1025
- TEST
1026
- program = make_plain_test_program(snippet, color_enabled: color_enabled)
1027
-
1028
- expected_output =
1029
- build_expected_output(
1030
- color_enabled: color_enabled,
1031
- snippet: "expect(actual).to eq(expected)",
1032
- newline_before_expectation: true,
1033
- expectation:
1034
- proc do
1035
- line do
1036
- plain "Expected "
1037
- actual "{ foo: #<SuperDiff::Test::EmptyClass> }"
1038
- plain " to eq "
1039
- expected "{ foo: nil }"
1040
- plain "."
1041
- end
1042
- end,
1043
- diff:
1044
- proc do
1045
- plain_line " {"
1046
- expected_line "- foo: nil"
1047
- actual_line "+ foo: #<SuperDiff::Test::EmptyClass>"
1048
- plain_line " }"
1049
- end
1050
- )
1051
-
1052
- expect(program).to produce_output_when_run(expected_output).in_color(
1053
- color_enabled
1054
- ).removing_object_ids
1055
- end
1056
- end
1057
- end
1058
-
1059
- it_behaves_like "a matcher that supports elided diffs" do
1060
- let(:matcher) { :eq }
1061
- end
1062
-
1063
- it_behaves_like "a matcher that supports a toggleable key" do
1064
- let(:matcher) { :eq }
1065
- end
1066
- end