super_diff 0.13.0 → 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 (276) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  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 +6 -4
  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 +2 -0
  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 +15 -9
  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 +4 -2
  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 +12 -10
  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 +9 -6
  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 +14 -38
  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 +13 -11
  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 -10
  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 +2 -0
  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 -26
  185. data/super_diff.gemspec +20 -19
  186. metadata +6 -185
  187. data/spec/examples.txt +0 -450
  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/spec_helper.rb +0 -91
  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/point.rb +0 -7
  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/inspection_tree_builders/data_object_spec.rb +0 -146
  246. data/spec/unit/basic/operation_tree_builders/data_object_spec.rb +0 -82
  247. data/spec/unit/basic/operation_tree_flatteners/array_spec.rb +0 -637
  248. data/spec/unit/basic/operation_tree_flatteners/custom_object_spec.rb +0 -685
  249. data/spec/unit/basic/operation_tree_flatteners/default_object_spec.rb +0 -685
  250. data/spec/unit/basic/operation_tree_flatteners/hash_spec.rb +0 -671
  251. data/spec/unit/basic/operation_tree_flatteners/multiline_string_spec.rb +0 -131
  252. data/spec/unit/core/configuration_no_rspec_spec.rb +0 -58
  253. data/spec/unit/core/configuration_spec.rb +0 -176
  254. data/spec/unit/core/helpers_spec.rb +0 -68
  255. data/spec/unit/core/tiered_lines_elider_spec.rb +0 -6328
  256. data/spec/unit/core/tiered_lines_formatter_spec.rb +0 -131
  257. data/spec/unit/deprecations_spec.rb +0 -176
  258. data/spec/unit/equality_matchers/main_spec.rb +0 -1842
  259. data/spec/unit/rspec/matchers/be_compared_to_spec.rb +0 -23
  260. data/spec/unit/rspec/matchers/be_falsey_spec.rb +0 -9
  261. data/spec/unit/rspec/matchers/be_nil_spec.rb +0 -9
  262. data/spec/unit/rspec/matchers/be_predicate_spec.rb +0 -31
  263. data/spec/unit/rspec/matchers/be_spec.rb +0 -17
  264. data/spec/unit/rspec/matchers/be_truthy_spec.rb +0 -9
  265. data/spec/unit/rspec/matchers/contain_exactly_spec.rb +0 -11
  266. data/spec/unit/rspec/matchers/eq_spec.rb +0 -9
  267. data/spec/unit/rspec/matchers/have_attributes_spec.rb +0 -11
  268. data/spec/unit/rspec/matchers/have_predicate_spec.rb +0 -21
  269. data/spec/unit/rspec/matchers/include_spec.rb +0 -21
  270. data/spec/unit/rspec/matchers/match_array_spec.rb +0 -11
  271. data/spec/unit/rspec/matchers/match_spec.rb +0 -9
  272. data/spec/unit/rspec/matchers/raise_error_spec.rb +0 -77
  273. data/spec/unit/rspec/matchers/respond_to_spec.rb +0 -85
  274. data/spec/unit/rspec/object_inspection/rspec_matcher_spec.rb +0 -91
  275. data/spec/unit/rspec/object_inspection_spec.rb +0 -471
  276. data/spec/unit/super_diff_spec.rb +0 -2115
