super_diff 0.12.1 → 0.14.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 (271) 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/object_inspection.rb +7 -5
  175. data/lib/super_diff/rspec/operation_tree_builders/collection_containing_exactly.rb +4 -4
  176. data/lib/super_diff/rspec/operation_tree_builders/collection_including.rb +2 -0
  177. data/lib/super_diff/rspec/operation_tree_builders/hash_including.rb +2 -0
  178. data/lib/super_diff/rspec/operation_tree_builders/object_having_attributes.rb +2 -0
  179. data/lib/super_diff/rspec/operation_tree_builders.rb +6 -4
  180. data/lib/super_diff/rspec-rails.rb +4 -2
  181. data/lib/super_diff/rspec.rb +15 -13
  182. data/lib/super_diff/version.rb +3 -1
  183. data/lib/super_diff.rb +24 -27
  184. data/super_diff.gemspec +20 -18
  185. metadata +15 -182
  186. data/spec/examples.txt +0 -704
  187. data/spec/integration/rails/active_record_spec.rb +0 -21
  188. data/spec/integration/rails/active_support_spec.rb +0 -19
  189. data/spec/integration/rails/engines_spec.rb +0 -25
  190. data/spec/integration/rails/hash_with_indifferent_access_spec.rb +0 -21
  191. data/spec/integration/rspec/be_falsey_matcher_spec.rb +0 -58
  192. data/spec/integration/rspec/be_matcher_spec.rb +0 -605
  193. data/spec/integration/rspec/be_nil_matcher_spec.rb +0 -57
  194. data/spec/integration/rspec/be_predicate_matcher_spec.rb +0 -615
  195. data/spec/integration/rspec/be_truthy_matcher_spec.rb +0 -62
  196. data/spec/integration/rspec/contain_exactly_matcher_spec.rb +0 -377
  197. data/spec/integration/rspec/eq_matcher_spec.rb +0 -1066
  198. data/spec/integration/rspec/generic_describable_matchers_spec.rb +0 -177
  199. data/spec/integration/rspec/have_attributes_matcher_spec.rb +0 -443
  200. data/spec/integration/rspec/have_predicate_matcher_spec.rb +0 -478
  201. data/spec/integration/rspec/include_matcher_spec.rb +0 -452
  202. data/spec/integration/rspec/magic_metadata_spec.rb +0 -51
  203. data/spec/integration/rspec/match_array_matcher_spec.rb +0 -424
  204. data/spec/integration/rspec/match_matcher_spec.rb +0 -1359
  205. data/spec/integration/rspec/raise_error_matcher_spec.rb +0 -1488
  206. data/spec/integration/rspec/respond_to_matcher_spec.rb +0 -999
  207. data/spec/integration/rspec/third_party_matcher_spec.rb +0 -245
  208. data/spec/integration/rspec/unhandled_errors_spec.rb +0 -150
  209. data/spec/internal/log/test.log +0 -0
  210. data/spec/spec_helper.rb +0 -90
  211. data/spec/support/colorizer.rb +0 -9
  212. data/spec/support/command_runner.rb +0 -253
  213. data/spec/support/helpers.rb +0 -21
  214. data/spec/support/integration/helpers.rb +0 -124
  215. data/spec/support/integration/matchers/produce_output_when_run_matcher.rb +0 -104
  216. data/spec/support/integration/matchers.rb +0 -177
  217. data/spec/support/integration/test_programs/base.rb +0 -143
  218. data/spec/support/integration/test_programs/plain.rb +0 -19
  219. data/spec/support/integration/test_programs/rspec_active_record.rb +0 -20
  220. data/spec/support/integration/test_programs/rspec_active_support.rb +0 -20
  221. data/spec/support/integration/test_programs/rspec_rails.rb +0 -20
  222. data/spec/support/integration/test_programs/rspec_rails_engine.rb +0 -20
  223. data/spec/support/models/a.rb +0 -11
  224. data/spec/support/models/active_record/person.rb +0 -28
  225. data/spec/support/models/active_record/query.rb +0 -15
  226. data/spec/support/models/active_record/shipping_address.rb +0 -24
  227. data/spec/support/models/customer.rb +0 -22
  228. data/spec/support/models/empty_class.rb +0 -6
  229. data/spec/support/models/item.rb +0 -10
  230. data/spec/support/models/order.rb +0 -9
  231. data/spec/support/models/person.rb +0 -20
  232. data/spec/support/models/player.rb +0 -30
  233. data/spec/support/models/shipping_address.rb +0 -25
  234. data/spec/support/shared_examples/active_record.rb +0 -428
  235. data/spec/support/shared_examples/active_support.rb +0 -188
  236. data/spec/support/shared_examples/elided_diffs.rb +0 -938
  237. data/spec/support/shared_examples/hash_with_indifferent_access.rb +0 -749
  238. data/spec/support/shared_examples/key.rb +0 -123
  239. data/spec/support/unit/helpers.rb +0 -24
  240. data/spec/support/unit/matchers/be_deprecated_in_favor_of.rb +0 -39
  241. data/spec/support/unit/matchers/match_output.rb +0 -40
  242. data/spec/unit/active_record/object_inspection_spec.rb +0 -289
  243. data/spec/unit/active_support/object_inspection_spec.rb +0 -170
  244. data/spec/unit/basic/operation_tree_flatteners/array_spec.rb +0 -637
  245. data/spec/unit/basic/operation_tree_flatteners/custom_object_spec.rb +0 -685
  246. data/spec/unit/basic/operation_tree_flatteners/default_object_spec.rb +0 -685
  247. data/spec/unit/basic/operation_tree_flatteners/hash_spec.rb +0 -671
  248. data/spec/unit/basic/operation_tree_flatteners/multiline_string_spec.rb +0 -131
  249. data/spec/unit/core/helpers_spec.rb +0 -68
  250. data/spec/unit/core/tiered_lines_elider_spec.rb +0 -6328
  251. data/spec/unit/core/tiered_lines_formatter_spec.rb +0 -131
  252. data/spec/unit/deprecations_spec.rb +0 -176
  253. data/spec/unit/equality_matchers/main_spec.rb +0 -1842
  254. data/spec/unit/rspec/matchers/be_compared_to_spec.rb +0 -23
  255. data/spec/unit/rspec/matchers/be_falsey_spec.rb +0 -9
  256. data/spec/unit/rspec/matchers/be_nil_spec.rb +0 -9
  257. data/spec/unit/rspec/matchers/be_predicate_spec.rb +0 -31
  258. data/spec/unit/rspec/matchers/be_spec.rb +0 -17
  259. data/spec/unit/rspec/matchers/be_truthy_spec.rb +0 -9
  260. data/spec/unit/rspec/matchers/contain_exactly_spec.rb +0 -11
  261. data/spec/unit/rspec/matchers/eq_spec.rb +0 -9
  262. data/spec/unit/rspec/matchers/have_attributes_spec.rb +0 -11
  263. data/spec/unit/rspec/matchers/have_predicate_spec.rb +0 -21
  264. data/spec/unit/rspec/matchers/include_spec.rb +0 -21
  265. data/spec/unit/rspec/matchers/match_array_spec.rb +0 -11
  266. data/spec/unit/rspec/matchers/match_spec.rb +0 -9
  267. data/spec/unit/rspec/matchers/raise_error_spec.rb +0 -77
  268. data/spec/unit/rspec/matchers/respond_to_spec.rb +0 -85
  269. data/spec/unit/rspec/object_inspection/rspec_matcher_spec.rb +0 -91
  270. data/spec/unit/rspec/object_inspection_spec.rb +0 -471
  271. data/spec/unit/super_diff_spec.rb +0 -2115
