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,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