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,123 +0,0 @@
1
- shared_examples_for "a matcher that supports a toggleable key" do
2
- context "if key_enabled is set to true" do
3
- it "produces the key" do
4
- as_both_colored_and_uncolored do |color_enabled|
5
- snippet = <<~TEST.strip
6
- actual = [
7
- "Afghanistan",
8
- "Aland Islands",
9
- "Australia"
10
- ]
11
- expected = [
12
- "Afghanistan",
13
- "Aland Islands",
14
- "Albania"
15
- ]
16
- expect(actual).to #{matcher}(expected)
17
- TEST
18
- program =
19
- make_plain_test_program(
20
- snippet,
21
- color_enabled: color_enabled,
22
- super_diff_configuration: {
23
- key_enabled: true
24
- }
25
- )
26
-
27
- expected_output =
28
- build_expected_output(
29
- color_enabled: color_enabled,
30
- snippet: %|expect(actual).to #{matcher}(expected)|,
31
- newline_before_expectation: true,
32
- expectation:
33
- proc do
34
- line do
35
- plain "Expected "
36
- actual %|["Afghanistan", "Aland Islands", "Australia"]|
37
- end
38
-
39
- line do
40
- plain " to eq "
41
- expected %|["Afghanistan", "Aland Islands", "Albania"]|
42
- end
43
- end,
44
- diff:
45
- proc do
46
- plain_line " ["
47
- plain_line %| "Afghanistan",|
48
- plain_line %| "Aland Islands",|
49
- expected_line %|- "Albania"|
50
- actual_line %|+ "Australia"|
51
- plain_line " ]"
52
- end,
53
- key_enabled: true
54
- )
55
-
56
- expect(program).to produce_output_when_run(expected_output).in_color(
57
- color_enabled
58
- )
59
- end
60
- end
61
- end
62
-
63
- context "if key_enabled is set to false" do
64
- it "does not produce the key" do
65
- as_both_colored_and_uncolored do |color_enabled|
66
- snippet = <<~TEST.strip
67
- actual = [
68
- "Afghanistan",
69
- "Aland Islands",
70
- "Australia"
71
- ]
72
- expected = [
73
- "Afghanistan",
74
- "Aland Islands",
75
- "Albania"
76
- ]
77
- expect(actual).to #{matcher}(expected)
78
- TEST
79
- program =
80
- make_plain_test_program(
81
- snippet,
82
- color_enabled: color_enabled,
83
- super_diff_configuration: {
84
- key_enabled: false
85
- }
86
- )
87
-
88
- expected_output =
89
- build_expected_output(
90
- key_enabled: false,
91
- color_enabled: color_enabled,
92
- snippet: %|expect(actual).to #{matcher}(expected)|,
93
- newline_before_expectation: true,
94
- expectation:
95
- proc do
96
- line do
97
- plain "Expected "
98
- actual %|["Afghanistan", "Aland Islands", "Australia"]|
99
- end
100
-
101
- line do
102
- plain " to eq "
103
- expected %|["Afghanistan", "Aland Islands", "Albania"]|
104
- end
105
- end,
106
- diff:
107
- proc do
108
- plain_line " ["
109
- plain_line %| "Afghanistan",|
110
- plain_line %| "Aland Islands",|
111
- expected_line %|- "Albania"|
112
- actual_line %|+ "Australia"|
113
- plain_line " ]"
114
- end
115
- )
116
-
117
- expect(program).to produce_output_when_run(expected_output).in_color(
118
- color_enabled
119
- )
120
- end
121
- end
122
- end
123
- end
@@ -1,24 +0,0 @@
1
- module SuperDiff
2
- module UnitTests
3
- extend self
4
-
5
- def with_configuration(configuration)
6
- old_configuration = SuperDiff.configuration.dup
7
- SuperDiff.configuration.merge!(configuration)
8
- yield.tap { SuperDiff.configuration.merge!(old_configuration) }
9
- end
10
-
11
- def colored(*args, **opts, &block)
12
- SuperDiff::Core::Helpers.style(*args, **opts, &block).to_s.chomp
13
- end
14
-
15
- def capture_warnings
16
- fake_stderr = StringIO.new
17
- original_stderr = $stderr
18
- $stderr = fake_stderr
19
- yield
20
- $stderr = original_stderr
21
- fake_stderr.string
22
- end
23
- end
24
- end
@@ -1,39 +0,0 @@
1
- module SuperDiff
2
- module UnitTests
3
- def be_deprecated_in_favor_of(new_constant_name)
4
- BeDeprecatedInFavorOfMatcher.new(new_constant_name)
5
- end
6
-
7
- class BeDeprecatedInFavorOfMatcher
8
- extend AttrExtras.mixin
9
-
10
- pattr_initialize :new_constant_name
11
- attr_private :actual_output, :old_constant_name
12
-
13
- def matches?(old_constant_name)
14
- @old_constant_name = old_constant_name
15
- @actual_output =
16
- SuperDiff::UnitTests.capture_warnings do
17
- Object.const_get(old_constant_name)
18
- end
19
- @actual_output.start_with?(expected_prefix)
20
- end
21
-
22
- def failure_message
23
- "Expected stderr to start with:\n\n" +
24
- SuperDiff::Test::OutputHelpers.bookended(expected_prefix) + "\n" +
25
- "Actual output:\n\n" +
26
- SuperDiff::Test::OutputHelpers.bookended(actual_output)
27
- end
28
-
29
- private
30
-
31
- def expected_prefix
32
- <<~EOT.rstrip
33
- WARNING: #{old_constant_name} is deprecated and will be removed in the next major release.
34
- Please use #{new_constant_name} instead.
35
- EOT
36
- end
37
- end
38
- end
39
- end
@@ -1,40 +0,0 @@
1
- module SuperDiff
2
- module UnitTests
3
- def match_output(expected_output)
4
- MatchOutputMatcher.new(expected_output)
5
- end
6
-
7
- class MatchOutputMatcher
8
- extend AttrExtras.mixin
9
-
10
- pattr_initialize :expected_output
11
- attr_private :actual_output
12
-
13
- def matches?(actual_output)
14
- @actual_output = actual_output
15
- actual_output == expected_output
16
- end
17
-
18
- def failure_message
19
- message =
20
- "Expected colored output to be printed, but got a mismatch.\n\n" +
21
- "Expected output:\n\n" +
22
- SuperDiff::Test::OutputHelpers.bookended(expected_output) + "\n" +
23
- "Actual output:\n\n" +
24
- SuperDiff::Test::OutputHelpers.bookended(actual_output)
25
-
26
- if %w[1 true].include?(ENV["SHOW_DIFF"])
27
- ::RSpec::Matchers::ExpectedsForMultipleDiffs.from(
28
- expected_output
29
- ).message_with_diff(
30
- message,
31
- ::RSpec::Expectations.differ,
32
- actual_output
33
- )
34
- else
35
- message
36
- end
37
- end
38
- end
39
- end
40
- end
@@ -1,289 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe SuperDiff, type: :unit do
4
- describe ".inspect_object", "for ActiveRecord objects", active_record: true do
5
- context "given an ActiveRecord object" do
6
- context "given as_lines: false" do
7
- it "returns an inspected version of the object" do
8
- string =
9
- described_class.inspect_object(
10
- SuperDiff::Test::Models::ActiveRecord::Person.new(
11
- name: "Elliot",
12
- age: 31
13
- ),
14
- as_lines: false
15
- )
16
- expect(string).to eq(
17
- %(#<SuperDiff::Test::Models::ActiveRecord::Person person_id: nil, age: 31, name: "Elliot">)
18
- )
19
- end
20
- end
21
-
22
- context "given as_lines: true" do
23
- it "returns an inspected version of the object as multiple Lines" do
24
- tiered_lines =
25
- described_class.inspect_object(
26
- SuperDiff::Test::Models::ActiveRecord::Person.new(
27
- name: "Elliot",
28
- age: 31
29
- ),
30
- as_lines: true,
31
- type: :delete,
32
- indentation_level: 1
33
- )
34
- expect(tiered_lines).to match(
35
- [
36
- an_object_having_attributes(
37
- type: :delete,
38
- indentation_level: 1,
39
- value: "#<SuperDiff::Test::Models::ActiveRecord::Person {",
40
- collection_bookend: :open
41
- ),
42
- an_object_having_attributes(
43
- type: :delete,
44
- indentation_level: 2,
45
- prefix: "person_id: ",
46
- value: "nil",
47
- add_comma: true
48
- ),
49
- an_object_having_attributes(
50
- type: :delete,
51
- indentation_level: 2,
52
- prefix: "age: ",
53
- value: "31",
54
- add_comma: true
55
- ),
56
- an_object_having_attributes(
57
- type: :delete,
58
- indentation_level: 2,
59
- prefix: "name: ",
60
- value: %("Elliot"),
61
- add_comma: false
62
- ),
63
- an_object_having_attributes(
64
- type: :delete,
65
- indentation_level: 1,
66
- value: "}>",
67
- collection_bookend: :close
68
- )
69
- ]
70
- )
71
- end
72
- end
73
- end
74
-
75
- context "given an ActiveRecord::Relation object" do
76
- context "given as_lines: false" do
77
- it "returns an inspected version of the Relation" do
78
- SuperDiff::Test::Models::ActiveRecord::Person.create!(
79
- name: "Marty",
80
- age: 19
81
- )
82
- SuperDiff::Test::Models::ActiveRecord::Person.create!(
83
- name: "Jennifer",
84
- age: 17
85
- )
86
-
87
- string =
88
- described_class.inspect_object(
89
- SuperDiff::Test::Models::ActiveRecord::Person.all,
90
- as_lines: false
91
- )
92
-
93
- expect(string).to eq(
94
- %(#<ActiveRecord::Relation [#<SuperDiff::Test::Models::ActiveRecord::Person person_id: 1, age: 19, name: "Marty">, #<SuperDiff::Test::Models::ActiveRecord::Person person_id: 2, age: 17, name: "Jennifer">]>)
95
- )
96
- end
97
- end
98
-
99
- context "given as_lines: true" do
100
- it "returns an inspected version of the Relation as multiple Lines" do
101
- SuperDiff::Test::Models::ActiveRecord::Person.create!(
102
- name: "Marty",
103
- age: 19
104
- )
105
- SuperDiff::Test::Models::ActiveRecord::Person.create!(
106
- name: "Jennifer",
107
- age: 17
108
- )
109
-
110
- tiered_lines =
111
- described_class.inspect_object(
112
- SuperDiff::Test::Models::ActiveRecord::Person.all,
113
- as_lines: true,
114
- type: :delete,
115
- indentation_level: 1
116
- )
117
-
118
- expect(tiered_lines).to match(
119
- [
120
- an_object_having_attributes(
121
- type: :delete,
122
- indentation_level: 1,
123
- value: "#<ActiveRecord::Relation [",
124
- collection_bookend: :open
125
- ),
126
- an_object_having_attributes(
127
- type: :delete,
128
- indentation_level: 2,
129
- value: "#<SuperDiff::Test::Models::ActiveRecord::Person {",
130
- collection_bookend: :open
131
- ),
132
- an_object_having_attributes(
133
- type: :delete,
134
- indentation_level: 3,
135
- prefix: "person_id: ",
136
- value: "1",
137
- add_comma: true
138
- ),
139
- an_object_having_attributes(
140
- type: :delete,
141
- indentation_level: 3,
142
- prefix: "age: ",
143
- value: "19",
144
- add_comma: true
145
- ),
146
- an_object_having_attributes(
147
- type: :delete,
148
- indentation_level: 3,
149
- prefix: "name: ",
150
- value: %("Marty"),
151
- add_comma: false
152
- ),
153
- an_object_having_attributes(
154
- type: :delete,
155
- indentation_level: 2,
156
- value: "}>",
157
- collection_bookend: :close
158
- ),
159
- an_object_having_attributes(
160
- type: :delete,
161
- indentation_level: 2,
162
- value: "#<SuperDiff::Test::Models::ActiveRecord::Person {",
163
- collection_bookend: :open
164
- ),
165
- an_object_having_attributes(
166
- type: :delete,
167
- indentation_level: 3,
168
- prefix: "person_id: ",
169
- value: "2",
170
- add_comma: true
171
- ),
172
- an_object_having_attributes(
173
- type: :delete,
174
- indentation_level: 3,
175
- prefix: "age: ",
176
- value: "17",
177
- add_comma: true
178
- ),
179
- an_object_having_attributes(
180
- type: :delete,
181
- indentation_level: 3,
182
- prefix: "name: ",
183
- value: %("Jennifer"),
184
- add_comma: false
185
- ),
186
- an_object_having_attributes(
187
- type: :delete,
188
- indentation_level: 2,
189
- value: "}>",
190
- collection_bookend: :close
191
- ),
192
- an_object_having_attributes(
193
- type: :delete,
194
- indentation_level: 1,
195
- value: "]>",
196
- collection_bookend: :close
197
- )
198
- ]
199
- )
200
- end
201
- end
202
- end
203
-
204
- context "given a HashWithIndifferentAccess" do
205
- context "given as_lines: false" do
206
- it "returns an inspected version of the object" do
207
- string =
208
- described_class.inspect_object(
209
- HashWithIndifferentAccess.new(
210
- {
211
- line_1: "123 Main St.",
212
- city: "Hill Valley",
213
- state: "CA",
214
- zip: "90382"
215
- }
216
- ),
217
- as_lines: false
218
- )
219
- expect(string).to eq(
220
- %(#<HashWithIndifferentAccess { "line_1" => "123 Main St.", "city" => "Hill Valley", "state" => "CA", "zip" => "90382" }>)
221
- )
222
- end
223
- end
224
-
225
- context "given as_lines: true" do
226
- it "returns an inspected version of the object as multiple Lines" do
227
- tiered_lines =
228
- described_class.inspect_object(
229
- HashWithIndifferentAccess.new(
230
- {
231
- line_1: "123 Main St.",
232
- city: "Hill Valley",
233
- state: "CA",
234
- zip: "90382"
235
- }
236
- ),
237
- as_lines: true,
238
- type: :delete,
239
- indentation_level: 1
240
- )
241
- expect(tiered_lines).to match(
242
- [
243
- an_object_having_attributes(
244
- type: :delete,
245
- indentation_level: 1,
246
- value: "#<HashWithIndifferentAccess {",
247
- collection_bookend: :open
248
- ),
249
- an_object_having_attributes(
250
- type: :delete,
251
- indentation_level: 2,
252
- prefix: %("line_1" => ),
253
- value: %("123 Main St."),
254
- add_comma: true
255
- ),
256
- an_object_having_attributes(
257
- type: :delete,
258
- indentation_level: 2,
259
- prefix: %("city" => ),
260
- value: %("Hill Valley"),
261
- add_comma: true
262
- ),
263
- an_object_having_attributes(
264
- type: :delete,
265
- indentation_level: 2,
266
- prefix: %("state" => ),
267
- value: %("CA"),
268
- add_comma: true
269
- ),
270
- an_object_having_attributes(
271
- type: :delete,
272
- indentation_level: 2,
273
- prefix: %("zip" => ),
274
- value: %("90382"),
275
- add_comma: false
276
- ),
277
- an_object_having_attributes(
278
- type: :delete,
279
- indentation_level: 1,
280
- value: "}>",
281
- collection_bookend: :close
282
- )
283
- ]
284
- )
285
- end
286
- end
287
- end
288
- end
289
- end
@@ -1,170 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe SuperDiff, type: :unit do
4
- describe ".inspect_object",
5
- "for ActiveSupport objects",
6
- active_support: true do
7
- context "given an ActiveSupport::OrderedOptions object" do
8
- context "given as_lines: false" do
9
- it "returns an inspected version of the object" do
10
- string =
11
- described_class.inspect_object(
12
- ::ActiveSupport::OrderedOptions[name: "Bob", age: 42],
13
- as_lines: false
14
- )
15
- expect(string).to eq(%(#<OrderedOptions { name: "Bob", age: 42 }>))
16
- end
17
- end
18
-
19
- context "given as_lines: true" do
20
- it "returns an inspected version of the object as multiple Lines" do
21
- tiered_lines =
22
- described_class.inspect_object(
23
- ::ActiveSupport::OrderedOptions[name: "Bob", age: 42],
24
- as_lines: true,
25
- type: :delete,
26
- indentation_level: 1
27
- )
28
- expect(tiered_lines).to match(
29
- [
30
- an_object_having_attributes(
31
- type: :delete,
32
- indentation_level: 1,
33
- value: "#<OrderedOptions {",
34
- collection_bookend: :open
35
- ),
36
- an_object_having_attributes(
37
- type: :delete,
38
- indentation_level: 2,
39
- prefix: "name: ",
40
- value: "\"Bob\"",
41
- add_comma: true
42
- ),
43
- an_object_having_attributes(
44
- type: :delete,
45
- indentation_level: 2,
46
- prefix: "age: ",
47
- value: "42",
48
- add_comma: false
49
- ),
50
- an_object_having_attributes(
51
- type: :delete,
52
- indentation_level: 1,
53
- value: "}>",
54
- collection_bookend: :close
55
- )
56
- ]
57
- )
58
- end
59
- end
60
- end
61
-
62
- context "given a DateTime object" do
63
- context "given as_lines: false" do
64
- it "returns a representation of the datetime on a single line" do
65
- inspection =
66
- described_class.inspect_object(
67
- DateTime.new(2021, 5, 5, 10, 23, 28.123456789123, "-05:00"),
68
- as_lines: false
69
- )
70
- expect(inspection).to eq(
71
- "#<DateTime 2021-05-05 10:23:28+(123456789/1000000000) -05:00 (-05:00)>"
72
- )
73
- end
74
- end
75
-
76
- context "given as_lines: true" do
77
- it "returns a representation of the datetime across multiple lines" do
78
- inspection =
79
- described_class.inspect_object(
80
- DateTime.new(2021, 5, 5, 10, 23, 28.1234567891, "-05:00"),
81
- as_lines: true,
82
- type: :delete,
83
- indentation_level: 1
84
- )
85
- expect(inspection).to match(
86
- [
87
- an_object_having_attributes(
88
- type: :delete,
89
- indentation_level: 1,
90
- value: "#<DateTime {",
91
- add_comma: false,
92
- collection_bookend: :open
93
- ),
94
- an_object_having_attributes(
95
- type: :delete,
96
- indentation_level: 2,
97
- value: "year: 2021",
98
- add_comma: true,
99
- collection_bookend: nil
100
- ),
101
- an_object_having_attributes(
102
- type: :delete,
103
- indentation_level: 2,
104
- value: "month: 5",
105
- add_comma: true,
106
- collection_bookend: nil
107
- ),
108
- an_object_having_attributes(
109
- type: :delete,
110
- indentation_level: 2,
111
- value: "day: 5",
112
- add_comma: true,
113
- collection_bookend: nil
114
- ),
115
- an_object_having_attributes(
116
- type: :delete,
117
- indentation_level: 2,
118
- value: "hour: 10",
119
- add_comma: true,
120
- collection_bookend: nil
121
- ),
122
- an_object_having_attributes(
123
- type: :delete,
124
- indentation_level: 2,
125
- value: "min: 23",
126
- add_comma: true,
127
- collection_bookend: nil
128
- ),
129
- an_object_having_attributes(
130
- type: :delete,
131
- indentation_level: 2,
132
- value: "sec: 28",
133
- add_comma: true,
134
- collection_bookend: nil
135
- ),
136
- an_object_having_attributes(
137
- type: :delete,
138
- indentation_level: 2,
139
- value: "subsec: (123456789/1000000000)",
140
- add_comma: true,
141
- collection_bookend: nil
142
- ),
143
- an_object_having_attributes(
144
- type: :delete,
145
- indentation_level: 2,
146
- value: "zone: \"-05:00\"",
147
- add_comma: true,
148
- collection_bookend: nil
149
- ),
150
- an_object_having_attributes(
151
- type: :delete,
152
- indentation_level: 2,
153
- value: "utc_offset: -18000",
154
- add_comma: false,
155
- collection_bookend: nil
156
- ),
157
- an_object_having_attributes(
158
- type: :delete,
159
- indentation_level: 1,
160
- value: "}>",
161
- add_comma: false,
162
- collection_bookend: :close
163
- )
164
- ]
165
- )
166
- end
167
- end
168
- end
169
- end
170
- end