super_diff 0.7.0 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (174) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +0 -1
  3. data/lib/super_diff.rb +27 -6
  4. data/lib/super_diff/active_record.rb +7 -7
  5. data/lib/super_diff/active_record/differs/active_record_relation.rb +3 -13
  6. data/lib/super_diff/active_record/object_inspection.rb +2 -6
  7. data/lib/super_diff/active_record/object_inspection/inspection_tree_builders.rb +16 -0
  8. data/lib/super_diff/active_record/object_inspection/{inspectors → inspection_tree_builders}/active_record_model.rb +19 -20
  9. data/lib/super_diff/active_record/object_inspection/{inspectors → inspection_tree_builders}/active_record_relation.rb +9 -8
  10. data/lib/super_diff/active_record/operation_tree_flatteners.rb +10 -0
  11. data/lib/super_diff/active_record/operation_tree_flatteners/active_record_relation.rb +17 -0
  12. data/lib/super_diff/active_record/operation_trees/active_record_relation.rb +8 -7
  13. data/lib/super_diff/active_support.rb +8 -8
  14. data/lib/super_diff/active_support/differs/hash_with_indifferent_access.rb +3 -13
  15. data/lib/super_diff/active_support/object_inspection.rb +2 -6
  16. data/lib/super_diff/active_support/object_inspection/{inspectors.rb → inspection_tree_builders.rb} +2 -2
  17. data/lib/super_diff/active_support/object_inspection/inspection_tree_builders/hash_with_indifferent_access.rb +37 -0
  18. data/lib/super_diff/active_support/operation_tree_builders/hash_with_indifferent_access.rb +17 -0
  19. data/lib/super_diff/active_support/operation_tree_flatteners.rb +10 -0
  20. data/lib/super_diff/active_support/operation_tree_flatteners/hash_with_indifferent_access.rb +17 -0
  21. data/lib/super_diff/active_support/operation_trees/hash_with_indifferent_access.rb +4 -7
  22. data/lib/super_diff/colorized_document_extensions.rb +9 -6
  23. data/lib/super_diff/configuration.rb +81 -8
  24. data/lib/super_diff/csi.rb +1 -2
  25. data/lib/super_diff/csi/four_bit_color.rb +0 -2
  26. data/lib/super_diff/differs/array.rb +1 -1
  27. data/lib/super_diff/differs/base.rb +3 -21
  28. data/lib/super_diff/differs/custom_object.rb +1 -1
  29. data/lib/super_diff/differs/default_object.rb +1 -1
  30. data/lib/super_diff/differs/hash.rb +1 -1
  31. data/lib/super_diff/differs/main.rb +1 -7
  32. data/lib/super_diff/differs/multiline_string.rb +1 -1
  33. data/lib/super_diff/differs/time_like.rb +1 -1
  34. data/lib/super_diff/equality_matchers/array.rb +2 -2
  35. data/lib/super_diff/equality_matchers/default.rb +2 -2
  36. data/lib/super_diff/equality_matchers/hash.rb +2 -2
  37. data/lib/super_diff/equality_matchers/multiline_string.rb +2 -2
  38. data/lib/super_diff/equality_matchers/primitive.rb +4 -7
  39. data/lib/super_diff/equality_matchers/singleline_string.rb +2 -2
  40. data/lib/super_diff/helpers.rb +52 -2
  41. data/lib/super_diff/line.rb +83 -0
  42. data/lib/super_diff/object_inspection.rb +12 -1
  43. data/lib/super_diff/object_inspection/inspection_tree.rb +183 -81
  44. data/lib/super_diff/object_inspection/inspection_tree_builders.rb +44 -0
  45. data/lib/super_diff/object_inspection/inspection_tree_builders/array.rb +38 -0
  46. data/lib/super_diff/object_inspection/inspection_tree_builders/base.rb +27 -0
  47. data/lib/super_diff/object_inspection/inspection_tree_builders/custom_object.rb +37 -0
  48. data/lib/super_diff/object_inspection/inspection_tree_builders/default_object.rb +63 -0
  49. data/lib/super_diff/object_inspection/{inspectors → inspection_tree_builders}/defaults.rb +1 -2
  50. data/lib/super_diff/object_inspection/inspection_tree_builders/hash.rb +46 -0
  51. data/lib/super_diff/object_inspection/{inspectors → inspection_tree_builders}/main.rb +5 -10
  52. data/lib/super_diff/object_inspection/inspection_tree_builders/primitive.rb +21 -0
  53. data/lib/super_diff/object_inspection/{inspectors → inspection_tree_builders}/time_like.rb +19 -18
  54. data/lib/super_diff/object_inspection/nodes.rb +33 -32
  55. data/lib/super_diff/object_inspection/nodes/as_lines_when_rendering_to_lines.rb +97 -0
  56. data/lib/super_diff/object_inspection/nodes/as_prefix_when_rendering_to_lines.rb +27 -0
  57. data/lib/super_diff/object_inspection/nodes/as_prelude_when_rendering_to_lines.rb +27 -0
  58. data/lib/super_diff/object_inspection/nodes/as_single_line.rb +33 -0
  59. data/lib/super_diff/object_inspection/nodes/base.rb +55 -20
  60. data/lib/super_diff/object_inspection/nodes/inspection.rb +47 -7
  61. data/lib/super_diff/object_inspection/nodes/nesting.rb +16 -5
  62. data/lib/super_diff/object_inspection/nodes/only_when.rb +54 -0
  63. data/lib/super_diff/object_inspection/nodes/text.rb +16 -2
  64. data/lib/super_diff/object_inspection/nodes/when_empty.rb +21 -6
  65. data/lib/super_diff/object_inspection/nodes/when_non_empty.rb +20 -5
  66. data/lib/super_diff/object_inspection/nodes/when_rendering_to_lines.rb +27 -0
  67. data/lib/super_diff/object_inspection/nodes/when_rendering_to_string.rb +27 -0
  68. data/lib/super_diff/object_inspection/prefix_for_next_node.rb +6 -0
  69. data/lib/super_diff/object_inspection/prelude_for_next_node.rb +6 -0
  70. data/lib/super_diff/operation_tree_builders/array.rb +7 -10
  71. data/lib/super_diff/operation_tree_builders/base.rb +6 -6
  72. data/lib/super_diff/operation_tree_builders/custom_object.rb +5 -2
  73. data/lib/super_diff/operation_tree_builders/default_object.rb +1 -1
  74. data/lib/super_diff/operation_tree_builders/hash.rb +0 -7
  75. data/lib/super_diff/operation_tree_builders/multiline_string.rb +2 -6
  76. data/lib/super_diff/operation_tree_flatteners.rb +20 -0
  77. data/lib/super_diff/operation_tree_flatteners/array.rb +15 -0
  78. data/lib/super_diff/operation_tree_flatteners/base.rb +54 -0
  79. data/lib/super_diff/operation_tree_flatteners/collection.rb +139 -0
  80. data/lib/super_diff/operation_tree_flatteners/custom_object.rb +28 -0
  81. data/lib/super_diff/operation_tree_flatteners/default_object.rb +32 -0
  82. data/lib/super_diff/operation_tree_flatteners/hash.rb +41 -0
  83. data/lib/super_diff/operation_tree_flatteners/multiline_string.rb +17 -0
  84. data/lib/super_diff/operation_trees/array.rb +4 -7
  85. data/lib/super_diff/operation_trees/base.rb +39 -16
  86. data/lib/super_diff/operation_trees/custom_object.rb +4 -8
  87. data/lib/super_diff/operation_trees/default_object.rb +28 -13
  88. data/lib/super_diff/operation_trees/hash.rb +4 -7
  89. data/lib/super_diff/operation_trees/main.rb +1 -1
  90. data/lib/super_diff/operation_trees/multiline_string.rb +4 -7
  91. data/lib/super_diff/operations/binary_operation.rb +1 -6
  92. data/lib/super_diff/operations/unary_operation.rb +2 -30
  93. data/lib/super_diff/recursion_guard.rb +3 -3
  94. data/lib/super_diff/rspec.rb +12 -13
  95. data/lib/super_diff/rspec/monkey_patches.rb +2 -2
  96. data/lib/super_diff/rspec/object_inspection.rb +4 -1
  97. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders.rb +44 -0
  98. data/lib/super_diff/rspec/object_inspection/{inspectors → inspection_tree_builders}/collection_containing_exactly.rb +9 -8
  99. data/lib/super_diff/rspec/object_inspection/{inspectors → inspection_tree_builders}/collection_including.rb +9 -8
  100. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/double.rb +103 -0
  101. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/hash_including.rb +36 -0
  102. data/lib/super_diff/rspec/object_inspection/{inspectors → inspection_tree_builders}/instance_of.rb +3 -5
  103. data/lib/super_diff/rspec/object_inspection/{inspectors → inspection_tree_builders}/kind_of.rb +3 -5
  104. data/lib/super_diff/rspec/object_inspection/{inspectors → inspection_tree_builders}/object_having_attributes.rb +10 -12
  105. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/primitive.rb +10 -0
  106. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/value_within.rb +33 -0
  107. data/lib/super_diff/rspec/operation_tree_builders/collection_containing_exactly.rb +0 -3
  108. data/lib/super_diff/tiered_lines.rb +4 -0
  109. data/lib/super_diff/tiered_lines_elider.rb +490 -0
  110. data/lib/super_diff/tiered_lines_formatter.rb +79 -0
  111. data/lib/super_diff/version.rb +1 -1
  112. data/spec/examples.txt +407 -410
  113. data/spec/integration/rails/active_support_spec.rb +19 -0
  114. data/spec/integration/rspec/contain_exactly_matcher_spec.rb +12 -6
  115. data/spec/integration/rspec/eq_matcher_spec.rb +22 -88
  116. data/spec/integration/rspec/have_attributes_matcher_spec.rb +6 -7
  117. data/spec/integration/rspec/match_array_matcher_spec.rb +14 -7
  118. data/spec/integration/rspec/match_matcher_spec.rb +10 -5
  119. data/spec/spec_helper.rb +1 -0
  120. data/spec/support/command_runner.rb +15 -25
  121. data/spec/support/helpers.rb +21 -0
  122. data/spec/support/integration/helpers.rb +2 -0
  123. data/spec/support/integration/matchers/produce_output_when_run_matcher.rb +3 -3
  124. data/spec/support/integration/test_programs/base.rb +36 -10
  125. data/spec/support/shared_examples/active_record.rb +3 -2
  126. data/spec/support/shared_examples/active_support.rb +65 -0
  127. data/spec/support/shared_examples/elided_diffs.rb +914 -0
  128. data/spec/support/shared_examples/hash_with_indifferent_access.rb +16 -16
  129. data/spec/support/unit/helpers.rb +15 -0
  130. data/spec/support/unit/matchers/match_output.rb +41 -0
  131. data/spec/unit/active_record/object_inspection_spec.rb +273 -0
  132. data/spec/unit/equality_matchers/main_spec.rb +51 -71
  133. data/spec/unit/helpers_spec.rb +61 -0
  134. data/spec/unit/operation_tree_flatteners/array_spec.rb +604 -0
  135. data/spec/unit/operation_tree_flatteners/custom_object_spec.rb +667 -0
  136. data/spec/unit/operation_tree_flatteners/default_object_spec.rb +687 -0
  137. data/spec/unit/operation_tree_flatteners/hash_spec.rb +632 -0
  138. data/spec/unit/operation_tree_flatteners/multiline_string_spec.rb +121 -0
  139. data/spec/unit/rspec/object_inspection_spec.rb +446 -0
  140. data/spec/unit/super_diff_spec.rb +1488 -846
  141. data/spec/unit/tiered_lines_elider_spec.rb +6356 -0
  142. data/spec/unit/tiered_lines_formatter_spec.rb +193 -0
  143. metadata +88 -50
  144. data/lib/super_diff/active_record/diff_formatters.rb +0 -10
  145. data/lib/super_diff/active_record/diff_formatters/active_record_relation.rb +0 -23
  146. data/lib/super_diff/active_record/object_inspection/inspectors.rb +0 -16
  147. data/lib/super_diff/active_support/diff_formatters.rb +0 -10
  148. data/lib/super_diff/active_support/diff_formatters/hash_with_indifferent_access.rb +0 -36
  149. data/lib/super_diff/active_support/object_inspection/inspectors/hash_with_indifferent_access.rb +0 -28
  150. data/lib/super_diff/diff_formatters.rb +0 -14
  151. data/lib/super_diff/diff_formatters/array.rb +0 -21
  152. data/lib/super_diff/diff_formatters/base.rb +0 -33
  153. data/lib/super_diff/diff_formatters/custom_object.rb +0 -30
  154. data/lib/super_diff/diff_formatters/default_object.rb +0 -46
  155. data/lib/super_diff/diff_formatters/defaults.rb +0 -10
  156. data/lib/super_diff/diff_formatters/hash.rb +0 -34
  157. data/lib/super_diff/diff_formatters/main.rb +0 -41
  158. data/lib/super_diff/object_inspection/inspectors.rb +0 -23
  159. data/lib/super_diff/object_inspection/inspectors/array.rb +0 -32
  160. data/lib/super_diff/object_inspection/inspectors/base.rb +0 -36
  161. data/lib/super_diff/object_inspection/inspectors/custom_object.rb +0 -37
  162. data/lib/super_diff/object_inspection/inspectors/default_object.rb +0 -61
  163. data/lib/super_diff/object_inspection/inspectors/hash.rb +0 -32
  164. data/lib/super_diff/object_inspection/inspectors/primitive.rb +0 -28
  165. data/lib/super_diff/object_inspection/inspectors/string.rb +0 -23
  166. data/lib/super_diff/object_inspection/nodes/break.rb +0 -15
  167. data/lib/super_diff/object_inspection/nodes/when_multiline.rb +0 -22
  168. data/lib/super_diff/object_inspection/nodes/when_singleline.rb +0 -24
  169. data/lib/super_diff/rspec/object_inspection/inspectors.rb +0 -40
  170. data/lib/super_diff/rspec/object_inspection/inspectors/hash_including.rb +0 -36
  171. data/lib/super_diff/rspec/object_inspection/inspectors/primitive.rb +0 -13
  172. data/lib/super_diff/rspec/object_inspection/inspectors/value_within.rb +0 -29
  173. data/spec/support/object_id.rb +0 -27
  174. data/spec/support/ruby_versions.rb +0 -11