@@ -1,131 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe SuperDiff::Basic::OperationTreeFlatteners::MultilineString do
4
- context "given an empty tree" do
5
- it "returns an empty set of lines" do
6
- operation_tree = SuperDiff::Basic::OperationTrees::MultilineString.new([])
7
- flattened_operation_tree = described_class.call(operation_tree)
8
- expect(flattened_operation_tree).to eq([])
9
- end
10
- end
11
-
12
- context "given a tree of only noops" do
13
- it "returns a series of lines from printing each value" do
14
- collection = Array.new(3) { :some_value }
15
- operation_tree =
16
- SuperDiff::Basic::OperationTrees::MultilineString.new(
17
- [
18
- double(
19
- :operation,
20
- name: :noop,
21
- collection: collection,
22
- value: "This is a line\n",
23
- index: 0
24
- ),
25
- double(
26
- :operation,
27
- name: :noop,
28
- collection: collection,
29
- value: "This is another line\n",
30
- index: 1
31
- ),
32
- double(
33
- :operation,
34
- name: :noop,
35
- collection: collection,
36
- value: "This is yet another line",
37
- index: 2
38
- )
39
- ]
40
- )
41
-
42
- flattened_operation_tree = described_class.call(operation_tree)
43
-
44
- expect(flattened_operation_tree).to match(
45
- [
46
- an_object_having_attributes(
47
- type: :noop,
48
- indentation_level: 0,
49
- prefix: "",
50
- value: %(This is a line\\n),
51
- add_comma: false
52
- ),
53
- an_object_having_attributes(
54
- type: :noop,
55
- indentation_level: 0,
56
- prefix: "",
57
- value: %(This is another line\\n),
58
- add_comma: false
59
- ),
60
- an_object_having_attributes(
61
- type: :noop,
62
- indentation_level: 0,
63
- prefix: "",
64
- value: "This is yet another line",
65
- add_comma: false
66
- )
67
- ]
68
- )
69
- end
70
- end
71
-
72
- context "given a tree of noops, inserts, and deletes" do
73
- it "returns a series of lines from printing each value" do
74
- collection = Array.new(3) { :some_value }
75
- operation_tree =
76
- SuperDiff::Basic::OperationTrees::MultilineString.new(
77
- [
78
- double(
79
- :operation,
80
- name: :noop,
81
- collection: collection,
82
- value: "This is a line\n",
83
- index: 0
84
- ),
85
- double(
86
- :operation,
87
- name: :delete,
88
- collection: collection,
89
- value: "This is another line\n",
90
- index: 1
91
- ),
92
- double(
93
- :operation,
94
- name: :insert,
95
- collection: collection,
96
- value: "This is yet another line",
97
- index: 1
98
- )
99
- ]
100
- )
101
-
102
- flattened_operation_tree = described_class.call(operation_tree)
103
-
104
- expect(flattened_operation_tree).to match(
105
- [
106
- an_object_having_attributes(
107
- type: :noop,
108
- indentation_level: 0,
109
- prefix: "",
110
- value: %(This is a line\\n),
111
- add_comma: false
112
- ),
113
- an_object_having_attributes(
114
- type: :delete,
115
- indentation_level: 0,
116
- prefix: "",
117
- value: %(This is another line\\n),
118
- add_comma: false
119
- ),
120
- an_object_having_attributes(
121
- type: :insert,
122
- indentation_level: 0,
123
- prefix: "",
124
- value: "This is yet another line",
125
- add_comma: false
126
- )
127
- ]
128
- )
129
- end
130
- end
131
- end
@@ -1,58 +0,0 @@
1
- require "delegate"
2
- require "super_diff"
3
-
4
- class FakeTTYDecorator < SimpleDelegator
5
- def initialize(obj, is_tty:)
6
- super(obj)
7
- @is_tty = is_tty
8
- end
9
-
10
- def isatty = @is_tty
11
- def tty? = isatty
12
- end
13
-
14
- RSpec.describe SuperDiff::Core::Configuration, with_superdiff_rspec: false do
15
- describe "#color_enabled?" do
16
- it "is true when stdout is a TTY" do
17
- original_stdout = $stdout
18
- color_enabled = nil
19
- begin
20
- $stdout = FakeTTYDecorator.new(StringIO.new, is_tty: true)
21
- color_enabled = SuperDiff.configuration.color_enabled?
22
- ensure
23
- $stdout = original_stdout
24
- end
25
- expect(color_enabled).to be(true)
26
- end
27
-
28
- it "is false when stdout is not a TTY but we are in CI" do
29
- original_stdout = $stdout
30
- original_ci = ENV["CI"]
31
- color_enabled = nil
32
- begin
33
- $stdout = FakeTTYDecorator.new(StringIO.new, is_tty: false)
34
- ENV["CI"] = "true"
35
- color_enabled = SuperDiff.configuration.color_enabled?
36
- ensure
37
- $stdout = original_stdout
38
- ENV["CI"] = original_ci
39
- end
40
- expect(color_enabled).to be(true)
41
- end
42
-
43
- it "is false when stdout is not a TTY and we are not in CI" do
44
- original_stdout = $stdout
45
- original_ci = ENV["CI"]
46
- color_enabled = nil
47
- begin
48
- $stdout = FakeTTYDecorator.new(StringIO.new, is_tty: false)
49
- ENV["CI"] = nil
50
- color_enabled = SuperDiff.configuration.color_enabled?
51
- ensure
52
- $stdout = original_stdout
53
- ENV["CI"] = original_ci
54
- end
55
- expect(color_enabled).to be(false)
56
- end
57
- end
58
- end
@@ -1,176 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe SuperDiff::Core::Configuration do
4
- it "maintains frozen instance variables" do
5
- expect(described_class.new.instance_variables).to all(be_frozen)
6
- end
7
-
8
- describe ".new" do
9
- context "when passed nothing" do
10
- subject(:config) { described_class.new }
11
-
12
- it "creates a Configuration object with reasonable defaults" do
13
- expect(config.actual_color).to eq(:yellow)
14
- end
15
- end
16
-
17
- context "when passed options" do
18
- subject(:config) { described_class.new(actual_color: :cyan) }
19
-
20
- it "overrides the defaults with the provided options" do
21
- expect(config.actual_color).to eq(:cyan)
22
- end
23
-
24
- it "uses the defaults for other options" do
25
- expect(config.border_color).to eq(:blue)
26
- end
27
- end
28
- end
29
-
30
- describe ".dup" do
31
- subject(:duplicated_config) { original_config.dup }
32
-
33
- let(:original_config) { described_class.new(overrides) }
34
- let(:in_both) { Class.new }
35
- let(:in_duplicated_only) { Class.new }
36
- let(:in_original_only) { Class.new }
37
-
38
- let(:overrides) do
39
- {
40
- extra_diff_formatter_classes: [],
41
- extra_differ_classes: [],
42
- extra_inspection_tree_builder_classes: [],
43
- extra_operation_tree_builder_classes: [],
44
- extra_operation_tree_classes: []
45
- }
46
- end
47
-
48
- %i[
49
- diff_formatter
50
- differ
51
- operation_tree_builder
52
- operation_tree
53
- inspection_tree_builder
54
- ].each do |object_type|
55
- it "duplicates extra #{object_type.to_s.tr("_", " ")} classes" do
56
- add_method_name = :"add_extra_#{object_type}_class"
57
- get_method_name = :"extra_#{object_type}_classes"
58
-
59
- original_config.send(add_method_name, in_both)
60
- expect {
61
- duplicated_config.send(get_method_name) << in_duplicated_only
62
- }.to raise_error(FrozenError)
63
- duplicated_config.send(add_method_name, in_duplicated_only)
64
- original_config.send(add_method_name, in_original_only)
65
-
66
- expect(original_config.send(get_method_name)).to include(
67
- in_both,
68
- in_original_only
69
- )
70
- expect(original_config.send(get_method_name)).not_to include(
71
- in_duplicated_only
72
- )
73
-
74
- expect(duplicated_config.send(get_method_name)).to include(
75
- in_both,
76
- in_duplicated_only
77
- )
78
- expect(duplicated_config.send(get_method_name)).not_to include(
79
- in_original_only
80
- )
81
- end
82
- end
83
- end
84
-
85
- %i[
86
- diff_formatter
87
- differ
88
- operation_tree_builder
89
- operation_tree
90
- inspection_tree_builder
91
- ].each do |object_type|
92
- describe "#add_extra_#{object_type}_classes" do
93
- let(:config) { described_class.new }
94
- let(:new_class1) { Class.new }
95
- let(:new_class2) { Class.new }
96
-
97
- it "appends multiple given classes" do
98
- config.send("add_extra_#{object_type}_classes", new_class1, new_class2)
99
- expect(config.send("extra_#{object_type}_classes")[-2..]).to eq(
100
- [new_class1, new_class2]
101
- )
102
- end
103
-
104
- it "appends a single given class" do
105
- config.send("add_extra_#{object_type}_classes", new_class1)
106
- expect(config.send("extra_#{object_type}_classes")[-1]).to eq(
107
- new_class1
108
- )
109
- end
110
- end
111
-
112
- describe "#prepend_extra_#{object_type}_classes" do
113
- let(:config) { described_class.new }
114
- let(:new_class1) { Class.new }
115
- let(:new_class2) { Class.new }
116
-
117
- it "prepends multiple given classes" do
118
- config.send(
119
- "prepend_extra_#{object_type}_classes",
120
- new_class1,
121
- new_class2
122
- )
123
- expect(config.send("extra_#{object_type}_classes")[..1]).to eq(
124
- [new_class1, new_class2]
125
- )
126
- end
127
-
128
- it "prepends a single given class" do
129
- config.send("prepend_extra_#{object_type}_classes", new_class1)
130
- expect(config.send("extra_#{object_type}_classes")[0]).to eq(new_class1)
131
- end
132
- end
133
- end
134
-
135
- describe "#color_enabled?" do
136
- context "when explicitly set" do
137
- it "equals what was set" do
138
- [true, false].each do |value|
139
- SuperDiff.configuration.color_enabled.tap do |original|
140
- SuperDiff.configuration.color_enabled = value
141
- expect(SuperDiff.configuration.color_enabled?).to be(value)
142
- SuperDiff.configuration.color_enabled = original
143
- end
144
- end
145
- end
146
- end
147
-
148
- context "when not explicitly set" do
149
- context 'when ENV["CI"] is true' do
150
- it "is true" do
151
- color_enabled = nil
152
- ClimateControl.modify(CI: "true") do
153
- color_enabled = SuperDiff.configuration.color_enabled?
154
- end
155
- expect(color_enabled).to be(true)
156
- end
157
- end
158
-
159
- context 'when ENV["CI"] is not true' do
160
- it "defaults to RSpec's config" do
161
- ClimateControl.modify(CI: nil) do
162
- %i[automatic on off].each do |value|
163
- RSpec.configuration.color_mode.tap do |original|
164
- RSpec.configuration.color_mode = value
165
- expect(SuperDiff.configuration.color_enabled?).to eq(
166
- RSpec.configuration.color_enabled?
167
- )
168
- RSpec.configuration.color_mode = original
169
- end
170
- end
171
- end
172
- end
173
- end
174
- end
175
- end
176
- end
@@ -1,68 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe SuperDiff::Core::Helpers do
4
- shared_examples "helper tests" do
5
- describe "with_slice_of_array_replaced" do
6
- context "if the given range covers the whole array" do
7
- it "returns a copy of the array replaced with the replacement" do
8
- updated_array =
9
- helper.with_slice_of_array_replaced([1, 2, 3], 0..2, :x)
10
-
11
- expect(updated_array).to eq([:x])
12
- end
13
- end
14
-
15
- context "if the given range is at the start of the array" do
16
- it "returns the selected slice replaced with the replacement + the rest" do
17
- updated_array =
18
- helper.with_slice_of_array_replaced([1, 2, 3, 4, 5], 0..2, :x)
19
-
20
- expect(updated_array).to eq([:x, 4, 5])
21
- end
22
- end
23
-
24
- context "if the given range is at the end of the array" do
25
- it "returns the selected slice replaced with the replacement + the rest" do
26
- updated_array =
27
- helper.with_slice_of_array_replaced([1, 2, 3, 4, 5], 2..4, :x)
28
-
29
- expect(updated_array).to eq([1, 2, :x])
30
- end
31
- end
32
- end
33
-
34
- describe "object_address_for" do
35
- if SuperDiff::Core::Helpers.ruby_version_matches?(">= 2.7.0")
36
- it "returns an empty string for Floats" do
37
- expect(helper.object_address_for(1.0)).to eq("")
38
- end
39
-
40
- it "returns an object address for Objects" do
41
- object = Object.new
42
- address = JSON.parse(ObjectSpace.dump(object))["address"]
43
- expect(helper.object_address_for(object)).to eq(
44
- "0x%016x" % Integer(address, 16)
45
- )
46
- end
47
- end
48
- end
49
- end
50
-
51
- describe "as class methods" do
52
- let(:helper) { described_class }
53
-
54
- include_examples "helper tests"
55
- end
56
-
57
- describe "as instance methods" do
58
- let(:helper) { described_class }
59
- let(:helper) do
60
- mod = described_class
61
- Object.new.tap do |helper|
62
- helper.singleton_class.class_eval { include mod }
63
- end
64
- end
65
-
66
- include_examples "helper tests"
67
- end
68
- end