super_diff 0.13.0 → 0.15.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 +1 -1
- data/lib/super_diff/active_record/differs/active_record_relation.rb +2 -0
- data/lib/super_diff/active_record/differs.rb +3 -1
- data/lib/super_diff/active_record/inspection_tree_builders/active_record_model.rb +7 -5
- data/lib/super_diff/active_record/inspection_tree_builders/active_record_relation.rb +12 -10
- data/lib/super_diff/active_record/inspection_tree_builders.rb +4 -2
- data/lib/super_diff/active_record/monkey_patches.rb +4 -2
- data/lib/super_diff/active_record/object_inspection.rb +6 -4
- data/lib/super_diff/active_record/operation_tree_builders/active_record_model.rb +3 -1
- data/lib/super_diff/active_record/operation_tree_builders/active_record_relation.rb +3 -1
- data/lib/super_diff/active_record/operation_tree_builders.rb +4 -2
- data/lib/super_diff/active_record/operation_tree_flatteners/active_record_relation.rb +4 -2
- data/lib/super_diff/active_record/operation_tree_flatteners.rb +3 -1
- data/lib/super_diff/active_record/operation_trees/active_record_relation.rb +2 -0
- data/lib/super_diff/active_record/operation_trees.rb +3 -1
- data/lib/super_diff/active_record.rb +10 -8
- data/lib/super_diff/active_support/differs/hash_with_indifferent_access.rb +2 -0
- data/lib/super_diff/active_support/differs.rb +3 -1
- data/lib/super_diff/active_support/inspection_tree_builders/hash_with_indifferent_access.rb +16 -14
- data/lib/super_diff/active_support/inspection_tree_builders/ordered_options.rb +16 -14
- data/lib/super_diff/active_support/inspection_tree_builders.rb +4 -2
- data/lib/super_diff/active_support/object_inspection.rb +6 -4
- data/lib/super_diff/active_support/operation_tree_builders/hash_with_indifferent_access.rb +6 -4
- data/lib/super_diff/active_support/operation_tree_builders.rb +3 -1
- data/lib/super_diff/active_support/operation_tree_flatteners/hash_with_indifferent_access.rb +4 -2
- data/lib/super_diff/active_support/operation_tree_flatteners.rb +3 -1
- data/lib/super_diff/active_support/operation_trees/hash_with_indifferent_access.rb +2 -0
- data/lib/super_diff/active_support/operation_trees.rb +3 -1
- data/lib/super_diff/active_support.rb +8 -6
- data/lib/super_diff/basic/diff_formatters/collection.rb +18 -18
- data/lib/super_diff/basic/diff_formatters/multiline_string.rb +2 -0
- data/lib/super_diff/basic/diff_formatters.rb +4 -2
- data/lib/super_diff/basic/differs/array.rb +2 -0
- data/lib/super_diff/basic/differs/custom_object.rb +3 -1
- data/lib/super_diff/basic/differs/date_like.rb +2 -0
- data/lib/super_diff/basic/differs/default_object.rb +3 -1
- data/lib/super_diff/basic/differs/hash.rb +2 -0
- data/lib/super_diff/basic/differs/multiline_string.rb +2 -0
- data/lib/super_diff/basic/differs/time_like.rb +2 -0
- data/lib/super_diff/basic/differs.rb +11 -9
- data/lib/super_diff/basic/inspection_tree_builders/array.rb +5 -3
- data/lib/super_diff/basic/inspection_tree_builders/custom_object.rb +5 -3
- data/lib/super_diff/basic/inspection_tree_builders/data_object.rb +6 -4
- data/lib/super_diff/basic/inspection_tree_builders/date_like.rb +7 -5
- data/lib/super_diff/basic/inspection_tree_builders/default_object.rb +7 -5
- data/lib/super_diff/basic/inspection_tree_builders/hash.rb +7 -5
- data/lib/super_diff/basic/inspection_tree_builders/primitive.rb +2 -0
- data/lib/super_diff/basic/inspection_tree_builders/range_object.rb +19 -0
- data/lib/super_diff/basic/inspection_tree_builders/time_like.rb +8 -8
- data/lib/super_diff/basic/inspection_tree_builders.rb +15 -9
- data/lib/super_diff/basic/operation_tree_builders/array.rb +6 -4
- data/lib/super_diff/basic/operation_tree_builders/custom_object.rb +3 -1
- data/lib/super_diff/basic/operation_tree_builders/data_object.rb +4 -2
- data/lib/super_diff/basic/operation_tree_builders/date_like.rb +2 -0
- data/lib/super_diff/basic/operation_tree_builders/default_object.rb +32 -31
- data/lib/super_diff/basic/operation_tree_builders/hash.rb +49 -46
- data/lib/super_diff/basic/operation_tree_builders/multiline_string.rb +5 -3
- data/lib/super_diff/basic/operation_tree_builders/time_like.rb +5 -3
- data/lib/super_diff/basic/operation_tree_builders.rb +12 -10
- data/lib/super_diff/basic/operation_tree_flatteners/array.rb +4 -2
- data/lib/super_diff/basic/operation_tree_flatteners/collection.rb +11 -11
- data/lib/super_diff/basic/operation_tree_flatteners/custom_object.rb +5 -3
- data/lib/super_diff/basic/operation_tree_flatteners/default_object.rb +6 -5
- data/lib/super_diff/basic/operation_tree_flatteners/hash.rb +5 -3
- data/lib/super_diff/basic/operation_tree_flatteners/multiline_string.rb +3 -1
- data/lib/super_diff/basic/operation_tree_flatteners.rb +8 -6
- data/lib/super_diff/basic/operation_trees/array.rb +2 -0
- data/lib/super_diff/basic/operation_trees/custom_object.rb +2 -0
- data/lib/super_diff/basic/operation_trees/default_object.rb +6 -4
- data/lib/super_diff/basic/operation_trees/hash.rb +2 -0
- data/lib/super_diff/basic/operation_trees/multiline_string.rb +3 -1
- data/lib/super_diff/basic/operation_trees.rb +9 -7
- data/lib/super_diff/basic.rb +9 -6
- data/lib/super_diff/core/abstract_differ.rb +2 -0
- data/lib/super_diff/core/abstract_inspection_tree_builder.rb +2 -0
- data/lib/super_diff/core/abstract_operation_tree.rb +4 -2
- data/lib/super_diff/core/abstract_operation_tree_builder.rb +15 -18
- data/lib/super_diff/core/abstract_operation_tree_flattener.rb +5 -3
- data/lib/super_diff/core/binary_operation.rb +3 -1
- data/lib/super_diff/core/colorized_document_extensions.rb +2 -0
- data/lib/super_diff/core/configuration.rb +14 -38
- data/lib/super_diff/core/differ_dispatcher.rb +4 -2
- data/lib/super_diff/core/gem_version.rb +2 -0
- data/lib/super_diff/core/helpers.rb +13 -11
- data/lib/super_diff/core/implementation_checks.rb +6 -2
- data/lib/super_diff/core/inspection_tree.rb +38 -38
- data/lib/super_diff/core/inspection_tree_builder_dispatcher.rb +5 -5
- data/lib/super_diff/core/inspection_tree_nodes/as_lines_when_rendering_to_lines.rb +3 -1
- data/lib/super_diff/core/inspection_tree_nodes/as_prefix_when_rendering_to_lines.rb +2 -0
- data/lib/super_diff/core/inspection_tree_nodes/as_prelude_when_rendering_to_lines.rb +2 -0
- data/lib/super_diff/core/inspection_tree_nodes/as_single_line.rb +2 -0
- data/lib/super_diff/core/inspection_tree_nodes/base.rb +9 -9
- data/lib/super_diff/core/inspection_tree_nodes/inspection.rb +2 -0
- data/lib/super_diff/core/inspection_tree_nodes/nesting.rb +2 -0
- data/lib/super_diff/core/inspection_tree_nodes/only_when.rb +5 -1
- data/lib/super_diff/core/inspection_tree_nodes/text.rb +2 -0
- data/lib/super_diff/core/inspection_tree_nodes/when_empty.rb +3 -1
- data/lib/super_diff/core/inspection_tree_nodes/when_non_empty.rb +3 -1
- data/lib/super_diff/core/inspection_tree_nodes/when_rendering_to_lines.rb +3 -1
- data/lib/super_diff/core/inspection_tree_nodes/when_rendering_to_string.rb +2 -0
- data/lib/super_diff/core/inspection_tree_nodes.rb +16 -14
- data/lib/super_diff/core/line.rb +9 -7
- data/lib/super_diff/core/no_differ_available_error.rb +7 -5
- data/lib/super_diff/core/no_inspection_tree_builder_available_error.rb +5 -3
- data/lib/super_diff/core/no_operation_tree_available_error.rb +4 -2
- data/lib/super_diff/core/no_operation_tree_builder_available_error.rb +7 -5
- data/lib/super_diff/core/operation_tree_builder_dispatcher.rb +3 -3
- data/lib/super_diff/core/operation_tree_finder.rb +8 -8
- data/lib/super_diff/core/prefix_for_next_inspection_tree_node.rb +2 -0
- data/lib/super_diff/core/prelude_for_next_inspection_tree_node.rb +2 -0
- data/lib/super_diff/core/recursion_guard.rb +6 -4
- data/lib/super_diff/core/tiered_lines.rb +2 -0
- data/lib/super_diff/core/tiered_lines_elider.rb +53 -54
- data/lib/super_diff/core/tiered_lines_formatter.rb +6 -4
- data/lib/super_diff/core/unary_operation.rb +2 -0
- data/lib/super_diff/core.rb +31 -29
- data/lib/super_diff/csi/bold_sequence.rb +2 -0
- data/lib/super_diff/csi/color.rb +4 -4
- data/lib/super_diff/csi/color_sequence_block.rb +3 -1
- data/lib/super_diff/csi/colorized_document.rb +7 -9
- data/lib/super_diff/csi/document.rb +15 -18
- data/lib/super_diff/csi/eight_bit_color.rb +32 -37
- data/lib/super_diff/csi/four_bit_color.rb +12 -9
- data/lib/super_diff/csi/reset_sequence.rb +2 -0
- data/lib/super_diff/csi/twenty_four_bit_color.rb +22 -21
- data/lib/super_diff/csi/uncolorized_document.rb +2 -0
- data/lib/super_diff/csi.rb +12 -10
- data/lib/super_diff/differs.rb +6 -4
- data/lib/super_diff/equality_matchers/array.rb +18 -16
- data/lib/super_diff/equality_matchers/base.rb +6 -4
- data/lib/super_diff/equality_matchers/default.rb +5 -3
- data/lib/super_diff/equality_matchers/defaults.rb +2 -0
- data/lib/super_diff/equality_matchers/hash.rb +18 -16
- data/lib/super_diff/equality_matchers/main.rb +3 -1
- data/lib/super_diff/equality_matchers/multiline_string.rb +18 -16
- data/lib/super_diff/equality_matchers/primitive.rb +15 -13
- data/lib/super_diff/equality_matchers/singleline_string.rb +16 -14
- data/lib/super_diff/equality_matchers.rb +11 -9
- data/lib/super_diff/errors.rb +4 -2
- data/lib/super_diff/object_inspection.rb +17 -15
- data/lib/super_diff/operation_tree_builders.rb +6 -4
- data/lib/super_diff/operation_tree_flatteners.rb +6 -4
- data/lib/super_diff/operation_trees.rb +6 -4
- data/lib/super_diff/operations.rb +4 -2
- data/lib/super_diff/rails.rb +4 -2
- data/lib/super_diff/rspec/augmented_matcher.rb +3 -1
- data/lib/super_diff/rspec/differ.rb +16 -7
- data/lib/super_diff/rspec/differs/collection_containing_exactly.rb +2 -0
- data/lib/super_diff/rspec/differs/collection_including.rb +2 -0
- data/lib/super_diff/rspec/differs/hash_including.rb +2 -0
- data/lib/super_diff/rspec/differs/object_having_attributes.rb +2 -0
- data/lib/super_diff/rspec/differs.rb +6 -4
- data/lib/super_diff/rspec/inspection_tree_builders/collection_containing_exactly.rb +12 -10
- data/lib/super_diff/rspec/inspection_tree_builders/collection_including.rb +10 -8
- data/lib/super_diff/rspec/inspection_tree_builders/double.rb +20 -18
- data/lib/super_diff/rspec/inspection_tree_builders/generic_describable_matcher.rb +2 -0
- data/lib/super_diff/rspec/inspection_tree_builders/hash_including.rb +10 -8
- data/lib/super_diff/rspec/inspection_tree_builders/instance_of.rb +2 -0
- data/lib/super_diff/rspec/inspection_tree_builders/kind_of.rb +2 -0
- data/lib/super_diff/rspec/inspection_tree_builders/object_having_attributes.rb +12 -10
- data/lib/super_diff/rspec/inspection_tree_builders/primitive.rb +2 -0
- data/lib/super_diff/rspec/inspection_tree_builders/value_within.rb +6 -4
- data/lib/super_diff/rspec/inspection_tree_builders.rb +12 -10
- data/lib/super_diff/rspec/matcher_text_builders/base.rb +12 -12
- data/lib/super_diff/rspec/matcher_text_builders/be_predicate.rb +19 -17
- data/lib/super_diff/rspec/matcher_text_builders/contain_exactly.rb +3 -1
- data/lib/super_diff/rspec/matcher_text_builders/have_predicate.rb +7 -5
- data/lib/super_diff/rspec/matcher_text_builders/match.rb +6 -4
- data/lib/super_diff/rspec/matcher_text_builders/raise_error.rb +5 -3
- data/lib/super_diff/rspec/matcher_text_builders/respond_to.rb +20 -18
- data/lib/super_diff/rspec/matcher_text_builders.rb +9 -7
- data/lib/super_diff/rspec/matcher_text_template.rb +34 -39
- data/lib/super_diff/rspec/monkey_patches.rb +129 -56
- data/lib/super_diff/rspec/object_inspection.rb +7 -5
- data/lib/super_diff/rspec/operation_tree_builders/collection_containing_exactly.rb +4 -4
- data/lib/super_diff/rspec/operation_tree_builders/collection_including.rb +2 -0
- data/lib/super_diff/rspec/operation_tree_builders/hash_including.rb +2 -0
- data/lib/super_diff/rspec/operation_tree_builders/object_having_attributes.rb +2 -0
- data/lib/super_diff/rspec/operation_tree_builders.rb +6 -4
- data/lib/super_diff/rspec-rails.rb +4 -2
- data/lib/super_diff/rspec.rb +27 -14
- data/lib/super_diff/version.rb +3 -1
- data/lib/super_diff.rb +24 -26
- data/super_diff.gemspec +20 -19
- metadata +6 -185
- data/spec/examples.txt +0 -450
- data/spec/integration/rails/active_record_spec.rb +0 -21
- data/spec/integration/rails/active_support_spec.rb +0 -19
- data/spec/integration/rails/engines_spec.rb +0 -25
- data/spec/integration/rails/hash_with_indifferent_access_spec.rb +0 -21
- data/spec/integration/rspec/be_falsey_matcher_spec.rb +0 -58
- data/spec/integration/rspec/be_matcher_spec.rb +0 -605
- data/spec/integration/rspec/be_nil_matcher_spec.rb +0 -57
- data/spec/integration/rspec/be_predicate_matcher_spec.rb +0 -615
- data/spec/integration/rspec/be_truthy_matcher_spec.rb +0 -62
- data/spec/integration/rspec/contain_exactly_matcher_spec.rb +0 -377
- data/spec/integration/rspec/eq_matcher_spec.rb +0 -1066
- data/spec/integration/rspec/generic_describable_matchers_spec.rb +0 -177
- data/spec/integration/rspec/have_attributes_matcher_spec.rb +0 -443
- data/spec/integration/rspec/have_predicate_matcher_spec.rb +0 -478
- data/spec/integration/rspec/include_matcher_spec.rb +0 -452
- data/spec/integration/rspec/magic_metadata_spec.rb +0 -51
- data/spec/integration/rspec/match_array_matcher_spec.rb +0 -424
- data/spec/integration/rspec/match_matcher_spec.rb +0 -1359
- data/spec/integration/rspec/raise_error_matcher_spec.rb +0 -1488
- data/spec/integration/rspec/respond_to_matcher_spec.rb +0 -999
- data/spec/integration/rspec/third_party_matcher_spec.rb +0 -245
- data/spec/integration/rspec/unhandled_errors_spec.rb +0 -150
- data/spec/spec_helper.rb +0 -91
- data/spec/support/colorizer.rb +0 -9
- data/spec/support/command_runner.rb +0 -253
- data/spec/support/helpers.rb +0 -21
- data/spec/support/integration/helpers.rb +0 -124
- data/spec/support/integration/matchers/produce_output_when_run_matcher.rb +0 -104
- data/spec/support/integration/matchers.rb +0 -177
- data/spec/support/integration/test_programs/base.rb +0 -143
- data/spec/support/integration/test_programs/plain.rb +0 -19
- data/spec/support/integration/test_programs/rspec_active_record.rb +0 -20
- data/spec/support/integration/test_programs/rspec_active_support.rb +0 -20
- data/spec/support/integration/test_programs/rspec_rails.rb +0 -20
- data/spec/support/integration/test_programs/rspec_rails_engine.rb +0 -20
- data/spec/support/models/a.rb +0 -11
- data/spec/support/models/active_record/person.rb +0 -28
- data/spec/support/models/active_record/query.rb +0 -15
- data/spec/support/models/active_record/shipping_address.rb +0 -24
- data/spec/support/models/customer.rb +0 -22
- data/spec/support/models/empty_class.rb +0 -6
- data/spec/support/models/item.rb +0 -10
- data/spec/support/models/order.rb +0 -9
- data/spec/support/models/person.rb +0 -20
- data/spec/support/models/player.rb +0 -30
- data/spec/support/models/point.rb +0 -7
- data/spec/support/models/shipping_address.rb +0 -25
- data/spec/support/shared_examples/active_record.rb +0 -428
- data/spec/support/shared_examples/active_support.rb +0 -188
- data/spec/support/shared_examples/elided_diffs.rb +0 -938
- data/spec/support/shared_examples/hash_with_indifferent_access.rb +0 -749
- data/spec/support/shared_examples/key.rb +0 -123
- data/spec/support/unit/helpers.rb +0 -24
- data/spec/support/unit/matchers/be_deprecated_in_favor_of.rb +0 -39
- data/spec/support/unit/matchers/match_output.rb +0 -40
- data/spec/unit/active_record/object_inspection_spec.rb +0 -289
- data/spec/unit/active_support/object_inspection_spec.rb +0 -170
- data/spec/unit/basic/inspection_tree_builders/data_object_spec.rb +0 -146
- data/spec/unit/basic/operation_tree_builders/data_object_spec.rb +0 -82
- data/spec/unit/basic/operation_tree_flatteners/array_spec.rb +0 -637
- data/spec/unit/basic/operation_tree_flatteners/custom_object_spec.rb +0 -685
- data/spec/unit/basic/operation_tree_flatteners/default_object_spec.rb +0 -685
- data/spec/unit/basic/operation_tree_flatteners/hash_spec.rb +0 -671
- data/spec/unit/basic/operation_tree_flatteners/multiline_string_spec.rb +0 -131
- data/spec/unit/core/configuration_no_rspec_spec.rb +0 -58
- data/spec/unit/core/configuration_spec.rb +0 -176
- data/spec/unit/core/helpers_spec.rb +0 -68
- data/spec/unit/core/tiered_lines_elider_spec.rb +0 -6328
- data/spec/unit/core/tiered_lines_formatter_spec.rb +0 -131
- data/spec/unit/deprecations_spec.rb +0 -176
- data/spec/unit/equality_matchers/main_spec.rb +0 -1842
- data/spec/unit/rspec/matchers/be_compared_to_spec.rb +0 -23
- data/spec/unit/rspec/matchers/be_falsey_spec.rb +0 -9
- data/spec/unit/rspec/matchers/be_nil_spec.rb +0 -9
- data/spec/unit/rspec/matchers/be_predicate_spec.rb +0 -31
- data/spec/unit/rspec/matchers/be_spec.rb +0 -17
- data/spec/unit/rspec/matchers/be_truthy_spec.rb +0 -9
- data/spec/unit/rspec/matchers/contain_exactly_spec.rb +0 -11
- data/spec/unit/rspec/matchers/eq_spec.rb +0 -9
- data/spec/unit/rspec/matchers/have_attributes_spec.rb +0 -11
- data/spec/unit/rspec/matchers/have_predicate_spec.rb +0 -21
- data/spec/unit/rspec/matchers/include_spec.rb +0 -21
- data/spec/unit/rspec/matchers/match_array_spec.rb +0 -11
- data/spec/unit/rspec/matchers/match_spec.rb +0 -9
- data/spec/unit/rspec/matchers/raise_error_spec.rb +0 -77
- data/spec/unit/rspec/matchers/respond_to_spec.rb +0 -85
- data/spec/unit/rspec/object_inspection/rspec_matcher_spec.rb +0 -91
- data/spec/unit/rspec/object_inspection_spec.rb +0 -471
- data/spec/unit/super_diff_spec.rb +0 -2115
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module SuperDiff
|
2
4
|
module RSpec
|
3
5
|
module MatcherTextBuilders
|
@@ -19,7 +21,7 @@ module SuperDiff
|
|
19
21
|
protected
|
20
22
|
|
21
23
|
def add_expected_value_to(template, expected)
|
22
|
-
template.add_text
|
24
|
+
template.add_text ' '
|
23
25
|
template.add_list_in_color(expected_color, expected)
|
24
26
|
end
|
25
27
|
|
@@ -28,7 +30,7 @@ module SuperDiff
|
|
28
30
|
|
29
31
|
if arbitrary_keywords?
|
30
32
|
add_arbitrary_keywords_clause_to(template)
|
31
|
-
elsif
|
33
|
+
elsif expected_keywords?
|
32
34
|
add_keywords_clause_to(template)
|
33
35
|
end
|
34
36
|
|
@@ -43,8 +45,8 @@ module SuperDiff
|
|
43
45
|
@arbitrary_keywords
|
44
46
|
end
|
45
47
|
|
46
|
-
def
|
47
|
-
expected_keywords
|
48
|
+
def expected_keywords?
|
49
|
+
expected_keywords&.count&.positive?
|
48
50
|
end
|
49
51
|
|
50
52
|
def unlimited_arguments?
|
@@ -52,34 +54,34 @@ module SuperDiff
|
|
52
54
|
end
|
53
55
|
|
54
56
|
def add_arity_clause_to(template)
|
55
|
-
template.add_text
|
57
|
+
template.add_text ' with '
|
56
58
|
template.add_text_in_color expected_color, expected_arity
|
57
|
-
template.add_text
|
58
|
-
template.add_text pluralize(
|
59
|
+
template.add_text ' '
|
60
|
+
template.add_text pluralize('argument', expected_arity)
|
59
61
|
end
|
60
62
|
|
61
63
|
def add_arbitrary_keywords_clause_to(template)
|
62
|
-
template.add_text
|
63
|
-
template.add_text_in_color expected_color,
|
64
|
-
template.add_text
|
64
|
+
template.add_text ' with '
|
65
|
+
template.add_text_in_color expected_color, 'any'
|
66
|
+
template.add_text ' keywords'
|
65
67
|
end
|
66
68
|
|
67
69
|
def add_keywords_clause_to(template)
|
68
|
-
template.add_text
|
69
|
-
template.add_text pluralize(
|
70
|
-
template.add_text
|
70
|
+
template.add_text ' with '
|
71
|
+
template.add_text pluralize('keyword', expected_keywords.length)
|
72
|
+
template.add_text ' '
|
71
73
|
template.add_list_in_color expected_color, expected_keywords
|
72
74
|
end
|
73
75
|
|
74
76
|
def add_unlimited_arguments_clause_to(template)
|
75
|
-
if arbitrary_keywords? ||
|
76
|
-
template.add_text
|
77
|
+
if arbitrary_keywords? || expected_keywords?
|
78
|
+
template.add_text ' and '
|
77
79
|
else
|
78
|
-
template.add_text
|
80
|
+
template.add_text ' with '
|
79
81
|
end
|
80
82
|
|
81
|
-
template.add_text_in_color expected_color,
|
82
|
-
template.add_text
|
83
|
+
template.add_text_in_color expected_color, 'unlimited'
|
84
|
+
template.add_text ' arguments'
|
83
85
|
end
|
84
86
|
|
85
87
|
def pluralize(word, count)
|
@@ -1,25 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module SuperDiff
|
2
4
|
module RSpec
|
3
5
|
module MatcherTextBuilders
|
4
|
-
autoload :Base,
|
6
|
+
autoload :Base, 'super_diff/rspec/matcher_text_builders/base'
|
5
7
|
autoload(
|
6
8
|
:BePredicate,
|
7
|
-
|
9
|
+
'super_diff/rspec/matcher_text_builders/be_predicate'
|
8
10
|
)
|
9
11
|
autoload(
|
10
12
|
:ContainExactly,
|
11
|
-
|
13
|
+
'super_diff/rspec/matcher_text_builders/contain_exactly'
|
12
14
|
)
|
13
15
|
autoload(
|
14
16
|
:HavePredicate,
|
15
|
-
|
17
|
+
'super_diff/rspec/matcher_text_builders/have_predicate'
|
16
18
|
)
|
17
|
-
autoload :Match,
|
19
|
+
autoload :Match, 'super_diff/rspec/matcher_text_builders/match'
|
18
20
|
autoload(
|
19
21
|
:RaiseError,
|
20
|
-
|
22
|
+
'super_diff/rspec/matcher_text_builders/raise_error'
|
21
23
|
)
|
22
|
-
autoload(:RespondTo,
|
24
|
+
autoload(:RespondTo, 'super_diff/rspec/matcher_text_builders/respond_to')
|
23
25
|
end
|
24
26
|
end
|
25
27
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module SuperDiff
|
2
4
|
module RSpec
|
3
5
|
class MatcherTextTemplate
|
@@ -13,41 +15,41 @@ module SuperDiff
|
|
13
15
|
yield self if block_given?
|
14
16
|
end
|
15
17
|
|
16
|
-
def add_text(
|
17
|
-
add_token(PlainText,
|
18
|
+
def add_text(...)
|
19
|
+
add_token(PlainText, ...)
|
18
20
|
end
|
19
21
|
|
20
|
-
def add_text_in_color(
|
21
|
-
add_token(ColorizedText,
|
22
|
+
def add_text_in_color(...)
|
23
|
+
add_token(ColorizedText, ...)
|
22
24
|
end
|
23
25
|
|
24
|
-
def add_text_in_singleline_mode(
|
25
|
-
add_token(PlainTextInSinglelineMode,
|
26
|
+
def add_text_in_singleline_mode(...)
|
27
|
+
add_token(PlainTextInSinglelineMode, ...)
|
26
28
|
end
|
27
29
|
|
28
|
-
def add_text_in_multiline_mode(
|
29
|
-
add_token(PlainTextInMultilineMode,
|
30
|
+
def add_text_in_multiline_mode(...)
|
31
|
+
add_token(PlainTextInMultilineMode, ...)
|
30
32
|
end
|
31
33
|
|
32
|
-
def add_list_in_color(
|
33
|
-
add_token(ColorizedList,
|
34
|
+
def add_list_in_color(...)
|
35
|
+
add_token(ColorizedList, ...)
|
34
36
|
end
|
35
37
|
|
36
|
-
def add_break(
|
37
|
-
add_token(Break,
|
38
|
+
def add_break(...)
|
39
|
+
add_token(Break, ...)
|
38
40
|
end
|
39
41
|
|
40
|
-
def insert(
|
41
|
-
add_token(Insertion,
|
42
|
+
def insert(...)
|
43
|
+
add_token(Insertion, ...)
|
42
44
|
end
|
43
45
|
|
44
46
|
def length_of_first_paragraph
|
45
|
-
Csi.decolorize(to_string_in_singleline_mode).split(
|
47
|
+
Csi.decolorize(to_string_in_singleline_mode).split("\n\n").first.length
|
46
48
|
end
|
47
49
|
|
48
50
|
def to_s(as_single_line: nil)
|
49
51
|
if length_of_first_paragraph > MAX_LINE_LENGTH ||
|
50
|
-
|
52
|
+
as_single_line == false
|
51
53
|
to_string_in_multiline_mode
|
52
54
|
elsif length_of_first_paragraph <= MAX_LINE_LENGTH ||
|
53
55
|
as_single_line == true
|
@@ -67,21 +69,17 @@ module SuperDiff
|
|
67
69
|
|
68
70
|
attr_reader :tokens
|
69
71
|
|
70
|
-
def add_token(klass,
|
71
|
-
tokens << klass.new(
|
72
|
+
def add_token(klass, ...)
|
73
|
+
tokens << klass.new(...)
|
72
74
|
end
|
73
75
|
|
74
76
|
class Base
|
75
77
|
def to_string_in_singleline_mode
|
76
|
-
raise NotImplementedError.
|
77
|
-
"#{self.class} must support #to_string_in_singleline_mode"
|
78
|
-
)
|
78
|
+
raise NotImplementedError, "#{self.class} must support #to_string_in_singleline_mode"
|
79
79
|
end
|
80
80
|
|
81
81
|
def to_string_in_multiline_mode
|
82
|
-
raise NotImplementedError.
|
83
|
-
"#{self.class} must support #to_string_in_multiline_mode"
|
84
|
-
)
|
82
|
+
raise NotImplementedError, "#{self.class} must support #to_string_in_multiline_mode"
|
85
83
|
end
|
86
84
|
|
87
85
|
def length
|
@@ -91,6 +89,7 @@ module SuperDiff
|
|
91
89
|
|
92
90
|
class Text < Base
|
93
91
|
def initialize(immediate_value = nil, &block)
|
92
|
+
super()
|
94
93
|
@immediate_value = immediate_value
|
95
94
|
@block = block
|
96
95
|
end
|
@@ -104,7 +103,7 @@ module SuperDiff
|
|
104
103
|
end
|
105
104
|
|
106
105
|
def to_s
|
107
|
-
raise NotImplementedError
|
106
|
+
raise NotImplementedError, "#{self.class} must support #to_s"
|
108
107
|
end
|
109
108
|
|
110
109
|
protected
|
@@ -112,11 +111,7 @@ module SuperDiff
|
|
112
111
|
attr_reader :immediate_value, :block
|
113
112
|
|
114
113
|
def evaluate
|
115
|
-
if immediate_value && block
|
116
|
-
raise ArgumentError.new(
|
117
|
-
"Cannot provide both immediate value and block"
|
118
|
-
)
|
119
|
-
end
|
114
|
+
raise ArgumentError, 'Cannot provide both immediate value and block' if immediate_value && block
|
120
115
|
|
121
116
|
immediate_value || block.call
|
122
117
|
end
|
@@ -124,12 +119,12 @@ module SuperDiff
|
|
124
119
|
def to_sentence(values)
|
125
120
|
case values.length
|
126
121
|
when 0
|
127
|
-
|
122
|
+
''
|
128
123
|
when 1
|
129
124
|
values[0]
|
130
125
|
else
|
131
126
|
# TODO: Use Oxford comma
|
132
|
-
values[0..-2].join(
|
127
|
+
values[0..-2].join(', ') + " and #{values[-1]}"
|
133
128
|
end
|
134
129
|
end
|
135
130
|
end
|
@@ -141,8 +136,8 @@ module SuperDiff
|
|
141
136
|
end
|
142
137
|
|
143
138
|
class ColorizedText < Text
|
144
|
-
def initialize(color,
|
145
|
-
super(
|
139
|
+
def initialize(color, ...)
|
140
|
+
super(...)
|
146
141
|
|
147
142
|
@color = color
|
148
143
|
end
|
@@ -165,8 +160,8 @@ module SuperDiff
|
|
165
160
|
end
|
166
161
|
|
167
162
|
class ColorizedList < Text
|
168
|
-
def initialize(color,
|
169
|
-
super(
|
163
|
+
def initialize(color, ...)
|
164
|
+
super(...)
|
170
165
|
|
171
166
|
@color = color
|
172
167
|
end
|
@@ -199,13 +194,13 @@ module SuperDiff
|
|
199
194
|
end
|
200
195
|
|
201
196
|
def to_string_in_multiline_mode
|
202
|
-
|
197
|
+
''
|
203
198
|
end
|
204
199
|
end
|
205
200
|
|
206
201
|
class PlainTextInMultilineMode < Text
|
207
202
|
def to_string_in_singleline_mode
|
208
|
-
|
203
|
+
''
|
209
204
|
end
|
210
205
|
|
211
206
|
def to_string_in_multiline_mode
|
@@ -215,7 +210,7 @@ module SuperDiff
|
|
215
210
|
|
216
211
|
class Break < Base
|
217
212
|
def to_string_in_singleline_mode
|
218
|
-
|
213
|
+
' '
|
219
214
|
end
|
220
215
|
|
221
216
|
def to_string_in_multiline_mode
|
@@ -309,73 +309,146 @@ module RSpec
|
|
309
309
|
end
|
310
310
|
|
311
311
|
module Matchers
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
312
|
+
if SuperDiff::RSpec.rspec_version < "3.13.0"
|
313
|
+
class ExpectedsForMultipleDiffs
|
314
|
+
SuperDiff.insert_singleton_overrides(self) do
|
315
|
+
# Add a key for different sides
|
316
|
+
def from(expected)
|
317
|
+
return expected if self === expected
|
318
|
+
|
319
|
+
text = colorizer.wrap("Diff:", SuperDiff.configuration.header_color)
|
320
|
+
|
321
|
+
if SuperDiff.configuration.key_enabled?
|
322
|
+
text +=
|
323
|
+
"\n\n" +
|
324
|
+
colorizer.wrap(
|
325
|
+
"┌ (Key) ──────────────────────────┐",
|
326
|
+
SuperDiff.configuration.border_color
|
327
|
+
) + "\n" +
|
328
|
+
colorizer.wrap("│ ", SuperDiff.configuration.border_color) +
|
329
|
+
colorizer.wrap(
|
330
|
+
"‹-› in expected, not in actual",
|
331
|
+
SuperDiff.configuration.expected_color
|
332
|
+
) +
|
333
|
+
colorizer.wrap(" │", SuperDiff.configuration.border_color) +
|
334
|
+
"\n" +
|
335
|
+
colorizer.wrap("│ ", SuperDiff.configuration.border_color) +
|
336
|
+
colorizer.wrap(
|
337
|
+
"‹+› in actual, not in expected",
|
338
|
+
SuperDiff.configuration.actual_color
|
339
|
+
) +
|
340
|
+
colorizer.wrap(" │", SuperDiff.configuration.border_color) +
|
341
|
+
"\n" +
|
342
|
+
colorizer.wrap("│ ", SuperDiff.configuration.border_color) +
|
343
|
+
"‹ › in both expected and actual" +
|
344
|
+
colorizer.wrap(" │", SuperDiff.configuration.border_color) +
|
345
|
+
"\n" +
|
346
|
+
colorizer.wrap(
|
347
|
+
"└─────────────────────────────────┘",
|
348
|
+
SuperDiff.configuration.border_color
|
349
|
+
)
|
350
|
+
end
|
351
|
+
|
352
|
+
new([[expected, text]])
|
349
353
|
end
|
350
354
|
|
351
|
-
|
355
|
+
def colorizer
|
356
|
+
RSpec::Core::Formatters::ConsoleCodes
|
357
|
+
end
|
352
358
|
end
|
353
359
|
|
354
|
-
|
355
|
-
|
360
|
+
SuperDiff.insert_overrides(self) do
|
361
|
+
# Add an extra line break
|
362
|
+
def message_with_diff(message, differ, actual)
|
363
|
+
diff = diffs(differ, actual)
|
364
|
+
|
365
|
+
diff.empty? ? message : "#{message.rstrip}\n\n#{diff}"
|
366
|
+
end
|
367
|
+
|
368
|
+
private
|
369
|
+
|
370
|
+
# Add extra line breaks in between diffs, and colorize the word "Diff"
|
371
|
+
def diffs(differ, actual)
|
372
|
+
@expected_list
|
373
|
+
.map do |(expected, diff_label)|
|
374
|
+
diff = differ.diff(actual, expected)
|
375
|
+
next if diff.strip.empty?
|
376
|
+
diff_label + diff
|
377
|
+
end
|
378
|
+
.compact
|
379
|
+
.join("\n\n")
|
380
|
+
end
|
356
381
|
end
|
357
382
|
end
|
383
|
+
else
|
384
|
+
class MultiMatcherDiff
|
385
|
+
SuperDiff.insert_singleton_overrides(self) do
|
386
|
+
# Add a key for different sides
|
387
|
+
def from(expected, actual)
|
388
|
+
return expected if self === expected
|
389
|
+
|
390
|
+
text = colorizer.wrap("Diff:", SuperDiff.configuration.header_color)
|
391
|
+
|
392
|
+
if SuperDiff.configuration.key_enabled?
|
393
|
+
text +=
|
394
|
+
"\n\n" +
|
395
|
+
colorizer.wrap(
|
396
|
+
"┌ (Key) ──────────────────────────┐",
|
397
|
+
SuperDiff.configuration.border_color
|
398
|
+
) + "\n" +
|
399
|
+
colorizer.wrap("│ ", SuperDiff.configuration.border_color) +
|
400
|
+
colorizer.wrap(
|
401
|
+
"‹-› in expected, not in actual",
|
402
|
+
SuperDiff.configuration.expected_color
|
403
|
+
) +
|
404
|
+
colorizer.wrap(" │", SuperDiff.configuration.border_color) +
|
405
|
+
"\n" +
|
406
|
+
colorizer.wrap("│ ", SuperDiff.configuration.border_color) +
|
407
|
+
colorizer.wrap(
|
408
|
+
"‹+› in actual, not in expected",
|
409
|
+
SuperDiff.configuration.actual_color
|
410
|
+
) +
|
411
|
+
colorizer.wrap(" │", SuperDiff.configuration.border_color) +
|
412
|
+
"\n" +
|
413
|
+
colorizer.wrap("│ ", SuperDiff.configuration.border_color) +
|
414
|
+
"‹ › in both expected and actual" +
|
415
|
+
colorizer.wrap(" │", SuperDiff.configuration.border_color) +
|
416
|
+
"\n" +
|
417
|
+
colorizer.wrap(
|
418
|
+
"└─────────────────────────────────┘",
|
419
|
+
SuperDiff.configuration.border_color
|
420
|
+
)
|
421
|
+
end
|
358
422
|
|
359
|
-
|
360
|
-
|
361
|
-
def message_with_diff(message, differ, actual)
|
362
|
-
diff = diffs(differ, actual)
|
423
|
+
new([[expected, text, actual]])
|
424
|
+
end
|
363
425
|
|
364
|
-
|
426
|
+
def colorizer
|
427
|
+
RSpec::Core::Formatters::ConsoleCodes
|
428
|
+
end
|
365
429
|
end
|
366
430
|
|
367
|
-
|
431
|
+
SuperDiff.insert_overrides(self) do
|
432
|
+
# Add an extra line break
|
433
|
+
def message_with_diff(message, differ)
|
434
|
+
diff = diffs(differ)
|
435
|
+
|
436
|
+
diff.empty? ? message : "#{message.rstrip}\n\n#{diff}"
|
437
|
+
end
|
368
438
|
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
439
|
+
private
|
440
|
+
|
441
|
+
# Add extra line breaks in between diffs, and colorize the word "Diff"
|
442
|
+
def diffs(differ)
|
443
|
+
@expected_list
|
444
|
+
.map do |(expected, diff_label, actual)|
|
445
|
+
diff = differ.diff(actual, expected)
|
446
|
+
next if diff.strip.empty?
|
447
|
+
diff_label + diff
|
448
|
+
end
|
449
|
+
.compact
|
450
|
+
.join("\n\n")
|
451
|
+
end
|
379
452
|
end
|
380
453
|
end
|
381
454
|
end
|
@@ -1,14 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module SuperDiff
|
2
4
|
module RSpec
|
3
5
|
module ObjectInspection
|
4
6
|
module InspectionTreeBuilders
|
5
7
|
def self.const_missing(missing_const_name)
|
6
8
|
if RSpec::InspectionTreeBuilders.const_defined?(missing_const_name)
|
7
|
-
warn <<~
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
warn <<~WARNING
|
10
|
+
WARNING: SuperDiff::RSpec::ObjectInspection::InspectionTreeBuilders::#{missing_const_name} is deprecated and will be removed in the next major release.
|
11
|
+
Please use SuperDiff::RSpec::InspectionTreeBuilders::#{missing_const_name} instead.
|
12
|
+
#{caller_locations.join("\n")}
|
13
|
+
WARNING
|
12
14
|
RSpec::InspectionTreeBuilders.const_get(missing_const_name)
|
13
15
|
else
|
14
16
|
super
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module SuperDiff
|
2
4
|
module RSpec
|
3
5
|
module OperationTreeBuilders
|
@@ -19,9 +21,7 @@ module SuperDiff
|
|
19
21
|
operations = []
|
20
22
|
|
21
23
|
(0...actual.length)
|
22
|
-
.reject
|
23
|
-
indexes_in_actual_but_not_in_expected.include?(index)
|
24
|
-
end
|
24
|
+
.reject { |index| indexes_in_actual_but_not_in_expected.include?(index) }
|
25
25
|
.each { |index| add_noop_to(operations, index) }
|
26
26
|
|
27
27
|
indexes_in_actual_but_not_in_expected.each do |index|
|
@@ -36,7 +36,7 @@ module SuperDiff
|
|
36
36
|
end
|
37
37
|
|
38
38
|
def build_operation_tree
|
39
|
-
OperationTrees::Array.new([])
|
39
|
+
Basic::OperationTrees::Array.new([])
|
40
40
|
end
|
41
41
|
|
42
42
|
private
|
@@ -1,21 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module SuperDiff
|
2
4
|
module RSpec
|
3
5
|
module OperationTreeBuilders
|
4
6
|
autoload(
|
5
7
|
:CollectionContainingExactly,
|
6
|
-
|
8
|
+
'super_diff/rspec/operation_tree_builders/collection_containing_exactly'
|
7
9
|
)
|
8
10
|
autoload(
|
9
11
|
:CollectionIncluding,
|
10
|
-
|
12
|
+
'super_diff/rspec/operation_tree_builders/collection_including'
|
11
13
|
)
|
12
14
|
autoload(
|
13
15
|
:HashIncluding,
|
14
|
-
|
16
|
+
'super_diff/rspec/operation_tree_builders/hash_including'
|
15
17
|
)
|
16
18
|
autoload(
|
17
19
|
:ObjectHavingAttributes,
|
18
|
-
|
20
|
+
'super_diff/rspec/operation_tree_builders/object_having_attributes'
|
19
21
|
)
|
20
22
|
end
|
21
23
|
end
|