@@ -0,0 +1,19 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe "Integration with ActiveSupport", type: :integration do
4
+ context "when using 'super_diff/rspec-rails'" do
5
+ include_context "integration with ActiveSupport"
6
+
7
+ def make_program(test, color_enabled:)
8
+ make_rspec_rails_test_program(test, color_enabled: color_enabled)
9
+ end
10
+ end
11
+
12
+ context "when using 'super_diff/active_support'" do
13
+ include_context "integration with ActiveSupport"
14
+
15
+ def make_program(test, color_enabled:)
16
+ make_rspec_active_record_program(test, color_enabled: color_enabled)
17
+ end
18
+ end
19
+ end
@@ -33,7 +33,8 @@ RSpec.describe "Integration with RSpec's #contain_exactly matcher", type: :integ
33
33
  plain_line %| "Marty",|
34
34
  actual_line %|+ "Jennifer",|
35
35
  actual_line %|+ "Doc",|
36
- expected_line %|- "Einie"|
36
+ # expected_line %|- "Einie"| # TODO
37
+ expected_line %|- "Einie",|
37
38
  plain_line %| ]|
38
39
  },
39
40
  )
@@ -132,7 +133,8 @@ RSpec.describe "Integration with RSpec's #contain_exactly matcher", type: :integ
132
133
  plain_line %| "Lorraine McFly",|
