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,452 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe "Integration with RSpec's #include matcher",
4
- type: :integration do
5
- context "when used against an array" do
6
- context "that is small" do
7
- it "produces the correct failure message when used in the positive" do
8
- as_both_colored_and_uncolored do |color_enabled|
9
- snippet = <<~TEST.strip
10
- actual = ["Marty", "Jennifer", "Doc"]
11
- expected = ["Marty", "Einie"]
12
- expect(actual).to include(*expected)
13
- TEST
14
- program =
15
- make_plain_test_program(snippet, color_enabled: color_enabled)
16
-
17
- expected_output =
18
- build_expected_output(
19
- color_enabled: color_enabled,
20
- snippet: "expect(actual).to include(*expected)",
21
- expectation:
22
- proc do
23
- line do
24
- plain "Expected "
25
- actual %|["Marty", "Jennifer", "Doc"]|
26
- plain " to include "
27
- expected %|"Einie"|
28
- plain "."
29
- end
30
- end,
31
- diff:
32
- proc do
33
- plain_line " ["
34
- plain_line %| "Marty",|
35
- plain_line %| "Jennifer",|
36
- # plain_line %| "Doc",| # FIXME
37
- plain_line %| "Doc"|
38
- expected_line %|- "Einie"|
39
- plain_line " ]"
40
- end
41
- )
42
-
43
- expect(program).to produce_output_when_run(expected_output).in_color(
44
- color_enabled
45
- )
46
- end
47
- end
48
-
49
- it "produces the correct failure message when used in the negative" do
50
- as_both_colored_and_uncolored do |color_enabled|
51
- snippet = <<~TEST.strip
52
- values = ["Marty", "Einie"]
53
- expect(values).not_to include(*values)
54
- TEST
55
- program =
56
- make_plain_test_program(snippet, color_enabled: color_enabled)
57
-
58
- expected_output =
59
- build_expected_output(
60
- color_enabled: color_enabled,
61
- snippet: "expect(values).not_to include(*values)",
62
- expectation:
63
- proc do
64
- line do
65
- plain "Expected "
66
- actual %|["Marty", "Einie"]|
67
- plain " not to include "
68
- expected %|"Marty" and "Einie"|
69
- plain "."
70
- end
71
- end
72
- )
73
-
74
- expect(program).to produce_output_when_run(expected_output).in_color(
75
- color_enabled
76
- )
77
- end
78
- end
79
- end
80
-
81
- context "that is large" do
82
- it "produces the correct failure message when used in the positive" do
83
- as_both_colored_and_uncolored do |color_enabled|
84
- snippet = <<~TEST.strip
85
- actual = [
86
- "Marty McFly",
87
- "Doc Brown",
88
- "Einie",
89
- "Lorraine McFly"
90
- ]
91
- expected = [
92
- "Marty McFly",
93
- "Doc Brown",
94
- "Einie",
95
- "Biff Tannen",
96
- "George McFly",
97
- "Lorraine McFly"
98
- ]
99
- expect(actual).to include(*expected)
100
- TEST
101
- program =
102
- make_plain_test_program(snippet, color_enabled: color_enabled)
103
-
104
- expected_output =
105
- build_expected_output(
106
- color_enabled: color_enabled,
107
- snippet: "expect(actual).to include(*expected)",
108
- expectation:
109
- proc do
110
- line do
111
- plain " Expected "
112
- actual %|["Marty McFly", "Doc Brown", "Einie", "Lorraine McFly"]|
113
- end
114
-
115
- line do
116
- plain "to include "
117
- expected %|"Biff Tannen" and "George McFly"|
118
- end
119
- end,
120
- diff:
121
- proc do
122
- plain_line " ["
123
- plain_line %| "Marty McFly",|
124
- plain_line %| "Doc Brown",|
125
- plain_line %| "Einie",|
126
- # plain_line %| "Lorraine McFly",| # FIXME
127
- plain_line %| "Lorraine McFly"|
128
- expected_line %|- "Biff Tannen",|
129
- expected_line %|- "George McFly"|
130
- plain_line " ]"
131
- end
132
- )
133
-
134
- expect(program).to produce_output_when_run(expected_output).in_color(
135
- color_enabled
136
- )
137
- end
138
- end
139
-
140
- it "produces the correct failure message when used in the negative" do
141
- as_both_colored_and_uncolored do |color_enabled|
142
- snippet = <<~TEST.strip
143
- actual = [
144
- "Marty McFly",
145
- "Doc Brown",
146
- "Einie",
147
- "Biff Tannen",
148
- "George McFly",
149
- "Lorraine McFly"
150
- ]
151
- expected = [
152
- "Marty McFly",
153
- "Doc Brown",
154
- "Einie",
155
- "Lorraine McFly"
156
- ]
157
- expect(actual).not_to include(*expected)
158
- TEST
159
- program =
160
- make_plain_test_program(snippet, color_enabled: color_enabled)
161
-
162
- expected_output =
163
- build_expected_output(
164
- color_enabled: color_enabled,
165
- snippet: "expect(actual).not_to include(*expected)",
166
- newline_before_expectation: true,
167
- expectation:
168
- proc do
169
- line do
170
- plain " Expected "
171
- actual %|["Marty McFly", "Doc Brown", "Einie", "Biff Tannen", "George McFly", "Lorraine McFly"]|
172
- end
173
-
174
- line do
175
- plain "not to include "
176
- expected %|"Marty McFly", "Doc Brown", "Einie", and "Lorraine McFly"|
177
- end
178
- end
179
- )
180
-
181
- expect(program).to produce_output_when_run(expected_output).in_color(
182
- color_enabled
183
- )
184
- end
185
- end
186
- end
187
- end
188
-
189
- context "when used against a hash" do
190
- context "that is small" do
191
- it "produces the correct failure message when used in the positive" do
192
- as_both_colored_and_uncolored do |color_enabled|
193
- snippet = <<~TEST.strip
194
- actual = { city: "Burbank", zip: "90210" }
195
- expected = { city: "Hill Valley", state: "CA" }
196
- expect(actual).to include(expected)
197
- TEST
198
- program =
199
- make_plain_test_program(snippet, color_enabled: color_enabled)
200
-
201
- expected_output =
202
- build_expected_output(
203
- color_enabled: color_enabled,
204
- snippet: "expect(actual).to include(expected)",
205
- expectation:
206
- proc do
207
- line do
208
- plain "Expected "
209
- actual %|{ city: "Burbank", zip: "90210" }|
210
- plain " to include "
211
- expected %|(city: "Hill Valley", state: "CA")|
212
- plain "."
213
- end
214
- end,
215
- diff:
216
- proc do
217
- plain_line " {"
218
- expected_line %|- city: "Hill Valley",|
219
- actual_line %|+ city: "Burbank",|
220
- # FIXME
221
- # expected_line %|- state: "CA",|
222
- expected_line %|- state: "CA"|
223
- plain_line %| zip: "90210"|
224
- plain_line " }"
225
- end
226
- )
227
-
228
- expect(program).to produce_output_when_run(expected_output).in_color(
229
- color_enabled
230
- )
231
- end
232
- end
233
-
234
- it "produces the correct failure message when used in the negative" do
235
- as_both_colored_and_uncolored do |color_enabled|
236
- snippet = <<~TEST.strip
237
- actual = { city: "Burbank", zip: "90210" }
238
- expected = { city: "Burbank" }
239
- expect(actual).not_to include(expected)
240
- TEST
241
- program =
242
- make_plain_test_program(snippet, color_enabled: color_enabled)
243
-
244
- expected_output =
245
- build_expected_output(
246
- color_enabled: color_enabled,
247
- snippet: "expect(actual).not_to include(expected)",
248
- expectation:
249
- proc do
250
- line do
251
- plain "Expected "
252
- actual %|{ city: "Burbank", zip: "90210" }|
253
- plain " not to include "
254
- expected %|(city: "Burbank")|
255
- plain "."
256
- end
257
- end
258
- )
259
-
260
- expect(program).to produce_output_when_run(expected_output).in_color(
261
- color_enabled
262
- )
263
- end
264
- end
265
-
266
- it "produces the correct failure message when fuzzy matching" do
267
- as_both_colored_and_uncolored do |color_enabled|
268
- snippet = <<~TEST.strip
269
- actual = { number: 42, city: "Burbank", zip: "90210" }
270
- expected = { number: a_kind_of(Numeric), city: /burb/i, state: "CA" }
271
- expect(actual).to include(expected)
272
- TEST
273
- program =
274
- make_plain_test_program(snippet, color_enabled: color_enabled)
275
-
276
- expected_output =
277
- build_expected_output(
278
- color_enabled: color_enabled,
279
- snippet: "expect(actual).to include(expected)",
280
- expectation:
281
- proc do
282
- line do
283
- plain "Expected "
284
- actual %|{ number: 42, city: "Burbank", zip: "90210" }|
285
- plain " to include "
286
- expected %|(state: "CA")|
287
- plain "."
288
- end
289
- end,
290
- diff:
291
- proc do
292
- plain_line " {"
293
- plain_line " number: 42,"
294
- plain_line %| city: "Burbank",|
295
- plain_line %| zip: "90210"|
296
- expected_line %|- state: "CA"|
297
- plain_line " }"
298
- end
299
- )
300
-
301
- expect(program).to produce_output_when_run(expected_output).in_color(
302
- color_enabled
303
- )
304
- end
305
- end
306
- end
307
-
308
- context "that is large" do
309
- it "produces the correct failure message when used in the positive" do
310
- as_both_colored_and_uncolored do |color_enabled|
311
- snippet = <<~TEST.strip
312
- actual = {
313
- city: "Burbank",
314
- state: "CA",
315
- zip: "90210"
316
- }
317
- expected = {
318
- city: "Hill Valley",
319
- zip: "90382"
320
- }
321
- expect(actual).to include(expected)
322
- TEST
323
- program =
324
- make_plain_test_program(snippet, color_enabled: color_enabled)
325
-
326
- expected_output =
327
- build_expected_output(
328
- color_enabled: color_enabled,
329
- snippet: "expect(actual).to include(expected)",
330
- expectation:
331
- proc do
332
- line do
333
- plain " Expected "
334
- actual %|{ city: "Burbank", state: "CA", zip: "90210" }|
335
- end
336
-
337
- line do
338
- plain "to include "
339
- expected %|(city: "Hill Valley", zip: "90382")|
340
- end
341
- end,
342
- diff:
343
- proc do
344
- plain_line " {"
345
- expected_line %|- city: "Hill Valley",|
346
- actual_line %|+ city: "Burbank",|
347
- plain_line %| state: "CA",|
348
- expected_line %|- zip: "90382"|
349
- actual_line %|+ zip: "90210"|
350
- plain_line " }"
351
- end
352
- )
353
-
354
- expect(program).to produce_output_when_run(expected_output).in_color(
355
- color_enabled
356
- )
357
- end
358
- end
359
-
360
- it "produces the correct failure message when used in the negative" do
361
- as_both_colored_and_uncolored do |color_enabled|
362
- snippet = <<~TEST.strip
363
- actual = { city: "Hill Valley", state: "CA", zip: "90210" }
364
- expected = { city: "Hill Valley", state: "CA" }
365
- expect(actual).not_to include(expected)
366
- TEST
367
- program =
368
- make_plain_test_program(snippet, color_enabled: color_enabled)
369
-
370
- expected_output =
371
- build_expected_output(
372
- color_enabled: color_enabled,
373
- snippet: "expect(actual).not_to include(expected)",
374
- newline_before_expectation: true,
375
- expectation:
376
- proc do
377
- line do
378
- plain " Expected "
379
- actual %|{ city: "Hill Valley", state: "CA", zip: "90210" }|
380
- end
381
-
382
- line do
383
- plain "not to include "
384
- expected %|(city: "Hill Valley", state: "CA")|
385
- end
386
- end
387
- )
388
-
389
- expect(program).to produce_output_when_run(expected_output).in_color(
390
- color_enabled
391
- )
392
- end
393
- end
394
-
395
- it "produces the correct failure message when fuzzy matching" do
396
- as_both_colored_and_uncolored do |color_enabled|
397
- snippet = <<~TEST.strip
398
- actual = {
399
- number: 42,
400
- street: "Yoshie Circles",
401
- city: "Burbank",
402
- state: "CA",
403
- zip: "90210"
404
- }
405
- expected = {
406
- number: a_kind_of(Numeric),
407
- street: "Yoshie Circles",
408
- city: /burb/i,
409
- zip: "90382"
410
- }
411
- expect(actual).to include(expected)
412
- TEST
413
- program =
414
- make_plain_test_program(snippet, color_enabled: color_enabled)
415
-
416
- expected_output =
417
- build_expected_output(
418
- color_enabled: color_enabled,
419
- snippet: "expect(actual).to include(expected)",
420
- expectation:
421
- proc do
422
- line do
423
- plain " Expected "
424
- actual %|{ number: 42, street: "Yoshie Circles", city: "Burbank", state: "CA", zip: "90210" }|
425
- end
426
-
427
- line do
428
- plain "to include "
429
- expected %|(zip: "90382")|
430
- end
431
- end,
432
- diff:
433
- proc do
434
- plain_line " {"
435
- plain_line " number: 42,"
436
- plain_line %| street: "Yoshie Circles",|
437
- plain_line %| city: "Burbank",|
438
- plain_line %| state: "CA",|
439
- expected_line %|- zip: "90382"|
440
- actual_line %|+ zip: "90210"|
441
- plain_line " }"
442
- end
443
- )
444
-
445
- expect(program).to produce_output_when_run(expected_output).in_color(
446
- color_enabled
447
- )
448
- end
449
- end
450
- end
451
- end
452
- end
@@ -1,51 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe "Integration with RSpec's magic metadata", type: :integration do
4
- it "includes extra_failure_lines in failure messages" do
5
- as_both_colored_and_uncolored do |color_enabled|
6
- snippet = <<~TEST.strip
7
- RSpec.describe "test" do
8
- it { expect(true).to be(false) }
9
-
10
- after do
11
- RSpec.current_example.metadata[:extra_failure_lines] = "foo\nbar"
12
- end
13
- end
14
- TEST
15
- program =
16
- make_plain_test_program(
17
- snippet,
18
- color_enabled: color_enabled,
19
- preserve_as_whole_file: true
20
- )
21
-
22
- expected_output =
23
- build_expected_output(
24
- color_enabled: color_enabled,
25
- test_name: "test is expected to equal false",
26
- snippet: "it { expect(true).to be(false) }",
27
- expectation:
28
- proc do
29
- line do
30
- plain "Expected "
31
- actual "true"
32
- plain " to equal "
33
- expected "false"
34
- plain "."
35
- end
36
- end,
37
- extra_failure_lines:
38
- proc do
39
- indent by: 5 do
40
- line "foo"
41
- line "bar"
42
- end
43
- end
44
- )
45
-
46
- expect(program).to produce_output_when_run(expected_output).in_color(
47
- color_enabled
48
- )
49
- end
50
- end
51
- end