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 #contain_exactly matcher",
|
3
|
+
RSpec.describe "Integration with RSpec's #contain_exactly 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 contain_exactly(*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 contain_exactly(*expected)",
|
19
|
+
expectation:
|
20
|
+
proc do
|
21
|
+
line do
|
22
|
+
plain "Expected "
|
23
|
+
actual %|["Marty", "Jennifer", "Doc"]|
|
24
|
+
plain " to contain exactly "
|
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 #contain_exactly matcher", type: :integ
|
|
51
52
|
values = ["Einie", "Marty"]
|
52
53
|
expect(values).not_to contain_exactly(*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 contain_exactly(*values)",
|
61
|
+
expectation:
|
62
|
+
proc do
|
63
|
+
line do
|
64
|
+
plain "Expected "
|
65
|
+
actual %|["Einie", "Marty"]|
|
66
|
+
plain " not to contain exactly "
|
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 #contain_exactly matcher", type: :integ
|
|
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 #contain_exactly matcher", type: :integ
|
|
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 contain_exactly(*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 contain_exactly(*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 contain exactly "
|
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 #contain_exactly matcher", type: :integ
|
|
156
157
|
]
|
157
158
|
expect(values).not_to contain_exactly(*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 contain_exactly(*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 contain exactly "
|
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 #contain_exactly matcher", type: :integ
|
|
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 #contain_exactly matcher", type: :integ
|
|
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 contain_exactly(*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 contain_exactly(*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 contain exactly "
|
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,104 +271,105 @@ RSpec.describe "Integration with RSpec's #contain_exactly matcher", type: :integ
|
|
269
271
|
]
|
270
272
|
expect(values).not_to contain_exactly(*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
|
-
|
277
|
+
expected_output =
|
278
|
+
build_expected_output(
|
279
|
+
color_enabled: color_enabled,
|
280
|
+
snippet: "expect(values).not_to contain_exactly(*values)",
|
281
|
+
newline_before_expectation: true,
|
282
|
+
expectation:
|
283
|
+
proc do
|
284
|
+
line do
|
285
|
+
plain " Expected "
|
286
|
+
actual %|[/ Brown$/, "Marty McFly", "Biff Tannen", /Georg McFly/, /Lorrain McFly/]|
|
287
|
+
end
|
286
288
|
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
289
|
+
line do
|
290
|
+
plain "not to contain exactly "
|
291
|
+
expected "/ Brown$/"
|
292
|
+
plain ", "
|
293
|
+
expected %|"Marty McFly"|
|
294
|
+
plain ", "
|
295
|
+
expected %|"Biff Tannen"|
|
296
|
+
plain ", "
|
297
|
+
expected "/Georg McFly/"
|
298
|
+
plain " and "
|
299
|
+
expected "/Lorrain McFly/"
|
300
|
+
end
|
301
|
+
end
|
302
|
+
)
|
301
303
|
|
302
|
-
expect(program).
|
303
|
-
|
304
|
-
|
304
|
+
expect(program).to produce_output_when_run(expected_output).in_color(
|
305
|
+
color_enabled
|
306
|
+
)
|
305
307
|
end
|
306
308
|
end
|
307
309
|
end
|
308
310
|
|
309
|
-
context "and some of them are
|
311
|
+
context "and some of them are RSpec matchers" do
|
310
312
|
it "produces the correct failure message" do
|
311
313
|
as_both_colored_and_uncolored do |color_enabled|
|
312
314
|
snippet = <<~TEST.strip
|
315
|
+
actual = [
|
316
|
+
{ foo: "bar" },
|
317
|
+
double(baz: "qux"),
|
318
|
+
{ blargh: "riddle" }
|
319
|
+
]
|
313
320
|
expected = [
|
314
321
|
a_hash_including(foo: "bar"),
|
315
322
|
a_collection_containing_exactly("zing"),
|
316
323
|
an_object_having_attributes(baz: "qux"),
|
317
324
|
]
|
318
|
-
actual = [
|
319
|
-
{ foo: "bar" },
|
320
|
-
double(baz: "qux"),
|
321
|
-
{ blargh: "riddle" }
|
322
|
-
]
|
323
325
|
expect(actual).to contain_exactly(*expected)
|
324
326
|
TEST
|
325
|
-
program =
|
326
|
-
snippet,
|
327
|
-
color_enabled: color_enabled,
|
328
|
-
)
|
327
|
+
program =
|
328
|
+
make_plain_test_program(snippet, color_enabled: color_enabled)
|
329
329
|
|
330
|
-
expected_output =
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
330
|
+
expected_output =
|
331
|
+
build_expected_output(
|
332
|
+
color_enabled: color_enabled,
|
333
|
+
snippet: "expect(actual).to contain_exactly(*expected)",
|
334
|
+
expectation:
|
335
|
+
proc do
|
336
|
+
line do
|
337
|
+
plain " Expected "
|
338
|
+
actual %|[{ foo: "bar" }, #<Double (anonymous) baz: "qux">, { blargh: "riddle" }]|
|
339
|
+
end
|
338
340
|
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
341
|
+
line do
|
342
|
+
plain "to contain exactly "
|
343
|
+
expected %|#<a hash including (foo: "bar")>|
|
344
|
+
plain ", "
|
345
|
+
expected %|#<a collection containing exactly ("zing")>|
|
346
|
+
plain " and "
|
347
|
+
expected %|#<an object having attributes (baz: "qux")>|
|
348
|
+
end
|
349
|
+
end,
|
350
|
+
diff:
|
351
|
+
proc do
|
352
|
+
plain_line " ["
|
353
|
+
plain_line " {"
|
354
|
+
plain_line %| foo: "bar"|
|
355
|
+
plain_line " },"
|
356
|
+
plain_line " #<Double (anonymous) {"
|
357
|
+
plain_line %| baz: "qux"|
|
358
|
+
plain_line " }>,"
|
359
|
+
actual_line "+ {"
|
360
|
+
actual_line %|+ blargh: "riddle"|
|
361
|
+
actual_line "+ },"
|
362
|
+
expected_line "- #<a collection containing exactly ("
|
363
|
+
expected_line %|- "zing"|
|
364
|
+
# expected_line %|- )>| # TODO
|
365
|
+
expected_line "- )>,"
|
366
|
+
plain_line " ]"
|
367
|
+
end
|
368
|
+
)
|
366
369
|
|
367
|
-
expect(program).
|
368
|
-
|
369
|
-
|
370
|
+
expect(program).to produce_output_when_run(expected_output).in_color(
|
371
|
+
color_enabled
|
372
|
+
)
|
370
373
|
end
|
371
374
|
end
|
372
375
|
end
|