133
134
  actual_line %|+ "Einie",|
134
135
  expected_line %|- "Biff Tannen",|
135
- expected_line %|- "George McFly"|
136
+ # expected_line %|- "George McFly"| # TODO
137
+ expected_line %|- "George McFly",|
136
138
  plain_line %| ]|
137
139
  },
138
140
  )
@@ -243,7 +245,8 @@ RSpec.describe "Integration with RSpec's #contain_exactly matcher", type: :integ
243
245
  actual_line %|+ "Lorraine McFly",|
244
246
  expected_line %|- "Biff Tannen",|
245
247
  expected_line %|- /Georg McFly/,|
246
- expected_line %|- /Lorrain McFly/|
248
+ # expected_line %|- /Lorrain McFly/| # TODO
249
+ expected_line %|- /Lorrain McFly/,|
247
250
  plain_line %| ]|
248
251
  },
249
252
  )
@@ -330,7 +333,7 @@ RSpec.describe "Integration with RSpec's #contain_exactly matcher", type: :integ
330
333
  expectation: proc {
331
334
  line do
332
335
  plain %| Expected |
333
- actual %|[{ foo: "bar" }, #<Double (anonymous)>, { blargh: "riddle" }]|
336
+ actual %|[{ foo: "bar" }, #<Double (anonymous) baz: "qux">, { blargh: "riddle" }]|
334
337
  end
335
338
 
336
339
  line do
@@ -347,13 +350,16 @@ RSpec.describe "Integration with RSpec's #contain_exactly matcher", type: :integ
347
350
  plain_line %| {|
348
351
  plain_line %| foo: "bar"|
349
352
  plain_line %| },|
350
- plain_line %| #<Double (anonymous)>,|
353
+ plain_line %| #<Double (anonymous) {|
354
+ plain_line %| baz: "qux"|
355
+ plain_line %| }>,|
351
356
  actual_line %|+ {|
352
357
  actual_line %|+ blargh: "riddle"|
353
358
  actual_line %|+ },|
354
359
  expected_line %|- #<a collection containing exactly (|
355
360
  expected_line %|- "zing"|
356
- expected_line %|- )>|
361
+ # expected_line %|- )>| # TODO
362
+ expected_line %|- )>,|
357
363
  plain_line %| ]|
