super_diff 0.13.0 → 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 (275) 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/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 -26
  184. data/super_diff.gemspec +20 -19
  185. metadata +6 -185
  186. data/spec/examples.txt +0 -450
  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/spec_helper.rb +0 -91
  210. data/spec/support/colorizer.rb +0 -9
  211. data/spec/support/command_runner.rb +0 -253
  212. data/spec/support/helpers.rb +0 -21
  213. data/spec/support/integration/helpers.rb +0 -124
  214. data/spec/support/integration/matchers/produce_output_when_run_matcher.rb +0 -104
  215. data/spec/support/integration/matchers.rb +0 -177
  216. data/spec/support/integration/test_programs/base.rb +0 -143
  217. data/spec/support/integration/test_programs/plain.rb +0 -19
  218. data/spec/support/integration/test_programs/rspec_active_record.rb +0 -20
  219. data/spec/support/integration/test_programs/rspec_active_support.rb +0 -20
  220. data/spec/support/integration/test_programs/rspec_rails.rb +0 -20
  221. data/spec/support/integration/test_programs/rspec_rails_engine.rb +0 -20
  222. data/spec/support/models/a.rb +0 -11
  223. data/spec/support/models/active_record/person.rb +0 -28
  224. data/spec/support/models/active_record/query.rb +0 -15
  225. data/spec/support/models/active_record/shipping_address.rb +0 -24
  226. data/spec/support/models/customer.rb +0 -22
  227. data/spec/support/models/empty_class.rb +0 -6
  228. data/spec/support/models/item.rb +0 -10
  229. data/spec/support/models/order.rb +0 -9
  230. data/spec/support/models/person.rb +0 -20
  231. data/spec/support/models/player.rb +0 -30
  232. data/spec/support/models/point.rb +0 -7
  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/inspection_tree_builders/data_object_spec.rb +0 -146
  245. data/spec/unit/basic/operation_tree_builders/data_object_spec.rb +0 -82
  246. data/spec/unit/basic/operation_tree_flatteners/array_spec.rb +0 -637
  247. data/spec/unit/basic/operation_tree_flatteners/custom_object_spec.rb +0 -685
  248. data/spec/unit/basic/operation_tree_flatteners/default_object_spec.rb +0 -685
  249. data/spec/unit/basic/operation_tree_flatteners/hash_spec.rb +0 -671
  250. data/spec/unit/basic/operation_tree_flatteners/multiline_string_spec.rb +0 -131
  251. data/spec/unit/core/configuration_no_rspec_spec.rb +0 -58
  252. data/spec/unit/core/configuration_spec.rb +0 -176
  253. data/spec/unit/core/helpers_spec.rb +0 -68
  254. data/spec/unit/core/tiered_lines_elider_spec.rb +0 -6328
  255. data/spec/unit/core/tiered_lines_formatter_spec.rb +0 -131
  256. data/spec/unit/deprecations_spec.rb +0 -176
  257. data/spec/unit/equality_matchers/main_spec.rb +0 -1842
  258. data/spec/unit/rspec/matchers/be_compared_to_spec.rb +0 -23
  259. data/spec/unit/rspec/matchers/be_falsey_spec.rb +0 -9
  260. data/spec/unit/rspec/matchers/be_nil_spec.rb +0 -9
  261. data/spec/unit/rspec/matchers/be_predicate_spec.rb +0 -31
  262. data/spec/unit/rspec/matchers/be_spec.rb +0 -17
  263. data/spec/unit/rspec/matchers/be_truthy_spec.rb +0 -9
  264. data/spec/unit/rspec/matchers/contain_exactly_spec.rb +0 -11
  265. data/spec/unit/rspec/matchers/eq_spec.rb +0 -9
  266. data/spec/unit/rspec/matchers/have_attributes_spec.rb +0 -11
  267. data/spec/unit/rspec/matchers/have_predicate_spec.rb +0 -21
  268. data/spec/unit/rspec/matchers/include_spec.rb +0 -21
  269. data/spec/unit/rspec/matchers/match_array_spec.rb +0 -11
  270. data/spec/unit/rspec/matchers/match_spec.rb +0 -9
  271. data/spec/unit/rspec/matchers/raise_error_spec.rb +0 -77
  272. data/spec/unit/rspec/matchers/respond_to_spec.rb +0 -85
  273. data/spec/unit/rspec/object_inspection/rspec_matcher_spec.rb +0 -91
  274. data/spec/unit/rspec/object_inspection_spec.rb +0 -471
  275. 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