super_diff 0.3.0 → 0.5.1
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.
- checksums.yaml +4 -4
- data/README.md +104 -73
- data/lib/super_diff.rb +20 -11
- data/lib/super_diff/active_record.rb +21 -23
- data/lib/super_diff/active_record/diff_formatters/active_record_relation.rb +3 -3
- data/lib/super_diff/active_record/differs/active_record_relation.rb +3 -5
- data/lib/super_diff/active_record/monkey_patches.rb +9 -0
- data/lib/super_diff/active_record/object_inspection/inspectors/active_record_model.rb +32 -22
- data/lib/super_diff/active_record/object_inspection/inspectors/active_record_relation.rb +17 -7
- data/lib/super_diff/active_record/operation_tree_builders.rb +14 -0
- data/lib/super_diff/active_record/{operational_sequencers → operation_tree_builders}/active_record_model.rb +2 -2
- data/lib/super_diff/active_record/{operational_sequencers → operation_tree_builders}/active_record_relation.rb +4 -4
- data/lib/super_diff/active_record/{operation_sequences.rb → operation_trees.rb} +2 -2
- data/lib/super_diff/active_record/{operation_sequences → operation_trees}/active_record_relation.rb +2 -2
- data/lib/super_diff/active_support.rb +16 -19
- data/lib/super_diff/active_support/diff_formatters/hash_with_indifferent_access.rb +3 -3
- data/lib/super_diff/active_support/differs/hash_with_indifferent_access.rb +3 -5
- data/lib/super_diff/active_support/object_inspection/inspectors/hash_with_indifferent_access.rb +17 -7
- data/lib/super_diff/active_support/operation_tree_builders.rb +10 -0
- data/lib/super_diff/active_support/{operational_sequencers → operation_tree_builders}/hash_with_indifferent_access.rb +2 -2
- data/lib/super_diff/active_support/{operation_sequences.rb → operation_trees.rb} +2 -2
- data/lib/super_diff/active_support/{operation_sequences → operation_trees}/hash_with_indifferent_access.rb +2 -2
- data/lib/super_diff/configuration.rb +60 -0
- data/lib/super_diff/csi.rb +4 -0
- data/lib/super_diff/diff_formatters.rb +3 -3
- data/lib/super_diff/diff_formatters/array.rb +3 -3
- data/lib/super_diff/diff_formatters/base.rb +3 -2
- data/lib/super_diff/diff_formatters/collection.rb +2 -2
- data/lib/super_diff/diff_formatters/custom_object.rb +3 -3
- data/lib/super_diff/diff_formatters/default_object.rb +6 -8
- data/lib/super_diff/diff_formatters/defaults.rb +10 -0
- data/lib/super_diff/diff_formatters/hash.rb +3 -3
- data/lib/super_diff/diff_formatters/main.rb +41 -0
- data/lib/super_diff/diff_formatters/multiline_string.rb +3 -3
- data/lib/super_diff/differs.rb +4 -11
- data/lib/super_diff/differs/array.rb +2 -11
- data/lib/super_diff/differs/base.rb +20 -3
- data/lib/super_diff/differs/custom_object.rb +2 -11
- data/lib/super_diff/differs/default_object.rb +2 -8
- data/lib/super_diff/differs/defaults.rb +12 -0
- data/lib/super_diff/differs/hash.rb +2 -11
- data/lib/super_diff/differs/main.rb +48 -0
- data/lib/super_diff/differs/multiline_string.rb +2 -14
- data/lib/super_diff/differs/time_like.rb +15 -0
- data/lib/super_diff/equality_matchers.rb +3 -9
- data/lib/super_diff/equality_matchers/array.rb +1 -7
- data/lib/super_diff/equality_matchers/base.rb +1 -1
- data/lib/super_diff/equality_matchers/default.rb +2 -8
- data/lib/super_diff/equality_matchers/defaults.rb +12 -0
- data/lib/super_diff/equality_matchers/hash.rb +1 -7
- data/lib/super_diff/equality_matchers/main.rb +21 -0
- data/lib/super_diff/equality_matchers/multiline_string.rb +1 -7
- data/lib/super_diff/errors.rb +16 -0
- data/lib/super_diff/errors/no_diff_formatter_available_error.rb +21 -0
- data/lib/super_diff/errors/no_differ_available_error.rb +24 -0
- data/lib/super_diff/errors/no_operational_sequencer_available_error.rb +22 -0
- data/lib/super_diff/implementation_checks.rb +19 -0
- data/lib/super_diff/object_inspection.rb +1 -10
- data/lib/super_diff/object_inspection/inspection_tree.rb +6 -2
- data/lib/super_diff/object_inspection/inspectors.rb +5 -1
- data/lib/super_diff/object_inspection/inspectors/array.rb +20 -10
- data/lib/super_diff/object_inspection/inspectors/base.rb +36 -0
- data/lib/super_diff/object_inspection/inspectors/custom_object.rb +24 -14
- data/lib/super_diff/object_inspection/inspectors/default_object.rb +44 -30
- data/lib/super_diff/object_inspection/inspectors/defaults.rb +15 -0
- data/lib/super_diff/object_inspection/inspectors/hash.rb +20 -10
- data/lib/super_diff/object_inspection/inspectors/main.rb +35 -0
- data/lib/super_diff/object_inspection/inspectors/primitive.rb +20 -5
- data/lib/super_diff/object_inspection/inspectors/string.rb +15 -5
- data/lib/super_diff/object_inspection/inspectors/time_like.rb +23 -0
- data/lib/super_diff/object_inspection/nodes/inspection.rb +9 -2
- data/lib/super_diff/operation_tree_builders.rb +18 -0
- data/lib/super_diff/{operational_sequencers → operation_tree_builders}/array.rb +38 -59
- data/lib/super_diff/operation_tree_builders/base.rb +98 -0
- data/lib/super_diff/{operational_sequencers → operation_tree_builders}/custom_object.rb +3 -3
- data/lib/super_diff/{operational_sequencers → operation_tree_builders}/default_object.rb +8 -3
- data/lib/super_diff/operation_tree_builders/defaults.rb +5 -0
- data/lib/super_diff/operation_tree_builders/hash.rb +226 -0
- data/lib/super_diff/operation_tree_builders/main.rb +42 -0
- data/lib/super_diff/{operational_sequencers → operation_tree_builders}/multiline_string.rb +3 -3
- data/lib/super_diff/operation_tree_builders/time_like.rb +34 -0
- data/lib/super_diff/operation_trees.rb +13 -0
- data/lib/super_diff/{operation_sequences → operation_trees}/array.rb +5 -1
- data/lib/super_diff/operation_trees/base.rb +31 -0
- data/lib/super_diff/{operation_sequences → operation_trees}/custom_object.rb +5 -1
- data/lib/super_diff/{operation_sequences → operation_trees}/default_object.rb +10 -8
- data/lib/super_diff/operation_trees/defaults.rb +5 -0
- data/lib/super_diff/{operation_sequences → operation_trees}/hash.rb +5 -1
- data/lib/super_diff/operation_trees/main.rb +35 -0
- data/lib/super_diff/operation_trees/multiline_string.rb +18 -0
- data/lib/super_diff/operations/unary_operation.rb +3 -0
- data/lib/super_diff/rspec.rb +54 -22
- data/lib/super_diff/rspec/augmented_matcher.rb +1 -1
- data/lib/super_diff/rspec/differ.rb +2 -17
- data/lib/super_diff/rspec/differs.rb +9 -3
- data/lib/super_diff/rspec/differs/collection_containing_exactly.rb +3 -8
- data/lib/super_diff/rspec/differs/collection_including.rb +18 -0
- data/lib/super_diff/rspec/differs/hash_including.rb +18 -0
- data/lib/super_diff/rspec/differs/object_having_attributes.rb +17 -0
- data/lib/super_diff/rspec/matcher_text_builders.rb +4 -0
- data/lib/super_diff/rspec/matcher_text_builders/be_predicate.rb +26 -7
- data/lib/super_diff/rspec/matcher_text_builders/have_predicate.rb +61 -0
- data/lib/super_diff/rspec/matcher_text_builders/match.rb +1 -1
- data/lib/super_diff/rspec/matcher_text_builders/raise_error.rb +13 -1
- data/lib/super_diff/rspec/matcher_text_builders/respond_to.rb +1 -1
- data/lib/super_diff/rspec/matcher_text_template.rb +1 -1
- data/lib/super_diff/rspec/monkey_patches.rb +226 -115
- data/lib/super_diff/rspec/object_inspection.rb +0 -1
- data/lib/super_diff/rspec/object_inspection/inspectors.rb +22 -6
- data/lib/super_diff/rspec/object_inspection/inspectors/collection_containing_exactly.rb +17 -8
- data/lib/super_diff/rspec/object_inspection/inspectors/collection_including.rb +28 -0
- data/lib/super_diff/rspec/object_inspection/inspectors/hash_including.rb +31 -0
- data/lib/super_diff/rspec/object_inspection/inspectors/instance_of.rb +23 -0
- data/lib/super_diff/rspec/object_inspection/inspectors/kind_of.rb +23 -0
- data/lib/super_diff/rspec/object_inspection/inspectors/object_having_attributes.rb +31 -0
- data/lib/super_diff/rspec/object_inspection/inspectors/primitive.rb +13 -0
- data/lib/super_diff/rspec/object_inspection/inspectors/value_within.rb +29 -0
- data/lib/super_diff/rspec/operation_tree_builders.rb +22 -0
- data/lib/super_diff/rspec/{operational_sequencers → operation_tree_builders}/collection_containing_exactly.rb +6 -6
- data/lib/super_diff/rspec/{operational_sequencers/partial_array.rb → operation_tree_builders/collection_including.rb} +4 -3
- data/lib/super_diff/rspec/operation_tree_builders/hash_including.rb +25 -0
- data/lib/super_diff/rspec/{operational_sequencers/partial_object.rb → operation_tree_builders/object_having_attributes.rb} +5 -11
- data/lib/super_diff/version.rb +1 -1
- data/spec/examples.txt +5 -350
- data/spec/integration/rails/active_record_spec.rb +1 -1
- data/spec/integration/rails/hash_with_indifferent_access_spec.rb +1 -1
- data/spec/integration/rspec/be_predicate_matcher_spec.rb +111 -59
- data/spec/integration/rspec/eq_matcher_spec.rb +1 -1
- data/spec/integration/rspec/have_attributes_matcher_spec.rb +354 -227
- data/spec/integration/rspec/have_predicate_matcher_spec.rb +484 -0
- data/spec/integration/rspec/include_matcher_spec.rb +2 -2
- data/spec/integration/rspec/match_array_matcher_spec.rb +372 -0
- data/spec/integration/rspec/match_matcher_spec.rb +8 -8
- data/spec/integration/rspec/raise_error_matcher_spec.rb +605 -226
- data/spec/integration/rspec/third_party_matcher_spec.rb +241 -0
- data/spec/integration/rspec/unhandled_errors_spec.rb +110 -58
- data/spec/spec_helper.rb +18 -7
- data/spec/support/command_runner.rb +3 -0
- data/spec/support/integration/helpers.rb +14 -90
- data/spec/support/integration/matchers.rb +143 -0
- data/spec/support/integration/matchers/produce_output_when_run_matcher.rb +14 -29
- data/spec/support/integration/test_programs/base.rb +120 -0
- data/spec/support/integration/test_programs/plain.rb +13 -0
- data/spec/support/integration/test_programs/rspec_active_record.rb +17 -0
- data/spec/support/integration/test_programs/rspec_rails.rb +17 -0
- data/spec/support/models/active_record/person.rb +4 -11
- data/spec/support/models/active_record/query.rb +15 -0
- data/spec/support/models/active_record/shipping_address.rb +10 -14
- data/spec/support/object_id.rb +27 -0
- data/spec/support/ruby_versions.rb +4 -0
- data/spec/support/shared_examples/active_record.rb +71 -0
- data/spec/support/shared_examples/hash_with_indifferent_access.rb +724 -208
- data/spec/unit/{equality_matcher_spec.rb → equality_matchers/main_spec.rb} +165 -9
- data/spec/unit/object_inspection_spec.rb +94 -18
- data/spec/unit/rspec/matchers/have_predicate_spec.rb +21 -0
- data/spec/unit/rspec/matchers/match_array_spec.rb +11 -0
- data/spec/unit/rspec/matchers/raise_error_spec.rb +16 -0
- data/super_diff.gemspec +4 -6
- metadata +99 -82
- data/lib/super_diff/active_record/object_inspection/map_extension.rb +0 -18
- data/lib/super_diff/active_record/operational_sequencers.rb +0 -14
- data/lib/super_diff/active_support/object_inspection/map_extension.rb +0 -15
- data/lib/super_diff/active_support/operational_sequencers.rb +0 -10
- data/lib/super_diff/diff_formatter.rb +0 -32
- data/lib/super_diff/differ.rb +0 -51
- data/lib/super_diff/differs/time.rb +0 -24
- data/lib/super_diff/equality_matcher.rb +0 -32
- data/lib/super_diff/no_differ_available_error.rb +0 -22
- data/lib/super_diff/no_operational_sequencer_available_error.rb +0 -20
- data/lib/super_diff/object_inspection/inspector.rb +0 -27
- data/lib/super_diff/object_inspection/inspectors/time.rb +0 -13
- data/lib/super_diff/object_inspection/map.rb +0 -30
- data/lib/super_diff/operation_sequences.rb +0 -9
- data/lib/super_diff/operation_sequences/base.rb +0 -11
- data/lib/super_diff/operational_sequencer.rb +0 -48
- data/lib/super_diff/operational_sequencers.rb +0 -17
- data/lib/super_diff/operational_sequencers/base.rb +0 -89
- data/lib/super_diff/operational_sequencers/hash.rb +0 -85
- data/lib/super_diff/operational_sequencers/time_like.rb +0 -30
- data/lib/super_diff/rspec/configuration.rb +0 -31
- data/lib/super_diff/rspec/differs/partial_array.rb +0 -22
- data/lib/super_diff/rspec/differs/partial_hash.rb +0 -22
- data/lib/super_diff/rspec/differs/partial_object.rb +0 -22
- data/lib/super_diff/rspec/object_inspection/inspectors/partial_array.rb +0 -22
- data/lib/super_diff/rspec/object_inspection/inspectors/partial_hash.rb +0 -21
- data/lib/super_diff/rspec/object_inspection/inspectors/partial_object.rb +0 -21
- data/lib/super_diff/rspec/object_inspection/map_extension.rb +0 -23
- data/lib/super_diff/rspec/operational_sequencers.rb +0 -22
- data/lib/super_diff/rspec/operational_sequencers/partial_hash.rb +0 -32
@@ -1,6 +1,6 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
|
-
RSpec.describe "Integration with Rails's ActiveRecord class", type: :integration do
|
3
|
+
RSpec.describe "Integration with Rails's ActiveRecord class", type: :integration, active_record: true do
|
4
4
|
context "when using 'super_diff/rspec-rails'" do
|
5
5
|
include_context "integration with ActiveRecord"
|
6
6
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
|
-
RSpec.describe "Integration with Rails's HashWithIndifferentAccess", type: :integration do
|
3
|
+
RSpec.describe "Integration with Rails's HashWithIndifferentAccess", type: :integration, active_record: true do
|
4
4
|
context "when using 'super_diff/rspec-rails'" do
|
5
5
|
include_context "integration with HashWithIndifferentAccess"
|
6
6
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
|
-
RSpec.describe "Integration with RSpec's #be_
|
3
|
+
RSpec.describe "Integration with RSpec's #be_<predicate> matcher", type: :integration do
|
4
4
|
# rubocop:disable Metrics/BlockLength
|
5
5
|
["be", "be_a", "be_an"].each do |prefix|
|
6
6
|
# rubocop:enable Metrics/BlockLength
|
@@ -23,9 +23,9 @@ RSpec.describe "Integration with RSpec's #be_* matcher", type: :integration do
|
|
23
23
|
plain "Expected "
|
24
24
|
beta %|:foo|
|
25
25
|
plain " to respond to "
|
26
|
-
alpha
|
26
|
+
alpha %|strong?|
|
27
27
|
plain " or "
|
28
|
-
alpha
|
28
|
+
alpha %|strongs?|
|
29
29
|
plain "."
|
30
30
|
end
|
31
31
|
},
|
@@ -42,7 +42,7 @@ RSpec.describe "Integration with RSpec's #be_* matcher", type: :integration do
|
|
42
42
|
it "produces the correct failure message" do
|
43
43
|
as_both_colored_and_uncolored do |color_enabled|
|
44
44
|
snippet = <<~TEST.strip
|
45
|
-
hash = { foo: "bar", baz: "qux", blargh: "foz", fizz: "buzz" }
|
45
|
+
hash = { foo: "bar", baz: "qux", blargh: "foz", fizz: "buzz", aaaaaa: "bbbbbb" }
|
46
46
|
expect(hash).to #{prefix}_strong
|
47
47
|
TEST
|
48
48
|
program = make_plain_test_program(
|
@@ -57,14 +57,14 @@ RSpec.describe "Integration with RSpec's #be_* matcher", type: :integration do
|
|
57
57
|
expectation: proc {
|
58
58
|
line do
|
59
59
|
plain " Expected "
|
60
|
-
beta %|{ foo: "bar", baz: "qux", blargh: "foz", fizz: "buzz" }|
|
60
|
+
beta %|{ foo: "bar", baz: "qux", blargh: "foz", fizz: "buzz", aaaaaa: "bbbbbb" }|
|
61
61
|
end
|
62
62
|
|
63
63
|
line do
|
64
64
|
plain "to respond to "
|
65
|
-
alpha
|
65
|
+
alpha %|strong?|
|
66
66
|
plain " or "
|
67
|
-
alpha
|
67
|
+
alpha %|strongs?|
|
68
68
|
end
|
69
69
|
},
|
70
70
|
)
|
@@ -102,9 +102,9 @@ RSpec.describe "Integration with RSpec's #be_* matcher", type: :integration do
|
|
102
102
|
plain "Expected "
|
103
103
|
beta %|#<Foo>|
|
104
104
|
plain " to have a public method "
|
105
|
-
alpha
|
105
|
+
alpha %|strong?|
|
106
106
|
plain " or "
|
107
|
-
alpha
|
107
|
+
alpha %|strongs?|
|
108
108
|
plain "."
|
109
109
|
end
|
110
110
|
},
|
@@ -147,9 +147,9 @@ RSpec.describe "Integration with RSpec's #be_* matcher", type: :integration do
|
|
147
147
|
|
148
148
|
line do
|
149
149
|
plain "to have a public method "
|
150
|
-
alpha
|
150
|
+
alpha %|strong?|
|
151
151
|
plain " or "
|
152
|
-
alpha
|
152
|
+
alpha %|strongs?|
|
153
153
|
end
|
154
154
|
},
|
155
155
|
)
|
@@ -190,9 +190,9 @@ RSpec.describe "Integration with RSpec's #be_* matcher", type: :integration do
|
|
190
190
|
plain "Expected "
|
191
191
|
beta %|#<Foo>|
|
192
192
|
plain " to return a truthy result for "
|
193
|
-
alpha
|
193
|
+
alpha %|true?|
|
194
194
|
plain " or "
|
195
|
-
alpha
|
195
|
+
alpha %|trues?|
|
196
196
|
plain "."
|
197
197
|
end
|
198
198
|
|
@@ -200,9 +200,9 @@ RSpec.describe "Integration with RSpec's #be_* matcher", type: :integration do
|
|
200
200
|
|
201
201
|
line do
|
202
202
|
plain "(Perhaps you want to use "
|
203
|
-
blue "
|
203
|
+
blue "be(true)"
|
204
204
|
plain " or "
|
205
|
-
blue "
|
205
|
+
blue "be_truthy"
|
206
206
|
plain " instead?)"
|
207
207
|
end
|
208
208
|
},
|
@@ -250,18 +250,18 @@ RSpec.describe "Integration with RSpec's #be_* matcher", type: :integration do
|
|
250
250
|
|
251
251
|
line do
|
252
252
|
plain "to return a truthy result for "
|
253
|
-
alpha
|
253
|
+
alpha %|true?|
|
254
254
|
plain " or "
|
255
|
-
alpha
|
255
|
+
alpha %|trues?|
|
256
256
|
end
|
257
257
|
|
258
258
|
newline
|
259
259
|
|
260
260
|
line do
|
261
261
|
plain "(Perhaps you want to use "
|
262
|
-
blue "
|
262
|
+
blue "be(true)"
|
263
263
|
plain " or "
|
264
|
-
blue "
|
264
|
+
blue "be_truthy"
|
265
265
|
plain " instead?)"
|
266
266
|
end
|
267
267
|
},
|
@@ -300,9 +300,9 @@ RSpec.describe "Integration with RSpec's #be_* matcher", type: :integration do
|
|
300
300
|
plain "Expected "
|
301
301
|
beta %|#<X>|
|
302
302
|
plain " to return a truthy result for "
|
303
|
-
alpha
|
303
|
+
alpha %|false?|
|
304
304
|
plain " or "
|
305
|
-
alpha
|
305
|
+
alpha %|falses?|
|
306
306
|
plain "."
|
307
307
|
end
|
308
308
|
},
|
@@ -341,9 +341,9 @@ RSpec.describe "Integration with RSpec's #be_* matcher", type: :integration do
|
|
341
341
|
plain "Expected "
|
342
342
|
beta %|#<X>|
|
343
343
|
plain " to return a truthy result for "
|
344
|
-
alpha
|
344
|
+
alpha %|y?|
|
345
345
|
plain " or "
|
346
|
-
alpha
|
346
|
+
alpha %|ys?|
|
347
347
|
plain "."
|
348
348
|
end
|
349
349
|
},
|
@@ -392,9 +392,9 @@ RSpec.describe "Integration with RSpec's #be_* matcher", type: :integration do
|
|
392
392
|
|
393
393
|
line do
|
394
394
|
plain "to return a truthy result for "
|
395
|
-
alpha
|
395
|
+
alpha %|y?|
|
396
396
|
plain " or "
|
397
|
-
alpha
|
397
|
+
alpha %|ys?|
|
398
398
|
end
|
399
399
|
},
|
400
400
|
)
|
@@ -432,9 +432,9 @@ RSpec.describe "Integration with RSpec's #be_* matcher", type: :integration do
|
|
432
432
|
plain "Expected "
|
433
433
|
beta %|#<X>|
|
434
434
|
plain " to return a truthy result for "
|
435
|
-
alpha
|
435
|
+
alpha %|y?|
|
436
436
|
plain " or "
|
437
|
-
alpha
|
437
|
+
alpha %|ys?|
|
438
438
|
plain "."
|
439
439
|
end
|
440
440
|
},
|
@@ -483,9 +483,9 @@ RSpec.describe "Integration with RSpec's #be_* matcher", type: :integration do
|
|
483
483
|
|
484
484
|
line do
|
485
485
|
plain "to return a truthy result for "
|
486
|
-
alpha
|
486
|
+
alpha %|y?|
|
487
487
|
plain " or "
|
488
|
-
alpha
|
488
|
+
alpha %|ys?|
|
489
489
|
end
|
490
490
|
},
|
491
491
|
)
|
@@ -502,40 +502,92 @@ RSpec.describe "Integration with RSpec's #be_* matcher", type: :integration do
|
|
502
502
|
end
|
503
503
|
|
504
504
|
context "and returns true" do
|
505
|
-
|
506
|
-
|
507
|
-
|
508
|
-
|
509
|
-
|
510
|
-
|
505
|
+
context "when the inspected version of the actual value is short" do
|
506
|
+
it "produces the correct failure message when used in the negative" do
|
507
|
+
as_both_colored_and_uncolored do |color_enabled|
|
508
|
+
snippet = <<~TEST.strip
|
509
|
+
class Foo
|
510
|
+
def strong?; true; end
|
511
|
+
end
|
511
512
|
|
512
|
-
|
513
|
-
|
514
|
-
|
515
|
-
|
516
|
-
|
517
|
-
|
513
|
+
expect(Foo.new).not_to #{prefix}_strong
|
514
|
+
TEST
|
515
|
+
program = make_plain_test_program(
|
516
|
+
snippet,
|
517
|
+
color_enabled: color_enabled,
|
518
|
+
)
|
518
519
|
|
519
|
-
|
520
|
-
|
521
|
-
|
522
|
-
|
523
|
-
|
524
|
-
|
525
|
-
|
526
|
-
|
527
|
-
|
528
|
-
|
529
|
-
|
530
|
-
|
520
|
+
expected_output = build_expected_output(
|
521
|
+
color_enabled: color_enabled,
|
522
|
+
snippet: %|expect(Foo.new).not_to #{prefix}_strong|,
|
523
|
+
expectation: proc {
|
524
|
+
line do
|
525
|
+
plain "Expected "
|
526
|
+
beta %|#<Foo>|
|
527
|
+
plain " not to return a truthy result for "
|
528
|
+
alpha %|strong?|
|
529
|
+
plain " or "
|
530
|
+
alpha %|strongs?|
|
531
|
+
plain "."
|
532
|
+
end
|
533
|
+
},
|
534
|
+
)
|
535
|
+
|
536
|
+
expect(program).
|
537
|
+
to produce_output_when_run(expected_output).
|
538
|
+
in_color(color_enabled).
|
539
|
+
removing_object_ids
|
540
|
+
end
|
541
|
+
end
|
542
|
+
end
|
543
|
+
|
544
|
+
context "when the inspected version of the actual value is long" do
|
545
|
+
it "produces the correct failure message when used in the negative" do
|
546
|
+
as_both_colored_and_uncolored do |color_enabled|
|
547
|
+
snippet = <<~TEST.strip
|
548
|
+
hash = {
|
549
|
+
foo: "bar",
|
550
|
+
baz: "qux",
|
551
|
+
blargh: "foz",
|
552
|
+
fizz: "buzz",
|
553
|
+
aaaaaa: "bbbbbb"
|
554
|
+
}
|
555
|
+
|
556
|
+
class << hash
|
557
|
+
def ys?; true; end
|
531
558
|
end
|
532
|
-
},
|
533
|
-
)
|
534
559
|
|
535
|
-
|
536
|
-
|
537
|
-
|
538
|
-
|
560
|
+
expect(hash).not_to #{prefix}_y
|
561
|
+
TEST
|
562
|
+
program = make_plain_test_program(
|
563
|
+
snippet,
|
564
|
+
color_enabled: color_enabled,
|
565
|
+
)
|
566
|
+
|
567
|
+
expected_output = build_expected_output(
|
568
|
+
color_enabled: color_enabled,
|
569
|
+
snippet: %|expect(hash).not_to #{prefix}_y|,
|
570
|
+
newline_before_expectation: true,
|
571
|
+
expectation: proc {
|
572
|
+
line do
|
573
|
+
plain " Expected "
|
574
|
+
beta %|{ foo: "bar", baz: "qux", blargh: "foz", fizz: "buzz", aaaaaa: "bbbbbb" }|
|
575
|
+
end
|
576
|
+
|
577
|
+
line do
|
578
|
+
plain "not to return a truthy result for "
|
579
|
+
alpha %|y?|
|
580
|
+
plain " or "
|
581
|
+
alpha %|ys?|
|
582
|
+
end
|
583
|
+
},
|
584
|
+
)
|
585
|
+
|
586
|
+
expect(program).
|
587
|
+
to produce_output_when_run(expected_output).
|
588
|
+
in_color(color_enabled).
|
589
|
+
removing_object_ids
|
590
|
+
end
|
539
591
|
end
|
540
592
|
end
|
541
593
|
end
|
@@ -251,7 +251,7 @@ RSpec.describe "Integration with RSpec's #eq matcher", type: :integration do
|
|
251
251
|
end
|
252
252
|
end
|
253
253
|
|
254
|
-
context "when comparing two different Time and ActiveSupport::TimeWithZone instances" do
|
254
|
+
context "when comparing two different Time and ActiveSupport::TimeWithZone instances", active_record: true do
|
255
255
|
it "produces the correct failure message when used in the positive" do
|
256
256
|
as_both_colored_and_uncolored do |color_enabled|
|
257
257
|
snippet = <<~RUBY
|
@@ -1,255 +1,369 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
3
|
RSpec.describe "Integration with RSpec's #have_attributes matcher", type: :integration do
|
4
|
-
context "when
|
5
|
-
context "
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
4
|
+
context "when the actual value is an object" do
|
5
|
+
context "with a small set of attributes" do
|
6
|
+
context "when all of the names are methods on the actual object" do
|
7
|
+
it "produces the correct output when used in the positive" do
|
8
|
+
as_both_colored_and_uncolored do |color_enabled|
|
9
|
+
snippet = <<~TEST.strip
|
10
|
+
expected = { name: "b" }
|
11
|
+
actual = SuperDiff::Test::Person.new(name: "a", age: 9)
|
12
|
+
expect(actual).to have_attributes(expected)
|
13
|
+
TEST
|
14
|
+
program = make_plain_test_program(
|
15
|
+
snippet,
|
16
|
+
color_enabled: color_enabled,
|
17
|
+
)
|
17
18
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
19
|
+
expected_output = build_expected_output(
|
20
|
+
color_enabled: color_enabled,
|
21
|
+
snippet: %|expect(actual).to have_attributes(expected)|,
|
22
|
+
expectation: proc {
|
23
|
+
line do
|
24
|
+
plain "Expected "
|
25
|
+
beta %|#<SuperDiff::Test::Person name: "a", age: 9>|
|
26
|
+
plain " to have attributes "
|
27
|
+
alpha %|(name: "b")|
|
28
|
+
plain "."
|
29
|
+
end
|
30
|
+
},
|
31
|
+
diff: proc {
|
32
|
+
plain_line %| #<SuperDiff::Test::Person {|
|
33
|
+
# alpha_line %|- name: "b",| # FIXME
|
34
|
+
alpha_line %|- name: "b"|
|
35
|
+
beta_line %|+ name: "a",|
|
36
|
+
plain_line %| age: 9|
|
37
|
+
plain_line %| }>|
|
38
|
+
},
|
39
|
+
)
|
39
40
|
|
40
|
-
|
41
|
-
|
42
|
-
|
41
|
+
expect(program).
|
42
|
+
to produce_output_when_run(expected_output).
|
43
|
+
in_color(color_enabled)
|
44
|
+
end
|
43
45
|
end
|
44
|
-
end
|
45
46
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
47
|
+
it "produces the correct output when used in the negative" do
|
48
|
+
as_both_colored_and_uncolored do |color_enabled|
|
49
|
+
snippet = <<~TEST.strip
|
50
|
+
expected = { name: "a" }
|
51
|
+
actual = SuperDiff::Test::Person.new(name: "a", age: 9)
|
52
|
+
expect(actual).not_to have_attributes(expected)
|
53
|
+
TEST
|
54
|
+
program = make_plain_test_program(
|
55
|
+
snippet,
|
56
|
+
color_enabled: color_enabled,
|
57
|
+
)
|
57
58
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
59
|
+
expected_output = build_expected_output(
|
60
|
+
color_enabled: color_enabled,
|
61
|
+
snippet: %|expect(actual).not_to have_attributes(expected)|,
|
62
|
+
expectation: proc {
|
63
|
+
line do
|
64
|
+
plain "Expected "
|
65
|
+
beta %|#<SuperDiff::Test::Person name: "a", age: 9>|
|
66
|
+
plain " not to have attributes "
|
67
|
+
alpha %|(name: "a")|
|
68
|
+
plain "."
|
69
|
+
end
|
70
|
+
},
|
71
|
+
)
|
71
72
|
|
72
|
-
|
73
|
-
|
74
|
-
|
73
|
+
expect(program).
|
74
|
+
to produce_output_when_run(expected_output).
|
75
|
+
in_color(color_enabled)
|
76
|
+
end
|
75
77
|
end
|
76
78
|
end
|
77
|
-
end
|
78
79
|
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
80
|
+
context "when some of the names are not methods on the actual object" do
|
81
|
+
it "produces the correct output" do
|
82
|
+
as_both_colored_and_uncolored do |color_enabled|
|
83
|
+
snippet = <<~TEST.strip
|
84
|
+
expected = { name: "b", foo: "bar" }
|
85
|
+
actual = SuperDiff::Test::Person.new(name: "a", age: 9)
|
86
|
+
expect(actual).to have_attributes(expected)
|
87
|
+
TEST
|
88
|
+
program = make_plain_test_program(
|
89
|
+
snippet,
|
90
|
+
color_enabled: color_enabled,
|
91
|
+
)
|
91
92
|
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
93
|
+
expected_output = build_expected_output(
|
94
|
+
color_enabled: color_enabled,
|
95
|
+
snippet: %|expect(actual).to have_attributes(expected)|,
|
96
|
+
expectation: proc {
|
97
|
+
line do
|
98
|
+
plain "Expected "
|
99
|
+
beta %|#<SuperDiff::Test::Person name: "a", age: 9>|
|
100
|
+
plain " to respond to "
|
101
|
+
alpha %|:foo|
|
102
|
+
plain " with "
|
103
|
+
alpha %|0|
|
104
|
+
plain " arguments."
|
105
|
+
end
|
106
|
+
},
|
107
|
+
diff: proc {
|
108
|
+
plain_line %| #<SuperDiff::Test::Person {|
|
109
|
+
plain_line %| name: "a",|
|
110
|
+
# plain_line %| age: 9,| # FIXME
|
111
|
+
plain_line %| age: 9|
|
112
|
+
# alpha_line %|- foo: "bar",| # FIXME
|
113
|
+
alpha_line %|- foo: "bar"|
|
114
|
+
plain_line %| }>|
|
115
|
+
},
|
116
|
+
)
|
116
117
|
|
117
|
-
|
118
|
-
|
119
|
-
|
118
|
+
expect(program).
|
119
|
+
to produce_output_when_run(expected_output).
|
120
|
+
in_color(color_enabled)
|
121
|
+
end
|
120
122
|
end
|
121
123
|
end
|
122
124
|
end
|
123
|
-
end
|
124
125
|
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
126
|
+
context "with a large set of attributes" do
|
127
|
+
context "when all of the names are methods on the actual object" do
|
128
|
+
it "produces the correct output when used in the positive" do
|
129
|
+
as_both_colored_and_uncolored do |color_enabled|
|
130
|
+
snippet = <<~TEST.strip
|
131
|
+
expected = {
|
132
|
+
line_1: "123 Main St.",
|
133
|
+
city: "Oakland",
|
134
|
+
state: "CA",
|
135
|
+
zip: "91234"
|
136
|
+
}
|
137
|
+
actual = SuperDiff::Test::ShippingAddress.new(
|
138
|
+
line_1: "456 Ponderosa Ct.",
|
139
|
+
line_2: nil,
|
140
|
+
city: "Hill Valley",
|
141
|
+
state: "CA",
|
142
|
+
zip: "90382"
|
143
|
+
)
|
144
|
+
expect(actual).to have_attributes(expected)
|
145
|
+
TEST
|
146
|
+
program = make_plain_test_program(
|
147
|
+
snippet,
|
148
|
+
color_enabled: color_enabled,
|
142
149
|
)
|
143
|
-
expect(actual).to have_attributes(expected)
|
144
|
-
TEST
|
145
|
-
program = make_plain_test_program(
|
146
|
-
snippet,
|
147
|
-
color_enabled: color_enabled,
|
148
|
-
)
|
149
150
|
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
151
|
+
expected_output = build_expected_output(
|
152
|
+
color_enabled: color_enabled,
|
153
|
+
snippet: %|expect(actual).to have_attributes(expected)|,
|
154
|
+
expectation: proc {
|
155
|
+
line do
|
156
|
+
plain " Expected "
|
157
|
+
beta %|#<SuperDiff::Test::ShippingAddress line_1: "456 Ponderosa Ct.", line_2: nil, city: "Hill Valley", state: "CA", zip: "90382">|
|
158
|
+
end
|
158
159
|
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
160
|
+
line do
|
161
|
+
plain "to have attributes "
|
162
|
+
alpha %|(line_1: "123 Main St.", city: "Oakland", state: "CA", zip: "91234")|
|
163
|
+
end
|
164
|
+
},
|
165
|
+
diff: proc {
|
166
|
+
plain_line %| #<SuperDiff::Test::ShippingAddress {|
|
167
|
+
alpha_line %|- line_1: "123 Main St.",|
|
168
|
+
beta_line %|+ line_1: "456 Ponderosa Ct.",|
|
169
|
+
plain_line %| line_2: nil,|
|
170
|
+
alpha_line %|- city: "Oakland",|
|
171
|
+
beta_line %|+ city: "Hill Valley",|
|
172
|
+
plain_line %| state: "CA",|
|
173
|
+
# alpha_line %|- zip: "91234",| # FIXME
|
174
|
+
alpha_line %|- zip: "91234"|
|
175
|
+
beta_line %|+ zip: "90382"|
|
176
|
+
plain_line %| }>|
|
177
|
+
},
|
178
|
+
)
|
178
179
|
|
179
|
-
|
180
|
-
|
181
|
-
|
180
|
+
expect(program).
|
181
|
+
to produce_output_when_run(expected_output).
|
182
|
+
in_color(color_enabled)
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
186
|
+
it "produces the correct output when used in the negative" do
|
187
|
+
as_both_colored_and_uncolored do |color_enabled|
|
188
|
+
snippet = <<~TEST.strip
|
189
|
+
expected = {
|
190
|
+
line_1: "123 Main St.",
|
191
|
+
city: "Oakland",
|
192
|
+
state: "CA",
|
193
|
+
zip: "91234"
|
194
|
+
}
|
195
|
+
actual = SuperDiff::Test::ShippingAddress.new(
|
196
|
+
line_1: "123 Main St.",
|
197
|
+
line_2: nil,
|
198
|
+
city: "Oakland",
|
199
|
+
state: "CA",
|
200
|
+
zip: "91234"
|
201
|
+
)
|
202
|
+
expect(actual).not_to have_attributes(expected)
|
203
|
+
TEST
|
204
|
+
program = make_plain_test_program(
|
205
|
+
snippet,
|
206
|
+
color_enabled: color_enabled,
|
207
|
+
)
|
208
|
+
|
209
|
+
expected_output = build_expected_output(
|
210
|
+
color_enabled: color_enabled,
|
211
|
+
snippet: %|expect(actual).not_to have_attributes(expected)|,
|
212
|
+
newline_before_expectation: true,
|
213
|
+
expectation: proc {
|
214
|
+
line do
|
215
|
+
plain " Expected "
|
216
|
+
beta %|#<SuperDiff::Test::ShippingAddress line_1: "123 Main St.", line_2: nil, city: "Oakland", state: "CA", zip: "91234">|
|
217
|
+
end
|
218
|
+
|
219
|
+
line do
|
220
|
+
plain "not to have attributes "
|
221
|
+
alpha %|(line_1: "123 Main St.", city: "Oakland", state: "CA", zip: "91234")|
|
222
|
+
end
|
223
|
+
},
|
224
|
+
)
|
225
|
+
|
226
|
+
expect(program).
|
227
|
+
to produce_output_when_run(expected_output).
|
228
|
+
in_color(color_enabled)
|
229
|
+
end
|
182
230
|
end
|
183
231
|
end
|
184
232
|
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
233
|
+
context "when some of the names are not methods on the actual object" do
|
234
|
+
it "produces the correct output" do
|
235
|
+
as_both_colored_and_uncolored do |color_enabled|
|
236
|
+
snippet = <<~TEST.strip
|
237
|
+
expected = {
|
238
|
+
line_1: "123 Main St.",
|
239
|
+
city: "Oakland",
|
240
|
+
state: "CA",
|
241
|
+
zip: "91234",
|
242
|
+
foo: "bar",
|
243
|
+
baz: "qux"
|
244
|
+
}
|
245
|
+
actual = SuperDiff::Test::ShippingAddress.new(
|
246
|
+
line_1: "456 Ponderosa Ct.",
|
247
|
+
line_2: nil,
|
248
|
+
city: "Hill Valley",
|
249
|
+
state: "CA",
|
250
|
+
zip: "90382"
|
251
|
+
)
|
252
|
+
expect(actual).to have_attributes(expected)
|
253
|
+
TEST
|
254
|
+
program = make_plain_test_program(
|
255
|
+
snippet,
|
256
|
+
color_enabled: color_enabled,
|
200
257
|
)
|
201
|
-
expect(actual).not_to have_attributes(expected)
|
202
|
-
TEST
|
203
|
-
program = make_plain_test_program(
|
204
|
-
snippet,
|
205
|
-
color_enabled: color_enabled,
|
206
|
-
)
|
207
258
|
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
end
|
259
|
+
expected_output = build_expected_output(
|
260
|
+
color_enabled: color_enabled,
|
261
|
+
snippet: %|expect(actual).to have_attributes(expected)|,
|
262
|
+
expectation: proc {
|
263
|
+
line do
|
264
|
+
plain " Expected "
|
265
|
+
beta %|#<SuperDiff::Test::ShippingAddress line_1: "456 Ponderosa Ct.", line_2: nil, city: "Hill Valley", state: "CA", zip: "90382">|
|
266
|
+
end
|
217
267
|
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
268
|
+
line do
|
269
|
+
plain "to respond to "
|
270
|
+
alpha %|:foo|
|
271
|
+
plain " and "
|
272
|
+
alpha %|:baz|
|
273
|
+
plain " with "
|
274
|
+
alpha %|0|
|
275
|
+
plain " arguments"
|
276
|
+
end
|
277
|
+
},
|
278
|
+
diff: proc {
|
279
|
+
plain_line %| #<SuperDiff::Test::ShippingAddress {|
|
280
|
+
plain_line %| line_1: "456 Ponderosa Ct.",|
|
281
|
+
plain_line %| line_2: nil,|
|
282
|
+
plain_line %| city: "Hill Valley",|
|
283
|
+
plain_line %| state: "CA",|
|
284
|
+
# plain_line %| zip: "90382",| # FIXME
|
285
|
+
plain_line %| zip: "90382"|
|
286
|
+
# alpha_line %|- foo: "bar",| # FIXME
|
287
|
+
alpha_line %|- foo: "bar"|
|
288
|
+
alpha_line %|- baz: "qux"|
|
289
|
+
plain_line %| }>|
|
290
|
+
},
|
291
|
+
)
|
224
292
|
|
225
|
-
|
226
|
-
|
227
|
-
|
293
|
+
expect(program).
|
294
|
+
to produce_output_when_run(expected_output).
|
295
|
+
in_color(color_enabled)
|
296
|
+
end
|
228
297
|
end
|
229
298
|
end
|
230
299
|
end
|
300
|
+
end
|
301
|
+
|
302
|
+
context "when the actual value is actually a hash instead of an object" do
|
303
|
+
it "displays the diff as if we were comparing hashes" do
|
304
|
+
as_both_colored_and_uncolored do |color_enabled|
|
305
|
+
snippet = <<~TEST.strip
|
306
|
+
expected = { name: "Elliot", age: 32 }
|
307
|
+
actual = {}
|
308
|
+
expect(actual).to have_attributes(expected)
|
309
|
+
TEST
|
310
|
+
|
311
|
+
program = make_plain_test_program(snippet, color_enabled: color_enabled)
|
231
312
|
|
232
|
-
|
233
|
-
|
313
|
+
expected_output = build_expected_output(
|
314
|
+
color_enabled: color_enabled,
|
315
|
+
snippet: %|expect(actual).to have_attributes(expected)|,
|
316
|
+
expectation: proc {
|
317
|
+
line do
|
318
|
+
plain "Expected "
|
319
|
+
beta %|{}|
|
320
|
+
plain " to respond to "
|
321
|
+
alpha %|:name|
|
322
|
+
plain " and "
|
323
|
+
alpha %|:age|
|
324
|
+
plain " with "
|
325
|
+
alpha %|0|
|
326
|
+
plain " arguments."
|
327
|
+
end
|
328
|
+
},
|
329
|
+
diff: proc {
|
330
|
+
plain_line %| {|
|
331
|
+
alpha_line %|- name: "Elliot",|
|
332
|
+
alpha_line %|- age: 32|
|
333
|
+
plain_line %| }|
|
334
|
+
},
|
335
|
+
)
|
336
|
+
|
337
|
+
expect(program).
|
338
|
+
to produce_output_when_run(expected_output).
|
339
|
+
in_color(color_enabled)
|
340
|
+
end
|
341
|
+
end
|
342
|
+
|
343
|
+
# TODO: Add as many fuzzy matchers as we can here
|
344
|
+
context "that contains fuzzy matcher objects instead of an object" do
|
345
|
+
it "displays the hash correctly" do
|
234
346
|
as_both_colored_and_uncolored do |color_enabled|
|
235
347
|
snippet = <<~TEST.strip
|
236
348
|
expected = {
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
349
|
+
name: "Elliot",
|
350
|
+
shipping_address: an_object_having_attributes(
|
351
|
+
line_1: a_kind_of(String),
|
352
|
+
line_2: nil,
|
353
|
+
city: an_instance_of(String),
|
354
|
+
state: "CA",
|
355
|
+
zip: "91234"
|
356
|
+
),
|
357
|
+
order_ids: a_collection_including(1, 2),
|
358
|
+
data: a_hash_including(active: true),
|
359
|
+
created_at: a_value_within(1).of(Time.utc(2020, 4, 9))
|
243
360
|
}
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
city: "Hill Valley",
|
248
|
-
state: "CA",
|
249
|
-
zip: "90382"
|
250
|
-
)
|
361
|
+
|
362
|
+
actual = {}
|
363
|
+
|
251
364
|
expect(actual).to have_attributes(expected)
|
252
365
|
TEST
|
366
|
+
|
253
367
|
program = make_plain_test_program(
|
254
368
|
snippet,
|
255
369
|
color_enabled: color_enabled,
|
@@ -261,31 +375,44 @@ RSpec.describe "Integration with RSpec's #have_attributes matcher", type: :integ
|
|
261
375
|
expectation: proc {
|
262
376
|
line do
|
263
377
|
plain " Expected "
|
264
|
-
beta
|
378
|
+
beta %|{}|
|
265
379
|
end
|
266
380
|
|
267
381
|
line do
|
268
382
|
plain "to respond to "
|
269
|
-
alpha %|:
|
383
|
+
alpha %|:name|
|
384
|
+
plain ", "
|
385
|
+
alpha %|:shipping_address|
|
386
|
+
plain ", "
|
387
|
+
alpha %|:order_ids|
|
388
|
+
plain ", "
|
389
|
+
alpha %|:data|
|
270
390
|
plain " and "
|
271
|
-
alpha %|:
|
391
|
+
alpha %|:created_at|
|
272
392
|
plain " with "
|
273
393
|
alpha %|0|
|
274
394
|
plain " arguments"
|
275
395
|
end
|
276
396
|
},
|
277
397
|
diff: proc {
|
278
|
-
plain_line %|
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
alpha_line %|-
|
287
|
-
alpha_line %|-
|
288
|
-
|
398
|
+
plain_line %| {|
|
399
|
+
alpha_line %|- name: "Elliot",|
|
400
|
+
alpha_line %|- shipping_address: #<an object having attributes (|
|
401
|
+
alpha_line %|- line_1: #<a kind of String>,|
|
402
|
+
alpha_line %|- line_2: nil,|
|
403
|
+
alpha_line %|- city: #<an instance of String>,|
|
404
|
+
alpha_line %|- state: "CA",|
|
405
|
+
alpha_line %|- zip: "91234"|
|
406
|
+
alpha_line %|- )>,|
|
407
|
+
alpha_line %|- order_ids: #<a collection including (|
|
408
|
+
alpha_line %|- 1,|
|
409
|
+
alpha_line %|- 2|
|
410
|
+
alpha_line %|- )>,|
|
411
|
+
alpha_line %|- data: #<a hash including (|
|
412
|
+
alpha_line %|- active: true|
|
413
|
+
alpha_line %|- )>,|
|
414
|
+
alpha_line %|- created_at: #<a value within 1 of 2020-04-09 00:00:00.000 UTC +00:00 (Time)>|
|
415
|
+
plain_line %| }|
|
289
416
|
},
|
290
417
|
)
|
291
418
|
|