358
364
  },
359
365
  )
@@ -253,70 +253,6 @@ RSpec.describe "Integration with RSpec's #eq matcher", type: :integration do
253
253
  end
254
254
  end
255
255
 
256
- context "when comparing two different Time and ActiveSupport::TimeWithZone instances", active_record: true do
257
- it "produces the correct failure message when used in the positive" do
258
- as_both_colored_and_uncolored do |color_enabled|
259
- snippet = <<~RUBY
260
- expected = Time.utc(2011, 12, 13, 14, 15, 16)
261
- actual = Time.utc(2011, 12, 13, 15, 15, 16).in_time_zone("Europe/Stockholm")
262
- expect(expected).to eq(actual)
263
- RUBY
264
- program = make_rspec_rails_test_program(
265
- snippet,
266
- color_enabled: color_enabled,
267
- )
268
-
269
- expected_output = build_expected_output(
270
- color_enabled: color_enabled,
271
- snippet: %|expect(expected).to eq(actual)|,
272
- expectation: proc {
273
- line do
274
- plain %|Expected |
275
- actual %|#<Time 2011-12-13 14:15:16 +00:00 (UTC)>|
276
- end
277
-
278
- line do
279
- plain %| to eq |
280
- expected %|#<ActiveSupport::TimeWithZone 2011-12-13 16:15:16 +01:00 (CET)>|
281
- end
282
- },
283
- diff: proc {
284
- plain_line %| #<ActiveSupport::TimeWithZone {|
285
- plain_line %| year: 2011,|
286
- plain_line %| month: 12,|
287
- plain_line %| day: 13,|
288
- expected_line %|- hour: 16,|
289
- actual_line %|+ hour: 14,|
290
- plain_line %| min: 15,|
291
- plain_line %| sec: 16,|
292
- plain_line %| subsec: 0,|
293
- expected_line %|- zone: \"CET\",|
294
- actual_line %|+ zone: \"UTC\",|
295
- expected_line %|- utc_offset: 3600,|
296
- actual_line %|+ utc_offset: 0,|
297
- plain_line %| utc: #<Time {|
298
- plain_line %| year: 2011,|
299
- plain_line %| month: 12,|
300
- plain_line %| day: 13,|
301
- expected_line %|- hour: 15,|
302
- actual_line %|+ hour: 14,|
303
- plain_line %| min: 15,|
304
- plain_line %| sec: 16,|
305
- plain_line %| subsec: 0,|
306
- plain_line %| zone: "UTC",|
307
- plain_line %| utc_offset: 0|
308
- plain_line %| }>|
309
- plain_line %| }>|
310
- },
311
- )
312
-
313
- expect(program).
314
- to produce_output_when_run(expected_output).
315
- in_color(color_enabled)
316
- end
317
- end
318
- end
319
-
320
256
  context "when comparing a single-line string with a multi-line string" do