@@ -1,478 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe "Integration with RSpec's #have_<predicate> matcher",
4
- type: :integration do
5
- context "when the predicate method doesn't exist on the object" do
6
- context "when the predicate method doesn't exist on the object" do
7
- it "produces the correct failure message" do
8
- as_both_colored_and_uncolored do |color_enabled|
9
- snippet = "expect(:words).to have_power"
10
- program =
11
- make_plain_test_program(snippet, color_enabled: color_enabled)
12
-
13
- expected_output =
14
- build_expected_output(
15
- color_enabled: color_enabled,
16
- snippet: snippet,
17
- expectation:
18
- proc do
19
- line do
20
- plain "Expected "
21
- actual ":words"
22
- plain " to respond to "
23
- expected "has_power?"
24
- plain "."
25
- end
26
- end
27
- )
28
-
29
- expect(program).to produce_output_when_run(expected_output).in_color(
30
- color_enabled
31
- )
32
- end
33
- end
34
- end
35
-
36
- context "when the inspected version of the actual value is long" do
37
- it "produces the correct failure message" do
38
- as_both_colored_and_uncolored do |color_enabled|
39
- snippet = <<~TEST.strip
40
- hash = { a: "lot", of: "keys", and: "things", like: "that", lets: "add", more: "keys" }
41
- expect(hash).to have_mapping
42
- TEST
43
- program =
44
- make_plain_test_program(snippet, color_enabled: color_enabled)
45
-
46
- expected_output =
47
- build_expected_output(
48
- color_enabled: color_enabled,
49
- snippet: "expect(hash).to have_mapping",
50
- newline_before_expectation: true,
51
- expectation:
52
- proc do
53
- line do
54
- plain " Expected "
55
- actual %|{ a: "lot", of: "keys", and: "things", like: "that", lets: "add", more: "keys" }|
56
- end
57
-
58
- line do
59
- plain "to respond to "
60
- expected "has_mapping?"
61
- end
62
- end
63
- )
64
-
65
- expect(program).to produce_output_when_run(expected_output).in_color(
66
- color_enabled
67
- )
68
- end
69
- end
70
- end
71
- end
72
-
73
- context "when the predicate method exists on the object" do
74
- context "but is private" do
75
- context "when the inspected version of the actual value is short" do
76
- it "produces the correct failure message" do
77
- as_both_colored_and_uncolored do |color_enabled|
78
- snippet = <<~TEST.strip
79
- class Robot
80
- private def has_arms?; end
81
- end
82
-
83
- expect(Robot.new).to have_arms
84
- TEST
85
- program =
86
- make_plain_test_program(snippet, color_enabled: color_enabled)
87
-
88
- expected_output =
89
- build_expected_output(
90
- color_enabled: color_enabled,
91
- snippet: "expect(Robot.new).to have_arms",
92
- expectation:
93
- proc do
94
- line do
95
- plain "Expected "
96
- actual "#<Robot>"
97
- plain " to have a public method "
98
- expected "has_arms?"
99
- plain "."
100
- end
101
- end
102
- )
103
-
104
- expect(program).to produce_output_when_run(
105
- expected_output
106
- ).in_color(color_enabled).removing_object_ids
107
- end
108
- end
109
- end
110
-
111
- context "when the inspected version of the actual value is long" do
112
- it "produces the correct failure message" do
113
- as_both_colored_and_uncolored do |color_enabled|
114
- snippet = <<~TEST.strip
115
- hash = { a: "lot", of: "keys", and: "things", like: "that", lets: "add", more: "keys" }
116
-
117
- class << hash
118
- private def has_mapping?; end
119
- end
120
-
121
- expect(hash).to have_mapping
122
- TEST
123
- program =
124
- make_plain_test_program(snippet, color_enabled: color_enabled)
125
-
126
- expected_output =
127
- build_expected_output(
128
- color_enabled: color_enabled,
129
- snippet: "expect(hash).to have_mapping",
130
- newline_before_expectation: true,
131
- expectation:
132
- proc do
133
- line do
134
- plain " Expected "
135
- actual %|{ a: "lot", of: "keys", and: "things", like: "that", lets: "add", more: "keys" }|
136
- end
137
-
138
- line do
139
- plain "to have a public method "
140
- expected "has_mapping?"
141
- end
142
- end
143
- )
144
-
145
- expect(program).to produce_output_when_run(
146
- expected_output
147
- ).in_color(color_enabled).removing_object_ids
148
- end
149
- end
150
- end
151
- end
152
-
153
- context "and is public" do
154
- context "and returns false" do
155
- context "and takes arguments" do
156
- context "when the inspected version of the actual value is short" do
157
- it "produces the correct failure message" do
158
- as_both_colored_and_uncolored do |color_enabled|
159
- snippet = <<~TEST.strip
160
- class Drink
161
- def has_ingredients?(*); false; end
162
- end
163
-
164
- expect(Drink.new).to have_ingredients(:vodka)
165
- TEST
166
- program =
167
- make_plain_test_program(snippet, color_enabled: color_enabled)
168
-
169
- expected_output =
170
- build_expected_output(
171
- color_enabled: color_enabled,
172
- snippet: "expect(Drink.new).to have_ingredients(:vodka)",
173
- expectation:
174
- proc do
175
- line do
176
- plain "Expected "
177
- actual "#<Drink>"
178
- plain " to return a truthy result for "
179
- expected "has_ingredients?(:vodka)"
180
- plain "."
181
- end
182
- end
183
- )
184
-
185
- expect(program).to produce_output_when_run(
186
- expected_output
187
- ).in_color(color_enabled).removing_object_ids
188
- end
189
- end
190
- end
191
-
192
- context "when the inspected version of the actual value is long" do
193
- it "produces the correct failure message" do
194
- as_both_colored_and_uncolored do |color_enabled|
195
- snippet = <<~TEST.strip
196
- hash = { a: "lot", of: "keys", and: "things", like: "that", lets: "add", more: "keys" }
197
-
198
- class << hash
199
- def has_contents?(*args); false; end
200
- end
201
-
202
- expect(hash).to have_contents("keys", "upon", "keys")
203
- TEST
204
- program =
205
- make_plain_test_program(snippet, color_enabled: color_enabled)
206
-
207
- expected_output =
208
- build_expected_output(
209
- color_enabled: color_enabled,
210
- snippet:
211
- %|expect(hash).to have_contents("keys", "upon", "keys")|,
212
- newline_before_expectation: true,
213
- expectation:
214
- proc do
215
- line do
216
- plain " Expected "
217
- actual %|{ a: "lot", of: "keys", and: "things", like: "that", lets: "add", more: "keys" }|
218
- end
219
-
220
- line do
221
- plain "to return a truthy result for "
222
- expected %|has_contents?("keys", "upon", "keys")|
223
- end
224
- end
225
- )
226
-
227
- expect(program).to produce_output_when_run(
228
- expected_output
229
- ).in_color(color_enabled).removing_object_ids
230
- end
231
- end
232
- end
233
- end
234
-
235
- context "and takes no arguments" do
236
- context "when the inspected version of the actual value is short" do
237
- it "produces the correct failure message" do
238
- as_both_colored_and_uncolored do |color_enabled|
239
- snippet = <<~TEST.strip
240
- class Robot
241
- def has_arms?; false; end
242
- end
243
-
244
- expect(Robot.new).to have_arms
245
- TEST
246
- program =
247
- make_plain_test_program(snippet, color_enabled: color_enabled)
248
-
249
- expected_output =
250
- build_expected_output(
251
- color_enabled: color_enabled,
252
- snippet: "expect(Robot.new).to have_arms",
253
- expectation:
254
- proc do
255
- line do
256
- plain "Expected "
257
- actual "#<Robot>"
258
- plain " to return a truthy result for "
259
- expected "has_arms?"
260
- plain "."
261
- end
262
- end
263
- )
264
-
265
- expect(program).to produce_output_when_run(
266
- expected_output
267
- ).in_color(color_enabled).removing_object_ids
268
- end
269
- end
270
- end
271
-
272
- context "when the inspected version of the actual value is long" do
273
- it "produces the correct failure message" do
274
- as_both_colored_and_uncolored do |color_enabled|
275
- snippet = <<~TEST.strip
276
- hash = { a: "lot", of: "keys", and: "things", like: "that", lets: "add", more: "keys" }
277
-
278
- class << hash
279
- def has_mapping?; false; end
280
- end
281
-
282
- expect(hash).to have_mapping
283
- TEST
284
- program =
285
- make_plain_test_program(snippet, color_enabled: color_enabled)
286
-
287
- expected_output =
288
- build_expected_output(
289
- color_enabled: color_enabled,
290
- snippet: "expect(hash).to have_mapping",
291
- newline_before_expectation: true,
292
- expectation:
293
- proc do
294
- line do
295
- plain " Expected "
296
- actual %|{ a: "lot", of: "keys", and: "things", like: "that", lets: "add", more: "keys" }|
297
- end
298
-
299
- line do
300
- plain "to return a truthy result for "
301
- expected "has_mapping?"
302
- end
303
- end
304
- )
305
-
306
- expect(program).to produce_output_when_run(
307
- expected_output
308
- ).in_color(color_enabled).removing_object_ids
309
- end
310
- end
311
- end
312
- end
313
- end
314
-
315
- context "and returns true" do
316
- context "and takes arguments" do
317
- context "when the inspected version of the actual value is short" do
318
- it "produces the correct failure message" do
319
- as_both_colored_and_uncolored do |color_enabled|
320
- snippet = <<~TEST.strip
321
- class Drink
322
- def has_ingredients?(*); true; end
323
- end
324
-
325
- expect(Drink.new).not_to have_ingredients(:vodka)
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:
334
- "expect(Drink.new).not_to have_ingredients(:vodka)",
335
- expectation:
336
- proc do
337
- line do
338
- plain "Expected "
339
- actual "#<Drink>"
340
- plain " not to return a truthy result for "
341
- expected "has_ingredients?(:vodka)"
342
- plain "."
343
- end
344
- end
345
- )
346
-
347
- expect(program).to produce_output_when_run(
348
- expected_output
349
- ).in_color(color_enabled).removing_object_ids
350
- end
351
- end
352
- end
353
-
354
- context "when the inspected version of the actual value is long" do
355
- it "produces the correct failure message" do
356
- as_both_colored_and_uncolored do |color_enabled|
357
- snippet = <<~TEST.strip
358
- hash = { a: "lot", of: "keys", and: "things", like: "that", lets: "add", more: "keys" }
359
-
360
- class << hash
361
- def has_contents?(*args); true; end
362
- end
363
-
364
- expect(hash).not_to have_contents("keys", "upon", "keys")
365
- TEST
366
- program =
367
- make_plain_test_program(snippet, color_enabled: color_enabled)
368
-
369
- expected_output =
370
- build_expected_output(
371
- color_enabled: color_enabled,
372
- snippet:
373
- %|expect(hash).not_to have_contents("keys", "upon", "keys")|,
374
- newline_before_expectation: true,
375
- expectation:
376
- proc do
377
- line do
378
- plain " Expected "
379
- actual %|{ a: "lot", of: "keys", and: "things", like: "that", lets: "add", more: "keys" }|
380
- end
381
-
382
- line do
383
- plain "not to return a truthy result for "
384
- expected %|has_contents?("keys", "upon", "keys")|
385
- end
386
- end
387
- )
388
-
389
- expect(program).to produce_output_when_run(
390
- expected_output
391
- ).in_color(color_enabled).removing_object_ids
392
- end
393
- end
394
- end
395
- end
396
-
397
- context "and takes no arguments" do
398
- context "when the inspected version of the actual value is short" do
399
- it "produces the correct failure message when used in the negative" do
400
- as_both_colored_and_uncolored do |color_enabled|
401
- snippet = <<~TEST.strip
402
- class Robot
403
- def has_arms?; true; end
404
- end
405
-
406
- expect(Robot.new).not_to have_arms
407
- TEST
408
- program =
409
- make_plain_test_program(snippet, color_enabled: color_enabled)
410
-
411
- expected_output =
412
- build_expected_output(
413
- color_enabled: color_enabled,
414
- snippet: "expect(Robot.new).not_to have_arms",
415
- expectation:
416
- proc do
417
- line do
418
- plain "Expected "
419
- actual "#<Robot>"
420
- plain " not to return a truthy result for "
421
- expected "has_arms?"
422
- plain "."
423
- end
424
- end
425
- )
426
-
427
- expect(program).to produce_output_when_run(
428
- expected_output
429
- ).in_color(color_enabled).removing_object_ids
430
- end
431
- end
432
- end
433
-
434
- context "when the inspected version of the actual value is long" do
435
- it "produces the correct failure message when used in the negative" do
436
- as_both_colored_and_uncolored do |color_enabled|
437
- snippet = <<~TEST.strip
438
- hash = { a: "lot", of: "keys", and: "things", like: "that", lets: "add", more: "keys" }
439
-
440
- class << hash
441
- def has_mapping?; true; end
442
- end
443
-
444
- expect(hash).not_to have_mapping
445
- TEST
446
- program =
447
- make_plain_test_program(snippet, color_enabled: color_enabled)
448
-
449
- expected_output =
450
- build_expected_output(
451
- color_enabled: color_enabled,
452
- snippet: "expect(hash).not_to have_mapping",
453
- newline_before_expectation: true,
454
- expectation:
455
- proc do
456
- line do
457
- plain " Expected "
458
- actual %|{ a: "lot", of: "keys", and: "things", like: "that", lets: "add", more: "keys" }|
459
- end
460
-
461
- line do
462
- plain "not to return a truthy result for "
463
- expected "has_mapping?"
464
- end
465
- end
466
- )
467
-
468
- expect(program).to produce_output_when_run(
469
- expected_output
470
- ).in_color(color_enabled).removing_object_ids
471
- end
472
- end
473
- end
474
- end
475
- end
476
- end
477
- end
478
- end