super_diff 0.5.3 → 0.8.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 +46 -20
- data/lib/super_diff.rb +46 -7
- data/lib/super_diff/active_record.rb +7 -7
- data/lib/super_diff/active_record/differs/active_record_relation.rb +3 -13
- data/lib/super_diff/active_record/object_inspection.rb +2 -6
- data/lib/super_diff/active_record/object_inspection/inspection_tree_builders.rb +16 -0
- data/lib/super_diff/active_record/object_inspection/{inspectors → inspection_tree_builders}/active_record_model.rb +19 -20
- data/lib/super_diff/active_record/object_inspection/{inspectors → inspection_tree_builders}/active_record_relation.rb +9 -8
- data/lib/super_diff/active_record/operation_tree_flatteners.rb +10 -0
- data/lib/super_diff/active_record/operation_tree_flatteners/active_record_relation.rb +17 -0
- data/lib/super_diff/active_record/operation_trees/active_record_relation.rb +8 -7
- data/lib/super_diff/active_support.rb +8 -8
- data/lib/super_diff/active_support/differs/hash_with_indifferent_access.rb +3 -13
- data/lib/super_diff/active_support/object_inspection.rb +2 -6
- data/lib/super_diff/active_support/object_inspection/{inspectors.rb → inspection_tree_builders.rb} +2 -2
- data/lib/super_diff/active_support/object_inspection/inspection_tree_builders/hash_with_indifferent_access.rb +37 -0
- data/lib/super_diff/active_support/operation_tree_builders/hash_with_indifferent_access.rb +17 -0
- data/lib/super_diff/active_support/operation_tree_flatteners.rb +10 -0
- data/lib/super_diff/active_support/operation_tree_flatteners/hash_with_indifferent_access.rb +17 -0
- data/lib/super_diff/active_support/operation_trees/hash_with_indifferent_access.rb +4 -7
- data/lib/super_diff/colorized_document_extensions.rb +9 -6
- data/lib/super_diff/configuration.rb +102 -19
- data/lib/super_diff/csi.rb +1 -1
- data/lib/super_diff/csi/four_bit_color.rb +0 -2
- data/lib/super_diff/diff_formatters/collection.rb +2 -2
- data/lib/super_diff/diff_formatters/multiline_string.rb +4 -4
- data/lib/super_diff/differs/array.rb +1 -1
- data/lib/super_diff/differs/base.rb +3 -21
- data/lib/super_diff/differs/custom_object.rb +1 -1
- data/lib/super_diff/differs/default_object.rb +1 -1
- data/lib/super_diff/differs/hash.rb +1 -1
- data/lib/super_diff/differs/main.rb +1 -7
- data/lib/super_diff/differs/multiline_string.rb +1 -1
- data/lib/super_diff/differs/time_like.rb +1 -1
- data/lib/super_diff/equality_matchers/array.rb +4 -4
- data/lib/super_diff/equality_matchers/default.rb +4 -4
- data/lib/super_diff/equality_matchers/hash.rb +4 -4
- data/lib/super_diff/equality_matchers/multiline_string.rb +4 -4
- data/lib/super_diff/equality_matchers/primitive.rb +6 -9
- data/lib/super_diff/equality_matchers/singleline_string.rb +4 -4
- data/lib/super_diff/gem_version.rb +45 -0
- data/lib/super_diff/helpers.rb +52 -2
- data/lib/super_diff/line.rb +83 -0
- data/lib/super_diff/object_inspection.rb +12 -9
- data/lib/super_diff/object_inspection/inspection_tree.rb +183 -81
- data/lib/super_diff/object_inspection/inspection_tree_builders.rb +44 -0
- data/lib/super_diff/object_inspection/inspection_tree_builders/array.rb +38 -0
- data/lib/super_diff/object_inspection/inspection_tree_builders/base.rb +27 -0
- data/lib/super_diff/object_inspection/inspection_tree_builders/custom_object.rb +37 -0
- data/lib/super_diff/object_inspection/inspection_tree_builders/default_object.rb +63 -0
- data/lib/super_diff/object_inspection/{inspectors → inspection_tree_builders}/defaults.rb +1 -2
- data/lib/super_diff/object_inspection/inspection_tree_builders/hash.rb +46 -0
- data/lib/super_diff/object_inspection/{inspectors → inspection_tree_builders}/main.rb +5 -10
- data/lib/super_diff/object_inspection/inspection_tree_builders/primitive.rb +21 -0
- data/lib/super_diff/object_inspection/inspection_tree_builders/time_like.rb +64 -0
- data/lib/super_diff/object_inspection/nodes.rb +33 -32
- data/lib/super_diff/object_inspection/nodes/as_lines_when_rendering_to_lines.rb +97 -0
- data/lib/super_diff/object_inspection/nodes/as_prefix_when_rendering_to_lines.rb +27 -0
- data/lib/super_diff/object_inspection/nodes/as_prelude_when_rendering_to_lines.rb +27 -0
- data/lib/super_diff/object_inspection/nodes/as_single_line.rb +33 -0
- data/lib/super_diff/object_inspection/nodes/base.rb +55 -20
- data/lib/super_diff/object_inspection/nodes/inspection.rb +47 -7
- data/lib/super_diff/object_inspection/nodes/nesting.rb +16 -5
- data/lib/super_diff/object_inspection/nodes/only_when.rb +54 -0
- data/lib/super_diff/object_inspection/nodes/text.rb +16 -2
- data/lib/super_diff/object_inspection/nodes/when_empty.rb +21 -6
- data/lib/super_diff/object_inspection/nodes/when_non_empty.rb +20 -5
- data/lib/super_diff/object_inspection/nodes/when_rendering_to_lines.rb +27 -0
- data/lib/super_diff/object_inspection/nodes/when_rendering_to_string.rb +27 -0
- data/lib/super_diff/object_inspection/prefix_for_next_node.rb +6 -0
- data/lib/super_diff/object_inspection/prelude_for_next_node.rb +6 -0
- data/lib/super_diff/operation_tree_builders/array.rb +7 -10
- data/lib/super_diff/operation_tree_builders/base.rb +6 -6
- data/lib/super_diff/operation_tree_builders/custom_object.rb +5 -2
- data/lib/super_diff/operation_tree_builders/default_object.rb +1 -1
- data/lib/super_diff/operation_tree_builders/defaults.rb +1 -1
- data/lib/super_diff/operation_tree_builders/hash.rb +1 -8
- data/lib/super_diff/operation_tree_builders/multiline_string.rb +2 -6
- data/lib/super_diff/operation_tree_builders/time_like.rb +2 -2
- data/lib/super_diff/operation_tree_flatteners.rb +20 -0
- data/lib/super_diff/operation_tree_flatteners/array.rb +15 -0
- data/lib/super_diff/operation_tree_flatteners/base.rb +54 -0
- data/lib/super_diff/operation_tree_flatteners/collection.rb +139 -0
- data/lib/super_diff/operation_tree_flatteners/custom_object.rb +28 -0
- data/lib/super_diff/operation_tree_flatteners/default_object.rb +32 -0
- data/lib/super_diff/operation_tree_flatteners/hash.rb +41 -0
- data/lib/super_diff/operation_tree_flatteners/multiline_string.rb +17 -0
- data/lib/super_diff/operation_trees/array.rb +4 -7
- data/lib/super_diff/operation_trees/base.rb +39 -16
- data/lib/super_diff/operation_trees/custom_object.rb +4 -8
- data/lib/super_diff/operation_trees/default_object.rb +28 -13
- data/lib/super_diff/operation_trees/hash.rb +4 -7
- data/lib/super_diff/operation_trees/main.rb +1 -1
- data/lib/super_diff/operation_trees/multiline_string.rb +4 -7
- data/lib/super_diff/operations/binary_operation.rb +1 -6
- data/lib/super_diff/operations/unary_operation.rb +2 -30
- data/lib/super_diff/recursion_guard.rb +3 -3
- data/lib/super_diff/rspec.rb +41 -13
- data/lib/super_diff/rspec/differs/collection_including.rb +4 -2
- data/lib/super_diff/rspec/differs/hash_including.rb +4 -2
- data/lib/super_diff/rspec/matcher_text_builders/base.rb +7 -7
- data/lib/super_diff/rspec/matcher_text_builders/be_predicate.rb +6 -6
- data/lib/super_diff/rspec/matcher_text_builders/contain_exactly.rb +1 -1
- data/lib/super_diff/rspec/matcher_text_builders/have_predicate.rb +4 -4
- data/lib/super_diff/rspec/matcher_text_builders/raise_error.rb +1 -1
- data/lib/super_diff/rspec/matcher_text_builders/respond_to.rb +5 -5
- data/lib/super_diff/rspec/monkey_patches.rb +353 -306
- data/lib/super_diff/rspec/object_inspection.rb +4 -1
- data/lib/super_diff/rspec/object_inspection/inspection_tree_builders.rb +44 -0
- data/lib/super_diff/rspec/object_inspection/{inspectors → inspection_tree_builders}/collection_containing_exactly.rb +9 -8
- data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/collection_including.rb +34 -0
- data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/double.rb +103 -0
- data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/hash_including.rb +36 -0
- data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/instance_of.rb +26 -0
- data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/kind_of.rb +26 -0
- data/lib/super_diff/rspec/object_inspection/{inspectors → inspection_tree_builders}/object_having_attributes.rb +10 -12
- data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/primitive.rb +10 -0
- data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/value_within.rb +33 -0
- data/lib/super_diff/rspec/operation_tree_builders/collection_containing_exactly.rb +12 -4
- data/lib/super_diff/rspec/operation_tree_builders/collection_including.rb +10 -3
- data/lib/super_diff/rspec/operation_tree_builders/hash_including.rb +10 -3
- data/lib/super_diff/tiered_lines.rb +4 -0
- data/lib/super_diff/tiered_lines_elider.rb +490 -0
- data/lib/super_diff/tiered_lines_formatter.rb +79 -0
- data/lib/super_diff/version.rb +1 -1
- data/spec/examples.txt +407 -5
- data/spec/integration/rails/active_support_spec.rb +19 -0
- data/spec/integration/rspec/be_falsey_matcher_spec.rb +10 -10
- data/spec/integration/rspec/be_matcher_spec.rb +100 -100
- data/spec/integration/rspec/be_nil_matcher_spec.rb +10 -10
- data/spec/integration/rspec/be_predicate_matcher_spec.rb +103 -103
- data/spec/integration/rspec/be_truthy_matcher_spec.rb +10 -10
- data/spec/integration/rspec/contain_exactly_matcher_spec.rb +113 -107
- data/spec/integration/rspec/eq_matcher_spec.rb +223 -277
- data/spec/integration/rspec/have_attributes_matcher_spec.rb +138 -129
- data/spec/integration/rspec/have_predicate_matcher_spec.rb +65 -65
- data/spec/integration/rspec/include_matcher_spec.rb +73 -73
- data/spec/integration/rspec/match_array_matcher_spec.rb +126 -119
- data/spec/integration/rspec/match_matcher_spec.rb +362 -274
- data/spec/integration/rspec/raise_error_matcher_spec.rb +86 -86
- data/spec/integration/rspec/respond_to_matcher_spec.rb +240 -240
- data/spec/integration/rspec/third_party_matcher_spec.rb +8 -8
- data/spec/integration/rspec/unhandled_errors_spec.rb +5 -5
- data/spec/spec_helper.rb +33 -13
- data/spec/support/command_runner.rb +15 -25
- data/spec/support/helpers.rb +21 -0
- data/spec/support/integration/helpers.rb +8 -2
- data/spec/support/integration/matchers/produce_output_when_run_matcher.rb +4 -4
- data/spec/support/integration/test_programs/base.rb +38 -10
- data/spec/support/integration/test_programs/rspec_active_record.rb +1 -1
- data/spec/support/integration/test_programs/rspec_active_support.rb +17 -0
- data/spec/support/integration/test_programs/rspec_rails.rb +1 -1
- data/spec/support/shared_examples/active_record.rb +109 -108
- data/spec/support/shared_examples/active_support.rb +65 -0
- data/spec/support/shared_examples/elided_diffs.rb +914 -0
- data/spec/support/shared_examples/hash_with_indifferent_access.rb +196 -232
- data/spec/support/unit/helpers.rb +15 -0
- data/spec/support/unit/matchers/match_output.rb +41 -0
- data/spec/unit/active_record/object_inspection_spec.rb +273 -0
- data/spec/unit/equality_matchers/main_spec.rb +445 -465
- data/spec/unit/helpers_spec.rb +61 -0
- data/spec/unit/operation_tree_flatteners/array_spec.rb +604 -0
- data/spec/unit/operation_tree_flatteners/custom_object_spec.rb +667 -0
- data/spec/unit/operation_tree_flatteners/default_object_spec.rb +687 -0
- data/spec/unit/operation_tree_flatteners/hash_spec.rb +632 -0
- data/spec/unit/operation_tree_flatteners/multiline_string_spec.rb +121 -0
- data/spec/unit/rspec/object_inspection_spec.rb +446 -0
- data/spec/unit/super_diff_spec.rb +1958 -0
- data/spec/unit/tiered_lines_elider_spec.rb +6356 -0
- data/spec/unit/tiered_lines_formatter_spec.rb +193 -0
- data/super_diff.gemspec +1 -1
- metadata +95 -50
- data/lib/super_diff/active_record/diff_formatters.rb +0 -10
- data/lib/super_diff/active_record/diff_formatters/active_record_relation.rb +0 -23
- data/lib/super_diff/active_record/object_inspection/inspectors.rb +0 -16
- data/lib/super_diff/active_support/diff_formatters.rb +0 -10
- data/lib/super_diff/active_support/diff_formatters/hash_with_indifferent_access.rb +0 -36
- data/lib/super_diff/active_support/object_inspection/inspectors/hash_with_indifferent_access.rb +0 -28
- data/lib/super_diff/diff_formatters.rb +0 -14
- data/lib/super_diff/diff_formatters/array.rb +0 -21
- data/lib/super_diff/diff_formatters/base.rb +0 -33
- data/lib/super_diff/diff_formatters/custom_object.rb +0 -30
- data/lib/super_diff/diff_formatters/default_object.rb +0 -46
- data/lib/super_diff/diff_formatters/defaults.rb +0 -10
- data/lib/super_diff/diff_formatters/hash.rb +0 -34
- data/lib/super_diff/diff_formatters/main.rb +0 -41
- data/lib/super_diff/object_inspection/inspectors.rb +0 -23
- data/lib/super_diff/object_inspection/inspectors/array.rb +0 -32
- data/lib/super_diff/object_inspection/inspectors/base.rb +0 -36
- data/lib/super_diff/object_inspection/inspectors/custom_object.rb +0 -37
- data/lib/super_diff/object_inspection/inspectors/default_object.rb +0 -61
- data/lib/super_diff/object_inspection/inspectors/hash.rb +0 -32
- data/lib/super_diff/object_inspection/inspectors/primitive.rb +0 -28
- data/lib/super_diff/object_inspection/inspectors/string.rb +0 -23
- data/lib/super_diff/object_inspection/inspectors/time_like.rb +0 -23
- data/lib/super_diff/object_inspection/nodes/break.rb +0 -15
- data/lib/super_diff/object_inspection/nodes/when_multiline.rb +0 -22
- data/lib/super_diff/object_inspection/nodes/when_singleline.rb +0 -24
- data/lib/super_diff/rspec/object_inspection/inspectors.rb +0 -40
- data/lib/super_diff/rspec/object_inspection/inspectors/collection_including.rb +0 -28
- data/lib/super_diff/rspec/object_inspection/inspectors/hash_including.rb +0 -31
- data/lib/super_diff/rspec/object_inspection/inspectors/instance_of.rb +0 -23
- data/lib/super_diff/rspec/object_inspection/inspectors/kind_of.rb +0 -23
- data/lib/super_diff/rspec/object_inspection/inspectors/primitive.rb +0 -13
- data/lib/super_diff/rspec/object_inspection/inspectors/value_within.rb +0 -29
- data/spec/support/object_id.rb +0 -27
- data/spec/support/ruby_versions.rb +0 -11
- data/spec/unit/object_inspection_spec.rb +0 -1168
@@ -7,7 +7,7 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
|
|
7
7
|
as_both_colored_and_uncolored do |color_enabled|
|
8
8
|
snippet = <<~TEST.strip
|
9
9
|
expected = a_hash_including(city: "Hill Valley")
|
10
|
-
actual
|
10
|
+
actual = { city: "Burbank" }
|
11
11
|
expect(actual).to match(expected)
|
12
12
|
TEST
|
13
13
|
program = make_plain_test_program(
|
@@ -20,18 +20,18 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
|
|
20
20
|
snippet: %|expect(actual).to match(expected)|,
|
21
21
|
expectation: proc {
|
22
22
|
line do
|
23
|
-
plain
|
24
|
-
|
25
|
-
plain
|
26
|
-
|
27
|
-
plain
|
23
|
+
plain %|Expected |
|
24
|
+
actual %|{ city: "Burbank" }|
|
25
|
+
plain %| to match |
|
26
|
+
expected %|#<a hash including (city: "Hill Valley")>|
|
27
|
+
plain %|.|
|
28
28
|
end
|
29
29
|
},
|
30
30
|
diff: proc {
|
31
|
-
plain_line
|
32
|
-
|
33
|
-
|
34
|
-
plain_line
|
31
|
+
plain_line %| {|
|
32
|
+
expected_line %|- city: "Hill Valley"|
|
33
|
+
actual_line %|+ city: "Burbank"|
|
34
|
+
plain_line %| }|
|
35
35
|
},
|
36
36
|
)
|
37
37
|
|
@@ -45,7 +45,7 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
|
|
45
45
|
as_both_colored_and_uncolored do |color_enabled|
|
46
46
|
snippet = <<~TEST.strip
|
47
47
|
expected = a_hash_including(city: "Burbank")
|
48
|
-
actual
|
48
|
+
actual = { city: "Burbank" }
|
49
49
|
expect(actual).not_to match(expected)
|
50
50
|
TEST
|
51
51
|
program = make_plain_test_program(
|
@@ -58,11 +58,11 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
|
|
58
58
|
snippet: %|expect(actual).not_to match(expected)|,
|
59
59
|
expectation: proc {
|
60
60
|
line do
|
61
|
-
plain
|
62
|
-
|
63
|
-
plain
|
64
|
-
|
65
|
-
plain
|
61
|
+
plain %|Expected |
|
62
|
+
actual %|{ city: "Burbank" }|
|
63
|
+
plain %| not to match |
|
64
|
+
expected %|#<a hash including (city: "Burbank")>|
|
65
|
+
plain %|.|
|
66
66
|
end
|
67
67
|
},
|
68
68
|
)
|
@@ -82,7 +82,7 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
|
|
82
82
|
city: "Hill Valley",
|
83
83
|
zip: "90382"
|
84
84
|
)
|
85
|
-
actual
|
85
|
+
actual = {
|
86
86
|
line_1: "123 Main St.",
|
87
87
|
city: "Burbank",
|
88
88
|
state: "CA",
|
@@ -100,24 +100,24 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
|
|
100
100
|
snippet: %|expect(actual).to match(expected)|,
|
101
101
|
expectation: proc {
|
102
102
|
line do
|
103
|
-
plain
|
104
|
-
|
103
|
+
plain %|Expected |
|
104
|
+
actual %|{ line_1: "123 Main St.", city: "Burbank", state: "CA", zip: "90210" }|
|
105
105
|
end
|
106
106
|
|
107
107
|
line do
|
108
|
-
plain
|
109
|
-
|
108
|
+
plain %|to match |
|
109
|
+
expected %|#<a hash including (city: "Hill Valley", zip: "90382")>|
|
110
110
|
end
|
111
111
|
},
|
112
112
|
diff: proc {
|
113
|
-
plain_line
|
114
|
-
plain_line
|
115
|
-
|
116
|
-
|
117
|
-
plain_line
|
118
|
-
|
119
|
-
|
120
|
-
plain_line
|
113
|
+
plain_line %| {|
|
114
|
+
plain_line %| line_1: "123 Main St.",|
|
115
|
+
expected_line %|- city: "Hill Valley",|
|
116
|
+
actual_line %|+ city: "Burbank",|
|
117
|
+
plain_line %| state: "CA",|
|
118
|
+
expected_line %|- zip: "90382"|
|
119
|
+
actual_line %|+ zip: "90210"|
|
120
|
+
plain_line %| }|
|
121
121
|
},
|
122
122
|
)
|
123
123
|
|
@@ -134,7 +134,7 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
|
|
134
134
|
city: "Burbank",
|
135
135
|
zip: "90210"
|
136
136
|
)
|
137
|
-
actual
|
137
|
+
actual = {
|
138
138
|
line_1: "123 Main St.",
|
139
139
|
city: "Burbank",
|
140
140
|
state: "CA",
|
@@ -153,13 +153,13 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
|
|
153
153
|
newline_before_expectation: true,
|
154
154
|
expectation: proc {
|
155
155
|
line do
|
156
|
-
plain
|
157
|
-
|
156
|
+
plain %| Expected |
|
157
|
+
actual %|{ line_1: "123 Main St.", city: "Burbank", state: "CA", zip: "90210" }|
|
158
158
|
end
|
159
159
|
|
160
160
|
line do
|
161
|
-
plain
|
162
|
-
|
161
|
+
plain %|not to match |
|
162
|
+
expected %|#<a hash including (city: "Burbank", zip: "90210")>|
|
163
163
|
end
|
164
164
|
},
|
165
165
|
)
|
@@ -173,7 +173,7 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
|
|
173
173
|
end
|
174
174
|
|
175
175
|
context "when the expected value includes a hash-including-<something>" do
|
176
|
-
context "and the corresponding actual
|
176
|
+
context "and the corresponding actual value is a hash" do
|
177
177
|
it "produces the correct failure message when used in the positive" do
|
178
178
|
as_both_colored_and_uncolored do |color_enabled|
|
179
179
|
snippet = <<~TEST.strip
|
@@ -184,7 +184,7 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
|
|
184
184
|
zip: "90382"
|
185
185
|
)
|
186
186
|
}
|
187
|
-
actual
|
187
|
+
actual = {
|
188
188
|
name: "Marty McFly",
|
189
189
|
address: {
|
190
190
|
line_1: "123 Main St.",
|
@@ -205,27 +205,27 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
|
|
205
205
|
snippet: %|expect(actual).to match(expected)|,
|
206
206
|
expectation: proc {
|
207
207
|
line do
|
208
|
-
plain
|
209
|
-
|
208
|
+
plain %|Expected |
|
209
|
+
actual %|{ name: "Marty McFly", address: { line_1: "123 Main St.", city: "Burbank", state: "CA", zip: "90210" } }|
|
210
210
|
end
|
211
211
|
|
212
212
|
line do
|
213
|
-
plain
|
214
|
-
|
213
|
+
plain %|to match |
|
214
|
+
expected %|{ name: "Marty McFly", address: #<a hash including (city: "Hill Valley", zip: "90382")> }|
|
215
215
|
end
|
216
216
|
},
|
217
217
|
diff: proc {
|
218
|
-
plain_line
|
219
|
-
plain_line
|
220
|
-
plain_line
|
221
|
-
plain_line
|
222
|
-
|
223
|
-
|
224
|
-
plain_line
|
225
|
-
|
226
|
-
|
227
|
-
plain_line
|
228
|
-
plain_line
|
218
|
+
plain_line %| {|
|
219
|
+
plain_line %| name: "Marty McFly",|
|
220
|
+
plain_line %| address: {|
|
221
|
+
plain_line %| line_1: "123 Main St.",|
|
222
|
+
expected_line %|- city: "Hill Valley",|
|
223
|
+
actual_line %|+ city: "Burbank",|
|
224
|
+
plain_line %| state: "CA",|
|
225
|
+
expected_line %|- zip: "90382"|
|
226
|
+
actual_line %|+ zip: "90210"|
|
227
|
+
plain_line %| }|
|
228
|
+
plain_line %| }|
|
229
229
|
},
|
230
230
|
)
|
231
231
|
|
@@ -245,7 +245,7 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
|
|
245
245
|
zip: "90210"
|
246
246
|
)
|
247
247
|
}
|
248
|
-
actual
|
248
|
+
actual = {
|
249
249
|
name: "Marty McFly",
|
250
250
|
address: {
|
251
251
|
line_1: "123 Main St.",
|
@@ -267,13 +267,13 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
|
|
267
267
|
newline_before_expectation: true,
|
268
268
|
expectation: proc {
|
269
269
|
line do
|
270
|
-
plain
|
271
|
-
|
270
|
+
plain %| Expected |
|
271
|
+
actual %|{ name: "Marty McFly", address: { line_1: "123 Main St.", city: "Burbank", state: "CA", zip: "90210" } }|
|
272
272
|
end
|
273
273
|
|
274
274
|
line do
|
275
|
-
plain
|
276
|
-
|
275
|
+
plain %|not to match |
|
276
|
+
expected %|{ name: "Marty McFly", address: #<a hash including (city: "Burbank", zip: "90210")> }|
|
277
277
|
end
|
278
278
|
},
|
279
279
|
)
|
@@ -285,7 +285,7 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
|
|
285
285
|
end
|
286
286
|
end
|
287
287
|
|
288
|
-
context "and the corresponding actual
|
288
|
+
context "and the corresponding actual value is not a hash" do
|
289
289
|
it "produces the correct failure message" do
|
290
290
|
as_both_colored_and_uncolored do |color_enabled|
|
291
291
|
snippet = <<~TEST.strip
|
@@ -296,7 +296,7 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
|
|
296
296
|
zip: "90382"
|
297
297
|
)
|
298
298
|
}
|
299
|
-
actual
|
299
|
+
actual = {
|
300
300
|
name: "Marty McFly",
|
301
301
|
address: nil
|
302
302
|
}
|
@@ -312,24 +312,24 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
|
|
312
312
|
snippet: %|expect(actual).to match(expected)|,
|
313
313
|
expectation: proc {
|
314
314
|
line do
|
315
|
-
plain
|
316
|
-
|
315
|
+
plain %|Expected |
|
316
|
+
actual %|{ name: "Marty McFly", address: nil }|
|
317
317
|
end
|
318
318
|
|
319
319
|
line do
|
320
|
-
plain
|
321
|
-
|
320
|
+
plain %|to match |
|
321
|
+
expected %|{ name: "Marty McFly", address: #<a hash including (city: "Hill Valley", zip: "90382")> }|
|
322
322
|
end
|
323
323
|
},
|
324
324
|
diff: proc {
|
325
|
-
plain_line
|
326
|
-
plain_line
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
plain_line
|
325
|
+
plain_line %! {!
|
326
|
+
plain_line %! name: "Marty McFly",!
|
327
|
+
expected_line %!- address: #<a hash including (!
|
328
|
+
expected_line %!- city: "Hill Valley",!
|
329
|
+
expected_line %!- zip: "90382"!
|
330
|
+
expected_line %!- )>!
|
331
|
+
actual_line %!+ address: nil!
|
332
|
+
plain_line %! }!
|
333
333
|
},
|
334
334
|
)
|
335
335
|
|
@@ -341,13 +341,55 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
|
|
341
341
|
end
|
342
342
|
end
|
343
343
|
|
344
|
+
# HINT: `a_hash_including` is an alias of `include` in the rspec-expectations gem.
|
345
|
+
# `hash_including` is an argument matcher in the rspec-mocks gem.
|
346
|
+
context "when the expected value is `hash-including-<something>`, not `a-hash-including-<something>`" do
|
347
|
+
it "produces the correct failure message" do
|
348
|
+
as_both_colored_and_uncolored do |color_enabled|
|
349
|
+
snippet = <<~TEST.strip
|
350
|
+
expected = hash_including(city: "Hill Valley")
|
351
|
+
actual = { city: "Burbank" }
|
352
|
+
expect(actual).to match(expected)
|
353
|
+
TEST
|
354
|
+
program = make_plain_test_program(
|
355
|
+
snippet,
|
356
|
+
color_enabled: color_enabled,
|
357
|
+
)
|
358
|
+
|
359
|
+
expected_output = build_expected_output(
|
360
|
+
color_enabled: color_enabled,
|
361
|
+
snippet: %|expect(actual).to match(expected)|,
|
362
|
+
expectation: proc {
|
363
|
+
line do
|
364
|
+
plain %|Expected |
|
365
|
+
actual %|{ city: "Burbank" }|
|
366
|
+
plain %| to match |
|
367
|
+
expected %|#<a hash including (city: "Hill Valley")>|
|
368
|
+
plain %|.|
|
369
|
+
end
|
370
|
+
},
|
371
|
+
diff: proc {
|
372
|
+
plain_line %| {|
|
373
|
+
expected_line %|- city: "Hill Valley"|
|
374
|
+
actual_line %|+ city: "Burbank"|
|
375
|
+
plain_line %| }|
|
376
|
+
},
|
377
|
+
)
|
378
|
+
|
379
|
+
expect(program).
|
380
|
+
to produce_output_when_run(expected_output).
|
381
|
+
in_color(color_enabled)
|
382
|
+
end
|
383
|
+
end
|
384
|
+
end
|
385
|
+
|
344
386
|
context "when the expected value is a collection-including-<something>" do
|
345
387
|
context "that is small" do
|
346
388
|
it "produces the correct failure message when used in the positive" do
|
347
389
|
as_both_colored_and_uncolored do |color_enabled|
|
348
390
|
snippet = <<~TEST.strip
|
349
391
|
expected = a_collection_including("a")
|
350
|
-
actual
|
392
|
+
actual = ["b"]
|
351
393
|
expect(actual).to match(expected)
|
352
394
|
TEST
|
353
395
|
program = make_plain_test_program(
|
@@ -360,19 +402,19 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
|
|
360
402
|
snippet: %|expect(actual).to match(expected)|,
|
361
403
|
expectation: proc {
|
362
404
|
line do
|
363
|
-
plain
|
364
|
-
|
365
|
-
plain
|
366
|
-
|
367
|
-
plain
|
405
|
+
plain %|Expected |
|
406
|
+
actual %|["b"]|
|
407
|
+
plain %| to match |
|
408
|
+
expected %|#<a collection including ("a")>|
|
409
|
+
plain %|.|
|
368
410
|
end
|
369
411
|
},
|
370
412
|
diff: proc {
|
371
|
-
plain_line
|
372
|
-
plain_line
|
373
|
-
#
|
374
|
-
|
375
|
-
plain_line
|
413
|
+
plain_line %| [|
|
414
|
+
plain_line %| "b"|
|
415
|
+
# expected_line %|- "a",| # FIXME
|
416
|
+
expected_line %|- "a"|
|
417
|
+
plain_line %| ]|
|
376
418
|
},
|
377
419
|
)
|
378
420
|
|
@@ -386,7 +428,7 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
|
|
386
428
|
as_both_colored_and_uncolored do |color_enabled|
|
387
429
|
snippet = <<~TEST.strip
|
388
430
|
expected = a_collection_including("b")
|
389
|
-
actual
|
431
|
+
actual = ["b"]
|
390
432
|
expect(actual).not_to match(expected)
|
391
433
|
TEST
|
392
434
|
program = make_plain_test_program(
|
@@ -399,11 +441,11 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
|
|
399
441
|
snippet: %|expect(actual).not_to match(expected)|,
|
400
442
|
expectation: proc {
|
401
443
|
line do
|
402
|
-
plain
|
403
|
-
|
404
|
-
plain
|
405
|
-
|
406
|
-
plain
|
444
|
+
plain %|Expected |
|
445
|
+
actual %|["b"]|
|
446
|
+
plain %| not to match |
|
447
|
+
expected %|#<a collection including ("b")>|
|
448
|
+
plain %|.|
|
407
449
|
end
|
408
450
|
},
|
409
451
|
)
|
@@ -420,7 +462,7 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
|
|
420
462
|
as_both_colored_and_uncolored do |color_enabled|
|
421
463
|
snippet = <<~TEST.strip
|
422
464
|
expected = a_collection_including("milk", "bread")
|
423
|
-
actual
|
465
|
+
actual = ["milk", "toast", "eggs", "cheese", "English muffins"]
|
424
466
|
expect(actual).to match(expected)
|
425
467
|
TEST
|
426
468
|
program = make_plain_test_program(
|
@@ -433,25 +475,25 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
|
|
433
475
|
snippet: %|expect(actual).to match(expected)|,
|
434
476
|
expectation: proc {
|
435
477
|
line do
|
436
|
-
plain
|
437
|
-
|
478
|
+
plain %|Expected |
|
479
|
+
actual %|["milk", "toast", "eggs", "cheese", "English muffins"]|
|
438
480
|
end
|
439
481
|
|
440
482
|
line do
|
441
|
-
plain
|
442
|
-
|
483
|
+
plain %|to match |
|
484
|
+
expected %|#<a collection including ("milk", "bread")>|
|
443
485
|
end
|
444
486
|
},
|
445
487
|
diff: proc {
|
446
|
-
plain_line
|
447
|
-
plain_line
|
448
|
-
plain_line
|
449
|
-
plain_line
|
450
|
-
plain_line
|
451
|
-
# plain_line
|
452
|
-
plain_line
|
453
|
-
|
454
|
-
plain_line
|
488
|
+
plain_line %| [|
|
489
|
+
plain_line %| "milk",|
|
490
|
+
plain_line %| "toast",|
|
491
|
+
plain_line %| "eggs",|
|
492
|
+
plain_line %| "cheese",|
|
493
|
+
# plain_line %| "English muffins",| # FIXME
|
494
|
+
plain_line %| "English muffins"|
|
495
|
+
expected_line %|- "bread"|
|
496
|
+
plain_line %| ]|
|
455
497
|
},
|
456
498
|
)
|
457
499
|
|
@@ -465,7 +507,7 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
|
|
465
507
|
as_both_colored_and_uncolored do |color_enabled|
|
466
508
|
snippet = <<~TEST.strip
|
467
509
|
expected = a_collection_including("milk", "toast")
|
468
|
-
actual
|
510
|
+
actual = ["milk", "toast", "eggs", "cheese", "English muffins"]
|
469
511
|
expect(actual).not_to match(expected)
|
470
512
|
TEST
|
471
513
|
program = make_plain_test_program(
|
@@ -479,13 +521,13 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
|
|
479
521
|
newline_before_expectation: true,
|
480
522
|
expectation: proc {
|
481
523
|
line do
|
482
|
-
plain
|
483
|
-
|
524
|
+
plain %| Expected |
|
525
|
+
actual %|["milk", "toast", "eggs", "cheese", "English muffins"]|
|
484
526
|
end
|
485
527
|
|
486
528
|
line do
|
487
|
-
plain
|
488
|
-
|
529
|
+
plain %|not to match |
|
530
|
+
expected %|#<a collection including ("milk", "toast")>|
|
489
531
|
end
|
490
532
|
},
|
491
533
|
)
|
@@ -499,7 +541,7 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
|
|
499
541
|
end
|
500
542
|
|
501
543
|
context "when the expected value includes a collection-including-<something>" do
|
502
|
-
context "and the corresponding actual
|
544
|
+
context "and the corresponding actual value is an array" do
|
503
545
|
it "produces the correct failure message when used in the positive" do
|
504
546
|
as_both_colored_and_uncolored do |color_enabled|
|
505
547
|
snippet = <<~TEST.strip
|
@@ -507,7 +549,7 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
|
|
507
549
|
name: "shopping list",
|
508
550
|
contents: a_collection_including("milk", "bread")
|
509
551
|
}
|
510
|
-
actual
|
552
|
+
actual = {
|
511
553
|
name: "shopping list",
|
512
554
|
contents: ["milk", "toast", "eggs"]
|
513
555
|
}
|
@@ -523,26 +565,26 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
|
|
523
565
|
snippet: %|expect(actual).to match(expected)|,
|
524
566
|
expectation: proc {
|
525
567
|
line do
|
526
|
-
plain
|
527
|
-
|
568
|
+
plain %|Expected |
|
569
|
+
actual %|{ name: "shopping list", contents: ["milk", "toast", "eggs"] }|
|
528
570
|
end
|
529
571
|
|
530
572
|
line do
|
531
|
-
plain
|
532
|
-
|
573
|
+
plain %|to match |
|
574
|
+
expected %|{ name: "shopping list", contents: #<a collection including ("milk", "bread")> }|
|
533
575
|
end
|
534
576
|
},
|
535
577
|
diff: proc {
|
536
|
-
plain_line
|
537
|
-
plain_line
|
538
|
-
plain_line
|
539
|
-
plain_line
|
540
|
-
plain_line
|
541
|
-
# plain_line
|
542
|
-
plain_line
|
543
|
-
|
544
|
-
plain_line
|
545
|
-
plain_line
|
578
|
+
plain_line %| {|
|
579
|
+
plain_line %| name: "shopping list",|
|
580
|
+
plain_line %| contents: [|
|
581
|
+
plain_line %| "milk",|
|
582
|
+
plain_line %| "toast",|
|
583
|
+
# plain_line %| "eggs",| # FIXME
|
584
|
+
plain_line %| "eggs"|
|
585
|
+
expected_line %|- "bread"|
|
586
|
+
plain_line %| ]|
|
587
|
+
plain_line %| }|
|
546
588
|
},
|
547
589
|
)
|
548
590
|
|
@@ -559,7 +601,7 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
|
|
559
601
|
name: "shopping list",
|
560
602
|
contents: a_collection_including("milk", "toast")
|
561
603
|
}
|
562
|
-
actual
|
604
|
+
actual = {
|
563
605
|
name: "shopping list",
|
564
606
|
contents: ["milk", "toast", "eggs"]
|
565
607
|
}
|
@@ -576,13 +618,13 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
|
|
576
618
|
newline_before_expectation: true,
|
577
619
|
expectation: proc {
|
578
620
|
line do
|
579
|
-
plain
|
580
|
-
|
621
|
+
plain %| Expected |
|
622
|
+
actual %|{ name: "shopping list", contents: ["milk", "toast", "eggs"] }|
|
581
623
|
end
|
582
624
|
|
583
625
|
line do
|
584
|
-
plain
|
585
|
-
|
626
|
+
plain %|not to match |
|
627
|
+
expected %|{ name: "shopping list", contents: #<a collection including ("milk", "toast")> }|
|
586
628
|
end
|
587
629
|
},
|
588
630
|
)
|
@@ -594,7 +636,7 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
|
|
594
636
|
end
|
595
637
|
end
|
596
638
|
|
597
|
-
context "when the corresponding actual
|
639
|
+
context "when the corresponding actual value is not an array" do
|
598
640
|
it "produces the correct failure message" do
|
599
641
|
as_both_colored_and_uncolored do |color_enabled|
|
600
642
|
snippet = <<~TEST.strip
|
@@ -602,7 +644,7 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
|
|
602
644
|
name: "shopping list",
|
603
645
|
contents: a_collection_including("milk", "bread")
|
604
646
|
}
|
605
|
-
actual
|
647
|
+
actual = {
|
606
648
|
name: "shopping list",
|
607
649
|
contents: nil
|
608
650
|
}
|
@@ -618,24 +660,24 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
|
|
618
660
|
snippet: %|expect(actual).to match(expected)|,
|
619
661
|
expectation: proc {
|
620
662
|
line do
|
621
|
-
plain
|
622
|
-
|
663
|
+
plain %|Expected |
|
664
|
+
actual %|{ name: "shopping list", contents: nil }|
|
623
665
|
end
|
624
666
|
|
625
667
|
line do
|
626
|
-
plain
|
627
|
-
|
668
|
+
plain %|to match |
|
669
|
+
expected %|{ name: "shopping list", contents: #<a collection including ("milk", "bread")> }|
|
628
670
|
end
|
629
671
|
},
|
630
672
|
diff: proc {
|
631
|
-
plain_line
|
632
|
-
plain_line
|
633
|
-
|
634
|
-
|
635
|
-
|
636
|
-
|
637
|
-
|
638
|
-
plain_line
|
673
|
+
plain_line %! {!
|
674
|
+
plain_line %! name: "shopping list",!
|
675
|
+
expected_line %!- contents: #<a collection including (!
|
676
|
+
expected_line %!- "milk",!
|
677
|
+
expected_line %!- "bread"!
|
678
|
+
expected_line %!- )>!
|
679
|
+
actual_line %!+ contents: nil!
|
680
|
+
plain_line %! }!
|
639
681
|
},
|
640
682
|
)
|
641
683
|
|
@@ -647,13 +689,54 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
|
|
647
689
|
end
|
648
690
|
end
|
649
691
|
|
692
|
+
context "when the expected value is an array-including-<something>" do
|
693
|
+
it "produces the correct failure message" do
|
694
|
+
as_both_colored_and_uncolored do |color_enabled|
|
695
|
+
snippet = <<~TEST.strip
|
696
|
+
expected = array_including("a")
|
697
|
+
actual = ["b"]
|
698
|
+
expect(actual).to match(expected)
|
699
|
+
TEST
|
700
|
+
program = make_plain_test_program(
|
701
|
+
snippet,
|
702
|
+
color_enabled: color_enabled,
|
703
|
+
)
|
704
|
+
|
705
|
+
expected_output = build_expected_output(
|
706
|
+
color_enabled: color_enabled,
|
707
|
+
snippet: %|expect(actual).to match(expected)|,
|
708
|
+
expectation: proc {
|
709
|
+
line do
|
710
|
+
plain %|Expected |
|
711
|
+
actual %|["b"]|
|
712
|
+
plain %| to match |
|
713
|
+
expected %|#<a collection including ("a")>|
|
714
|
+
plain %|.|
|
715
|
+
end
|
716
|
+
},
|
717
|
+
diff: proc {
|
718
|
+
plain_line %| [|
|
719
|
+
plain_line %| "b"|
|
720
|
+
# expected_line %|- "a",| # FIXME
|
721
|
+
expected_line %|- "a"|
|
722
|
+
plain_line %| ]|
|
723
|
+
},
|
724
|
+
)
|
725
|
+
|
726
|
+
expect(program).
|
727
|
+
to produce_output_when_run(expected_output).
|
728
|
+
in_color(color_enabled)
|
729
|
+
end
|
730
|
+
end
|
731
|
+
end
|
732
|
+
|
650
733
|
context "when the expected value is an object-having-attributes" do
|
651
734
|
context "that is small" do
|
652
735
|
it "produces the correct failure message when used in the positive" do
|
653
736
|
as_both_colored_and_uncolored do |color_enabled|
|
654
737
|
snippet = <<~TEST.strip
|
655
738
|
expected = an_object_having_attributes(name: "b")
|
656
|
-
actual
|
739
|
+
actual = A.new("a")
|
657
740
|
expect(actual).to match(expected)
|
658
741
|
TEST
|
659
742
|
program = make_plain_test_program(
|
@@ -666,19 +749,19 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
|
|
666
749
|
snippet: %|expect(actual).to match(expected)|,
|
667
750
|
expectation: proc {
|
668
751
|
line do
|
669
|
-
plain
|
670
|
-
|
671
|
-
plain
|
672
|
-
|
673
|
-
plain
|
752
|
+
plain %|Expected |
|
753
|
+
actual %|#<A name: "a">|
|
754
|
+
plain %| to match |
|
755
|
+
expected %|#<an object having attributes (name: "b")>|
|
756
|
+
plain %|.|
|
674
757
|
end
|
675
758
|
},
|
676
759
|
diff: proc {
|
677
|
-
plain_line
|
678
|
-
#
|
679
|
-
|
680
|
-
|
681
|
-
plain_line
|
760
|
+
plain_line %| #<A {|
|
761
|
+
# expected_line %|- name: "b",| # FIXME
|
762
|
+
expected_line %|- name: "b"|
|
763
|
+
actual_line %|+ name: "a"|
|
764
|
+
plain_line %| }>|
|
682
765
|
},
|
683
766
|
)
|
684
767
|
|
@@ -692,7 +775,7 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
|
|
692
775
|
as_both_colored_and_uncolored do |color_enabled|
|
693
776
|
snippet = <<~TEST.strip
|
694
777
|
expected = an_object_having_attributes(name: "b")
|
695
|
-
actual
|
778
|
+
actual = A.new("b")
|
696
779
|
expect(actual).not_to match(expected)
|
697
780
|
TEST
|
698
781
|
program = make_plain_test_program(
|
@@ -705,11 +788,11 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
|
|
705
788
|
snippet: %|expect(actual).not_to match(expected)|,
|
706
789
|
expectation: proc {
|
707
790
|
line do
|
708
|
-
plain
|
709
|
-
|
710
|
-
plain
|
711
|
-
|
712
|
-
plain
|
791
|
+
plain %|Expected |
|
792
|
+
actual %|#<A name: "b">|
|
793
|
+
plain %| not to match |
|
794
|
+
expected %|#<an object having attributes (name: "b")>|
|
795
|
+
plain %|.|
|
713
796
|
end
|
714
797
|
},
|
715
798
|
)
|
@@ -732,7 +815,7 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
|
|
732
815
|
state: "CA",
|
733
816
|
something_else: "blah"
|
734
817
|
)
|
735
|
-
actual
|
818
|
+
actual = SuperDiff::Test::ShippingAddress.new(
|
736
819
|
line_1: "456 Ponderosa Ct.",
|
737
820
|
line_2: nil,
|
738
821
|
city: "Hill Valley",
|
@@ -751,29 +834,30 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
|
|
751
834
|
snippet: %|expect(actual).to match(expected)|,
|
752
835
|
expectation: proc {
|
753
836
|
line do
|
754
|
-
plain
|
755
|
-
|
837
|
+
plain %|Expected |
|
838
|
+
actual %|#<SuperDiff::Test::ShippingAddress line_1: "456 Ponderosa Ct.", line_2: nil, city: "Hill Valley", state: "CA", zip: "90382">|
|
756
839
|
end
|
757
840
|
|
758
841
|
line do
|
759
|
-
plain
|
760
|
-
|
842
|
+
plain %|to match |
|
843
|
+
expected %|#<an object having attributes (line_1: "123 Main St.", city: "Oakland", zip: "91234", state: "CA", something_else: "blah")>|
|
761
844
|
end
|
762
845
|
},
|
763
846
|
diff: proc {
|
764
|
-
plain_line
|
765
|
-
|
766
|
-
|
767
|
-
plain_line
|
768
|
-
|
769
|
-
|
770
|
-
plain_line
|
771
|
-
#
|
772
|
-
#
|
773
|
-
|
774
|
-
|
775
|
-
|
776
|
-
|
847
|
+
plain_line %| #<SuperDiff::Test::ShippingAddress {|
|
848
|
+
expected_line %|- line_1: "123 Main St.",|
|
849
|
+
actual_line %|+ line_1: "456 Ponderosa Ct.",|
|
850
|
+
plain_line %| line_2: nil,|
|
851
|
+
expected_line %|- city: "Oakland",|
|
852
|
+
actual_line %|+ city: "Hill Valley",|
|
853
|
+
plain_line %| state: "CA",|
|
854
|
+
# expected_line %|- zip: "91234",| # FIXME
|
855
|
+
# actual_line %|+ zip: "90382",| # FIXME
|
856
|
+
expected_line %|- zip: "91234"|
|
857
|
+
actual_line %|+ zip: "90382"|
|
858
|
+
# expected_line %|- something_else: "blah"| # TODO
|
859
|
+
expected_line %|- something_else: "blah",|
|
860
|
+
plain_line %| }>|
|
777
861
|
},
|
778
862
|
)
|
779
863
|
|
@@ -791,7 +875,7 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
|
|
791
875
|
city: "Oakland",
|
792
876
|
zip: "91234"
|
793
877
|
)
|
794
|
-
actual
|
878
|
+
actual = SuperDiff::Test::ShippingAddress.new(
|
795
879
|
line_1: "123 Main St.",
|
796
880
|
line_2: nil,
|
797
881
|
city: "Oakland",
|
@@ -811,13 +895,13 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
|
|
811
895
|
newline_before_expectation: true,
|
812
896
|
expectation: proc {
|
813
897
|
line do
|
814
|
-
plain
|
815
|
-
|
898
|
+
plain %| Expected |
|
899
|
+
actual %|#<SuperDiff::Test::ShippingAddress line_1: "123 Main St.", line_2: nil, city: "Oakland", state: "CA", zip: "91234">|
|
816
900
|
end
|
817
901
|
|
818
902
|
line do
|
819
|
-
plain
|
820
|
-
|
903
|
+
plain %|not to match |
|
904
|
+
expected %|#<an object having attributes (line_1: "123 Main St.", city: "Oakland", zip: "91234")>|
|
821
905
|
end
|
822
906
|
},
|
823
907
|
)
|
@@ -844,7 +928,7 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
|
|
844
928
|
something_else: "blah"
|
845
929
|
)
|
846
930
|
}
|
847
|
-
actual
|
931
|
+
actual = {
|
848
932
|
name: "Marty McFly",
|
849
933
|
shipping_address: SuperDiff::Test::ShippingAddress.new(
|
850
934
|
line_1: "456 Ponderosa Ct.",
|
@@ -866,31 +950,32 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
|
|
866
950
|
snippet: %|expect(actual).to match(expected)|,
|
867
951
|
expectation: proc {
|
868
952
|
line do
|
869
|
-
plain
|
870
|
-
|
953
|
+
plain %|Expected |
|
954
|
+
actual %|{ name: "Marty McFly", shipping_address: #<SuperDiff::Test::ShippingAddress line_1: "456 Ponderosa Ct.", line_2: nil, city: "Hill Valley", state: "CA", zip: "90382"> }|
|
871
955
|
end
|
872
956
|
|
873
957
|
line do
|
874
|
-
plain
|
875
|
-
|
958
|
+
plain %|to match |
|
959
|
+
expected %|{ name: "Marty McFly", shipping_address: #<an object having attributes (line_1: "123 Main St.", city: "Oakland", state: "CA", zip: "91234", something_else: "blah")> }|
|
876
960
|
end
|
877
961
|
},
|
878
962
|
diff: proc {
|
879
|
-
plain_line
|
880
|
-
plain_line
|
881
|
-
plain_line
|
882
|
-
|
883
|
-
|
884
|
-
plain_line
|
885
|
-
|
886
|
-
|
887
|
-
plain_line
|
888
|
-
#
|
889
|
-
|
890
|
-
|
891
|
-
|
892
|
-
|
893
|
-
plain_line
|
963
|
+
plain_line %| {|
|
964
|
+
plain_line %| name: "Marty McFly",|
|
965
|
+
plain_line %| shipping_address: #<SuperDiff::Test::ShippingAddress {|
|
966
|
+
expected_line %|- line_1: "123 Main St.",|
|
967
|
+
actual_line %|+ line_1: "456 Ponderosa Ct.",|
|
968
|
+
plain_line %| line_2: nil,|
|
969
|
+
expected_line %|- city: "Oakland",|
|
970
|
+
actual_line %|+ city: "Hill Valley",|
|
971
|
+
plain_line %| state: "CA",|
|
972
|
+
# expected_line %|- zip: "91234",| # FIXME
|
973
|
+
expected_line %|- zip: "91234"|
|
974
|
+
actual_line %|+ zip: "90382"|
|
975
|
+
# expected_line %|- something_else: "blah"| # TODO
|
976
|
+
expected_line %|- something_else: "blah",|
|
977
|
+
plain_line %| }>|
|
978
|
+
plain_line %| }|
|
894
979
|
},
|
895
980
|
)
|
896
981
|
|
@@ -912,7 +997,7 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
|
|
912
997
|
zip: "91234"
|
913
998
|
)
|
914
999
|
}
|
915
|
-
actual
|
1000
|
+
actual = {
|
916
1001
|
name: "Marty McFly",
|
917
1002
|
shipping_address: SuperDiff::Test::ShippingAddress.new(
|
918
1003
|
line_1: "123 Main St.",
|
@@ -935,13 +1020,13 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
|
|
935
1020
|
newline_before_expectation: true,
|
936
1021
|
expectation: proc {
|
937
1022
|
line do
|
938
|
-
plain
|
939
|
-
|
1023
|
+
plain %| Expected |
|
1024
|
+
actual %|{ name: "Marty McFly", shipping_address: #<SuperDiff::Test::ShippingAddress line_1: "123 Main St.", line_2: nil, city: "Oakland", state: "CA", zip: "91234"> }|
|
940
1025
|
end
|
941
1026
|
|
942
1027
|
line do
|
943
|
-
plain
|
944
|
-
|
1028
|
+
plain %|not to match |
|
1029
|
+
expected %|{ name: "Marty McFly", shipping_address: #<an object having attributes (line_1: "123 Main St.", city: "Oakland", state: "CA", zip: "91234")> }|
|
945
1030
|
end
|
946
1031
|
},
|
947
1032
|
)
|
@@ -959,7 +1044,7 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
|
|
959
1044
|
as_both_colored_and_uncolored do |color_enabled|
|
960
1045
|
snippet = <<~TEST.strip
|
961
1046
|
expected = a_collection_containing_exactly("a")
|
962
|
-
actual
|
1047
|
+
actual = ["b"]
|
963
1048
|
expect(actual).to match(expected)
|
964
1049
|
TEST
|
965
1050
|
program = make_plain_test_program(
|
@@ -972,18 +1057,19 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
|
|
972
1057
|
snippet: %|expect(actual).to match(expected)|,
|
973
1058
|
expectation: proc {
|
974
1059
|
line do
|
975
|
-
plain
|
976
|
-
|
977
|
-
plain
|
978
|
-
|
979
|
-
plain
|
1060
|
+
plain %|Expected |
|
1061
|
+
actual %|["b"]|
|
1062
|
+
plain %| to match |
|
1063
|
+
expected %|#<a collection containing exactly ("a")>|
|
1064
|
+
plain %|.|
|
980
1065
|
end
|
981
1066
|
},
|
982
1067
|
diff: proc {
|
983
|
-
plain_line
|
984
|
-
|
985
|
-
|
986
|
-
|
1068
|
+
plain_line %| [|
|
1069
|
+
actual_line %|+ "b",|
|
1070
|
+
# expected_line %|- "a"| # TODO
|
1071
|
+
expected_line %|- "a",|
|
1072
|
+
plain_line %| ]|
|
987
1073
|
},
|
988
1074
|
)
|
989
1075
|
|
@@ -997,7 +1083,7 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
|
|
997
1083
|
as_both_colored_and_uncolored do |color_enabled|
|
998
1084
|
snippet = <<~TEST.strip
|
999
1085
|
expected = a_collection_containing_exactly("b")
|
1000
|
-
actual
|
1086
|
+
actual = ["b"]
|
1001
1087
|
expect(actual).not_to match(expected)
|
1002
1088
|
TEST
|
1003
1089
|
program = make_plain_test_program(
|
@@ -1010,11 +1096,11 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
|
|
1010
1096
|
snippet: %|expect(actual).not_to match(expected)|,
|
1011
1097
|
expectation: proc {
|
1012
1098
|
line do
|
1013
|
-
plain
|
1014
|
-
|
1015
|
-
plain
|
1016
|
-
|
1017
|
-
plain
|
1099
|
+
plain %|Expected |
|
1100
|
+
actual %|["b"]|
|
1101
|
+
plain %| not to match |
|
1102
|
+
expected %|#<a collection containing exactly ("b")>|
|
1103
|
+
plain %|.|
|
1018
1104
|
end
|
1019
1105
|
},
|
1020
1106
|
)
|
@@ -1031,7 +1117,7 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
|
|
1031
1117
|
as_both_colored_and_uncolored do |color_enabled|
|
1032
1118
|
snippet = <<~TEST.strip
|
1033
1119
|
expected = a_collection_containing_exactly("milk", "bread")
|
1034
|
-
actual
|
1120
|
+
actual = ["milk", "toast", "eggs", "cheese", "English muffins"]
|
1035
1121
|
expect(actual).to match(expected)
|
1036
1122
|
TEST
|
1037
1123
|
program = make_plain_test_program(
|
@@ -1044,24 +1130,25 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
|
|
1044
1130
|
snippet: %|expect(actual).to match(expected)|,
|
1045
1131
|
expectation: proc {
|
1046
1132
|
line do
|
1047
|
-
plain
|
1048
|
-
|
1133
|
+
plain %|Expected |
|
1134
|
+
actual %|["milk", "toast", "eggs", "cheese", "English muffins"]|
|
1049
1135
|
end
|
1050
1136
|
|
1051
1137
|
line do
|
1052
|
-
plain
|
1053
|
-
|
1138
|
+
plain %|to match |
|
1139
|
+
expected %|#<a collection containing exactly ("milk", "bread")>|
|
1054
1140
|
end
|
1055
1141
|
},
|
1056
1142
|
diff: proc {
|
1057
|
-
plain_line
|
1058
|
-
plain_line
|
1059
|
-
|
1060
|
-
|
1061
|
-
|
1062
|
-
|
1063
|
-
|
1064
|
-
|
1143
|
+
plain_line %| [|
|
1144
|
+
plain_line %| "milk",|
|
1145
|
+
actual_line %|+ "toast",|
|
1146
|
+
actual_line %|+ "eggs",|
|
1147
|
+
actual_line %|+ "cheese",|
|
1148
|
+
actual_line %|+ "English muffins",|
|
1149
|
+
# expected_line %|- "bread"| # TODO
|
1150
|
+
expected_line %|- "bread",|
|
1151
|
+
plain_line %| ]|
|
1065
1152
|
},
|
1066
1153
|
)
|
1067
1154
|
|
@@ -1075,7 +1162,7 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
|
|
1075
1162
|
as_both_colored_and_uncolored do |color_enabled|
|
1076
1163
|
snippet = <<~TEST.strip
|
1077
1164
|
expected = a_collection_containing_exactly("milk", "eggs", "toast")
|
1078
|
-
actual
|
1165
|
+
actual = ["milk", "toast", "eggs"]
|
1079
1166
|
expect(actual).not_to match(expected)
|
1080
1167
|
TEST
|
1081
1168
|
program = make_plain_test_program(
|
@@ -1089,13 +1176,13 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
|
|
1089
1176
|
newline_before_expectation: true,
|
1090
1177
|
expectation: proc {
|
1091
1178
|
line do
|
1092
|
-
plain
|
1093
|
-
|
1179
|
+
plain %| Expected |
|
1180
|
+
actual %|["milk", "toast", "eggs"]|
|
1094
1181
|
end
|
1095
1182
|
|
1096
1183
|
line do
|
1097
|
-
plain
|
1098
|
-
|
1184
|
+
plain %|not to match |
|
1185
|
+
expected %|#<a collection containing exactly ("milk", "eggs", "toast")>|
|
1099
1186
|
end
|
1100
1187
|
},
|
1101
1188
|
)
|
@@ -1109,7 +1196,7 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
|
|
1109
1196
|
end
|
1110
1197
|
|
1111
1198
|
context "when the expected value includes a collection-containing-exactly-<something>" do
|
1112
|
-
context "and the corresponding actual
|
1199
|
+
context "and the corresponding actual value is an array" do
|
1113
1200
|
it "produces the correct failure message when used in the positive" do
|
1114
1201
|
as_both_colored_and_uncolored do |color_enabled|
|
1115
1202
|
snippet = <<~TEST.strip
|
@@ -1117,7 +1204,7 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
|
|
1117
1204
|
name: "shopping list",
|
1118
1205
|
contents: a_collection_containing_exactly("milk", "bread")
|
1119
1206
|
}
|
1120
|
-
actual
|
1207
|
+
actual = {
|
1121
1208
|
name: "shopping list",
|
1122
1209
|
contents: ["milk", "toast", "eggs"]
|
1123
1210
|
}
|
@@ -1133,25 +1220,26 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
|
|
1133
1220
|
snippet: %|expect(actual).to match(expected)|,
|
1134
1221
|
expectation: proc {
|
1135
1222
|
line do
|
1136
|
-
plain
|
1137
|
-
|
1223
|
+
plain %|Expected |
|
1224
|
+
actual %|{ name: "shopping list", contents: ["milk", "toast", "eggs"] }|
|
1138
1225
|
end
|
1139
1226
|
|
1140
1227
|
line do
|
1141
|
-
plain
|
1142
|
-
|
1228
|
+
plain %|to match |
|
1229
|
+
expected %|{ name: "shopping list", contents: #<a collection containing exactly ("milk", "bread")> }|
|
1143
1230
|
end
|
1144
1231
|
},
|
1145
1232
|
diff: proc {
|
1146
|
-
plain_line
|
1147
|
-
plain_line
|
1148
|
-
plain_line
|
1149
|
-
plain_line
|
1150
|
-
|
1151
|
-
|
1152
|
-
|
1153
|
-
|
1154
|
-
plain_line
|
1233
|
+
plain_line %| {|
|
1234
|
+
plain_line %| name: "shopping list",|
|
1235
|
+
plain_line %| contents: [|
|
1236
|
+
plain_line %| "milk",|
|
1237
|
+
actual_line %|+ "toast",|
|
1238
|
+
actual_line %|+ "eggs",|
|
1239
|
+
# expected_line %|- "bread"| # TODO
|
1240
|
+
expected_line %|- "bread",|
|
1241
|
+
plain_line %| ]|
|
1242
|
+
plain_line %| }|
|
1155
1243
|
},
|
1156
1244
|
)
|
1157
1245
|
|
@@ -1168,7 +1256,7 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
|
|
1168
1256
|
name: "shopping list",
|
1169
1257
|
contents: a_collection_containing_exactly("milk", "eggs", "toast")
|
1170
1258
|
}
|
1171
|
-
actual
|
1259
|
+
actual = {
|
1172
1260
|
name: "shopping list",
|
1173
1261
|
contents: ["milk", "toast", "eggs"]
|
1174
1262
|
}
|
@@ -1185,13 +1273,13 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
|
|
1185
1273
|
newline_before_expectation: true,
|
1186
1274
|
expectation: proc {
|
1187
1275
|
line do
|
1188
|
-
plain
|
1189
|
-
|
1276
|
+
plain %| Expected |
|
1277
|
+
actual %|{ name: "shopping list", contents: ["milk", "toast", "eggs"] }|
|
1190
1278
|
end
|
1191
1279
|
|
1192
1280
|
line do
|
1193
|
-
plain
|
1194
|
-
|
1281
|
+
plain %|not to match |
|
1282
|
+
expected %|{ name: "shopping list", contents: #<a collection containing exactly ("milk", "eggs", "toast")> }|
|
1195
1283
|
end
|
1196
1284
|
},
|
1197
1285
|
)
|
@@ -1203,7 +1291,7 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
|
|
1203
1291
|
end
|
1204
1292
|
end
|
1205
1293
|
|
1206
|
-
context "when the corresponding actual
|
1294
|
+
context "when the corresponding actual value is not an array" do
|
1207
1295
|
it "produces the correct failure message" do
|
1208
1296
|
as_both_colored_and_uncolored do |color_enabled|
|
1209
1297
|
snippet = <<~TEST.strip
|
@@ -1211,7 +1299,7 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
|
|
1211
1299
|
name: "shopping list",
|
1212
1300
|
contents: a_collection_containing_exactly("milk", "bread")
|
1213
1301
|
}
|
1214
|
-
actual
|
1302
|
+
actual = {
|
1215
1303
|
name: "shopping list",
|
1216
1304
|
contents: nil
|
1217
1305
|
}
|
@@ -1227,24 +1315,24 @@ RSpec.describe "Integration with RSpec's #match matcher", type: :integration do
|
|
1227
1315
|
snippet: %|expect(actual).to match(expected)|,
|
1228
1316
|
expectation: proc {
|
1229
1317
|
line do
|
1230
|
-
plain
|
1231
|
-
|
1318
|
+
plain %|Expected |
|
1319
|
+
actual %|{ name: "shopping list", contents: nil }|
|
1232
1320
|
end
|
1233
1321
|
|
1234
1322
|
line do
|
1235
|
-
plain
|
1236
|
-
|
1323
|
+
plain %|to match |
|
1324
|
+
expected %|{ name: "shopping list", contents: #<a collection containing exactly ("milk", "bread")> }|
|
1237
1325
|
end
|
1238
1326
|
},
|
1239
1327
|
diff: proc {
|
1240
|
-
plain_line
|
1241
|
-
plain_line
|
1242
|
-
|
1243
|
-
|
1244
|
-
|
1245
|
-
|
1246
|
-
|
1247
|
-
plain_line
|
1328
|
+
plain_line %! {!
|
1329
|
+
plain_line %! name: "shopping list",!
|
1330
|
+
expected_line %!- contents: #<a collection containing exactly (!
|
1331
|
+
expected_line %!- "milk",!
|
1332
|
+
expected_line %!- "bread"!
|
1333
|
+
expected_line %!- )>!
|
1334
|
+
actual_line %!+ contents: nil!
|
1335
|
+
plain_line %! }!
|
1248
1336
|
},
|
1249
1337
|
)
|
1250
1338
|
|