321
257
  it "produces the correct failure message" do
322
258
  as_both_colored_and_uncolored do |color_enabled|
@@ -529,8 +465,8 @@ RSpec.describe "Integration with RSpec's #eq matcher", type: :integration do
529
465
  plain_line %| data: {|
530
466
  expected_line %|- "sticky" => true,|
531
467
  actual_line %|+ "sticky" => false,|
532
- actual_line %|+ role: "deprecated",|
533
- plain_line %| person: #<SuperDiff::Test::Person {|
468
+ actual_line %|+ :role => "deprecated",|
469
+ plain_line %| :person => #<SuperDiff::Test::Person {|
534
470
  expected_line %|- name: "Marty",|
535
471
  actual_line %|+ name: "Doc",|
536
472
  plain_line %| age: 60|
@@ -844,17 +780,14 @@ RSpec.describe "Integration with RSpec's #eq matcher", type: :integration do
844
780
  snippet: %|expect(actual).to eq(expected)|,
845
781
  newline_before_expectation: true,
846
782
  expectation: proc {
847
- if SuperDiff::Test.jruby?
848
- else
849
- line do
850
- plain %|Expected |
851
- actual %|#<SuperDiff::Test::Player @handle="mcmire", @character="Jon", @inventory=["sword"], @shields=11.4, @health=4, @ultimate=true>|
852
- end
853
-
854
- line do
855
- plain %| to eq |
856
- expected %|#<SuperDiff::Test::Item @name="camera", @quantity=3>|
857
- end
783
+ line do
784
+ plain %|Expected |
785
+ actual %|#<SuperDiff::Test::Player @character="Jon", @handle="mcmire", @health=4, @inventory=["sword"], @shields=11.4, @ultimate=true>|
786
+ end
787
+
788
+ line do
789
+ plain %| to eq |
790
+ expected %|#<SuperDiff::Test::Item @name="camera", @quantity=3>|
858
791
  end
859
792
  },
860
793
  )
