super_diff 0.9.0 → 0.11.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 +65 -26
- data/lib/super_diff/active_record/differs/active_record_relation.rb +1 -2
- data/lib/super_diff/active_record/differs.rb +1 -1
- data/lib/super_diff/active_record/object_inspection/inspection_tree_builders/active_record_model.rb +22 -18
- data/lib/super_diff/active_record/object_inspection/inspection_tree_builders/active_record_relation.rb +14 -7
- data/lib/super_diff/active_record/object_inspection/inspection_tree_builders.rb +2 -2
- data/lib/super_diff/active_record/object_inspection.rb +1 -1
- data/lib/super_diff/active_record/operation_tree_builders/active_record_model.rb +1 -2
- data/lib/super_diff/active_record/operation_tree_builders/active_record_relation.rb +1 -2
- data/lib/super_diff/active_record/operation_tree_builders.rb +2 -2
- data/lib/super_diff/active_record/operation_tree_flatteners.rb +1 -1
- data/lib/super_diff/active_record/operation_trees.rb +1 -1
- data/lib/super_diff/active_record.rb +7 -15
- data/lib/super_diff/active_support/differs/hash_with_indifferent_access.rb +5 -6
- data/lib/super_diff/active_support/differs.rb +1 -1
- data/lib/super_diff/active_support/object_inspection/inspection_tree_builders/hash_with_indifferent_access.rb +20 -11
- data/lib/super_diff/active_support/object_inspection/inspection_tree_builders/ordered_options.rb +46 -0
- data/lib/super_diff/active_support/object_inspection/inspection_tree_builders.rb +5 -1
- data/lib/super_diff/active_support/object_inspection.rb +1 -1
- data/lib/super_diff/active_support/operation_tree_builders/hash_with_indifferent_access.rb +5 -6
- data/lib/super_diff/active_support/operation_tree_builders.rb +1 -1
- data/lib/super_diff/active_support/operation_tree_flatteners.rb +1 -1
- data/lib/super_diff/active_support/operation_trees.rb +1 -1
- data/lib/super_diff/active_support.rb +6 -10
- data/lib/super_diff/colorized_document_extensions.rb +2 -4
- data/lib/super_diff/configuration.rb +14 -8
- data/lib/super_diff/csi/color.rb +4 -4
- data/lib/super_diff/csi/colorized_document.rb +12 -16
- data/lib/super_diff/csi/document.rb +8 -19
- data/lib/super_diff/csi/eight_bit_color.rb +19 -19
- data/lib/super_diff/csi/four_bit_color.rb +82 -31
- data/lib/super_diff/csi/twenty_four_bit_color.rb +12 -11
- data/lib/super_diff/csi/uncolorized_document.rb +2 -6
- data/lib/super_diff/csi.rb +10 -14
- data/lib/super_diff/diff_formatters/collection.rb +35 -41
- data/lib/super_diff/differs/date_like.rb +15 -0
- data/lib/super_diff/differs/default_object.rb +1 -1
- data/lib/super_diff/differs/defaults.rb +2 -1
- data/lib/super_diff/differs/main.rb +2 -13
- data/lib/super_diff/differs.rb +1 -0
- data/lib/super_diff/equality_matchers/array.rb +10 -12
- data/lib/super_diff/equality_matchers/base.rb +1 -1
- data/lib/super_diff/equality_matchers/default.rb +2 -4
- data/lib/super_diff/equality_matchers/defaults.rb +1 -1
- data/lib/super_diff/equality_matchers/hash.rb +10 -12
- data/lib/super_diff/equality_matchers/multiline_string.rb +11 -13
- data/lib/super_diff/equality_matchers/primitive.rb +10 -12
- data/lib/super_diff/equality_matchers/singleline_string.rb +10 -12
- data/lib/super_diff/equality_matchers.rb +1 -1
- data/lib/super_diff/errors.rb +2 -6
- data/lib/super_diff/gem_version.rb +3 -3
- data/lib/super_diff/helpers.rb +10 -10
- data/lib/super_diff/implementation_checks.rb +2 -2
- data/lib/super_diff/line.rb +3 -3
- data/lib/super_diff/object_inspection/inspection_tree.rb +64 -73
- data/lib/super_diff/object_inspection/inspection_tree_builders/array.rb +29 -14
- data/lib/super_diff/object_inspection/inspection_tree_builders/custom_object.rb +17 -13
- data/lib/super_diff/object_inspection/inspection_tree_builders/date_like.rb +51 -0
- data/lib/super_diff/object_inspection/inspection_tree_builders/default_object.rb +43 -27
- data/lib/super_diff/object_inspection/inspection_tree_builders/defaults.rb +2 -1
- data/lib/super_diff/object_inspection/inspection_tree_builders/hash.rb +35 -18
- data/lib/super_diff/object_inspection/inspection_tree_builders/primitive.rb +3 -5
- data/lib/super_diff/object_inspection/inspection_tree_builders/time_like.rb +30 -36
- data/lib/super_diff/object_inspection/inspection_tree_builders.rb +13 -9
- data/lib/super_diff/object_inspection/nodes/as_lines_when_rendering_to_lines.rb +11 -22
- data/lib/super_diff/object_inspection/nodes/as_prefix_when_rendering_to_lines.rb +1 -5
- data/lib/super_diff/object_inspection/nodes/as_prelude_when_rendering_to_lines.rb +1 -5
- data/lib/super_diff/object_inspection/nodes/as_single_line.rb +3 -7
- data/lib/super_diff/object_inspection/nodes/base.rb +9 -14
- data/lib/super_diff/object_inspection/nodes/inspection.rb +26 -34
- data/lib/super_diff/object_inspection/nodes/nesting.rb +1 -1
- data/lib/super_diff/object_inspection/nodes/only_when.rb +2 -6
- data/lib/super_diff/object_inspection/nodes/text.rb +1 -5
- data/lib/super_diff/object_inspection/nodes/when_empty.rb +2 -6
- data/lib/super_diff/object_inspection/nodes/when_non_empty.rb +2 -6
- data/lib/super_diff/object_inspection/nodes/when_rendering_to_lines.rb +1 -1
- data/lib/super_diff/object_inspection/nodes/when_rendering_to_string.rb +1 -5
- data/lib/super_diff/object_inspection/nodes.rb +7 -7
- data/lib/super_diff/object_inspection.rb +3 -3
- data/lib/super_diff/operation_tree_builders/array.rb +12 -11
- data/lib/super_diff/operation_tree_builders/base.rb +17 -15
- data/lib/super_diff/operation_tree_builders/custom_object.rb +8 -6
- data/lib/super_diff/operation_tree_builders/date_like.rb +15 -0
- data/lib/super_diff/operation_tree_builders/default_object.rb +29 -21
- data/lib/super_diff/operation_tree_builders/defaults.rb +1 -1
- data/lib/super_diff/operation_tree_builders/hash.rb +23 -24
- data/lib/super_diff/operation_tree_builders/main.rb +4 -11
- data/lib/super_diff/operation_tree_builders/multiline_string.rb +3 -3
- data/lib/super_diff/operation_tree_builders/time_like.rb +1 -11
- data/lib/super_diff/operation_tree_builders.rb +2 -1
- data/lib/super_diff/operation_tree_flatteners/base.rb +1 -5
- data/lib/super_diff/operation_tree_flatteners/collection.rb +13 -16
- data/lib/super_diff/operation_tree_flatteners/default_object.rb +1 -2
- data/lib/super_diff/operation_tree_flatteners/hash.rb +2 -10
- data/lib/super_diff/operation_tree_flatteners/multiline_string.rb +2 -1
- data/lib/super_diff/operation_tree_flatteners.rb +3 -3
- data/lib/super_diff/operation_trees/base.rb +3 -5
- data/lib/super_diff/operation_trees/default_object.rb +1 -3
- data/lib/super_diff/operations/binary_operation.rb +2 -2
- data/lib/super_diff/operations/unary_operation.rb +1 -1
- data/lib/super_diff/rails.rb +2 -1
- data/lib/super_diff/recursion_guard.rb +5 -4
- data/lib/super_diff/rspec/augmented_matcher.rb +4 -5
- data/lib/super_diff/rspec/differ.rb +6 -13
- data/lib/super_diff/rspec/differs/collection_containing_exactly.rb +3 -2
- data/lib/super_diff/rspec/differs/collection_including.rb +1 -1
- data/lib/super_diff/rspec/differs/hash_including.rb +1 -1
- data/lib/super_diff/rspec/differs.rb +3 -3
- data/lib/super_diff/rspec/matcher_text_builders/base.rb +13 -15
- data/lib/super_diff/rspec/matcher_text_builders/be_predicate.rb +5 -7
- data/lib/super_diff/rspec/matcher_text_builders/have_predicate.rb +3 -5
- data/lib/super_diff/rspec/matcher_text_builders/raise_error.rb +2 -10
- data/lib/super_diff/rspec/matcher_text_builders/respond_to.rb +2 -6
- data/lib/super_diff/rspec/matcher_text_builders.rb +5 -8
- data/lib/super_diff/rspec/matcher_text_template.rb +13 -16
- data/lib/super_diff/rspec/monkey_patches.rb +180 -123
- data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/collection_containing_exactly.rb +14 -7
- data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/collection_including.rb +21 -13
- data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/double.rb +35 -36
- data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/generic_describable_matcher.rb +19 -0
- data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/hash_including.rb +21 -15
- data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/instance_of.rb +11 -10
- data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/kind_of.rb +11 -10
- data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/object_having_attributes.rb +14 -7
- data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/value_within.rb +10 -11
- data/lib/super_diff/rspec/object_inspection/inspection_tree_builders.rb +13 -9
- data/lib/super_diff/rspec/object_inspection.rb +1 -1
- data/lib/super_diff/rspec/operation_tree_builders/collection_containing_exactly.rb +11 -10
- data/lib/super_diff/rspec/operation_tree_builders/collection_including.rb +7 -6
- data/lib/super_diff/rspec/operation_tree_builders/hash_including.rb +11 -10
- data/lib/super_diff/rspec/operation_tree_builders/object_having_attributes.rb +22 -17
- data/lib/super_diff/rspec/operation_tree_builders.rb +4 -4
- data/lib/super_diff/rspec.rb +17 -18
- data/lib/super_diff/tiered_lines_elider.rb +87 -115
- data/lib/super_diff/tiered_lines_formatter.rb +5 -9
- data/lib/super_diff/version.rb +1 -1
- data/lib/super_diff.rb +13 -9
- data/spec/examples.txt +541 -483
- data/spec/integration/rails/active_record_spec.rb +3 -1
- data/spec/integration/rails/engines_spec.rb +25 -0
- data/spec/integration/rails/hash_with_indifferent_access_spec.rb +3 -1
- data/spec/integration/rspec/be_falsey_matcher_spec.rb +40 -35
- data/spec/integration/rspec/be_matcher_spec.rb +360 -320
- data/spec/integration/rspec/be_nil_matcher_spec.rb +38 -34
- data/spec/integration/rspec/be_predicate_matcher_spec.rb +376 -359
- data/spec/integration/rspec/be_truthy_matcher_spec.rb +38 -33
- data/spec/integration/rspec/contain_exactly_matcher_spec.rb +257 -254
- data/spec/integration/rspec/eq_matcher_spec.rb +695 -585
- data/spec/integration/rspec/generic_describable_matchers_spec.rb +177 -0
- data/spec/integration/rspec/have_attributes_matcher_spec.rb +312 -304
- data/spec/integration/rspec/have_predicate_matcher_spec.rb +291 -297
- data/spec/integration/rspec/include_matcher_spec.rb +327 -225
- data/spec/integration/rspec/magic_metadata_spec.rb +51 -0
- data/spec/integration/rspec/match_array_matcher_spec.rb +294 -291
- data/spec/integration/rspec/match_matcher_spec.rb +916 -903
- data/spec/integration/rspec/raise_error_matcher_spec.rb +1208 -449
- data/spec/integration/rspec/respond_to_matcher_spec.rb +702 -697
- data/spec/integration/rspec/third_party_matcher_spec.rb +142 -138
- data/spec/integration/rspec/unhandled_errors_spec.rb +88 -84
- data/spec/internal/log/test.log +0 -0
- data/spec/spec_helper.rb +20 -20
- data/spec/support/command_runner.rb +34 -57
- data/spec/support/integration/helpers.rb +44 -32
- data/spec/support/integration/matchers/produce_output_when_run_matcher.rb +28 -23
- data/spec/support/integration/matchers.rb +34 -0
- data/spec/support/integration/test_programs/base.rb +17 -22
- data/spec/support/integration/test_programs/plain.rb +6 -0
- data/spec/support/integration/test_programs/rspec_active_record.rb +4 -1
- data/spec/support/integration/test_programs/rspec_active_support.rb +4 -1
- data/spec/support/integration/test_programs/rspec_rails.rb +4 -1
- data/spec/support/integration/test_programs/rspec_rails_engine.rb +20 -0
- data/spec/support/models/active_record/person.rb +6 -4
- data/spec/support/models/active_record/shipping_address.rb +9 -10
- data/spec/support/models/customer.rb +2 -4
- data/spec/support/models/player.rb +3 -6
- data/spec/support/models/shipping_address.rb +4 -13
- data/spec/support/shared_examples/active_record.rb +258 -240
- data/spec/support/shared_examples/active_support.rb +174 -51
- data/spec/support/shared_examples/elided_diffs.rb +447 -423
- data/spec/support/shared_examples/hash_with_indifferent_access.rb +500 -464
- data/spec/support/shared_examples/key.rb +123 -0
- data/spec/support/unit/helpers.rb +1 -3
- data/spec/support/unit/matchers/match_output.rb +12 -13
- data/spec/unit/active_record/object_inspection_spec.rb +222 -206
- data/spec/unit/active_support/object_inspection_spec.rb +170 -0
- data/spec/unit/equality_matchers/main_spec.rb +1049 -984
- data/spec/unit/helpers_spec.rb +14 -21
- data/spec/unit/operation_tree_flatteners/array_spec.rb +557 -524
- data/spec/unit/operation_tree_flatteners/custom_object_spec.rb +619 -601
- data/spec/unit/operation_tree_flatteners/default_object_spec.rb +619 -621
- data/spec/unit/operation_tree_flatteners/hash_spec.rb +595 -556
- data/spec/unit/operation_tree_flatteners/multiline_string_spec.rb +102 -92
- data/spec/unit/rspec/matchers/be_compared_to_spec.rb +3 -3
- data/spec/unit/rspec/matchers/be_predicate_spec.rb +3 -3
- data/spec/unit/rspec/matchers/contain_exactly_spec.rb +1 -1
- data/spec/unit/rspec/matchers/have_attributes_spec.rb +1 -1
- data/spec/unit/rspec/matchers/have_predicate_spec.rb +2 -2
- data/spec/unit/rspec/matchers/include_spec.rb +2 -2
- data/spec/unit/rspec/matchers/match_array_spec.rb +2 -2
- data/spec/unit/rspec/matchers/raise_error_spec.rb +43 -11
- data/spec/unit/rspec/matchers/respond_to_spec.rb +23 -16
- data/spec/unit/rspec/object_inspection/rspec_matcher_spec.rb +91 -0
- data/spec/unit/rspec/object_inspection_spec.rb +351 -326
- data/spec/unit/super_diff_spec.rb +1594 -1437
- data/spec/unit/tiered_lines_elider_spec.rb +3508 -3536
- data/spec/unit/tiered_lines_formatter_spec.rb +54 -116
- data/super_diff.gemspec +13 -12
- metadata +88 -75
- data/lib/super_diff/errors/no_diff_formatter_available_error.rb +0 -21
- data/lib/super_diff/errors/no_operational_sequencer_available_error.rb +0 -22
- data/spec/tmp/warnings_logger/all_warnings.txt +0 -2
@@ -1,47 +1,48 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
|
-
RSpec.describe "Integration with RSpec's #match_array matcher",
|
3
|
+
RSpec.describe "Integration with RSpec's #match_array matcher",
|
4
|
+
type: :integration do
|
4
5
|
context "when a few number of values are given" do
|
5
6
|
it "produces the correct failure message when used in the positive" do
|
6
7
|
as_both_colored_and_uncolored do |color_enabled|
|
7
8
|
snippet = <<~TEST.strip
|
9
|
+
actual = ["Marty", "Jennifer", "Doc"]
|
8
10
|
expected = ["Einie", "Marty"]
|
9
|
-
actual = ["Marty", "Jennifer", "Doc"]
|
10
11
|
expect(actual).to match_array(expected)
|
11
12
|
TEST
|
12
|
-
program = make_plain_test_program(
|
13
|
-
snippet,
|
14
|
-
color_enabled: color_enabled,
|
15
|
-
)
|
13
|
+
program = make_plain_test_program(snippet, color_enabled: color_enabled)
|
16
14
|
|
17
|
-
expected_output =
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
15
|
+
expected_output =
|
16
|
+
build_expected_output(
|
17
|
+
color_enabled: color_enabled,
|
18
|
+
snippet: "expect(actual).to match_array(expected)",
|
19
|
+
expectation:
|
20
|
+
proc do
|
21
|
+
line do
|
22
|
+
plain "Expected "
|
23
|
+
actual %|["Marty", "Jennifer", "Doc"]|
|
24
|
+
plain " to match array with "
|
25
|
+
expected %|"Einie"|
|
26
|
+
plain " and "
|
27
|
+
expected %|"Marty"|
|
28
|
+
plain "."
|
29
|
+
end
|
30
|
+
end,
|
31
|
+
diff:
|
32
|
+
proc do
|
33
|
+
plain_line " ["
|
34
|
+
plain_line %| "Marty",|
|
35
|
+
actual_line %|+ "Jennifer",|
|
36
|
+
actual_line %|+ "Doc",|
|
37
|
+
# expected_line %|- "Einie"| # TODO
|
38
|
+
expected_line %|- "Einie",|
|
39
|
+
plain_line " ]"
|
40
|
+
end
|
41
|
+
)
|
41
42
|
|
42
|
-
expect(program).
|
43
|
-
|
44
|
-
|
43
|
+
expect(program).to produce_output_when_run(expected_output).in_color(
|
44
|
+
color_enabled
|
45
|
+
)
|
45
46
|
end
|
46
47
|
end
|
47
48
|
|
@@ -51,30 +52,29 @@ RSpec.describe "Integration with RSpec's #match_array matcher", type: :integrati
|
|
51
52
|
values = ["Einie", "Marty"]
|
52
53
|
expect(values).not_to match_array(values)
|
53
54
|
TEST
|
54
|
-
program = make_plain_test_program(
|
55
|
-
snippet,
|
56
|
-
color_enabled: color_enabled,
|
57
|
-
)
|
55
|
+
program = make_plain_test_program(snippet, color_enabled: color_enabled)
|
58
56
|
|
59
|
-
expected_output =
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
57
|
+
expected_output =
|
58
|
+
build_expected_output(
|
59
|
+
color_enabled: color_enabled,
|
60
|
+
snippet: "expect(values).not_to match_array(values)",
|
61
|
+
expectation:
|
62
|
+
proc do
|
63
|
+
line do
|
64
|
+
plain "Expected "
|
65
|
+
actual %|["Einie", "Marty"]|
|
66
|
+
plain " not to match array with "
|
67
|
+
expected %|"Einie"|
|
68
|
+
plain " and "
|
69
|
+
expected %|"Marty"|
|
70
|
+
plain "."
|
71
|
+
end
|
72
|
+
end
|
73
|
+
)
|
74
74
|
|
75
|
-
expect(program).
|
76
|
-
|
77
|
-
|
75
|
+
expect(program).to produce_output_when_run(expected_output).in_color(
|
76
|
+
color_enabled
|
77
|
+
)
|
78
78
|
end
|
79
79
|
end
|
80
80
|
end
|
@@ -84,6 +84,12 @@ RSpec.describe "Integration with RSpec's #match_array matcher", type: :integrati
|
|
84
84
|
it "produces the correct failure message when used in the positive" do
|
85
85
|
as_both_colored_and_uncolored do |color_enabled|
|
86
86
|
snippet = <<~TEST.strip
|
87
|
+
actual = [
|
88
|
+
"Marty McFly",
|
89
|
+
"Doc Brown",
|
90
|
+
"Einie",
|
91
|
+
"Lorraine McFly"
|
92
|
+
]
|
87
93
|
expected = [
|
88
94
|
"Doc Brown",
|
89
95
|
"Marty McFly",
|
@@ -91,57 +97,52 @@ RSpec.describe "Integration with RSpec's #match_array matcher", type: :integrati
|
|
91
97
|
"George McFly",
|
92
98
|
"Lorraine McFly"
|
93
99
|
]
|
94
|
-
actual = [
|
95
|
-
"Marty McFly",
|
96
|
-
"Doc Brown",
|
97
|
-
"Einie",
|
98
|
-
"Lorraine McFly"
|
99
|
-
]
|
100
100
|
expect(actual).to match_array(expected)
|
101
101
|
TEST
|
102
|
-
program =
|
103
|
-
snippet,
|
104
|
-
color_enabled: color_enabled,
|
105
|
-
)
|
102
|
+
program =
|
103
|
+
make_plain_test_program(snippet, color_enabled: color_enabled)
|
106
104
|
|
107
|
-
expected_output =
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
105
|
+
expected_output =
|
106
|
+
build_expected_output(
|
107
|
+
color_enabled: color_enabled,
|
108
|
+
snippet: "expect(actual).to match_array(expected)",
|
109
|
+
expectation:
|
110
|
+
proc do
|
111
|
+
line do
|
112
|
+
plain " Expected "
|
113
|
+
actual %|["Marty McFly", "Doc Brown", "Einie", "Lorraine McFly"]|
|
114
|
+
end
|
115
115
|
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
116
|
+
line do
|
117
|
+
plain "to match array with "
|
118
|
+
expected %|"Doc Brown"|
|
119
|
+
plain ", "
|
120
|
+
expected %|"Marty McFly"|
|
121
|
+
plain ", "
|
122
|
+
expected %|"Biff Tannen"|
|
123
|
+
plain ", "
|
124
|
+
expected %|"George McFly"|
|
125
|
+
plain " and "
|
126
|
+
expected %|"Lorraine McFly"|
|
127
|
+
end
|
128
|
+
end,
|
129
|
+
diff:
|
130
|
+
proc do
|
131
|
+
plain_line " ["
|
132
|
+
plain_line %| "Marty McFly",|
|
133
|
+
plain_line %| "Doc Brown",|
|
134
|
+
plain_line %| "Lorraine McFly",|
|
135
|
+
actual_line %|+ "Einie",|
|
136
|
+
expected_line %|- "Biff Tannen",|
|
137
|
+
# expected_line %|- "George McFly"| # TODO
|
138
|
+
expected_line %|- "George McFly",|
|
139
|
+
plain_line " ]"
|
140
|
+
end
|
141
|
+
)
|
141
142
|
|
142
|
-
expect(program).
|
143
|
-
|
144
|
-
|
143
|
+
expect(program).to produce_output_when_run(expected_output).in_color(
|
144
|
+
color_enabled
|
145
|
+
)
|
145
146
|
end
|
146
147
|
end
|
147
148
|
|
@@ -156,37 +157,37 @@ RSpec.describe "Integration with RSpec's #match_array matcher", type: :integrati
|
|
156
157
|
]
|
157
158
|
expect(values).not_to match_array(values)
|
158
159
|
TEST
|
159
|
-
program =
|
160
|
-
snippet,
|
161
|
-
color_enabled: color_enabled,
|
162
|
-
)
|
160
|
+
program =
|
161
|
+
make_plain_test_program(snippet, color_enabled: color_enabled)
|
163
162
|
|
164
|
-
expected_output =
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
163
|
+
expected_output =
|
164
|
+
build_expected_output(
|
165
|
+
color_enabled: color_enabled,
|
166
|
+
snippet: "expect(values).not_to match_array(values)",
|
167
|
+
newline_before_expectation: true,
|
168
|
+
expectation:
|
169
|
+
proc do
|
170
|
+
line do
|
171
|
+
plain " Expected "
|
172
|
+
actual %|["Marty McFly", "Doc Brown", "Einie", "Lorraine McFly"]|
|
173
|
+
end
|
173
174
|
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
175
|
+
line do
|
176
|
+
plain "not to match array with "
|
177
|
+
expected %|"Marty McFly"|
|
178
|
+
plain ", "
|
179
|
+
expected %|"Doc Brown"|
|
180
|
+
plain ", "
|
181
|
+
expected %|"Einie"|
|
182
|
+
plain " and "
|
183
|
+
expected %|"Lorraine McFly"|
|
184
|
+
end
|
185
|
+
end
|
186
|
+
)
|
186
187
|
|
187
|
-
expect(program).
|
188
|
-
|
189
|
-
|
188
|
+
expect(program).to produce_output_when_run(expected_output).in_color(
|
189
|
+
color_enabled
|
190
|
+
)
|
190
191
|
end
|
191
192
|
end
|
192
193
|
end
|
@@ -195,6 +196,12 @@ RSpec.describe "Integration with RSpec's #match_array matcher", type: :integrati
|
|
195
196
|
it "produces the correct failure message when used in the positive" do
|
196
197
|
as_both_colored_and_uncolored do |color_enabled|
|
197
198
|
snippet = <<~TEST
|
199
|
+
actual = [
|
200
|
+
"Marty McFly",
|
201
|
+
"Doc Brown",
|
202
|
+
"Einie",
|
203
|
+
"Lorraine McFly"
|
204
|
+
]
|
198
205
|
expected = [
|
199
206
|
/ Brown$/,
|
200
207
|
"Marty McFly",
|
@@ -202,58 +209,53 @@ RSpec.describe "Integration with RSpec's #match_array matcher", type: :integrati
|
|
202
209
|
/Georg McFly/,
|
203
210
|
/Lorrain McFly/
|
204
211
|
]
|
205
|
-
actual = [
|
206
|
-
"Marty McFly",
|
207
|
-
"Doc Brown",
|
208
|
-
"Einie",
|
209
|
-
"Lorraine McFly"
|
210
|
-
]
|
211
212
|
expect(actual).to match_array(expected)
|
212
213
|
TEST
|
213
|
-
program =
|
214
|
-
snippet,
|
215
|
-
color_enabled: color_enabled,
|
216
|
-
)
|
214
|
+
program =
|
215
|
+
make_plain_test_program(snippet, color_enabled: color_enabled)
|
217
216
|
|
218
|
-
expected_output =
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
217
|
+
expected_output =
|
218
|
+
build_expected_output(
|
219
|
+
color_enabled: color_enabled,
|
220
|
+
snippet: "expect(actual).to match_array(expected)",
|
221
|
+
expectation:
|
222
|
+
proc do
|
223
|
+
line do
|
224
|
+
plain " Expected "
|
225
|
+
actual %|["Marty McFly", "Doc Brown", "Einie", "Lorraine McFly"]|
|
226
|
+
end
|
226
227
|
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
228
|
+
line do
|
229
|
+
plain "to match array with "
|
230
|
+
expected "/ Brown$/"
|
231
|
+
plain ", "
|
232
|
+
expected %|"Marty McFly"|
|
233
|
+
plain ", "
|
234
|
+
expected %|"Biff Tannen"|
|
235
|
+
plain ", "
|
236
|
+
expected "/Georg McFly/"
|
237
|
+
plain " and "
|
238
|
+
expected "/Lorrain McFly/"
|
239
|
+
end
|
240
|
+
end,
|
241
|
+
diff:
|
242
|
+
proc do
|
243
|
+
plain_line " ["
|
244
|
+
plain_line %| "Marty McFly",|
|
245
|
+
plain_line %| "Doc Brown",|
|
246
|
+
actual_line %|+ "Einie",|
|
247
|
+
actual_line %|+ "Lorraine McFly",|
|
248
|
+
expected_line %|- "Biff Tannen",|
|
249
|
+
expected_line "- /Georg McFly/,"
|
250
|
+
# expected_line %|- /Lorrain McFly/| # TODO
|
251
|
+
expected_line "- /Lorrain McFly/,"
|
252
|
+
plain_line " ]"
|
253
|
+
end
|
254
|
+
)
|
253
255
|
|
254
|
-
expect(program).
|
255
|
-
|
256
|
-
|
256
|
+
expect(program).to produce_output_when_run(expected_output).in_color(
|
257
|
+
color_enabled
|
258
|
+
)
|
257
259
|
end
|
258
260
|
end
|
259
261
|
|
@@ -269,152 +271,153 @@ RSpec.describe "Integration with RSpec's #match_array matcher", type: :integrati
|
|
269
271
|
]
|
270
272
|
expect(values).not_to match_array(values)
|
271
273
|
TEST
|
272
|
-
program =
|
273
|
-
snippet,
|
274
|
-
color_enabled: color_enabled,
|
275
|
-
)
|
274
|
+
program =
|
275
|
+
make_plain_test_program(snippet, color_enabled: color_enabled)
|
276
276
|
|
277
|
-
expected_output =
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
277
|
+
expected_output =
|
278
|
+
build_expected_output(
|
279
|
+
color_enabled: color_enabled,
|
280
|
+
snippet: "expect(values).not_to match_array(values)",
|
281
|
+
newline_before_expectation: true,
|
282
|
+
expectation:
|
283
|
+
proc do
|
284
|
+
line do
|
285
|
+
plain " Expected "
|
286
|
+
# rubocop:disable Metrics/LineLength
|
287
|
+
actual %|[/ Brown$/, "Marty McFly", "Biff Tannen", /Georg McFly/, /Lorrain McFly/]|
|
288
|
+
# rubocop:enable Metrics/LineLength
|
289
|
+
end
|
288
290
|
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
291
|
+
line do
|
292
|
+
plain "not to match array with "
|
293
|
+
expected "/ Brown$/"
|
294
|
+
plain ", "
|
295
|
+
expected %|"Marty McFly"|
|
296
|
+
plain ", "
|
297
|
+
expected %|"Biff Tannen"|
|
298
|
+
plain ", "
|
299
|
+
expected "/Georg McFly/"
|
300
|
+
plain " and "
|
301
|
+
expected "/Lorrain McFly/"
|
302
|
+
end
|
303
|
+
end
|
304
|
+
)
|
303
305
|
|
304
|
-
expect(program).
|
305
|
-
|
306
|
-
|
306
|
+
expect(program).to produce_output_when_run(expected_output).in_color(
|
307
|
+
color_enabled
|
308
|
+
)
|
307
309
|
end
|
308
310
|
end
|
309
311
|
end
|
310
312
|
|
311
|
-
context "and some of them are
|
313
|
+
context "and some of them are RSpec matchers" do
|
312
314
|
it "produces the correct failure message" do
|
313
315
|
as_both_colored_and_uncolored do |color_enabled|
|
314
316
|
snippet = <<~TEST.strip
|
317
|
+
actual = [
|
318
|
+
{ foo: "bar" },
|
319
|
+
double(baz: "qux"),
|
320
|
+
{ blargh: "riddle" }
|
321
|
+
]
|
315
322
|
expected = [
|
316
323
|
a_hash_including(foo: "bar"),
|
317
324
|
a_collection_containing_exactly("zing"),
|
318
325
|
an_object_having_attributes(baz: "qux"),
|
319
326
|
]
|
320
|
-
actual = [
|
321
|
-
{ foo: "bar" },
|
322
|
-
double(baz: "qux"),
|
323
|
-
{ blargh: "riddle" }
|
324
|
-
]
|
325
327
|
expect(actual).to match_array(expected)
|
326
328
|
TEST
|
327
|
-
program =
|
328
|
-
snippet,
|
329
|
-
color_enabled: color_enabled,
|
330
|
-
)
|
329
|
+
program =
|
330
|
+
make_plain_test_program(snippet, color_enabled: color_enabled)
|
331
331
|
|
332
|
-
expected_output =
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
332
|
+
expected_output =
|
333
|
+
build_expected_output(
|
334
|
+
color_enabled: color_enabled,
|
335
|
+
snippet: "expect(actual).to match_array(expected)",
|
336
|
+
expectation:
|
337
|
+
proc do
|
338
|
+
line do
|
339
|
+
plain " Expected "
|
340
|
+
# rubocop:disable Metrics/LineLength
|
341
|
+
actual %|[{ foo: "bar" }, #<Double (anonymous) baz: "qux">, { blargh: "riddle" }]|
|
342
|
+
# rubocop:enable Metrics/LineLength
|
343
|
+
end
|
342
344
|
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
345
|
+
line do
|
346
|
+
plain "to match array with "
|
347
|
+
expected %|#<a hash including (foo: "bar")>|
|
348
|
+
plain ", "
|
349
|
+
expected %|#<a collection containing exactly ("zing")>|
|
350
|
+
plain " and "
|
351
|
+
expected %|#<an object having attributes (baz: "qux")>|
|
352
|
+
end
|
353
|
+
end,
|
354
|
+
diff:
|
355
|
+
proc do
|
356
|
+
plain_line " ["
|
357
|
+
plain_line " {"
|
358
|
+
plain_line %| foo: "bar"|
|
359
|
+
plain_line " },"
|
360
|
+
plain_line " #<Double (anonymous) {"
|
361
|
+
plain_line %| baz: "qux"|
|
362
|
+
plain_line " }>,"
|
363
|
+
actual_line "+ {"
|
364
|
+
actual_line %|+ blargh: "riddle"|
|
365
|
+
actual_line "+ },"
|
366
|
+
expected_line "- #<a collection containing exactly ("
|
367
|
+
expected_line %|- "zing"|
|
368
|
+
# expected_line %|- )>| # TODO
|
369
|
+
expected_line "- )>,"
|
370
|
+
plain_line " ]"
|
371
|
+
end
|
372
|
+
)
|
370
373
|
|
371
|
-
expect(program).
|
372
|
-
|
373
|
-
|
374
|
+
expect(program).to produce_output_when_run(expected_output).in_color(
|
375
|
+
color_enabled
|
376
|
+
)
|
374
377
|
end
|
375
378
|
end
|
376
379
|
end
|
377
380
|
end
|
378
381
|
|
379
|
-
context "when the input value is a
|
380
|
-
it "produces the correct failure message
|
382
|
+
context "when the input value is not an array, and especially not a value that could be turned into one" do
|
383
|
+
it "produces the correct failure message, as though an array had been given" do
|
381
384
|
as_both_colored_and_uncolored do |color_enabled|
|
382
385
|
snippet = <<~TEST.strip
|
383
|
-
|
384
|
-
|
386
|
+
actual = [:marty, :jennifer, :doc]
|
387
|
+
expected = :einie
|
385
388
|
expect(actual).to match_array(expected)
|
386
389
|
TEST
|
387
|
-
program = make_plain_test_program(
|
388
|
-
snippet,
|
389
|
-
color_enabled: color_enabled,
|
390
|
-
)
|
390
|
+
program = make_plain_test_program(snippet, color_enabled: color_enabled)
|
391
391
|
|
392
|
-
expected_output =
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
392
|
+
expected_output =
|
393
|
+
build_expected_output(
|
394
|
+
color_enabled: color_enabled,
|
395
|
+
snippet: "expect(actual).to match_array(expected)",
|
396
|
+
expectation:
|
397
|
+
proc do
|
398
|
+
line do
|
399
|
+
plain "Expected "
|
400
|
+
actual "[:marty, :jennifer, :doc]"
|
401
|
+
plain " to match array with "
|
402
|
+
expected ":einie"
|
403
|
+
plain "."
|
404
|
+
end
|
405
|
+
end,
|
406
|
+
diff:
|
407
|
+
proc do
|
408
|
+
plain_line " ["
|
409
|
+
actual_line "+ :marty,"
|
410
|
+
actual_line "+ :jennifer,"
|
411
|
+
actual_line "+ :doc,"
|
412
|
+
# expected_line %|- :einie| # TODO
|
413
|
+
expected_line "- :einie,"
|
414
|
+
plain_line " ]"
|
415
|
+
end
|
416
|
+
)
|
414
417
|
|
415
|
-
expect(program).
|
416
|
-
|
417
|
-
|
418
|
+
expect(program).to produce_output_when_run(expected_output).in_color(
|
419
|
+
color_enabled
|
420
|
+
)
|
418
421
|
end
|
419
422
|
end
|
420
423
|
end
|