super_diff 0.1.0 → 0.2.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.
- checksums.yaml +4 -4
- data/README.md +117 -89
- data/lib/super_diff.rb +33 -47
- data/lib/super_diff/active_record.rb +41 -0
- data/lib/super_diff/active_record/diff_formatters.rb +10 -0
- data/lib/super_diff/active_record/diff_formatters/active_record_relation.rb +23 -0
- data/lib/super_diff/active_record/differs.rb +10 -0
- data/lib/super_diff/active_record/differs/active_record_relation.rb +30 -0
- data/lib/super_diff/active_record/object_inspection.rb +14 -0
- data/lib/super_diff/active_record/object_inspection/inspectors.rb +16 -0
- data/lib/super_diff/active_record/object_inspection/inspectors/active_record_model.rb +38 -0
- data/lib/super_diff/active_record/object_inspection/inspectors/active_record_relation.rb +18 -0
- data/lib/super_diff/active_record/object_inspection/map_extension.rb +18 -0
- data/lib/super_diff/active_record/operation_sequences.rb +10 -0
- data/lib/super_diff/active_record/operation_sequences/active_record_relation.rb +16 -0
- data/lib/super_diff/active_record/operational_sequencers.rb +14 -0
- data/lib/super_diff/active_record/operational_sequencers/active_record_model.rb +19 -0
- data/lib/super_diff/active_record/operational_sequencers/active_record_relation.rb +24 -0
- data/lib/super_diff/active_support.rb +33 -0
- data/lib/super_diff/active_support/diff_formatters.rb +10 -0
- data/lib/super_diff/active_support/diff_formatters/hash_with_indifferent_access.rb +36 -0
- data/lib/super_diff/active_support/differs.rb +10 -0
- data/lib/super_diff/active_support/differs/hash_with_indifferent_access.rb +36 -0
- data/lib/super_diff/active_support/object_inspection.rb +14 -0
- data/lib/super_diff/active_support/object_inspection/inspectors.rb +12 -0
- data/lib/super_diff/active_support/object_inspection/inspectors/hash_with_indifferent_access.rb +18 -0
- data/lib/super_diff/active_support/object_inspection/map_extension.rb +15 -0
- data/lib/super_diff/active_support/operation_sequences.rb +10 -0
- data/lib/super_diff/active_support/operation_sequences/hash_with_indifferent_access.rb +16 -0
- data/lib/super_diff/active_support/operational_sequencers.rb +10 -0
- data/lib/super_diff/active_support/operational_sequencers/hash_with_indifferent_access.rb +21 -0
- data/lib/super_diff/colorized_document_extensions.rb +17 -0
- data/lib/super_diff/csi.rb +45 -15
- data/lib/super_diff/csi/bold_sequence.rb +9 -0
- data/lib/super_diff/csi/color.rb +62 -0
- data/lib/super_diff/csi/color_sequence_block.rb +28 -0
- data/lib/super_diff/csi/colorized_document.rb +72 -0
- data/lib/super_diff/csi/document.rb +183 -0
- data/lib/super_diff/csi/eight_bit_color.rb +72 -26
- data/lib/super_diff/csi/four_bit_color.rb +63 -29
- data/lib/super_diff/csi/twenty_four_bit_color.rb +79 -18
- data/lib/super_diff/csi/uncolorized_document.rb +29 -0
- data/lib/super_diff/diff_formatter.rb +10 -15
- data/lib/super_diff/diff_formatters.rb +10 -1
- data/lib/super_diff/diff_formatters/base.rb +12 -17
- data/lib/super_diff/diff_formatters/collection.rb +81 -50
- data/lib/super_diff/diff_formatters/{object.rb → custom_object.rb} +12 -9
- data/lib/super_diff/diff_formatters/default_object.rb +48 -0
- data/lib/super_diff/diff_formatters/multiline_string.rb +31 -0
- data/lib/super_diff/differ.rb +35 -32
- data/lib/super_diff/differs.rb +16 -1
- data/lib/super_diff/differs/array.rb +2 -2
- data/lib/super_diff/differs/base.rb +11 -21
- data/lib/super_diff/differs/custom_object.rb +26 -0
- data/lib/super_diff/differs/default_object.rb +25 -0
- data/lib/super_diff/differs/empty.rb +1 -1
- data/lib/super_diff/differs/hash.rb +2 -2
- data/lib/super_diff/differs/{multi_line_string.rb → multiline_string.rb} +6 -5
- data/lib/super_diff/equality_matcher.rb +9 -22
- data/lib/super_diff/equality_matchers.rb +19 -1
- data/lib/super_diff/equality_matchers/array.rb +6 -4
- data/lib/super_diff/equality_matchers/base.rb +8 -16
- data/lib/super_diff/equality_matchers/default.rb +60 -0
- data/lib/super_diff/equality_matchers/hash.rb +6 -4
- data/lib/super_diff/equality_matchers/{multi_line_string.rb → multiline_string.rb} +9 -6
- data/lib/super_diff/equality_matchers/primitive.rb +34 -0
- data/lib/super_diff/equality_matchers/{single_line_string.rb → singleline_string.rb} +7 -5
- data/lib/super_diff/helpers.rb +17 -81
- data/lib/super_diff/no_differ_available_error.rb +22 -0
- data/lib/super_diff/{errors.rb → no_operational_sequencer_available_error.rb} +0 -0
- data/lib/super_diff/object_inspection.rb +24 -0
- data/lib/super_diff/object_inspection/inspection_tree.rb +144 -0
- data/lib/super_diff/object_inspection/inspector.rb +27 -0
- data/lib/super_diff/object_inspection/inspectors.rb +18 -0
- data/lib/super_diff/object_inspection/inspectors/array.rb +22 -0
- data/lib/super_diff/object_inspection/inspectors/custom_object.rb +27 -0
- data/lib/super_diff/object_inspection/inspectors/default_object.rb +47 -0
- data/lib/super_diff/object_inspection/inspectors/hash.rb +22 -0
- data/lib/super_diff/object_inspection/inspectors/primitive.rb +13 -0
- data/lib/super_diff/object_inspection/inspectors/string.rb +13 -0
- data/lib/super_diff/object_inspection/map.rb +28 -0
- data/lib/super_diff/object_inspection/nodes.rb +49 -0
- data/lib/super_diff/object_inspection/nodes/base.rb +86 -0
- data/lib/super_diff/object_inspection/nodes/break.rb +15 -0
- data/lib/super_diff/object_inspection/nodes/inspection.rb +15 -0
- data/lib/super_diff/object_inspection/nodes/nesting.rb +16 -0
- data/lib/super_diff/object_inspection/nodes/text.rb +15 -0
- data/lib/super_diff/object_inspection/nodes/when_empty.rb +30 -0
- data/lib/super_diff/object_inspection/nodes/when_multiline.rb +22 -0
- data/lib/super_diff/object_inspection/nodes/when_non_empty.rb +30 -0
- data/lib/super_diff/object_inspection/nodes/when_singleline.rb +24 -0
- data/lib/super_diff/operation_sequences.rb +9 -0
- data/lib/super_diff/operation_sequences/base.rb +1 -1
- data/lib/super_diff/operation_sequences/{object.rb → custom_object.rb} +4 -3
- data/lib/super_diff/operation_sequences/default_object.rb +25 -0
- data/lib/super_diff/operational_sequencer.rb +23 -18
- data/lib/super_diff/operational_sequencers.rb +12 -1
- data/lib/super_diff/operational_sequencers/array.rb +65 -62
- data/lib/super_diff/operational_sequencers/base.rb +18 -26
- data/lib/super_diff/operational_sequencers/custom_object.rb +35 -0
- data/lib/super_diff/operational_sequencers/{object.rb → default_object.rb} +21 -11
- data/lib/super_diff/operational_sequencers/hash.rb +8 -5
- data/lib/super_diff/operational_sequencers/{multi_line_string.rb → multiline_string.rb} +11 -6
- data/lib/super_diff/operations.rb +6 -0
- data/lib/super_diff/operations/binary_operation.rb +14 -34
- data/lib/super_diff/operations/unary_operation.rb +11 -2
- data/lib/super_diff/rails.rb +1 -0
- data/lib/super_diff/recursion_guard.rb +47 -0
- data/lib/super_diff/rspec-rails.rb +2 -0
- data/lib/super_diff/rspec.rb +52 -8
- data/lib/super_diff/rspec/augmented_matcher.rb +98 -0
- data/lib/super_diff/rspec/configuration.rb +31 -0
- data/lib/super_diff/rspec/differ.rb +60 -16
- data/lib/super_diff/rspec/differs.rb +13 -0
- data/lib/super_diff/rspec/differs/collection_containing_exactly.rb +23 -0
- data/lib/super_diff/rspec/differs/partial_array.rb +22 -0
- data/lib/super_diff/rspec/differs/partial_hash.rb +22 -0
- data/lib/super_diff/rspec/differs/partial_object.rb +22 -0
- data/lib/super_diff/rspec/matcher_text_builders.rb +24 -0
- data/lib/super_diff/rspec/matcher_text_builders/base.rb +155 -0
- data/lib/super_diff/rspec/matcher_text_builders/be_predicate.rb +78 -0
- data/lib/super_diff/rspec/matcher_text_builders/contain_exactly.rb +14 -0
- data/lib/super_diff/rspec/matcher_text_builders/match.rb +23 -0
- data/lib/super_diff/rspec/matcher_text_builders/raise_error.rb +13 -0
- data/lib/super_diff/rspec/matcher_text_builders/respond_to.rb +99 -0
- data/lib/super_diff/rspec/matcher_text_template.rb +240 -0
- data/lib/super_diff/rspec/monkey_patches.rb +601 -98
- data/lib/super_diff/rspec/object_inspection.rb +8 -0
- data/lib/super_diff/rspec/object_inspection/inspectors.rb +24 -0
- data/lib/super_diff/rspec/object_inspection/inspectors/collection_containing_exactly.rb +19 -0
- data/lib/super_diff/rspec/object_inspection/inspectors/partial_array.rb +22 -0
- data/lib/super_diff/rspec/object_inspection/inspectors/partial_hash.rb +21 -0
- data/lib/super_diff/rspec/object_inspection/inspectors/partial_object.rb +21 -0
- data/lib/super_diff/rspec/object_inspection/map_extension.rb +23 -0
- data/lib/super_diff/rspec/operational_sequencers.rb +22 -0
- data/lib/super_diff/rspec/operational_sequencers/collection_containing_exactly.rb +97 -0
- data/lib/super_diff/rspec/operational_sequencers/partial_array.rb +23 -0
- data/lib/super_diff/rspec/operational_sequencers/partial_hash.rb +32 -0
- data/lib/super_diff/rspec/operational_sequencers/partial_object.rb +64 -0
- data/lib/super_diff/version.rb +1 -1
- data/spec/examples.txt +328 -46
- data/spec/integration/rails/active_record_spec.rb +19 -0
- data/spec/integration/rails/hash_with_indifferent_access_spec.rb +19 -0
- data/spec/integration/rspec/be_falsey_matcher_spec.rb +53 -0
- data/spec/integration/rspec/be_matcher_spec.rb +565 -0
- data/spec/integration/rspec/be_nil_matcher_spec.rb +53 -0
- data/spec/integration/rspec/be_predicate_matcher_spec.rb +546 -0
- data/spec/integration/rspec/be_truthy_matcher_spec.rb +57 -0
- data/spec/integration/rspec/contain_exactly_matcher_spec.rb +368 -0
- data/spec/integration/rspec/eq_matcher_spec.rb +874 -0
- data/spec/integration/rspec/have_attributes_matcher_spec.rb +299 -0
- data/spec/integration/rspec/include_matcher_spec.rb +350 -0
- data/spec/integration/rspec/match_matcher_spec.rb +1258 -0
- data/spec/integration/rspec/raise_error_matcher_spec.rb +350 -0
- data/spec/integration/rspec/respond_to_matcher_spec.rb +994 -0
- data/spec/integration/rspec/unhandled_errors_spec.rb +94 -0
- data/spec/spec_helper.rb +19 -4
- data/spec/support/colorizer.rb +9 -0
- data/spec/support/command_runner.rb +4 -0
- data/spec/support/integration/helpers.rb +179 -0
- data/spec/support/integration/matchers/produce_output_when_run_matcher.rb +79 -41
- data/spec/support/models/a.rb +11 -0
- data/spec/support/models/active_record/person.rb +26 -0
- data/spec/support/models/active_record/shipping_address.rb +29 -0
- data/spec/support/models/customer.rb +24 -0
- data/spec/support/models/empty_class.rb +6 -0
- data/spec/support/models/item.rb +10 -0
- data/spec/support/models/order.rb +9 -0
- data/spec/support/models/person.rb +20 -0
- data/spec/support/models/player.rb +33 -0
- data/spec/support/models/shipping_address.rb +34 -0
- data/spec/support/ruby_versions.rb +7 -0
- data/spec/support/shared_examples/active_record.rb +338 -0
- data/spec/support/shared_examples/hash_with_indifferent_access.rb +233 -0
- data/spec/unit/equality_matcher_spec.rb +579 -171
- data/spec/unit/object_inspection_spec.rb +1092 -0
- data/spec/unit/rspec/matchers/be_compared_to_spec.rb +23 -0
- data/spec/unit/rspec/matchers/be_falsey_spec.rb +9 -0
- data/spec/unit/rspec/matchers/be_nil_spec.rb +9 -0
- data/spec/unit/rspec/matchers/be_predicate_spec.rb +31 -0
- data/spec/unit/rspec/matchers/be_spec.rb +17 -0
- data/spec/unit/rspec/matchers/be_truthy_spec.rb +9 -0
- data/spec/unit/rspec/matchers/contain_exactly_spec.rb +11 -0
- data/spec/unit/rspec/matchers/eq_spec.rb +9 -0
- data/spec/unit/rspec/matchers/have_attributes_spec.rb +11 -0
- data/spec/unit/rspec/matchers/include_spec.rb +21 -0
- data/spec/unit/rspec/matchers/match_spec.rb +9 -0
- data/spec/unit/rspec/matchers/raise_error_spec.rb +29 -0
- data/spec/unit/rspec/matchers/respond_to_spec.rb +78 -0
- data/super_diff.gemspec +4 -2
- metadata +231 -34
- data/lib/super_diff/csi/color_helper.rb +0 -52
- data/lib/super_diff/csi/eight_bit_sequence.rb +0 -27
- data/lib/super_diff/csi/four_bit_sequence.rb +0 -24
- data/lib/super_diff/csi/sequence.rb +0 -22
- data/lib/super_diff/csi/twenty_four_bit_sequence.rb +0 -27
- data/lib/super_diff/diff_formatters/multi_line_string.rb +0 -31
- data/lib/super_diff/differs/object.rb +0 -68
- data/lib/super_diff/equality_matchers/object.rb +0 -18
- data/lib/super_diff/value_inspection.rb +0 -11
- data/spec/integration/rspec_spec.rb +0 -261
- data/spec/support/color_helper.rb +0 -49
- data/spec/support/person.rb +0 -23
- data/spec/support/person_diff_formatter.rb +0 -15
- data/spec/support/person_operation_sequence.rb +0 -14
- data/spec/support/person_operational_sequencer.rb +0 -19
@@ -0,0 +1,233 @@
|
|
1
|
+
shared_examples_for "integration with HashWithIndifferentAccess" do
|
2
|
+
describe "and RSpec's #eq matcher" do
|
3
|
+
context "when the actual value is a HashWithIndifferentAccess" do
|
4
|
+
it "produces the correct output" do
|
5
|
+
as_both_colored_and_uncolored do |color_enabled|
|
6
|
+
snippet = <<~TEST.strip
|
7
|
+
expected = {
|
8
|
+
line_1: "123 Main St.",
|
9
|
+
city: "Hill Valley",
|
10
|
+
state: "CA",
|
11
|
+
zip: "90382",
|
12
|
+
}
|
13
|
+
actual = HashWithIndifferentAccess.new({
|
14
|
+
line_1: "456 Ponderosa Ct.",
|
15
|
+
city: "Oakland",
|
16
|
+
state: "CA",
|
17
|
+
zip: "91234",
|
18
|
+
})
|
19
|
+
expect(actual).to eq(expected)
|
20
|
+
TEST
|
21
|
+
program = make_rspec_rails_test_program(
|
22
|
+
snippet,
|
23
|
+
color_enabled: color_enabled,
|
24
|
+
)
|
25
|
+
|
26
|
+
expected_output = build_expected_output(
|
27
|
+
color_enabled: color_enabled,
|
28
|
+
snippet: "expect(actual).to eq(expected)",
|
29
|
+
expectation: proc {
|
30
|
+
line do
|
31
|
+
plain "Expected "
|
32
|
+
beta %|#<HashWithIndifferentAccess { "line_1" => "456 Ponderosa Ct.", "city" => "Oakland", "state" => "CA", "zip" => "91234" }>|
|
33
|
+
end
|
34
|
+
|
35
|
+
line do
|
36
|
+
plain " to eq "
|
37
|
+
alpha %|{ line_1: "123 Main St.", city: "Hill Valley", state: "CA", zip: "90382" }|
|
38
|
+
end
|
39
|
+
},
|
40
|
+
diff: proc {
|
41
|
+
plain_line %| #<HashWithIndifferentAccess {|
|
42
|
+
alpha_line %|- "line_1" => "123 Main St.",|
|
43
|
+
beta_line %|+ "line_1" => "456 Ponderosa Ct.",|
|
44
|
+
alpha_line %|- "city" => "Hill Valley",|
|
45
|
+
beta_line %|+ "city" => "Oakland",|
|
46
|
+
plain_line %| "state" => "CA",|
|
47
|
+
alpha_line %|- "zip" => "90382"|
|
48
|
+
beta_line %|+ "zip" => "91234"|
|
49
|
+
plain_line %| }>|
|
50
|
+
},
|
51
|
+
)
|
52
|
+
|
53
|
+
expect(program).
|
54
|
+
to produce_output_when_run(expected_output).
|
55
|
+
in_color(color_enabled)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
context "when the expected value is a HashWithIndifferentAccess" do
|
61
|
+
it "produces the correct output" do
|
62
|
+
as_both_colored_and_uncolored do |color_enabled|
|
63
|
+
snippet = <<~TEST.strip
|
64
|
+
expected = HashWithIndifferentAccess.new({
|
65
|
+
line_1: "456 Ponderosa Ct.",
|
66
|
+
city: "Oakland",
|
67
|
+
state: "CA",
|
68
|
+
zip: "91234",
|
69
|
+
})
|
70
|
+
actual = {
|
71
|
+
line_1: "123 Main St.",
|
72
|
+
city: "Hill Valley",
|
73
|
+
state: "CA",
|
74
|
+
zip: "90382",
|
75
|
+
}
|
76
|
+
expect(actual).to eq(expected)
|
77
|
+
TEST
|
78
|
+
program = make_rspec_rails_test_program(
|
79
|
+
snippet,
|
80
|
+
color_enabled: color_enabled,
|
81
|
+
)
|
82
|
+
|
83
|
+
expected_output = build_expected_output(
|
84
|
+
color_enabled: color_enabled,
|
85
|
+
snippet: "expect(actual).to eq(expected)",
|
86
|
+
expectation: proc {
|
87
|
+
line do
|
88
|
+
plain "Expected "
|
89
|
+
beta %|{ line_1: "123 Main St.", city: "Hill Valley", state: "CA", zip: "90382" }|
|
90
|
+
end
|
91
|
+
|
92
|
+
line do
|
93
|
+
plain " to eq "
|
94
|
+
alpha %|#<HashWithIndifferentAccess { "line_1" => "456 Ponderosa Ct.", "city" => "Oakland", "state" => "CA", "zip" => "91234" }>|
|
95
|
+
end
|
96
|
+
},
|
97
|
+
diff: proc {
|
98
|
+
plain_line %| #<HashWithIndifferentAccess {|
|
99
|
+
alpha_line %|- "line_1" => "456 Ponderosa Ct.",|
|
100
|
+
beta_line %|+ "line_1" => "123 Main St.",|
|
101
|
+
alpha_line %|- "city" => "Oakland",|
|
102
|
+
beta_line %|+ "city" => "Hill Valley",|
|
103
|
+
plain_line %| "state" => "CA",|
|
104
|
+
alpha_line %|- "zip" => "91234"|
|
105
|
+
beta_line %|+ "zip" => "90382"|
|
106
|
+
plain_line %| }>|
|
107
|
+
},
|
108
|
+
)
|
109
|
+
|
110
|
+
expect(program).
|
111
|
+
to produce_output_when_run(expected_output).
|
112
|
+
in_color(color_enabled)
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
describe "and RSpec's #match matcher" do
|
119
|
+
context "when the actual value is a HashWithIndifferentAccess" do
|
120
|
+
it "produces the correct output" do
|
121
|
+
as_both_colored_and_uncolored do |color_enabled|
|
122
|
+
snippet = <<~TEST.strip
|
123
|
+
expected = {
|
124
|
+
line_1: "123 Main St.",
|
125
|
+
city: "Hill Valley",
|
126
|
+
state: "CA",
|
127
|
+
zip: "90382",
|
128
|
+
}
|
129
|
+
actual = HashWithIndifferentAccess.new({
|
130
|
+
line_1: "456 Ponderosa Ct.",
|
131
|
+
city: "Oakland",
|
132
|
+
state: "CA",
|
133
|
+
zip: "91234",
|
134
|
+
})
|
135
|
+
expect(actual).to match(expected)
|
136
|
+
TEST
|
137
|
+
program = make_rspec_rails_test_program(
|
138
|
+
snippet,
|
139
|
+
color_enabled: color_enabled,
|
140
|
+
)
|
141
|
+
|
142
|
+
expected_output = build_expected_output(
|
143
|
+
color_enabled: color_enabled,
|
144
|
+
snippet: "expect(actual).to match(expected)",
|
145
|
+
expectation: proc {
|
146
|
+
line do
|
147
|
+
plain "Expected "
|
148
|
+
beta %|#<HashWithIndifferentAccess { "line_1" => "456 Ponderosa Ct.", "city" => "Oakland", "state" => "CA", "zip" => "91234" }>|
|
149
|
+
end
|
150
|
+
|
151
|
+
line do
|
152
|
+
plain "to match "
|
153
|
+
alpha %|{ line_1: "123 Main St.", city: "Hill Valley", state: "CA", zip: "90382" }|
|
154
|
+
end
|
155
|
+
},
|
156
|
+
diff: proc {
|
157
|
+
plain_line %| #<HashWithIndifferentAccess {|
|
158
|
+
alpha_line %|- "line_1" => "123 Main St.",|
|
159
|
+
beta_line %|+ "line_1" => "456 Ponderosa Ct.",|
|
160
|
+
alpha_line %|- "city" => "Hill Valley",|
|
161
|
+
beta_line %|+ "city" => "Oakland",|
|
162
|
+
plain_line %| "state" => "CA",|
|
163
|
+
alpha_line %|- "zip" => "90382"|
|
164
|
+
beta_line %|+ "zip" => "91234"|
|
165
|
+
plain_line %| }>|
|
166
|
+
},
|
167
|
+
)
|
168
|
+
|
169
|
+
expect(program).
|
170
|
+
to produce_output_when_run(expected_output).
|
171
|
+
in_color(color_enabled)
|
172
|
+
end
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
176
|
+
context "when the expected value is a HashWithIndifferentAccess" do
|
177
|
+
it "produces the correct output" do
|
178
|
+
as_both_colored_and_uncolored do |color_enabled|
|
179
|
+
snippet = <<~TEST.strip
|
180
|
+
expected = HashWithIndifferentAccess.new({
|
181
|
+
line_1: "456 Ponderosa Ct.",
|
182
|
+
city: "Oakland",
|
183
|
+
state: "CA",
|
184
|
+
zip: "91234",
|
185
|
+
})
|
186
|
+
actual = {
|
187
|
+
line_1: "123 Main St.",
|
188
|
+
city: "Hill Valley",
|
189
|
+
state: "CA",
|
190
|
+
zip: "90382",
|
191
|
+
}
|
192
|
+
expect(actual).to match(expected)
|
193
|
+
TEST
|
194
|
+
program = make_rspec_rails_test_program(
|
195
|
+
snippet,
|
196
|
+
color_enabled: color_enabled,
|
197
|
+
)
|
198
|
+
|
199
|
+
expected_output = build_expected_output(
|
200
|
+
color_enabled: color_enabled,
|
201
|
+
snippet: "expect(actual).to match(expected)",
|
202
|
+
expectation: proc {
|
203
|
+
line do
|
204
|
+
plain "Expected "
|
205
|
+
beta %|{ line_1: "123 Main St.", city: "Hill Valley", state: "CA", zip: "90382" }|
|
206
|
+
end
|
207
|
+
|
208
|
+
line do
|
209
|
+
plain "to match "
|
210
|
+
alpha %|#<HashWithIndifferentAccess { "line_1" => "456 Ponderosa Ct.", "city" => "Oakland", "state" => "CA", "zip" => "91234" }>|
|
211
|
+
end
|
212
|
+
},
|
213
|
+
diff: proc {
|
214
|
+
plain_line %| #<HashWithIndifferentAccess {|
|
215
|
+
alpha_line %|- "line_1" => "456 Ponderosa Ct.",|
|
216
|
+
beta_line %|+ "line_1" => "123 Main St.",|
|
217
|
+
alpha_line %|- "city" => "Oakland",|
|
218
|
+
beta_line %|+ "city" => "Hill Valley",|
|
219
|
+
plain_line %| "state" => "CA",|
|
220
|
+
alpha_line %|- "zip" => "91234"|
|
221
|
+
beta_line %|+ "zip" => "90382"|
|
222
|
+
plain_line %| }>|
|
223
|
+
},
|
224
|
+
)
|
225
|
+
|
226
|
+
expect(program).
|
227
|
+
to produce_output_when_run(expected_output).
|
228
|
+
in_color(color_enabled)
|
229
|
+
end
|
230
|
+
end
|
231
|
+
end
|
232
|
+
end
|
233
|
+
end
|
@@ -27,8 +27,8 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
27
27
|
|
28
28
|
#{
|
29
29
|
colored do
|
30
|
-
|
31
|
-
|
30
|
+
alpha_line %(Expected: 42)
|
31
|
+
beta_line %( Actual: 1)
|
32
32
|
end
|
33
33
|
}
|
34
34
|
STR
|
@@ -54,8 +54,8 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
54
54
|
|
55
55
|
#{
|
56
56
|
colored do
|
57
|
-
|
58
|
-
|
57
|
+
alpha_line %(Expected: :foo)
|
58
|
+
beta_line %( Actual: :bar)
|
59
59
|
end
|
60
60
|
}
|
61
61
|
STR
|
@@ -84,8 +84,8 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
84
84
|
|
85
85
|
#{
|
86
86
|
colored do
|
87
|
-
|
88
|
-
|
87
|
+
alpha_line %(Expected: "Marty")
|
88
|
+
beta_line %( Actual: "Jennifer")
|
89
89
|
end
|
90
90
|
}
|
91
91
|
STR
|
@@ -106,8 +106,52 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
106
106
|
|
107
107
|
#{
|
108
108
|
colored do
|
109
|
-
|
110
|
-
|
109
|
+
alpha_line %(Expected: "Marty")
|
110
|
+
beta_line %( Actual: "Marty McFly")
|
111
|
+
end
|
112
|
+
}
|
113
|
+
STR
|
114
|
+
|
115
|
+
expect(actual_output).to eq(expected_output)
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
context "given a single-line string and a multi-line string" do
|
120
|
+
it "returns a message along with the diff" do
|
121
|
+
actual_output = described_class.call(
|
122
|
+
expected: "Something entirely different",
|
123
|
+
actual: "This is a line\nAnd that's another line\n",
|
124
|
+
)
|
125
|
+
|
126
|
+
expected_output = <<~STR.strip
|
127
|
+
Differing strings.
|
128
|
+
|
129
|
+
#{
|
130
|
+
colored do
|
131
|
+
alpha_line %(Expected: "Something entirely different")
|
132
|
+
beta_line %( Actual: "This is a line\\nAnd that's another line\\n")
|
133
|
+
end
|
134
|
+
}
|
135
|
+
STR
|
136
|
+
|
137
|
+
expect(actual_output).to eq(expected_output)
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
context "given a multi-line string and a single-line string" do
|
142
|
+
it "returns a message along with the diff" do
|
143
|
+
actual_output = described_class.call(
|
144
|
+
expected: "This is a line\nAnd that's another line\n",
|
145
|
+
actual: "Something entirely different",
|
146
|
+
)
|
147
|
+
|
148
|
+
expected_output = <<~STR.strip
|
149
|
+
Differing strings.
|
150
|
+
|
151
|
+
#{
|
152
|
+
colored do
|
153
|
+
alpha_line %(Expected: "This is a line\\nAnd that's another line\\n")
|
154
|
+
beta_line %( Actual: "Something entirely different")
|
111
155
|
end
|
112
156
|
}
|
113
157
|
STR
|
@@ -128,8 +172,8 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
128
172
|
|
129
173
|
#{
|
130
174
|
colored do
|
131
|
-
|
132
|
-
|
175
|
+
alpha_line %(Expected: "This is a line\\nAnd that's a line\\nAnd there's a line too")
|
176
|
+
beta_line %( Actual: "This is a line\\nSomething completely different\\nAnd there's a line too")
|
133
177
|
end
|
134
178
|
}
|
135
179
|
|
@@ -137,9 +181,9 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
137
181
|
|
138
182
|
#{
|
139
183
|
colored do
|
140
|
-
plain_line %( This is a line
|
141
|
-
|
142
|
-
|
184
|
+
plain_line %( This is a line\\n)
|
185
|
+
alpha_line %(- And that's a line\\n)
|
186
|
+
beta_line %(+ Something completely different\\n)
|
143
187
|
plain_line %( And there's a line too)
|
144
188
|
end
|
145
189
|
}
|
@@ -161,8 +205,74 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
161
205
|
|
162
206
|
#{
|
163
207
|
colored do
|
164
|
-
|
165
|
-
|
208
|
+
alpha_line %(Expected: "This is a line\\nAnd that's a line\\n")
|
209
|
+
beta_line %( Actual: "Something completely different\\nAnd something else too\\n")
|
210
|
+
end
|
211
|
+
}
|
212
|
+
|
213
|
+
Diff:
|
214
|
+
|
215
|
+
#{
|
216
|
+
colored do
|
217
|
+
alpha_line %(- This is a line\\n)
|
218
|
+
alpha_line %(- And that's a line\\n)
|
219
|
+
beta_line %(+ Something completely different\\n)
|
220
|
+
beta_line %(+ And something else too\\n)
|
221
|
+
end
|
222
|
+
}
|
223
|
+
STR
|
224
|
+
|
225
|
+
expect(actual_output).to eq(expected_output)
|
226
|
+
end
|
227
|
+
end
|
228
|
+
|
229
|
+
context "given multi-line strings that contain color codes" do
|
230
|
+
it "escapes the color codes" do
|
231
|
+
colors = [
|
232
|
+
SuperDiff::Csi::FourBitColor.new(:blue, layer: :foreground),
|
233
|
+
SuperDiff::Csi::EightBitColor.new(
|
234
|
+
red: 3,
|
235
|
+
green: 8,
|
236
|
+
blue: 4,
|
237
|
+
layer: :foreground,
|
238
|
+
),
|
239
|
+
SuperDiff::Csi::TwentyFourBitColor.new(
|
240
|
+
red: 47,
|
241
|
+
green: 164,
|
242
|
+
blue: 59,
|
243
|
+
layer: :foreground,
|
244
|
+
),
|
245
|
+
]
|
246
|
+
|
247
|
+
expected =
|
248
|
+
colored("This is a line", colors[0]) + "\n" +
|
249
|
+
colored("And that's a line", colors[1]) + "\n" +
|
250
|
+
colored("And there's a line too", colors[2]) + "\n"
|
251
|
+
|
252
|
+
actual =
|
253
|
+
colored("This is a line", colors[0]) + "\n" +
|
254
|
+
colored("Something completely different", colors[1]) + "\n" +
|
255
|
+
colored("And there's a line too", colors[2]) + "\n"
|
256
|
+
|
257
|
+
actual_output = described_class.call(
|
258
|
+
expected: expected,
|
259
|
+
actual: actual,
|
260
|
+
)
|
261
|
+
|
262
|
+
expected_output = <<~STR.strip
|
263
|
+
Differing strings.
|
264
|
+
|
265
|
+
#{
|
266
|
+
colored do
|
267
|
+
alpha_line do
|
268
|
+
text "Expected: "
|
269
|
+
text %("\\e[34mThis is a line\\e[0m\\n\\e[38;5;176mAnd that's a line\\e[0m\\n\\e[38;2;47;59;164mAnd there's a line too\\e[0m\\n")
|
270
|
+
end
|
271
|
+
|
272
|
+
beta_line do
|
273
|
+
text " Actual: "
|
274
|
+
text %("\\e[34mThis is a line\\e[0m\\n\\e[38;5;176mSomething completely different\\e[0m\\n\\e[38;2;47;59;164mAnd there's a line too\\e[0m\\n")
|
275
|
+
end
|
166
276
|
end
|
167
277
|
}
|
168
278
|
|
@@ -170,10 +280,10 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
170
280
|
|
171
281
|
#{
|
172
282
|
colored do
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
283
|
+
plain_line %( \\e[34mThis is a line\\e[0m\\n)
|
284
|
+
alpha_line %(- \\e[38;5;176mAnd that's a line\\e[0m\\n)
|
285
|
+
beta_line %(+ \\e[38;5;176mSomething completely different\\e[0m\\n)
|
286
|
+
plain_line %( \\e[38;2;47;59;164mAnd there's a line too\\e[0m\\n)
|
177
287
|
end
|
178
288
|
}
|
179
289
|
STR
|
@@ -205,8 +315,8 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
205
315
|
|
206
316
|
#{
|
207
317
|
colored do
|
208
|
-
|
209
|
-
|
318
|
+
alpha_line %(Expected: [1, 2, 3, 4])
|
319
|
+
beta_line %( Actual: [1, 2, 99, 4])
|
210
320
|
end
|
211
321
|
}
|
212
322
|
|
@@ -217,8 +327,8 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
217
327
|
plain_line %( [)
|
218
328
|
plain_line %( 1,)
|
219
329
|
plain_line %( 2,)
|
220
|
-
|
221
|
-
|
330
|
+
alpha_line %(- 3,)
|
331
|
+
beta_line %(+ 99,)
|
222
332
|
plain_line %( 4)
|
223
333
|
plain_line %( ])
|
224
334
|
end
|
@@ -241,8 +351,8 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
241
351
|
|
242
352
|
#{
|
243
353
|
colored do
|
244
|
-
|
245
|
-
|
354
|
+
alpha_line %(Expected: [:one, :fish, :two, :fish])
|
355
|
+
beta_line %( Actual: [:one, :FISH, :two, :fish])
|
246
356
|
end
|
247
357
|
}
|
248
358
|
|
@@ -252,8 +362,8 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
252
362
|
colored do
|
253
363
|
plain_line %( [)
|
254
364
|
plain_line %( :one,)
|
255
|
-
|
256
|
-
|
365
|
+
alpha_line %(- :fish,)
|
366
|
+
beta_line %(+ :FISH,)
|
257
367
|
plain_line %( :two,)
|
258
368
|
plain_line %( :fish)
|
259
369
|
plain_line %( ])
|
@@ -277,8 +387,8 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
277
387
|
|
278
388
|
#{
|
279
389
|
colored do
|
280
|
-
|
281
|
-
|
390
|
+
alpha_line %(Expected: ["sausage", "egg", "cheese"])
|
391
|
+
beta_line %( Actual: ["bacon", "egg", "cheese"])
|
282
392
|
end
|
283
393
|
}
|
284
394
|
|
@@ -287,8 +397,8 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
287
397
|
#{
|
288
398
|
colored do
|
289
399
|
plain_line %( [)
|
290
|
-
|
291
|
-
|
400
|
+
alpha_line %(- "sausage",)
|
401
|
+
beta_line %(+ "bacon",)
|
292
402
|
plain_line %( "egg",)
|
293
403
|
plain_line %( "cheese")
|
294
404
|
plain_line %( ])
|
@@ -304,18 +414,12 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
304
414
|
it "returns a message along with the diff" do
|
305
415
|
actual_output = described_class.call(
|
306
416
|
expected: [
|
307
|
-
SuperDiff::Test::Person.new(name: "Marty"),
|
308
|
-
SuperDiff::Test::Person.new(name: "Jennifer"),
|
417
|
+
SuperDiff::Test::Person.new(name: "Marty", age: 18),
|
418
|
+
SuperDiff::Test::Person.new(name: "Jennifer", age: 17),
|
309
419
|
],
|
310
420
|
actual: [
|
311
|
-
SuperDiff::Test::Person.new(name: "Marty"),
|
312
|
-
SuperDiff::Test::Person.new(name: "Doc"),
|
313
|
-
],
|
314
|
-
extra_operational_sequencer_classes: [
|
315
|
-
SuperDiff::Test::PersonOperationalSequencer,
|
316
|
-
],
|
317
|
-
extra_diff_formatter_classes: [
|
318
|
-
SuperDiff::Test::PersonDiffFormatter,
|
421
|
+
SuperDiff::Test::Person.new(name: "Marty", age: 18),
|
422
|
+
SuperDiff::Test::Person.new(name: "Doc", age: 50),
|
319
423
|
],
|
320
424
|
)
|
321
425
|
|
@@ -324,8 +428,8 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
324
428
|
|
325
429
|
#{
|
326
430
|
colored do
|
327
|
-
|
328
|
-
|
431
|
+
alpha_line %(Expected: [#<SuperDiff::Test::Person name: "Marty", age: 18>, #<SuperDiff::Test::Person name: "Jennifer", age: 17>])
|
432
|
+
beta_line %( Actual: [#<SuperDiff::Test::Person name: "Marty", age: 18>, #<SuperDiff::Test::Person name: "Doc", age: 50>])
|
329
433
|
end
|
330
434
|
}
|
331
435
|
|
@@ -335,11 +439,14 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
335
439
|
colored do
|
336
440
|
plain_line %( [)
|
337
441
|
plain_line %( #<SuperDiff::Test::Person {)
|
338
|
-
plain_line %( name: "Marty")
|
442
|
+
plain_line %( name: "Marty",)
|
443
|
+
plain_line %( age: 18)
|
339
444
|
plain_line %( }>,)
|
340
445
|
plain_line %( #<SuperDiff::Test::Person {)
|
341
|
-
|
342
|
-
|
446
|
+
alpha_line %(- name: "Jennifer",)
|
447
|
+
beta_line %(+ name: "Doc",)
|
448
|
+
alpha_line %(- age: 17)
|
449
|
+
beta_line %(+ age: 50)
|
343
450
|
plain_line %( }>)
|
344
451
|
plain_line %( ])
|
345
452
|
end
|
@@ -362,8 +469,8 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
362
469
|
|
363
470
|
#{
|
364
471
|
colored do
|
365
|
-
|
366
|
-
|
472
|
+
alpha_line %(Expected: ["bread"])
|
473
|
+
beta_line %( Actual: ["bread", "eggs", "milk"])
|
367
474
|
end
|
368
475
|
}
|
369
476
|
|
@@ -373,8 +480,8 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
373
480
|
colored do
|
374
481
|
plain_line %( [)
|
375
482
|
plain_line %( "bread",)
|
376
|
-
|
377
|
-
|
483
|
+
beta_line %(+ "eggs",)
|
484
|
+
beta_line %(+ "milk")
|
378
485
|
plain_line %( ])
|
379
486
|
end
|
380
487
|
}
|
@@ -396,8 +503,8 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
396
503
|
|
397
504
|
#{
|
398
505
|
colored do
|
399
|
-
|
400
|
-
|
506
|
+
alpha_line %(Expected: ["bread", "eggs", "milk"])
|
507
|
+
beta_line %( Actual: ["bread"])
|
401
508
|
end
|
402
509
|
}
|
403
510
|
|
@@ -407,8 +514,8 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
407
514
|
colored do
|
408
515
|
plain_line %( [)
|
409
516
|
plain_line %( "bread")
|
410
|
-
|
411
|
-
|
517
|
+
alpha_line %(- "eggs",)
|
518
|
+
alpha_line %(- "milk")
|
412
519
|
plain_line %( ])
|
413
520
|
end
|
414
521
|
}
|
@@ -430,8 +537,8 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
430
537
|
|
431
538
|
#{
|
432
539
|
colored do
|
433
|
-
|
434
|
-
|
540
|
+
alpha_line %(Expected: ["milk"])
|
541
|
+
beta_line %( Actual: ["bread", "eggs", "milk"])
|
435
542
|
end
|
436
543
|
}
|
437
544
|
|
@@ -440,8 +547,8 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
440
547
|
#{
|
441
548
|
colored do
|
442
549
|
plain_line %( [)
|
443
|
-
|
444
|
-
|
550
|
+
beta_line %(+ "bread",)
|
551
|
+
beta_line %(+ "eggs",)
|
445
552
|
plain_line %( "milk")
|
446
553
|
plain_line %( ])
|
447
554
|
end
|
@@ -464,8 +571,8 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
464
571
|
|
465
572
|
#{
|
466
573
|
colored do
|
467
|
-
|
468
|
-
|
574
|
+
alpha_line %(Expected: ["bread", "eggs", "milk"])
|
575
|
+
beta_line %( Actual: ["milk"])
|
469
576
|
end
|
470
577
|
}
|
471
578
|
|
@@ -474,8 +581,8 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
474
581
|
#{
|
475
582
|
colored do
|
476
583
|
plain_line %( [)
|
477
|
-
|
478
|
-
|
584
|
+
alpha_line %(- "bread",)
|
585
|
+
alpha_line %(- "eggs",)
|
479
586
|
plain_line %( "milk")
|
480
587
|
plain_line %( ])
|
481
588
|
end
|
@@ -498,8 +605,8 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
498
605
|
|
499
606
|
#{
|
500
607
|
colored do
|
501
|
-
|
502
|
-
|
608
|
+
alpha_line %(Expected: [1, 2, [:a, :b, :c], 4])
|
609
|
+
beta_line %( Actual: [1, 2, [:a, :x, :c], 4])
|
503
610
|
end
|
504
611
|
}
|
505
612
|
|
@@ -512,8 +619,8 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
512
619
|
plain_line %( 2,)
|
513
620
|
plain_line %( [)
|
514
621
|
plain_line %( :a,)
|
515
|
-
|
516
|
-
|
622
|
+
alpha_line %(- :b,)
|
623
|
+
beta_line %(+ :x,)
|
517
624
|
plain_line %( :c)
|
518
625
|
plain_line %( ],)
|
519
626
|
plain_line %( 4)
|
@@ -538,8 +645,8 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
538
645
|
|
539
646
|
#{
|
540
647
|
colored do
|
541
|
-
|
542
|
-
|
648
|
+
alpha_line %(Expected: [1, 2, { foo: "bar", baz: "qux" }, 4])
|
649
|
+
beta_line %( Actual: [1, 2, { foo: "bar", baz: "qox" }, 4])
|
543
650
|
end
|
544
651
|
}
|
545
652
|
|
@@ -552,8 +659,8 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
552
659
|
plain_line %( 2,)
|
553
660
|
plain_line %( {)
|
554
661
|
plain_line %( foo: "bar",)
|
555
|
-
|
556
|
-
|
662
|
+
alpha_line %(- baz: "qux")
|
663
|
+
beta_line %(+ baz: "qox")
|
557
664
|
plain_line %( },)
|
558
665
|
plain_line %( 4)
|
559
666
|
plain_line %( ])
|
@@ -568,14 +675,13 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
568
675
|
context "given two arrays containing custom objects with differing attributes" do
|
569
676
|
it "returns a message along with the diff" do
|
570
677
|
actual_output = described_class.call(
|
571
|
-
expected: [
|
572
|
-
|
573
|
-
|
574
|
-
SuperDiff::Test::
|
575
|
-
|
576
|
-
extra_diff_formatter_classes: [
|
577
|
-
SuperDiff::Test::PersonDiffFormatter,
|
678
|
+
expected: [
|
679
|
+
1,
|
680
|
+
2,
|
681
|
+
SuperDiff::Test::Person.new(name: "Marty", age: 18),
|
682
|
+
4,
|
578
683
|
],
|
684
|
+
actual: [1, 2, SuperDiff::Test::Person.new(name: "Doc", age: 50), 4],
|
579
685
|
)
|
580
686
|
|
581
687
|
expected_output = <<~STR.strip
|
@@ -583,8 +689,8 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
583
689
|
|
584
690
|
#{
|
585
691
|
colored do
|
586
|
-
|
587
|
-
|
692
|
+
alpha_line %(Expected: [1, 2, #<SuperDiff::Test::Person name: "Marty", age: 18>, 4])
|
693
|
+
beta_line %( Actual: [1, 2, #<SuperDiff::Test::Person name: "Doc", age: 50>, 4])
|
588
694
|
end
|
589
695
|
}
|
590
696
|
|
@@ -596,8 +702,10 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
596
702
|
plain_line %( 1,)
|
597
703
|
plain_line %( 2,)
|
598
704
|
plain_line %( #<SuperDiff::Test::Person {)
|
599
|
-
|
600
|
-
|
705
|
+
alpha_line %(- name: "Marty",)
|
706
|
+
beta_line %(+ name: "Doc",)
|
707
|
+
alpha_line %(- age: 18)
|
708
|
+
beta_line %(+ age: 50)
|
601
709
|
plain_line %( }>,)
|
602
710
|
plain_line %( 4)
|
603
711
|
plain_line %( ])
|
@@ -641,8 +749,8 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
641
749
|
|
642
750
|
#{
|
643
751
|
colored do
|
644
|
-
|
645
|
-
|
752
|
+
alpha_line %(Expected: [[:h1, [:span, [:text, "Hello world"]], { class: "header", data: { "sticky" => true } }]])
|
753
|
+
beta_line %( Actual: [[:h2, [:span, [:text, "Goodbye world"]], { id: "hero", class: "header", data: { "sticky" => false, :role => "deprecated" } }], :br])
|
646
754
|
end
|
647
755
|
}
|
648
756
|
|
@@ -652,27 +760,27 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
652
760
|
colored do
|
653
761
|
plain_line %( [)
|
654
762
|
plain_line %( [)
|
655
|
-
|
656
|
-
|
763
|
+
alpha_line %(- :h1,)
|
764
|
+
beta_line %(+ :h2,)
|
657
765
|
plain_line %( [)
|
658
766
|
plain_line %( :span,)
|
659
767
|
plain_line %( [)
|
660
768
|
plain_line %( :text,)
|
661
|
-
|
662
|
-
|
769
|
+
alpha_line %(- "Hello world")
|
770
|
+
beta_line %(+ "Goodbye world")
|
663
771
|
plain_line %( ])
|
664
772
|
plain_line %( ],)
|
665
773
|
plain_line %( {)
|
774
|
+
beta_line %(+ id: "hero",)
|
666
775
|
plain_line %( class: "header",)
|
667
776
|
plain_line %( data: {)
|
668
|
-
|
669
|
-
|
670
|
-
|
671
|
-
plain_line %( }
|
672
|
-
green_line %(+ id: "hero")
|
777
|
+
alpha_line %(- "sticky" => true)
|
778
|
+
beta_line %(+ "sticky" => false,)
|
779
|
+
beta_line %(+ role: "deprecated")
|
780
|
+
plain_line %( })
|
673
781
|
plain_line %( })
|
674
782
|
plain_line %( ],)
|
675
|
-
|
783
|
+
beta_line %(+ :br)
|
676
784
|
plain_line %( ])
|
677
785
|
end
|
678
786
|
}
|
@@ -705,8 +813,8 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
705
813
|
|
706
814
|
#{
|
707
815
|
colored do
|
708
|
-
|
709
|
-
|
816
|
+
alpha_line %(Expected: { tall: 12, grande: 19, venti: 20 })
|
817
|
+
beta_line %( Actual: { tall: 12, grande: 16, venti: 20 })
|
710
818
|
end
|
711
819
|
}
|
712
820
|
|
@@ -716,8 +824,8 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
716
824
|
colored do
|
717
825
|
plain_line %( {)
|
718
826
|
plain_line %( tall: 12,)
|
719
|
-
|
720
|
-
|
827
|
+
alpha_line %(- grande: 19,)
|
828
|
+
beta_line %(+ grande: 16,)
|
721
829
|
plain_line %( venti: 20)
|
722
830
|
plain_line %( })
|
723
831
|
end
|
@@ -740,8 +848,8 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
740
848
|
|
741
849
|
#{
|
742
850
|
colored do
|
743
|
-
|
744
|
-
|
851
|
+
alpha_line %(Expected: { "tall" => 12, "grande" => 19, "venti" => 20 })
|
852
|
+
beta_line %( Actual: { "tall" => 12, "grande" => 16, "venti" => 20 })
|
745
853
|
end
|
746
854
|
}
|
747
855
|
|
@@ -751,8 +859,8 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
751
859
|
colored do
|
752
860
|
plain_line %( {)
|
753
861
|
plain_line %( "tall" => 12,)
|
754
|
-
|
755
|
-
|
862
|
+
alpha_line %(- "grande" => 19,)
|
863
|
+
beta_line %(+ "grande" => 16,)
|
756
864
|
plain_line %( "venti" => 20)
|
757
865
|
plain_line %( })
|
758
866
|
end
|
@@ -775,8 +883,8 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
775
883
|
|
776
884
|
#{
|
777
885
|
colored do
|
778
|
-
|
779
|
-
|
886
|
+
alpha_line %(Expected: { tall: :small, grande: :grand, venti: :large })
|
887
|
+
beta_line %( Actual: { tall: :small, grande: :medium, venti: :large })
|
780
888
|
end
|
781
889
|
}
|
782
890
|
|
@@ -786,8 +894,8 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
786
894
|
colored do
|
787
895
|
plain_line %( {)
|
788
896
|
plain_line %( tall: :small,)
|
789
|
-
|
790
|
-
|
897
|
+
alpha_line %(- grande: :grand,)
|
898
|
+
beta_line %(+ grande: :medium,)
|
791
899
|
plain_line %( venti: :large)
|
792
900
|
plain_line %( })
|
793
901
|
end
|
@@ -810,8 +918,8 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
810
918
|
|
811
919
|
#{
|
812
920
|
colored do
|
813
|
-
|
814
|
-
|
921
|
+
alpha_line %(Expected: { tall: "small", grande: "grand", venti: "large" })
|
922
|
+
beta_line %( Actual: { tall: "small", grande: "medium", venti: "large" })
|
815
923
|
end
|
816
924
|
}
|
817
925
|
|
@@ -821,8 +929,8 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
821
929
|
colored do
|
822
930
|
plain_line %( {)
|
823
931
|
plain_line %( tall: "small",)
|
824
|
-
|
825
|
-
|
932
|
+
alpha_line %(- grande: "grand",)
|
933
|
+
beta_line %(+ grande: "medium",)
|
826
934
|
plain_line %( venti: "large")
|
827
935
|
plain_line %( })
|
828
936
|
end
|
@@ -837,19 +945,13 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
837
945
|
it "returns a message along with the diff" do
|
838
946
|
actual_output = described_class.call(
|
839
947
|
expected: {
|
840
|
-
steve: SuperDiff::Test::Person.new(name: "Jobs"),
|
841
|
-
susan: SuperDiff::Test::Person.new(name: "Kare"),
|
948
|
+
steve: SuperDiff::Test::Person.new(name: "Jobs", age: 30),
|
949
|
+
susan: SuperDiff::Test::Person.new(name: "Kare", age: 27),
|
842
950
|
},
|
843
951
|
actual: {
|
844
|
-
steve: SuperDiff::Test::Person.new(name: "Wozniak"),
|
845
|
-
susan: SuperDiff::Test::Person.new(name: "Kare"),
|
952
|
+
steve: SuperDiff::Test::Person.new(name: "Wozniak", age: 33),
|
953
|
+
susan: SuperDiff::Test::Person.new(name: "Kare", age: 27),
|
846
954
|
},
|
847
|
-
extra_operational_sequencer_classes: [
|
848
|
-
SuperDiff::Test::PersonOperationalSequencer,
|
849
|
-
],
|
850
|
-
extra_diff_formatter_classes: [
|
851
|
-
SuperDiff::Test::PersonDiffFormatter,
|
852
|
-
],
|
853
955
|
)
|
854
956
|
|
855
957
|
expected_output = <<~STR.strip
|
@@ -857,8 +959,8 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
857
959
|
|
858
960
|
#{
|
859
961
|
colored do
|
860
|
-
|
861
|
-
|
962
|
+
alpha_line %(Expected: { steve: #<SuperDiff::Test::Person name: "Jobs", age: 30>, susan: #<SuperDiff::Test::Person name: "Kare", age: 27> })
|
963
|
+
beta_line %( Actual: { steve: #<SuperDiff::Test::Person name: "Wozniak", age: 33>, susan: #<SuperDiff::Test::Person name: "Kare", age: 27> })
|
862
964
|
end
|
863
965
|
}
|
864
966
|
|
@@ -868,11 +970,14 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
868
970
|
colored do
|
869
971
|
plain_line %( {)
|
870
972
|
plain_line %( steve: #<SuperDiff::Test::Person {)
|
871
|
-
|
872
|
-
|
973
|
+
alpha_line %(- name: "Jobs",)
|
974
|
+
beta_line %(+ name: "Wozniak",)
|
975
|
+
alpha_line %(- age: 30)
|
976
|
+
beta_line %(+ age: 33)
|
873
977
|
plain_line %( }>,)
|
874
978
|
plain_line %( susan: #<SuperDiff::Test::Person {)
|
875
|
-
plain_line %( name: "Kare")
|
979
|
+
plain_line %( name: "Kare",)
|
980
|
+
plain_line %( age: 27)
|
876
981
|
plain_line %( }>)
|
877
982
|
plain_line %( })
|
878
983
|
end
|
@@ -895,8 +1000,8 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
895
1000
|
|
896
1001
|
#{
|
897
1002
|
colored do
|
898
|
-
|
899
|
-
|
1003
|
+
alpha_line %(Expected: { latte: 4.5 })
|
1004
|
+
beta_line %( Actual: { latte: 4.5, mocha: 3.5, cortado: 3 })
|
900
1005
|
end
|
901
1006
|
}
|
902
1007
|
|
@@ -906,8 +1011,8 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
906
1011
|
colored do
|
907
1012
|
plain_line %( {)
|
908
1013
|
plain_line %( latte: 4.5,)
|
909
|
-
|
910
|
-
|
1014
|
+
beta_line %(+ mocha: 3.5,)
|
1015
|
+
beta_line %(+ cortado: 3)
|
911
1016
|
plain_line %( })
|
912
1017
|
end
|
913
1018
|
}
|
@@ -929,8 +1034,8 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
929
1034
|
|
930
1035
|
#{
|
931
1036
|
colored do
|
932
|
-
|
933
|
-
|
1037
|
+
alpha_line %(Expected: { latte: 4.5, mocha: 3.5, cortado: 3 })
|
1038
|
+
beta_line %( Actual: { latte: 4.5 })
|
934
1039
|
end
|
935
1040
|
}
|
936
1041
|
|
@@ -940,8 +1045,8 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
940
1045
|
colored do
|
941
1046
|
plain_line %( {)
|
942
1047
|
plain_line %( latte: 4.5)
|
943
|
-
|
944
|
-
|
1048
|
+
alpha_line %(- mocha: 3.5,)
|
1049
|
+
alpha_line %(- cortado: 3)
|
945
1050
|
plain_line %( })
|
946
1051
|
end
|
947
1052
|
}
|
@@ -971,8 +1076,8 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
971
1076
|
|
972
1077
|
#{
|
973
1078
|
colored do
|
974
|
-
|
975
|
-
|
1079
|
+
alpha_line %(Expected: { name: "Elliot", interests: ["music", "football", "programming"], age: 30 })
|
1080
|
+
beta_line %( Actual: { name: "Elliot", interests: ["music", "travel", "programming"], age: 30 })
|
976
1081
|
end
|
977
1082
|
}
|
978
1083
|
|
@@ -984,8 +1089,8 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
984
1089
|
plain_line %( name: "Elliot",)
|
985
1090
|
plain_line %( interests: [)
|
986
1091
|
plain_line %( "music",)
|
987
|
-
|
988
|
-
|
1092
|
+
alpha_line %(- "football",)
|
1093
|
+
beta_line %(+ "travel",)
|
989
1094
|
plain_line %( "programming")
|
990
1095
|
plain_line %( ],)
|
991
1096
|
plain_line %( age: 30)
|
@@ -1026,8 +1131,8 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
1026
1131
|
|
1027
1132
|
#{
|
1028
1133
|
colored do
|
1029
|
-
|
1030
|
-
|
1134
|
+
alpha_line %(Expected: { check_spelling: true, substitutions: { "YOLO" => "You only live once", "BRB" => "Buns, ribs, and bacon", "YMMV" => "Your mileage may vary" }, check_grammar: false })
|
1135
|
+
beta_line %( Actual: { check_spelling: true, substitutions: { "YOLO" => "You only live once", "BRB" => "Be right back", "YMMV" => "Your mileage may vary" }, check_grammar: false })
|
1031
1136
|
end
|
1032
1137
|
}
|
1033
1138
|
|
@@ -1039,8 +1144,8 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
1039
1144
|
plain_line %( check_spelling: true,)
|
1040
1145
|
plain_line %( substitutions: {)
|
1041
1146
|
plain_line %( "YOLO" => "You only live once",)
|
1042
|
-
|
1043
|
-
|
1147
|
+
alpha_line %(- "BRB" => "Buns, ribs, and bacon",)
|
1148
|
+
beta_line %(+ "BRB" => "Be right back",)
|
1044
1149
|
plain_line %( "YMMV" => "Your mileage may vary")
|
1045
1150
|
plain_line %( },)
|
1046
1151
|
plain_line %( check_grammar: false)
|
@@ -1058,20 +1163,14 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
1058
1163
|
actual_output = described_class.call(
|
1059
1164
|
expected: {
|
1060
1165
|
order_id: 1234,
|
1061
|
-
person: SuperDiff::Test::Person.new(name: "Marty"),
|
1166
|
+
person: SuperDiff::Test::Person.new(name: "Marty", age: 18),
|
1062
1167
|
amount: 350_00,
|
1063
1168
|
},
|
1064
1169
|
actual: {
|
1065
1170
|
order_id: 1234,
|
1066
|
-
person: SuperDiff::Test::Person.new(name: "Doc"),
|
1171
|
+
person: SuperDiff::Test::Person.new(name: "Doc", age: 50),
|
1067
1172
|
amount: 350_00,
|
1068
1173
|
},
|
1069
|
-
extra_operational_sequencer_classes: [
|
1070
|
-
SuperDiff::Test::PersonOperationalSequencer,
|
1071
|
-
],
|
1072
|
-
extra_diff_formatter_classes: [
|
1073
|
-
SuperDiff::Test::PersonDiffFormatter,
|
1074
|
-
],
|
1075
1174
|
)
|
1076
1175
|
|
1077
1176
|
expected_output = <<~STR.strip
|
@@ -1079,8 +1178,8 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
1079
1178
|
|
1080
1179
|
#{
|
1081
1180
|
colored do
|
1082
|
-
|
1083
|
-
|
1181
|
+
alpha_line %(Expected: { order_id: 1234, person: #<SuperDiff::Test::Person name: "Marty", age: 18>, amount: 35000 })
|
1182
|
+
beta_line %( Actual: { order_id: 1234, person: #<SuperDiff::Test::Person name: "Doc", age: 50>, amount: 35000 })
|
1084
1183
|
end
|
1085
1184
|
}
|
1086
1185
|
|
@@ -1091,8 +1190,10 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
1091
1190
|
plain_line %( {)
|
1092
1191
|
plain_line %( order_id: 1234,)
|
1093
1192
|
plain_line %( person: #<SuperDiff::Test::Person {)
|
1094
|
-
|
1095
|
-
|
1193
|
+
alpha_line %(- name: "Marty",)
|
1194
|
+
beta_line %(+ name: "Doc",)
|
1195
|
+
alpha_line %(- age: 18)
|
1196
|
+
beta_line %(+ age: 50)
|
1096
1197
|
plain_line %( }>,)
|
1097
1198
|
plain_line %( amount: 35000)
|
1098
1199
|
plain_line %( })
|
@@ -1152,8 +1253,8 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
1152
1253
|
|
1153
1254
|
#{
|
1154
1255
|
colored do
|
1155
|
-
|
1156
|
-
|
1256
|
+
alpha_line %(Expected: { customer: { name: "Marty McFly", shipping_address: { line_1: "123 Main St.", city: "Hill Valley", state: "CA", zip: "90382" } }, items: [{ name: "Fender Stratocaster", cost: 100000, options: ["red", "blue", "green"] }, { name: "Chevy 4x4" }] })
|
1257
|
+
beta_line %( Actual: { customer: { name: "Marty McFly, Jr.", shipping_address: { line_1: "456 Ponderosa Ct.", city: "Hill Valley", state: "CA", zip: "90382" } }, items: [{ name: "Fender Stratocaster", cost: 100000, options: ["red", "blue", "green"] }, { name: "Mattel Hoverboard" }] })
|
1157
1258
|
end
|
1158
1259
|
}
|
1159
1260
|
|
@@ -1163,11 +1264,11 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
1163
1264
|
colored do
|
1164
1265
|
plain_line %( {)
|
1165
1266
|
plain_line %( customer: {)
|
1166
|
-
|
1167
|
-
|
1267
|
+
alpha_line %(- name: "Marty McFly",)
|
1268
|
+
beta_line %(+ name: "Marty McFly, Jr.",)
|
1168
1269
|
plain_line %( shipping_address: {)
|
1169
|
-
|
1170
|
-
|
1270
|
+
alpha_line %(- line_1: "123 Main St.",)
|
1271
|
+
beta_line %(+ line_1: "456 Ponderosa Ct.",)
|
1171
1272
|
plain_line %( city: "Hill Valley",)
|
1172
1273
|
plain_line %( state: "CA",)
|
1173
1274
|
plain_line %( zip: "90382")
|
@@ -1177,11 +1278,15 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
1177
1278
|
plain_line %( {)
|
1178
1279
|
plain_line %( name: "Fender Stratocaster",)
|
1179
1280
|
plain_line %( cost: 100000,)
|
1180
|
-
plain_line %( options: [
|
1281
|
+
plain_line %( options: [)
|
1282
|
+
plain_line %( "red",)
|
1283
|
+
plain_line %( "blue",)
|
1284
|
+
plain_line %( "green")
|
1285
|
+
plain_line %( ])
|
1181
1286
|
plain_line %( },)
|
1182
1287
|
plain_line %( {)
|
1183
|
-
|
1184
|
-
|
1288
|
+
alpha_line %(- name: "Chevy 4x4")
|
1289
|
+
beta_line %(+ name: "Mattel Hoverboard")
|
1185
1290
|
plain_line %( })
|
1186
1291
|
plain_line %( ])
|
1187
1292
|
plain_line %( })
|
@@ -1193,10 +1298,10 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
1193
1298
|
end
|
1194
1299
|
end
|
1195
1300
|
|
1196
|
-
context "given two objects which == each other" do
|
1301
|
+
context "given two custom objects which == each other" do
|
1197
1302
|
it "returns an empty string" do
|
1198
|
-
expected = SuperDiff::Test::Person.new(name: "Marty")
|
1199
|
-
actual = SuperDiff::Test::Person.new(name: "Marty")
|
1303
|
+
expected = SuperDiff::Test::Person.new(name: "Marty", age: 18)
|
1304
|
+
actual = SuperDiff::Test::Person.new(name: "Marty", age: 18)
|
1200
1305
|
|
1201
1306
|
output = described_class.call(expected: expected, actual: actual)
|
1202
1307
|
|
@@ -1204,10 +1309,121 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
1204
1309
|
end
|
1205
1310
|
end
|
1206
1311
|
|
1207
|
-
context "given two
|
1312
|
+
context "given two different versions of the same custom class" do
|
1208
1313
|
it "returns a message along with a comparison" do
|
1209
|
-
expected = SuperDiff::Test::Person.new(name: "Marty")
|
1210
|
-
actual = SuperDiff::Test::Person.new(name: "Doc")
|
1314
|
+
expected = SuperDiff::Test::Person.new(name: "Marty", age: 18)
|
1315
|
+
actual = SuperDiff::Test::Person.new(name: "Doc", age: 50)
|
1316
|
+
|
1317
|
+
actual_output = described_class.call(
|
1318
|
+
expected: expected,
|
1319
|
+
actual: actual,
|
1320
|
+
)
|
1321
|
+
|
1322
|
+
expected_output = <<~STR.strip
|
1323
|
+
Differing objects.
|
1324
|
+
|
1325
|
+
#{
|
1326
|
+
colored do
|
1327
|
+
alpha_line %(Expected: #<SuperDiff::Test::Person name: "Marty", age: 18>)
|
1328
|
+
beta_line %( Actual: #<SuperDiff::Test::Person name: "Doc", age: 50>)
|
1329
|
+
end
|
1330
|
+
}
|
1331
|
+
|
1332
|
+
Diff:
|
1333
|
+
|
1334
|
+
#{
|
1335
|
+
colored do
|
1336
|
+
plain_line %( #<SuperDiff::Test::Person {)
|
1337
|
+
alpha_line %(- name: "Marty",)
|
1338
|
+
beta_line %(+ name: "Doc",)
|
1339
|
+
alpha_line %(- age: 18)
|
1340
|
+
beta_line %(+ age: 50)
|
1341
|
+
plain_line %( }>)
|
1342
|
+
end
|
1343
|
+
}
|
1344
|
+
STR
|
1345
|
+
|
1346
|
+
expect(actual_output).to eq(expected_output)
|
1347
|
+
end
|
1348
|
+
end
|
1349
|
+
|
1350
|
+
context "given two different versions of the same non-custom class" do
|
1351
|
+
it "returns a message along with the diff" do
|
1352
|
+
expected = SuperDiff::Test::Player.new(
|
1353
|
+
handle: "martymcfly",
|
1354
|
+
character: "mirage",
|
1355
|
+
inventory: ["flatline", "purple body shield"],
|
1356
|
+
shields: 0.6,
|
1357
|
+
health: 0.3,
|
1358
|
+
ultimate: 0.8,
|
1359
|
+
)
|
1360
|
+
actual = SuperDiff::Test::Player.new(
|
1361
|
+
handle: "docbrown",
|
1362
|
+
character: "lifeline",
|
1363
|
+
inventory: ["wingman", "mastiff"],
|
1364
|
+
shields: 0.6,
|
1365
|
+
health: 0.3,
|
1366
|
+
ultimate: 0.8,
|
1367
|
+
)
|
1368
|
+
|
1369
|
+
actual_output = described_class.call(expected: expected, actual: actual)
|
1370
|
+
|
1371
|
+
expected_output = <<~STR.strip
|
1372
|
+
Differing objects.
|
1373
|
+
|
1374
|
+
#{
|
1375
|
+
if SuperDiff::Test.jruby?
|
1376
|
+
# Source: <https://github.com/jruby/jruby/blob/master/core/src/main/java/org/jruby/RubyBasicObject.java>
|
1377
|
+
colored do
|
1378
|
+
alpha_line %(Expected: #<SuperDiff::Test::Player:#{"0x%x" % expected.hash} @inventory=["flatline", "purple body shield"], @character="mirage", @handle="martymcfly", @ultimate=0.8, @shields=0.6, @health=0.3>)
|
1379
|
+
beta_line %( Actual: #<SuperDiff::Test::Player:#{"0x%x" % actual.hash} @inventory=["wingman", "mastiff"], @character="lifeline", @handle="docbrown", @ultimate=0.8, @shields=0.6, @health=0.3>)
|
1380
|
+
end
|
1381
|
+
else
|
1382
|
+
colored do
|
1383
|
+
alpha_line %(Expected: #<SuperDiff::Test::Player:#{"0x%016x" % (expected.object_id * 2)} @handle="martymcfly", @character="mirage", @inventory=["flatline", "purple body shield"], @shields=0.6, @health=0.3, @ultimate=0.8>)
|
1384
|
+
beta_line %( Actual: #<SuperDiff::Test::Player:#{"0x%016x" % (actual.object_id * 2)} @handle="docbrown", @character="lifeline", @inventory=["wingman", "mastiff"], @shields=0.6, @health=0.3, @ultimate=0.8>)
|
1385
|
+
end
|
1386
|
+
end
|
1387
|
+
}
|
1388
|
+
|
1389
|
+
Diff:
|
1390
|
+
|
1391
|
+
#{
|
1392
|
+
colored do
|
1393
|
+
plain_line %( #<SuperDiff::Test::Player {)
|
1394
|
+
alpha_line %(- @character="mirage",)
|
1395
|
+
beta_line %(+ @character="lifeline",)
|
1396
|
+
alpha_line %(- @handle="martymcfly",)
|
1397
|
+
beta_line %(+ @handle="docbrown",)
|
1398
|
+
plain_line %( @health=0.3,)
|
1399
|
+
plain_line %( @inventory=[)
|
1400
|
+
alpha_line %(- "flatline",)
|
1401
|
+
beta_line %(+ "wingman",)
|
1402
|
+
alpha_line %(- "purple body shield")
|
1403
|
+
beta_line %(+ "mastiff")
|
1404
|
+
plain_line %( ],)
|
1405
|
+
plain_line %( @shields=0.6,)
|
1406
|
+
plain_line %( @ultimate=0.8)
|
1407
|
+
plain_line %( }>)
|
1408
|
+
end
|
1409
|
+
}
|
1410
|
+
STR
|
1411
|
+
|
1412
|
+
expect(actual_output).to eq(expected_output)
|
1413
|
+
end
|
1414
|
+
end
|
1415
|
+
|
1416
|
+
context "given two completely different kinds of custom objects" do
|
1417
|
+
it "returns a message along with the diff" do
|
1418
|
+
expected = SuperDiff::Test::Person.new(
|
1419
|
+
name: "Marty",
|
1420
|
+
age: 31,
|
1421
|
+
)
|
1422
|
+
actual = SuperDiff::Test::Customer.new(
|
1423
|
+
name: "Doc",
|
1424
|
+
shipping_address: :some_shipping_address,
|
1425
|
+
phone: "1234567890",
|
1426
|
+
)
|
1211
1427
|
|
1212
1428
|
actual_output = described_class.call(expected: expected, actual: actual)
|
1213
1429
|
|
@@ -1216,8 +1432,200 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
1216
1432
|
|
1217
1433
|
#{
|
1218
1434
|
colored do
|
1219
|
-
|
1220
|
-
|
1435
|
+
alpha_line %(Expected: #<SuperDiff::Test::Person name: "Marty", age: 31>)
|
1436
|
+
beta_line %( Actual: #<SuperDiff::Test::Customer name: "Doc", shipping_address: :some_shipping_address, phone: "1234567890">)
|
1437
|
+
end
|
1438
|
+
}
|
1439
|
+
STR
|
1440
|
+
|
1441
|
+
expect(actual_output).to eq(expected_output)
|
1442
|
+
end
|
1443
|
+
end
|
1444
|
+
|
1445
|
+
context "given two completely different kinds of non-custom objects" do
|
1446
|
+
it "returns a message along with the diff" do
|
1447
|
+
expected = SuperDiff::Test::Item.new(
|
1448
|
+
name: "camera",
|
1449
|
+
quantity: 3,
|
1450
|
+
)
|
1451
|
+
actual = SuperDiff::Test::Player.new(
|
1452
|
+
handle: "mcmire",
|
1453
|
+
character: "Jon",
|
1454
|
+
inventory: ["sword"],
|
1455
|
+
shields: 11.4,
|
1456
|
+
health: 4,
|
1457
|
+
ultimate: true,
|
1458
|
+
)
|
1459
|
+
|
1460
|
+
actual_output = described_class.call(expected: expected, actual: actual)
|
1461
|
+
|
1462
|
+
expected_output = <<~STR.strip
|
1463
|
+
Differing objects.
|
1464
|
+
|
1465
|
+
#{
|
1466
|
+
if SuperDiff::Test.jruby?
|
1467
|
+
# Source: <https://github.com/jruby/jruby/blob/master/core/src/main/java/org/jruby/RubyBasicObject.java>
|
1468
|
+
colored do
|
1469
|
+
alpha_line %(Expected: #<SuperDiff::Test::Item:#{"0x%x" % expected.hash} @name="camera", @quantity=3>)
|
1470
|
+
beta_line %( Actual: #<SuperDiff::Test::Player:#{"0x%x" % actual.hash} @inventory=["sword"], @character="Jon", @handle="mcmire", @ultimate=true, @shields=11.4, @health=4>)
|
1471
|
+
end
|
1472
|
+
else
|
1473
|
+
colored do
|
1474
|
+
alpha_line %(Expected: #<SuperDiff::Test::Item:#{"0x%016x" % (expected.object_id * 2)} @name="camera", @quantity=3>)
|
1475
|
+
beta_line %( Actual: #<SuperDiff::Test::Player:#{"0x%016x" % (actual.object_id * 2)} @handle="mcmire", @character="Jon", @inventory=["sword"], @shields=11.4, @health=4, @ultimate=true>)
|
1476
|
+
end
|
1477
|
+
end
|
1478
|
+
}
|
1479
|
+
STR
|
1480
|
+
|
1481
|
+
expect(actual_output).to eq(expected_output)
|
1482
|
+
end
|
1483
|
+
end
|
1484
|
+
|
1485
|
+
context "when the expected value is a data structure that refers to itself somewhere inside of it" do
|
1486
|
+
it "replaces the reference with ∙∙∙" do
|
1487
|
+
expected = ["a", "b", "c"]
|
1488
|
+
expected.insert(1, expected)
|
1489
|
+
actual = ["a", "x", "b", "c"]
|
1490
|
+
|
1491
|
+
actual_output = described_class.call(expected: expected, actual: actual)
|
1492
|
+
|
1493
|
+
expected_output = <<~STR.strip
|
1494
|
+
Differing arrays.
|
1495
|
+
|
1496
|
+
#{
|
1497
|
+
colored do
|
1498
|
+
alpha_line %(Expected: ["a", ∙∙∙, "b", "c"])
|
1499
|
+
beta_line %( Actual: ["a", "x", "b", "c"])
|
1500
|
+
end
|
1501
|
+
}
|
1502
|
+
|
1503
|
+
Diff:
|
1504
|
+
|
1505
|
+
#{
|
1506
|
+
colored do
|
1507
|
+
plain_line %( [)
|
1508
|
+
plain_line %( "a",)
|
1509
|
+
alpha_line %(- ∙∙∙,)
|
1510
|
+
beta_line %(+ "x",)
|
1511
|
+
plain_line %( "b",)
|
1512
|
+
plain_line %( "c")
|
1513
|
+
plain_line %( ])
|
1514
|
+
end
|
1515
|
+
}
|
1516
|
+
STR
|
1517
|
+
|
1518
|
+
expect(actual_output).to eq(expected_output)
|
1519
|
+
end
|
1520
|
+
end
|
1521
|
+
|
1522
|
+
context "when the actual value is a data structure that refers to itself somewhere inside of it" do
|
1523
|
+
it "replaces the reference with ∙∙∙" do
|
1524
|
+
expected = ["a", "x", "b", "c"]
|
1525
|
+
actual = ["a", "b", "c"]
|
1526
|
+
actual.insert(1, actual)
|
1527
|
+
|
1528
|
+
actual_output = described_class.call(expected: expected, actual: actual)
|
1529
|
+
|
1530
|
+
expected_output = <<~STR.strip
|
1531
|
+
Differing arrays.
|
1532
|
+
|
1533
|
+
#{
|
1534
|
+
colored do
|
1535
|
+
alpha_line %(Expected: ["a", "x", "b", "c"])
|
1536
|
+
beta_line %( Actual: ["a", ∙∙∙, "b", "c"])
|
1537
|
+
end
|
1538
|
+
}
|
1539
|
+
|
1540
|
+
Diff:
|
1541
|
+
|
1542
|
+
#{
|
1543
|
+
colored do
|
1544
|
+
plain_line %( [)
|
1545
|
+
plain_line %( "a",)
|
1546
|
+
alpha_line %(- "x",)
|
1547
|
+
beta_line %(+ ∙∙∙,)
|
1548
|
+
plain_line %( "b",)
|
1549
|
+
plain_line %( "c")
|
1550
|
+
plain_line %( ])
|
1551
|
+
end
|
1552
|
+
}
|
1553
|
+
STR
|
1554
|
+
|
1555
|
+
expect(actual_output).to eq(expected_output)
|
1556
|
+
end
|
1557
|
+
end
|
1558
|
+
|
1559
|
+
context "when the data structure being different is present inside a secondary layer" do
|
1560
|
+
it "replaces the reference with ∙∙∙" do
|
1561
|
+
expected = { foo: ["a", "x", "b", "c"] }
|
1562
|
+
actual = { foo: ["a", "b", "c"] }
|
1563
|
+
actual[:foo].insert(1, actual)
|
1564
|
+
|
1565
|
+
actual_output = described_class.call(expected: expected, actual: actual)
|
1566
|
+
|
1567
|
+
expected_output = <<~STR.strip
|
1568
|
+
Differing hashes.
|
1569
|
+
|
1570
|
+
#{
|
1571
|
+
colored do
|
1572
|
+
alpha_line %(Expected: { foo: ["a", "x", "b", "c"] })
|
1573
|
+
beta_line %( Actual: { foo: ["a", ∙∙∙, "b", "c"] })
|
1574
|
+
end
|
1575
|
+
}
|
1576
|
+
|
1577
|
+
Diff:
|
1578
|
+
|
1579
|
+
#{
|
1580
|
+
colored do
|
1581
|
+
plain_line %( {)
|
1582
|
+
plain_line %( foo: [)
|
1583
|
+
plain_line %( "a",)
|
1584
|
+
alpha_line %(- "x",)
|
1585
|
+
beta_line %(+ ∙∙∙,)
|
1586
|
+
plain_line %( "b",)
|
1587
|
+
plain_line %( "c")
|
1588
|
+
plain_line %( ])
|
1589
|
+
plain_line %( })
|
1590
|
+
end
|
1591
|
+
}
|
1592
|
+
STR
|
1593
|
+
|
1594
|
+
expect(actual_output).to eq(expected_output)
|
1595
|
+
end
|
1596
|
+
end
|
1597
|
+
|
1598
|
+
context "when a secondary layer of a data structure refers to itself" do
|
1599
|
+
it "replaces the reference with ∙∙∙" do
|
1600
|
+
expected = { foo: ["a", "x", "b", "c"] }
|
1601
|
+
actual = { foo: ["a", "b", "c"] }
|
1602
|
+
actual[:foo].insert(1, actual[:foo])
|
1603
|
+
|
1604
|
+
actual_output = described_class.call(expected: expected, actual: actual)
|
1605
|
+
|
1606
|
+
expected_output = <<~STR.strip
|
1607
|
+
Differing hashes.
|
1608
|
+
|
1609
|
+
#{
|
1610
|
+
colored do
|
1611
|
+
alpha_line %(Expected: { foo: ["a", "x", "b", "c"] })
|
1612
|
+
beta_line %( Actual: { foo: ["a", ∙∙∙, "b", "c"] })
|
1613
|
+
end
|
1614
|
+
}
|
1615
|
+
|
1616
|
+
Diff:
|
1617
|
+
|
1618
|
+
#{
|
1619
|
+
colored do
|
1620
|
+
plain_line %( {)
|
1621
|
+
plain_line %( foo: [)
|
1622
|
+
plain_line %( "a",)
|
1623
|
+
alpha_line %(- "x",)
|
1624
|
+
beta_line %(+ ∙∙∙,)
|
1625
|
+
plain_line %( "b",)
|
1626
|
+
plain_line %( "c")
|
1627
|
+
plain_line %( ])
|
1628
|
+
plain_line %( })
|
1221
1629
|
end
|
1222
1630
|
}
|
1223
1631
|
STR
|
@@ -1227,7 +1635,7 @@ RSpec.describe SuperDiff::EqualityMatcher do
|
|
1227
1635
|
end
|
1228
1636
|
end
|
1229
1637
|
|
1230
|
-
def colored(&block)
|
1231
|
-
SuperDiff::
|
1638
|
+
def colored(*args, **opts, &block)
|
1639
|
+
SuperDiff::Helpers.style(*args, **opts, &block).to_s.chomp
|
1232
1640
|
end
|
1233
1641
|
end
|