@@ -882,17 +815,14 @@ RSpec.describe "Integration with RSpec's #eq matcher", type: :integration do
882
815
  snippet: %|expect(value).not_to eq(value)|,
883
816
  newline_before_expectation: true,
884
817
  expectation: proc {
885
- if SuperDiff::Test.jruby?
886
- else
887
- line do
888
- plain %| Expected |
889
- actual %|#<SuperDiff::Test::Item @name="camera", @quantity=3>|
890
- end
891
-
892
- line do
893
- plain %|not to eq |
894
- expected %|#<SuperDiff::Test::Item @name="camera", @quantity=3>|
895
- end
818
+ line do
819
+ plain %| Expected |
820
+ actual %|#<SuperDiff::Test::Item @name="camera", @quantity=3>|
821
+ end
822
+
823
+ line do
824
+ plain %|not to eq |
825
+ expected %|#<SuperDiff::Test::Item @name="camera", @quantity=3>|
896
826
  end
897
827
  },
898
828
  )
@@ -1019,4 +949,8 @@ RSpec.describe "Integration with RSpec's #eq matcher", type: :integration do
1019
949
  end
1020
950
  end
1021
951
  end
952
+
953
+ it_behaves_like "a matcher that supports elided diffs" do
954
+ let(:matcher) { :eq }
955
+ end
1022
956
  end
@@ -109,8 +109,8 @@ RSpec.describe "Integration with RSpec's #have_attributes matcher", type: :integ
109
109
  plain_line %| name: "a",|
110
110
  # plain_line %| age: 9,| # FIXME
111
111
  plain_line %| age: 9|
112
- # expected_line %|- foo: "bar",| # FIXME
113
- expected_line %|- foo: "bar"|
112
+ # expected_line %|- foo: "bar"| # FIXME
113
+ expected_line %|- foo: "bar",|
114
114
  plain_line %| }>|
115
115
  },
116
116
  )
@@ -170,8 +170,7 @@ RSpec.describe "Integration with RSpec's #have_attributes matcher", type: :integ
170
170
  expected_line %|- city: "Oakland",|
171
171
  actual_line %|+ city: "Hill Valley",|
172
172
  plain_line %| state: "CA",|
173
- # expected_line %|- zip: "91234",| # FIXME
174
- expected_line %|- zip: "91234"|
173
+ expected_line %|- zip: "91234",| # FIXME
175
174
  actual_line %|+ zip: "90382"|
176
175
  plain_line %| }>|
177
176
  },
@@ -283,9 +282,9 @@ RSpec.describe "Integration with RSpec's #have_attributes matcher", type: :integ
283
282
  plain_line %| state: "CA",|
284
283
  # plain_line %| zip: "90382",| # FIXME
285
284
  plain_line %| zip: "90382"|
286
- # expected_line %|- foo: "bar",| # FIXME
287
- expected_line %|- foo: "bar"|
288
- expected_line %|- baz: "qux"|
285
+ expected_line %|- foo: "bar",|
286
+ # expected_line %|- baz: "qux"| # TODO
287
+ expected_line %|- baz: "qux",|
289
288
  plain_line %| }>|
290
289
  },
291
290
  )
@@ -33,7 +33,8 @@ RSpec.describe "Integration with RSpec's #match_array matcher", type: :integrati
33
33
  plain_line %| "Marty",|
