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,245 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe "Integration with a third-party matcher", type: :integration do
4
- context "when the matcher is used in the positive and fails" do
5
- context "when the failure message spans multiple lines" do
6
- context "and some of the message is indented" do
7
- it "colorizes the non-indented part in red" do
8
- as_both_colored_and_uncolored do |color_enabled|
9
- snippet = <<~TEST.strip
10
- expect(:anything).to fail_with_indented_multiline_failure_message
11
- TEST
12
- program =
13
- make_plain_test_program(snippet, color_enabled: color_enabled)
14
-
15
- expected_output =
16
- build_expected_output(
17
- color_enabled: color_enabled,
18
- snippet:
19
- "expect(:anything).to fail_with_indented_multiline_failure_message",
20
- newline_before_expectation: true,
21
- expectation:
22
- proc do
23
- red_line "This is a message that spans multiple lines."
24
- red_line "Here is the next line."
25
- plain_line " This part is indented, for whatever reason. It just kinda keeps"
26
- plain_line " going until we finish saying whatever it is we want to say."
27
- end
28
- )
29
-
30
- expect(program).to produce_output_when_run(
31
- expected_output
32
- ).in_color(color_enabled)
33
- end
34
- end
35
- end
36
-
37
- context "and some of the message is not indented" do
38
- context "and the message is divided into paragraphs" do
39
- it "colorizes the first paragraph in red" do
40
- as_both_colored_and_uncolored do |color_enabled|
41
- snippet = <<~TEST.strip
42
- expect(:anything).to fail_with_paragraphed_failure_message
43
- TEST
44
- program =
45
- make_plain_test_program(snippet, color_enabled: color_enabled)
46
-
47
- expected_output =
48
- build_expected_output(
49
- color_enabled: color_enabled,
50
- snippet:
51
- "expect(:anything).to fail_with_paragraphed_failure_message",
52
- newline_before_expectation: true,
53
- expectation:
54
- proc do
55
- red_line "This is a message that spans multiple paragraphs."
56
- newline
57
- plain_line "Here is the next paragraph."
58
- end
59
- )
60
-
61
- expect(program).to produce_output_when_run(
62
- expected_output
63
- ).in_color(color_enabled)
64
- end
65
- end
66
- end
67
-
68
- context "and the message is not divided into paragraphs" do
69
- it "colorizes all of the message in red" do
70
- as_both_colored_and_uncolored do |color_enabled|
71
- snippet = <<~TEST.strip
72
- expect(:anything).to fail_with_non_indented_multiline_failure_message
73
- TEST
74
- program =
75
- make_plain_test_program(snippet, color_enabled: color_enabled)
76
-
77
- expected_output =
78
- build_expected_output(
79
- color_enabled: color_enabled,
80
- snippet:
81
- "expect(:anything).to fail_with_non_indented_multiline_failure_message",
82
- newline_before_expectation: true,
83
- expectation:
84
- proc do
85
- red_line "This is a message that spans multiple lines."
86
- red_line "Here is the next line."
87
- end
88
- )
89
-
90
- expect(program).to produce_output_when_run(
91
- expected_output
92
- ).in_color(color_enabled)
93
- end
94
- end
95
- end
96
- end
97
- end
98
-
99
- context "when the failure message does not span multiple lines" do
100
- it "colorizes all of the message in red" do
101
- as_both_colored_and_uncolored do |color_enabled|
102
- snippet = <<~TEST.strip
103
- expect(:anything).to fail_with_singleline_failure_message
104
- TEST
105
- program =
106
- make_plain_test_program(snippet, color_enabled: color_enabled)
107
-
108
- expected_output =
109
- build_expected_output(
110
- color_enabled: color_enabled,
111
- snippet:
112
- "expect(:anything).to fail_with_singleline_failure_message",
113
- expectation:
114
- proc { red_line "This is a message that spans only one line." }
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
124
-
125
- context "when the matcher is used in the negative and fails" do
126
- context "when the failure message spans multiple lines" do
127
- context "and some of the message is indented" do
128
- it "colorizes the non-indented part in red" do
129
- as_both_colored_and_uncolored do |color_enabled|
130
- snippet = <<~TEST.strip
131
- expect(:anything).not_to pass_with_indented_multiline_failure_message
132
- TEST
133
- program =
134
- make_plain_test_program(snippet, color_enabled: color_enabled)
135
-
136
- expected_output =
137
- build_expected_output(
138
- color_enabled: color_enabled,
139
- snippet:
140
- "expect(:anything).not_to pass_with_indented_multiline_failure_message",
141
- newline_before_expectation: true,
142
- expectation:
143
- proc do
144
- red_line "This is a message that spans multiple lines."
145
- red_line "Here is the next line."
146
- plain_line " This part is indented, for whatever reason. It just kinda keeps"
147
- plain_line " going until we finish saying whatever it is we want to say."
148
- end
149
- )
150
-
151
- expect(program).to produce_output_when_run(
152
- expected_output
153
- ).in_color(color_enabled)
154
- end
155
- end
156
- end
157
-
158
- context "and some of the message is not indented" do
159
- context "and the message is divided into paragraphs" do
160
- it "colorizes all of the message in red" do
161
- as_both_colored_and_uncolored do |color_enabled|
162
- snippet = <<~TEST.strip
163
- expect(:anything).not_to pass_with_paragraphed_failure_message
164
- TEST
165
- program =
166
- make_plain_test_program(snippet, color_enabled: color_enabled)
167
-
168
- expected_output =
169
- build_expected_output(
170
- color_enabled: color_enabled,
171
- snippet:
172
- "expect(:anything).not_to pass_with_paragraphed_failure_message",
173
- newline_before_expectation: true,
174
- expectation:
175
- proc do
176
- red_line "This is a message that spans multiple paragraphs."
177
- newline
178
- plain_line "Here is the next paragraph."
179
- end
180
- )
181
-
182
- expect(program).to produce_output_when_run(
183
- expected_output
184
- ).in_color(color_enabled)
185
- end
186
- end
187
- end
188
-
189
- context "and the message is not divided into paragraphs" do
190
- it "colorizes all of the message in red" do
191
- as_both_colored_and_uncolored do |color_enabled|
192
- snippet = <<~TEST.strip
193
- expect(:anything).not_to pass_with_non_indented_multiline_failure_message
194
- TEST
195
- program =
196
- make_plain_test_program(snippet, color_enabled: color_enabled)
197
-
198
- expected_output =
199
- build_expected_output(
200
- color_enabled: color_enabled,
201
- snippet:
202
- "expect(:anything).not_to pass_with_non_indented_multiline_failure_message",
203
- newline_before_expectation: true,
204
- expectation:
205
- proc do
206
- red_line "This is a message that spans multiple lines."
207
- red_line "Here is the next line."
208
- end
209
- )
210
-
211
- expect(program).to produce_output_when_run(
212
- expected_output
213
- ).in_color(color_enabled)
214
- end
215
- end
216
- end
217
- end
218
- end
219
-
220
- context "when the failure message does not span multiple lines" do
221
- it "colorizes all of the message in red" do
222
- as_both_colored_and_uncolored do |color_enabled|
223
- snippet = <<~TEST.strip
224
- expect(:anything).not_to pass_with_singleline_failure_message
225
- TEST
226
- program =
227
- make_plain_test_program(snippet, color_enabled: color_enabled)
228
-
229
- expected_output =
230
- build_expected_output(
231
- color_enabled: color_enabled,
232
- snippet:
233
- "expect(:anything).not_to pass_with_singleline_failure_message",
234
- expectation:
235
- proc { red_line "This is a message that spans only one line." }
236
- )
237
-
238
- expect(program).to produce_output_when_run(expected_output).in_color(
239
- color_enabled
240
- )
241
- end
242
- end
243
- end
244
- end
245
- end
@@ -1,150 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe "Integration with RSpec and unhandled errors",
4
- type: :integration do
5
- context "when a random exception occurs" do
6
- context "and the message spans multiple lines" do
7
- it "highlights the first line in red, and then leaves the rest of the message alone" do
8
- as_both_colored_and_uncolored do |color_enabled|
9
- snippet = <<~TEST.strip
10
- raise "Some kind of error or whatever\\n\\nThis is another line"
11
- TEST
12
- program =
13
- make_plain_test_program(snippet, color_enabled: color_enabled)
14
-
15
- expected_output =
16
- build_expected_output(
17
- color_enabled: color_enabled,
18
- snippet: snippet,
19
- newline_before_expectation: true,
20
- indentation: 5,
21
- expectation:
22
- proc do
23
- red_line "RuntimeError:"
24
- indent by: 2 do
25
- red_line "Some kind of error or whatever"
26
- newline
27
- plain_line "This is another line"
28
- end
29
- end
30
- )
31
-
32
- expect(program).to produce_output_when_run(expected_output).in_color(
33
- color_enabled
34
- )
35
- end
36
- end
37
- end
38
-
39
- context "and the message does not span multiple lines" do
40
- it "highlights the whole output after the code snippet in red" do
41
- as_both_colored_and_uncolored do |color_enabled|
42
- snippet = <<~TEST.strip
43
- raise "Some kind of error or whatever"
44
- TEST
45
- program =
46
- make_plain_test_program(snippet, color_enabled: color_enabled)
47
-
48
- expected_output =
49
- build_expected_output(
50
- color_enabled: color_enabled,
51
- snippet: snippet,
52
- newline_before_expectation: true,
53
- indentation: 5,
54
- expectation:
55
- proc do
56
- red_line "RuntimeError:"
57
- indent by: 2 do
58
- red_line "Some kind of error or whatever"
59
- end
60
- end
61
- )
62
-
63
- expect(program).to produce_output_when_run(expected_output).in_color(
64
- color_enabled
65
- )
66
- end
67
- end
68
- end
69
- end
70
-
71
- context "when multiple exceptions occur" do
72
- it "displays all exceptions, and for each exception, highlights the first line in red and leaves the rest of the message alone" do
73
- as_both_colored_and_uncolored do |color_enabled|
74
- snippet = <<~TEST.strip
75
- raise "Some kind of error or whatever\\n\\nThis is another line"
76
- TEST
77
- code = <<~CODE
78
- RSpec.describe "test" do
79
- after(:each) do
80
- #{snippet}
81
- end
82
-
83
- it "passes" do
84
- #{snippet}
85
- end
86
- end
87
- CODE
88
-
89
- program =
90
- make_plain_test_program(
91
- code,
92
- color_enabled: color_enabled,
93
- preserve_as_whole_file: true
94
- )
95
-
96
- expected_output1 =
97
- colored(color_enabled: color_enabled) do
98
- indent by: 5 do
99
- line do
100
- plain "1.1) "
101
- bold "Failure/Error: "
102
- plain snippet
103
- end
104
-
105
- newline
106
-
107
- indent by: 5 do
108
- red_line "RuntimeError:"
109
- indent by: 2 do
110
- red_line "Some kind of error or whatever"
111
- newline
112
- line "This is another line"
113
- end
114
- end
115
- end
116
- end
117
-
118
- expected_output2 =
119
- colored(color_enabled: color_enabled) do
120
- indent by: 5 do
121
- line do
122
- plain "1.2) "
123
- bold "Failure/Error: "
124
- plain snippet
125
- end
126
-
127
- newline
128
-
129
- indent by: 5 do
130
- red_line "RuntimeError:"
131
- indent by: 2 do
132
- red_line "Some kind of error or whatever"
133
- newline
134
- line "This is another line"
135
- end
136
- end
137
- end
138
- end
139
-
140
- expect(program).to produce_output_when_run(expected_output1).in_color(
141
- color_enabled
142
- )
143
-
144
- expect(program).to produce_output_when_run(expected_output2).in_color(
145
- color_enabled
146
- )
147
- end
148
- end
149
- end
150
- end
File without changes
data/spec/spec_helper.rb DELETED
@@ -1,90 +0,0 @@
1
- require "pp"
2
-
3
- if Gem::Version.new(RUBY_VERSION) < Gem::Version.new("3.2")
4
- begin
5
- require "pry-byebug"
6
- rescue LoadError
7
- end
8
-
9
- begin
10
- require "pry-nav"
11
- rescue LoadError
12
- end
13
- end
14
-
15
- require "climate_control"
16
-
17
- #---
18
-
19
- require_relative "../support/current_bundle"
20
-
21
- SuperDiff::CurrentBundle.instance.assert_appraisal!
22
-
23
- #---
24
-
25
- begin
26
- require "active_record"
27
-
28
- active_record_available = true
29
-
30
- ActiveRecord::Base.establish_connection(
31
- adapter: "sqlite3",
32
- database: ":memory:"
33
- )
34
- rescue LoadError
35
- active_record_available = false
36
- end
37
-
38
- Dir
39
- .glob(File.expand_path("support/**/*.rb", __dir__))
40
- .sort
41
- .reject do |file|
42
- file.include?("/models/active_record/") && !active_record_available
43
- end
44
- .each { |file| require file }
45
-
46
- RSpec.configure do |config|
47
- config.include(SuperDiff::UnitTests, type: :unit)
48
- config.include(SuperDiff::IntegrationTests, type: :integration)
49
-
50
- config.expect_with :rspec do |expectations|
51
- expectations.include_chain_clauses_in_custom_matcher_descriptions = true
52
- expectations.max_formatted_output_length = nil
53
- end
54
-
55
- config.mock_with :rspec do |mocks|
56
- mocks.verify_partial_doubles = true
57
- end
58
-
59
- config.shared_context_metadata_behavior = :apply_to_host_groups
60
- config.filter_run_when_matching :focus
61
- config.example_status_persistence_file_path = "spec/examples.txt"
62
- config.disable_monkey_patching!
63
- config.warnings = true
64
-
65
- config.default_formatter = "documentation" if !%w[true 1].include?(ENV["CI"])
66
-
67
- config.filter_run_excluding active_record: true unless active_record_available
68
- unless defined?(ActiveSupport)
69
- config.filter_run_excluding active_support: true
70
- end
71
-
72
- config.order = :random
73
- Kernel.srand config.seed
74
-
75
- config.color_mode = :on if ENV["CI"] == "true"
76
- end
77
-
78
- require "warnings_logger"
79
- $VERBOSE = true
80
- WarningsLogger.configure do |config|
81
- config.project_name = "super_diff"
82
- config.project_directory = Pathname.new("..").expand_path(__dir__)
83
- end
84
- WarningsLogger.enable
85
-
86
- if active_record_available
87
- require "super_diff/rspec-rails"
88
- else
89
- require "super_diff/rspec"
90
- end
@@ -1,9 +0,0 @@
1
- module SuperDiff
2
- module Tests
3
- module Colorizer
4
- def self.call(*args, **opts, &block)
5
- SuperDiff::Helpers.style(*args, **opts, &block)
6
- end
7
- end
8
- end
9
- end