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,377 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe "Integration with RSpec's #contain_exactly matcher",
4
- type: :integration do
5
- context "when a few number of values are given" do
6
- it "produces the correct failure message when used in the positive" do
7
- as_both_colored_and_uncolored do |color_enabled|
8
- snippet = <<~TEST.strip
9
- actual = ["Marty", "Jennifer", "Doc"]
10
- expected = ["Einie", "Marty"]
11
- expect(actual).to contain_exactly(*expected)
12
- TEST
13
- program = make_plain_test_program(snippet, color_enabled: color_enabled)
14
-
15
- expected_output =
16
- build_expected_output(
17
- color_enabled: color_enabled,
18
- snippet: "expect(actual).to contain_exactly(*expected)",
19
- expectation:
20
- proc do
21
- line do
22
- plain "Expected "
23
- actual %|["Marty", "Jennifer", "Doc"]|
24
- plain " to contain exactly "
25
- expected %|"Einie"|
26
- plain " and "
27
- expected %|"Marty"|
28
- plain "."
29
- end
30
- end,
31
- diff:
32
- proc do
33
- plain_line " ["
34
- plain_line %| "Marty",|
35
- actual_line %|+ "Jennifer",|
36
- actual_line %|+ "Doc",|
37
- # expected_line %|- "Einie"| # TODO
38
- expected_line %|- "Einie",|
39
- plain_line " ]"
40
- end
41
- )
42
-
43
- expect(program).to produce_output_when_run(expected_output).in_color(
44
- color_enabled
45
- )
46
- end
47
- end
48
-
49
- it "produces the correct failure message when used in the negative" do
50
- as_both_colored_and_uncolored do |color_enabled|
51
- snippet = <<~TEST.strip
52
- values = ["Einie", "Marty"]
53
- expect(values).not_to contain_exactly(*values)
54
- TEST
55
- program = make_plain_test_program(snippet, color_enabled: color_enabled)
56
-
57
- expected_output =
58
- build_expected_output(
59
- color_enabled: color_enabled,
60
- snippet: "expect(values).not_to contain_exactly(*values)",
61
- expectation:
62
- proc do
63
- line do
64
- plain "Expected "
65
- actual %|["Einie", "Marty"]|
66
- plain " not to contain exactly "
67
- expected %|"Einie"|
68
- plain " and "
69
- expected %|"Marty"|
70
- plain "."
71
- end
72
- end
73
- )
74
-
75
- expect(program).to produce_output_when_run(expected_output).in_color(
76
- color_enabled
77
- )
78
- end
79
- end
80
- end
81
-
82
- context "when a large number of values are given" do
83
- context "and they are only simple strings" do
84
- it "produces the correct failure message when used in the positive" do
85
- as_both_colored_and_uncolored do |color_enabled|
86
- snippet = <<~TEST.strip
87
- actual = [
88
- "Marty McFly",
89
- "Doc Brown",
90
- "Einie",
91
- "Lorraine McFly"
92
- ]
93
- expected = [
94
- "Doc Brown",
95
- "Marty McFly",
96
- "Biff Tannen",
97
- "George McFly",
98
- "Lorraine McFly"
99
- ]
100
- expect(actual).to contain_exactly(*expected)
101
- TEST
102
- program =
103
- make_plain_test_program(snippet, color_enabled: color_enabled)
104
-
105
- expected_output =
106
- build_expected_output(
107
- color_enabled: color_enabled,
108
- snippet: "expect(actual).to contain_exactly(*expected)",
109
- expectation:
110
- proc do
111
- line do
112
- plain " Expected "
113
- actual %|["Marty McFly", "Doc Brown", "Einie", "Lorraine McFly"]|
114
- end
115
-
116
- line do
117
- plain "to contain exactly "
118
- expected %|"Doc Brown"|
119
- plain ", "
120
- expected %|"Marty McFly"|
121
- plain ", "
122
- expected %|"Biff Tannen"|
123
- plain ", "
124
- expected %|"George McFly"|
125
- plain " and "
126
- expected %|"Lorraine McFly"|
127
- end
128
- end,
129
- diff:
130
- proc do
131
- plain_line " ["
132
- plain_line %| "Marty McFly",|
133
- plain_line %| "Doc Brown",|
134
- plain_line %| "Lorraine McFly",|
135
- actual_line %|+ "Einie",|
136
- expected_line %|- "Biff Tannen",|
137
- # expected_line %|- "George McFly"| # TODO
138
- expected_line %|- "George McFly",|
139
- plain_line " ]"
140
- end
141
- )
142
-
143
- expect(program).to produce_output_when_run(expected_output).in_color(
144
- color_enabled
145
- )
146
- end
147
- end
148
-
149
- it "produces the correct failure message when used in the negative" do
150
- as_both_colored_and_uncolored do |color_enabled|
151
- snippet = <<~TEST.strip
152
- values = [
153
- "Marty McFly",
154
- "Doc Brown",
155
- "Einie",
156
- "Lorraine McFly"
157
- ]
158
- expect(values).not_to contain_exactly(*values)
159
- TEST
160
- program =
161
- make_plain_test_program(snippet, color_enabled: color_enabled)
162
-
163
- expected_output =
164
- build_expected_output(
165
- color_enabled: color_enabled,
166
- snippet: "expect(values).not_to contain_exactly(*values)",
167
- newline_before_expectation: true,
168
- expectation:
169
- proc do
170
- line do
171
- plain " Expected "
172
- actual %|["Marty McFly", "Doc Brown", "Einie", "Lorraine McFly"]|
173
- end
174
-
175
- line do
176
- plain "not to contain exactly "
177
- expected %|"Marty McFly"|
178
- plain ", "
179
- expected %|"Doc Brown"|
180
- plain ", "
181
- expected %|"Einie"|
182
- plain " and "
183
- expected %|"Lorraine McFly"|
184
- end
185
- end
186
- )
187
-
188
- expect(program).to produce_output_when_run(expected_output).in_color(
189
- color_enabled
190
- )
191
- end
192
- end
193
- end
194
-
195
- context "and some of them are regexen" do
196
- it "produces the correct failure message when used in the positive" do
197
- as_both_colored_and_uncolored do |color_enabled|
198
- snippet = <<~TEST
199
- actual = [
200
- "Marty McFly",
201
- "Doc Brown",
202
- "Einie",
203
- "Lorraine McFly"
204
- ]
205
- expected = [
206
- / Brown$/,
207
- "Marty McFly",
208
- "Biff Tannen",
209
- /Georg McFly/,
210
- /Lorrain McFly/
211
- ]
212
- expect(actual).to contain_exactly(*expected)
213
- TEST
214
- program =
215
- make_plain_test_program(snippet, color_enabled: color_enabled)
216
-
217
- expected_output =
218
- build_expected_output(
219
- color_enabled: color_enabled,
220
- snippet: "expect(actual).to contain_exactly(*expected)",
221
- expectation:
222
- proc do
223
- line do
224
- plain " Expected "
225
- actual %|["Marty McFly", "Doc Brown", "Einie", "Lorraine McFly"]|
226
- end
227
-
228
- line do
229
- plain "to contain exactly "
230
- expected "/ Brown$/"
231
- plain ", "
232
- expected %|"Marty McFly"|
233
- plain ", "
234
- expected %|"Biff Tannen"|
235
- plain ", "
236
- expected "/Georg McFly/"
237
- plain " and "
238
- expected "/Lorrain McFly/"
239
- end
240
- end,
241
- diff:
242
- proc do
243
- plain_line " ["
244
- plain_line %| "Marty McFly",|
245
- plain_line %| "Doc Brown",|
246
- actual_line %|+ "Einie",|
247
- actual_line %|+ "Lorraine McFly",|
248
- expected_line %|- "Biff Tannen",|
249
- expected_line "- /Georg McFly/,"
250
- # expected_line %|- /Lorrain McFly/| # TODO
251
- expected_line "- /Lorrain McFly/,"
252
- plain_line " ]"
253
- end
254
- )
255
-
256
- expect(program).to produce_output_when_run(expected_output).in_color(
257
- color_enabled
258
- )
259
- end
260
- end
261
-
262
- it "produces the correct failure message when used in the negative" do
263
- as_both_colored_and_uncolored do |color_enabled|
264
- snippet = <<~TEST
265
- values = [
266
- / Brown$/,
267
- "Marty McFly",
268
- "Biff Tannen",
269
- /Georg McFly/,
270
- /Lorrain McFly/
271
- ]
272
- expect(values).not_to contain_exactly(*values)
273
- TEST
274
- program =
275
- make_plain_test_program(snippet, color_enabled: color_enabled)
276
-
277
- expected_output =
278
- build_expected_output(
279
- color_enabled: color_enabled,
280
- snippet: "expect(values).not_to contain_exactly(*values)",
281
- newline_before_expectation: true,
282
- expectation:
283
- proc do
284
- line do
285
- plain " Expected "
286
- actual %|[/ Brown$/, "Marty McFly", "Biff Tannen", /Georg McFly/, /Lorrain McFly/]|
287
- end
288
-
289
- line do
290
- plain "not to contain exactly "
291
- expected "/ Brown$/"
292
- plain ", "
293
- expected %|"Marty McFly"|
294
- plain ", "
295
- expected %|"Biff Tannen"|
296
- plain ", "
297
- expected "/Georg McFly/"
298
- plain " and "
299
- expected "/Lorrain McFly/"
300
- end
301
- end
302
- )
303
-
304
- expect(program).to produce_output_when_run(expected_output).in_color(
305
- color_enabled
306
- )
307
- end
308
- end
309
- end
310
-
311
- context "and some of them are RSpec matchers" do
312
- it "produces the correct failure message" do
313
- as_both_colored_and_uncolored do |color_enabled|
314
- snippet = <<~TEST.strip
315
- actual = [
316
- { foo: "bar" },
317
- double(baz: "qux"),
318
- { blargh: "riddle" }
319
- ]
320
- expected = [
321
- a_hash_including(foo: "bar"),
322
- a_collection_containing_exactly("zing"),
323
- an_object_having_attributes(baz: "qux"),
324
- ]
325
- expect(actual).to contain_exactly(*expected)
326
- TEST
327
- program =
328
- make_plain_test_program(snippet, color_enabled: color_enabled)
329
-
330
- expected_output =
331
- build_expected_output(
332
- color_enabled: color_enabled,
333
- snippet: "expect(actual).to contain_exactly(*expected)",
334
- expectation:
335
- proc do
336
- line do
337
- plain " Expected "
338
- actual %|[{ foo: "bar" }, #<Double (anonymous) baz: "qux">, { blargh: "riddle" }]|
339
- end
340
-
341
- line do
342
- plain "to contain exactly "
343
- expected %|#<a hash including (foo: "bar")>|
344
- plain ", "
345
- expected %|#<a collection containing exactly ("zing")>|
346
- plain " and "
347
- expected %|#<an object having attributes (baz: "qux")>|
348
- end
349
- end,
350
- diff:
351
- proc do
352
- plain_line " ["
353
- plain_line " {"
354
- plain_line %| foo: "bar"|
355
- plain_line " },"
356
- plain_line " #<Double (anonymous) {"
357
- plain_line %| baz: "qux"|
358
- plain_line " }>,"
359
- actual_line "+ {"
360
- actual_line %|+ blargh: "riddle"|
361
- actual_line "+ },"
362
- expected_line "- #<a collection containing exactly ("
363
- expected_line %|- "zing"|
364
- # expected_line %|- )>| # TODO
365
- expected_line "- )>,"
366
- plain_line " ]"
367
- end
368
- )
369
-
370
- expect(program).to produce_output_when_run(expected_output).in_color(
371
- color_enabled
372
- )
373
- end
374
- end
375
- end
376
- end
377
- end