34
34
  actual_line %|+ "Jennifer",|
35
35
  actual_line %|+ "Doc",|
36
- expected_line %|- "Einie"|
36
+ # expected_line %|- "Einie"| # TODO
37
+ expected_line %|- "Einie",|
37
38
  plain_line %| ]|
38
39
  },
39
40
  )
@@ -132,7 +133,8 @@ RSpec.describe "Integration with RSpec's #match_array matcher", type: :integrati
132
133
  plain_line %| "Lorraine McFly",|
133
134
  actual_line %|+ "Einie",|
134
135
  expected_line %|- "Biff Tannen",|
135
- expected_line %|- "George McFly"|
136
+ # expected_line %|- "George McFly"| # TODO
137
+ expected_line %|- "George McFly",|
136
138
  plain_line %| ]|
137
139
  },
138
140
  )
@@ -243,7 +245,8 @@ RSpec.describe "Integration with RSpec's #match_array matcher", type: :integrati
243
245
  actual_line %|+ "Lorraine McFly",|
244
246
  expected_line %|- "Biff Tannen",|
245
247
  expected_line %|- /Georg McFly/,|
246
- expected_line %|- /Lorrain McFly/|
248
+ # expected_line %|- /Lorrain McFly/| # TODO
249
+ expected_line %|- /Lorrain McFly/,|
247
250
  plain_line %| ]|
248
251
  },
249
252
  )
@@ -333,7 +336,7 @@ RSpec.describe "Integration with RSpec's #match_array matcher", type: :integrati
333
336
  line do
334
337
  plain %| Expected |
335
338
  # rubocop:disable Metrics/LineLength
336
- actual %|[{ foo: "bar" }, #<Double (anonymous)>, { blargh: "riddle" }]|
339
+ actual %|[{ foo: "bar" }, #<Double (anonymous) baz: "qux">, { blargh: "riddle" }]|
337
340
  # rubocop:enable Metrics/LineLength
338
341
  end
339
342
 
@@ -351,13 +354,16 @@ RSpec.describe "Integration with RSpec's #match_array matcher", type: :integrati
351
354
  plain_line %| {|
352
355
  plain_line %| foo: "bar"|
353
356
  plain_line %| },|
354
- plain_line %| #<Double (anonymous)>,|
357
+ plain_line %| #<Double (anonymous) {|
358
+ plain_line %| baz: "qux"|
359
+ plain_line %| }>,|
355
360
  actual_line %|+ {|
356
361
  actual_line %|+ blargh: "riddle"|
357
362
  actual_line %|+ },|
358
363
  expected_line %|- #<a collection containing exactly (|
359
364
  expected_line %|- "zing"|
360
- expected_line %|- )>|
365
+ # expected_line %|- )>| # TODO
366
+ expected_line %|- )>,|
361
367
  plain_line %| ]|
362
368
  },
363
369
  )
@@ -400,7 +406,8 @@ RSpec.describe "Integration with RSpec's #match_array matcher", type: :integrati
400
406
  actual_line %|+ "Marty",|
401
407
  actual_line %|+ "Jennifer",|
402
408
  actual_line %|+ "Doc",|
403
- expected_line %|- "Einie"|
409
+ # expected_line %|- "Einie"| # TODO
410
+ expected_line %|- "Einie",|
404
411
  plain_line %| ]|
405
412
  },
406
413
  )
@@ -855,7 +855,8 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
855
855
  # actual_line %|+ zip: "90382",| # FIXME
856
856
  expected_line %|- zip: "91234"|
857
857
  actual_line %|+ zip: "90382"|
858
- expected_line %|- something_else: "blah"|
858
+ # expected_line %|- something_else: "blah"| # TODO
859
+ expected_line %|- something_else: "blah",|
859
860
  plain_line %| }>|
860
861
  },
861
862
  )
@@ -971,7 +972,8 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
971
972
  # expected_line %|- zip: "91234",| # FIXME
972
973
  expected_line %|- zip: "91234"|
973
974
  actual_line %|+ zip: "90382"|
974
- expected_line %|- something_else: "blah"|
975
+ # expected_line %|- something_else: "blah"| # TODO
976
+ expected_line %|- something_else: "blah",|
975
977
  plain_line %| }>|
976
978
  plain_line %| }|
977
979
  },
@@ -1065,7 +1067,8 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
1065
1067
  diff: proc {
1066
1068
  plain_line %| [|
1067
1069
  actual_line %|+ "b",|
1068
- expected_line %|- "a"|
1070
+ # expected_line %|- "a"| # TODO
1071
+ expected_line %|- "a",|
1069
1072
  plain_line %| ]|
1070
1073
  },
1071
1074
  )
@@ -1143,7 +1146,8 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
1143
1146
  actual_line %|+ "eggs",|
1144
1147
  actual_line %|+ "cheese",|
1145
1148
  actual_line %|+ "English muffins",|
1146
- expected_line %|- "bread"|
1149
+ # expected_line %|- "bread"| # TODO
1150
+ expected_line %|- "bread",|
1147
1151
  plain_line %| ]|
1148
1152
  },
1149
1153
  )
@@ -1232,7 +1236,8 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
1232
1236
  plain_line %| "milk",|
1233
1237
  actual_line %|+ "toast",|
1234
1238
  actual_line %|+ "eggs",|
1235
- expected_line %|- "bread"|
1239
+ # expected_line %|- "bread"| # TODO
1240
+ expected_line %|- "bread",|
1236
1241
  plain_line %| ]|
1237
1242
  plain_line %| }|
1238
1243
  },
data/spec/spec_helper.rb CHANGED
@@ -43,6 +43,7 @@ Dir.glob(File.expand_path("support/**/*.rb", __dir__)).
43
43
  end
44
44
 
45
45
  RSpec.configure do |config|
46
+ config.include(SuperDiff::UnitTests, type: :unit)
46
47
  config.include(SuperDiff::IntegrationTests, type: :integration)
47
48
 
48
49
  config.expect_with :rspec do |expectations|
@@ -5,24 +5,6 @@ require "shellwords"
5
5
  require "timeout"
6
6
 
7
7
  class CommandRunner
8
- module OutputHelpers
9
- def self.bookended(text)
10
- divider("START") + text + "\n" + divider("END")
11
- end
12
-
13
- def self.divider(title = "")
14
- total_length = 72
15
- start_length = 3
16
-
17
- string = ""
18
- string << ("-" * start_length)
19
- string << title
20
- string << "-" * (total_length - start_length - title.length)
21
- string << "\n"
22
- string
23
- end
24
- end
25
-
26
8
  class CommandFailedError < StandardError
27
9
  def self.create(command:, exit_status:, output:, message: nil)
28
10
  allocate.tap do |error|
@@ -49,7 +31,11 @@ Command #{command.inspect} failed, exiting with status #{exit_status}.
49
31
  if output
50
32
  message << <<-MESSAGE
51
33
  Output:
52
- #{OutputHelpers.divider("START") + output + OutputHelpers.divider("END")}
34
+ #{
35
+ SuperDiff::Test::OutputHelpers.divider("START") +
36
+ output +
37
+ SuperDiff::Test::OutputHelpers.divider("END")
38
+ }
53
39
  MESSAGE
54
40
  end
55
41
 
@@ -83,7 +69,11 @@ Command #{formatted_command.inspect} timed out after #{timeout} seconds.
83
69
  if output
84
70
  message << <<-MESSAGE
85
71
  Output:
86
- #{OutputHelpers.divider("START") + output + OutputHelpers.divider("END")}
72
+ #{
73
+ SuperDiff::Test::OutputHelpers.divider("START") +
74
+ output +
75
+ SuperDiff::Test::OutputHelpers.divider("END")
76
+ }
87
77
  MESSAGE
88
78
  end
89
79
 
@@ -120,9 +110,9 @@ Output:
120
110
  @env = extract_env_from(@options)
121
111
 
122
112
  @process = ChildProcess.build(*command)
123
- # @env.each do |key, value|
124
- # @process.environment[key] = value
125
- # end
113
+ @env.each do |key, value|
114
+ @process.environment[key] = value
115
+ end
126
116
  @process.io.stdout = @process.io.stderr = @writer
127
117
 
128
118
  @wrapper = -> (block) { block.call }
@@ -250,9 +240,9 @@ Output:
250
240
 
251
241
  debug do
252
242
  "\n" +
253
- OutputHelpers.divider("START") +
243
+ SuperDiff::Test::OutputHelpers.divider("START") +
254
244
  output +
255
- OutputHelpers.divider("END")
245
+ SuperDiff::Test::OutputHelpers.divider("END")
256
246
  end
257
247
  end
258
248