super_diff 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +117 -89
- data/lib/super_diff.rb +33 -47
- data/lib/super_diff/active_record.rb +41 -0
- data/lib/super_diff/active_record/diff_formatters.rb +10 -0
- data/lib/super_diff/active_record/diff_formatters/active_record_relation.rb +23 -0
- data/lib/super_diff/active_record/differs.rb +10 -0
- data/lib/super_diff/active_record/differs/active_record_relation.rb +30 -0
- data/lib/super_diff/active_record/object_inspection.rb +14 -0
- data/lib/super_diff/active_record/object_inspection/inspectors.rb +16 -0
- data/lib/super_diff/active_record/object_inspection/inspectors/active_record_model.rb +38 -0
- data/lib/super_diff/active_record/object_inspection/inspectors/active_record_relation.rb +18 -0
- data/lib/super_diff/active_record/object_inspection/map_extension.rb +18 -0
- data/lib/super_diff/active_record/operation_sequences.rb +10 -0
- data/lib/super_diff/active_record/operation_sequences/active_record_relation.rb +16 -0
- data/lib/super_diff/active_record/operational_sequencers.rb +14 -0
- data/lib/super_diff/active_record/operational_sequencers/active_record_model.rb +19 -0
- data/lib/super_diff/active_record/operational_sequencers/active_record_relation.rb +24 -0
- data/lib/super_diff/active_support.rb +33 -0
- data/lib/super_diff/active_support/diff_formatters.rb +10 -0
- data/lib/super_diff/active_support/diff_formatters/hash_with_indifferent_access.rb +36 -0
- data/lib/super_diff/active_support/differs.rb +10 -0
- data/lib/super_diff/active_support/differs/hash_with_indifferent_access.rb +36 -0
- data/lib/super_diff/active_support/object_inspection.rb +14 -0
- data/lib/super_diff/active_support/object_inspection/inspectors.rb +12 -0
- data/lib/super_diff/active_support/object_inspection/inspectors/hash_with_indifferent_access.rb +18 -0
- data/lib/super_diff/active_support/object_inspection/map_extension.rb +15 -0
- data/lib/super_diff/active_support/operation_sequences.rb +10 -0
- data/lib/super_diff/active_support/operation_sequences/hash_with_indifferent_access.rb +16 -0
- data/lib/super_diff/active_support/operational_sequencers.rb +10 -0
- data/lib/super_diff/active_support/operational_sequencers/hash_with_indifferent_access.rb +21 -0
- data/lib/super_diff/colorized_document_extensions.rb +17 -0
- data/lib/super_diff/csi.rb +45 -15
- data/lib/super_diff/csi/bold_sequence.rb +9 -0
- data/lib/super_diff/csi/color.rb +62 -0
- data/lib/super_diff/csi/color_sequence_block.rb +28 -0
- data/lib/super_diff/csi/colorized_document.rb +72 -0
- data/lib/super_diff/csi/document.rb +183 -0
- data/lib/super_diff/csi/eight_bit_color.rb +72 -26
- data/lib/super_diff/csi/four_bit_color.rb +63 -29
- data/lib/super_diff/csi/twenty_four_bit_color.rb +79 -18
- data/lib/super_diff/csi/uncolorized_document.rb +29 -0
- data/lib/super_diff/diff_formatter.rb +10 -15
- data/lib/super_diff/diff_formatters.rb +10 -1
- data/lib/super_diff/diff_formatters/base.rb +12 -17
- data/lib/super_diff/diff_formatters/collection.rb +81 -50
- data/lib/super_diff/diff_formatters/{object.rb → custom_object.rb} +12 -9
- data/lib/super_diff/diff_formatters/default_object.rb +48 -0
- data/lib/super_diff/diff_formatters/multiline_string.rb +31 -0
- data/lib/super_diff/differ.rb +35 -32
- data/lib/super_diff/differs.rb +16 -1
- data/lib/super_diff/differs/array.rb +2 -2
- data/lib/super_diff/differs/base.rb +11 -21
- data/lib/super_diff/differs/custom_object.rb +26 -0
- data/lib/super_diff/differs/default_object.rb +25 -0
- data/lib/super_diff/differs/empty.rb +1 -1
- data/lib/super_diff/differs/hash.rb +2 -2
- data/lib/super_diff/differs/{multi_line_string.rb → multiline_string.rb} +6 -5
- data/lib/super_diff/equality_matcher.rb +9 -22
- data/lib/super_diff/equality_matchers.rb +19 -1
- data/lib/super_diff/equality_matchers/array.rb +6 -4
- data/lib/super_diff/equality_matchers/base.rb +8 -16
- data/lib/super_diff/equality_matchers/default.rb +60 -0
- data/lib/super_diff/equality_matchers/hash.rb +6 -4
- data/lib/super_diff/equality_matchers/{multi_line_string.rb → multiline_string.rb} +9 -6
- data/lib/super_diff/equality_matchers/primitive.rb +34 -0
- data/lib/super_diff/equality_matchers/{single_line_string.rb → singleline_string.rb} +7 -5
- data/lib/super_diff/helpers.rb +17 -81
- data/lib/super_diff/no_differ_available_error.rb +22 -0
- data/lib/super_diff/{errors.rb → no_operational_sequencer_available_error.rb} +0 -0
- data/lib/super_diff/object_inspection.rb +24 -0
- data/lib/super_diff/object_inspection/inspection_tree.rb +144 -0
- data/lib/super_diff/object_inspection/inspector.rb +27 -0
- data/lib/super_diff/object_inspection/inspectors.rb +18 -0
- data/lib/super_diff/object_inspection/inspectors/array.rb +22 -0
- data/lib/super_diff/object_inspection/inspectors/custom_object.rb +27 -0
- data/lib/super_diff/object_inspection/inspectors/default_object.rb +47 -0
- data/lib/super_diff/object_inspection/inspectors/hash.rb +22 -0
- data/lib/super_diff/object_inspection/inspectors/primitive.rb +13 -0
- data/lib/super_diff/object_inspection/inspectors/string.rb +13 -0
- data/lib/super_diff/object_inspection/map.rb +28 -0
- data/lib/super_diff/object_inspection/nodes.rb +49 -0
- data/lib/super_diff/object_inspection/nodes/base.rb +86 -0
- data/lib/super_diff/object_inspection/nodes/break.rb +15 -0
- data/lib/super_diff/object_inspection/nodes/inspection.rb +15 -0
- data/lib/super_diff/object_inspection/nodes/nesting.rb +16 -0
- data/lib/super_diff/object_inspection/nodes/text.rb +15 -0
- data/lib/super_diff/object_inspection/nodes/when_empty.rb +30 -0
- data/lib/super_diff/object_inspection/nodes/when_multiline.rb +22 -0
- data/lib/super_diff/object_inspection/nodes/when_non_empty.rb +30 -0
- data/lib/super_diff/object_inspection/nodes/when_singleline.rb +24 -0
- data/lib/super_diff/operation_sequences.rb +9 -0
- data/lib/super_diff/operation_sequences/base.rb +1 -1
- data/lib/super_diff/operation_sequences/{object.rb → custom_object.rb} +4 -3
- data/lib/super_diff/operation_sequences/default_object.rb +25 -0
- data/lib/super_diff/operational_sequencer.rb +23 -18
- data/lib/super_diff/operational_sequencers.rb +12 -1
- data/lib/super_diff/operational_sequencers/array.rb +65 -62
- data/lib/super_diff/operational_sequencers/base.rb +18 -26
- data/lib/super_diff/operational_sequencers/custom_object.rb +35 -0
- data/lib/super_diff/operational_sequencers/{object.rb → default_object.rb} +21 -11
- data/lib/super_diff/operational_sequencers/hash.rb +8 -5
- data/lib/super_diff/operational_sequencers/{multi_line_string.rb → multiline_string.rb} +11 -6
- data/lib/super_diff/operations.rb +6 -0
- data/lib/super_diff/operations/binary_operation.rb +14 -34
- data/lib/super_diff/operations/unary_operation.rb +11 -2
- data/lib/super_diff/rails.rb +1 -0
- data/lib/super_diff/recursion_guard.rb +47 -0
- data/lib/super_diff/rspec-rails.rb +2 -0
- data/lib/super_diff/rspec.rb +52 -8
- data/lib/super_diff/rspec/augmented_matcher.rb +98 -0
- data/lib/super_diff/rspec/configuration.rb +31 -0
- data/lib/super_diff/rspec/differ.rb +60 -16
- data/lib/super_diff/rspec/differs.rb +13 -0
- data/lib/super_diff/rspec/differs/collection_containing_exactly.rb +23 -0
- data/lib/super_diff/rspec/differs/partial_array.rb +22 -0
- data/lib/super_diff/rspec/differs/partial_hash.rb +22 -0
- data/lib/super_diff/rspec/differs/partial_object.rb +22 -0
- data/lib/super_diff/rspec/matcher_text_builders.rb +24 -0
- data/lib/super_diff/rspec/matcher_text_builders/base.rb +155 -0
- data/lib/super_diff/rspec/matcher_text_builders/be_predicate.rb +78 -0
- data/lib/super_diff/rspec/matcher_text_builders/contain_exactly.rb +14 -0
- data/lib/super_diff/rspec/matcher_text_builders/match.rb +23 -0
- data/lib/super_diff/rspec/matcher_text_builders/raise_error.rb +13 -0
- data/lib/super_diff/rspec/matcher_text_builders/respond_to.rb +99 -0
- data/lib/super_diff/rspec/matcher_text_template.rb +240 -0
- data/lib/super_diff/rspec/monkey_patches.rb +601 -98
- data/lib/super_diff/rspec/object_inspection.rb +8 -0
- data/lib/super_diff/rspec/object_inspection/inspectors.rb +24 -0
- data/lib/super_diff/rspec/object_inspection/inspectors/collection_containing_exactly.rb +19 -0
- data/lib/super_diff/rspec/object_inspection/inspectors/partial_array.rb +22 -0
- data/lib/super_diff/rspec/object_inspection/inspectors/partial_hash.rb +21 -0
- data/lib/super_diff/rspec/object_inspection/inspectors/partial_object.rb +21 -0
- data/lib/super_diff/rspec/object_inspection/map_extension.rb +23 -0
- data/lib/super_diff/rspec/operational_sequencers.rb +22 -0
- data/lib/super_diff/rspec/operational_sequencers/collection_containing_exactly.rb +97 -0
- data/lib/super_diff/rspec/operational_sequencers/partial_array.rb +23 -0
- data/lib/super_diff/rspec/operational_sequencers/partial_hash.rb +32 -0
- data/lib/super_diff/rspec/operational_sequencers/partial_object.rb +64 -0
- data/lib/super_diff/version.rb +1 -1
- data/spec/examples.txt +328 -46
- data/spec/integration/rails/active_record_spec.rb +19 -0
- data/spec/integration/rails/hash_with_indifferent_access_spec.rb +19 -0
- data/spec/integration/rspec/be_falsey_matcher_spec.rb +53 -0
- data/spec/integration/rspec/be_matcher_spec.rb +565 -0
- data/spec/integration/rspec/be_nil_matcher_spec.rb +53 -0
- data/spec/integration/rspec/be_predicate_matcher_spec.rb +546 -0
- data/spec/integration/rspec/be_truthy_matcher_spec.rb +57 -0
- data/spec/integration/rspec/contain_exactly_matcher_spec.rb +368 -0
- data/spec/integration/rspec/eq_matcher_spec.rb +874 -0
- data/spec/integration/rspec/have_attributes_matcher_spec.rb +299 -0
- data/spec/integration/rspec/include_matcher_spec.rb +350 -0
- data/spec/integration/rspec/match_matcher_spec.rb +1258 -0
- data/spec/integration/rspec/raise_error_matcher_spec.rb +350 -0
- data/spec/integration/rspec/respond_to_matcher_spec.rb +994 -0
- data/spec/integration/rspec/unhandled_errors_spec.rb +94 -0
- data/spec/spec_helper.rb +19 -4
- data/spec/support/colorizer.rb +9 -0
- data/spec/support/command_runner.rb +4 -0
- data/spec/support/integration/helpers.rb +179 -0
- data/spec/support/integration/matchers/produce_output_when_run_matcher.rb +79 -41
- data/spec/support/models/a.rb +11 -0
- data/spec/support/models/active_record/person.rb +26 -0
- data/spec/support/models/active_record/shipping_address.rb +29 -0
- data/spec/support/models/customer.rb +24 -0
- data/spec/support/models/empty_class.rb +6 -0
- data/spec/support/models/item.rb +10 -0
- data/spec/support/models/order.rb +9 -0
- data/spec/support/models/person.rb +20 -0
- data/spec/support/models/player.rb +33 -0
- data/spec/support/models/shipping_address.rb +34 -0
- data/spec/support/ruby_versions.rb +7 -0
- data/spec/support/shared_examples/active_record.rb +338 -0
- data/spec/support/shared_examples/hash_with_indifferent_access.rb +233 -0
- data/spec/unit/equality_matcher_spec.rb +579 -171
- data/spec/unit/object_inspection_spec.rb +1092 -0
- data/spec/unit/rspec/matchers/be_compared_to_spec.rb +23 -0
- data/spec/unit/rspec/matchers/be_falsey_spec.rb +9 -0
- data/spec/unit/rspec/matchers/be_nil_spec.rb +9 -0
- data/spec/unit/rspec/matchers/be_predicate_spec.rb +31 -0
- data/spec/unit/rspec/matchers/be_spec.rb +17 -0
- data/spec/unit/rspec/matchers/be_truthy_spec.rb +9 -0
- data/spec/unit/rspec/matchers/contain_exactly_spec.rb +11 -0
- data/spec/unit/rspec/matchers/eq_spec.rb +9 -0
- data/spec/unit/rspec/matchers/have_attributes_spec.rb +11 -0
- data/spec/unit/rspec/matchers/include_spec.rb +21 -0
- data/spec/unit/rspec/matchers/match_spec.rb +9 -0
- data/spec/unit/rspec/matchers/raise_error_spec.rb +29 -0
- data/spec/unit/rspec/matchers/respond_to_spec.rb +78 -0
- data/super_diff.gemspec +4 -2
- metadata +231 -34
- data/lib/super_diff/csi/color_helper.rb +0 -52
- data/lib/super_diff/csi/eight_bit_sequence.rb +0 -27
- data/lib/super_diff/csi/four_bit_sequence.rb +0 -24
- data/lib/super_diff/csi/sequence.rb +0 -22
- data/lib/super_diff/csi/twenty_four_bit_sequence.rb +0 -27
- data/lib/super_diff/diff_formatters/multi_line_string.rb +0 -31
- data/lib/super_diff/differs/object.rb +0 -68
- data/lib/super_diff/equality_matchers/object.rb +0 -18
- data/lib/super_diff/value_inspection.rb +0 -11
- data/spec/integration/rspec_spec.rb +0 -261
- data/spec/support/color_helper.rb +0 -49
- data/spec/support/person.rb +0 -23
- data/spec/support/person_diff_formatter.rb +0 -15
- data/spec/support/person_operation_sequence.rb +0 -14
- data/spec/support/person_operational_sequencer.rb +0 -19
@@ -1,29 +1,22 @@
|
|
1
1
|
module SuperDiff
|
2
2
|
module Differs
|
3
3
|
class Base
|
4
|
-
def self.applies_to?(
|
4
|
+
def self.applies_to?(_expected, _actual)
|
5
5
|
raise NotImplementedError
|
6
6
|
end
|
7
7
|
|
8
|
-
|
9
|
-
new(*args).call
|
10
|
-
end
|
8
|
+
extend AttrExtras.mixin
|
11
9
|
|
12
|
-
|
13
|
-
expected,
|
14
|
-
actual,
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
10
|
+
method_object(
|
11
|
+
:expected,
|
12
|
+
:actual,
|
13
|
+
[
|
14
|
+
:indent_level!,
|
15
|
+
index_in_collection: nil,
|
16
|
+
extra_operational_sequencer_classes: [],
|
17
|
+
extra_diff_formatter_classes: [],
|
18
|
+
],
|
19
19
|
)
|
20
|
-
@expected = expected
|
21
|
-
@actual = actual
|
22
|
-
@indent_level = indent_level
|
23
|
-
@index_in_collection = index_in_collection
|
24
|
-
@extra_operational_sequencer_classes = extra_operational_sequencer_classes
|
25
|
-
@extra_diff_formatter_classes = extra_diff_formatter_classes
|
26
|
-
end
|
27
20
|
|
28
21
|
def call
|
29
22
|
raise NotImplementedError
|
@@ -31,9 +24,6 @@ module SuperDiff
|
|
31
24
|
|
32
25
|
protected
|
33
26
|
|
34
|
-
attr_reader :expected, :actual, :indent_level, :index_in_collection,
|
35
|
-
:extra_operational_sequencer_classes, :extra_diff_formatter_classes
|
36
|
-
|
37
27
|
def indentation
|
38
28
|
" " * (indent_level * 2)
|
39
29
|
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module SuperDiff
|
2
|
+
module Differs
|
3
|
+
class CustomObject < Base
|
4
|
+
def self.applies_to?(expected, actual)
|
5
|
+
expected.class == actual.class &&
|
6
|
+
expected.respond_to?(:attributes_for_super_diff) &&
|
7
|
+
actual.respond_to?(:attributes_for_super_diff)
|
8
|
+
end
|
9
|
+
|
10
|
+
def call
|
11
|
+
operations.to_diff(indent_level: indent_level)
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def operations
|
17
|
+
OperationalSequencers::CustomObject.call(
|
18
|
+
expected: expected,
|
19
|
+
actual: actual,
|
20
|
+
extra_operational_sequencer_classes: extra_operational_sequencer_classes,
|
21
|
+
extra_diff_formatter_classes: extra_diff_formatter_classes,
|
22
|
+
)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module SuperDiff
|
2
|
+
module Differs
|
3
|
+
class DefaultObject < Base
|
4
|
+
def self.applies_to?(expected, actual)
|
5
|
+
expected.class == actual.class
|
6
|
+
end
|
7
|
+
|
8
|
+
def call
|
9
|
+
operations.to_diff(indent_level: indent_level)
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def operations
|
15
|
+
OperationalSequencer.call(
|
16
|
+
expected: expected,
|
17
|
+
actual: actual,
|
18
|
+
all_or_nothing: true,
|
19
|
+
extra_classes: extra_operational_sequencer_classes,
|
20
|
+
extra_diff_formatter_classes: extra_diff_formatter_classes,
|
21
|
+
)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -1,12 +1,13 @@
|
|
1
1
|
module SuperDiff
|
2
2
|
module Differs
|
3
|
-
class
|
4
|
-
def self.applies_to?(
|
5
|
-
|
3
|
+
class MultilineString < Base
|
4
|
+
def self.applies_to?(expected, actual)
|
5
|
+
expected.is_a?(::String) && actual.is_a?(::String) &&
|
6
|
+
(expected.include?("\n") || actual.include?("\n"))
|
6
7
|
end
|
7
8
|
|
8
9
|
def call
|
9
|
-
DiffFormatters::
|
10
|
+
DiffFormatters::MultilineString.call(
|
10
11
|
operations,
|
11
12
|
indent_level: indent_level,
|
12
13
|
)
|
@@ -15,7 +16,7 @@ module SuperDiff
|
|
15
16
|
private
|
16
17
|
|
17
18
|
def operations
|
18
|
-
OperationalSequencers::
|
19
|
+
OperationalSequencers::MultilineString.call(
|
19
20
|
expected: expected,
|
20
21
|
actual: actual,
|
21
22
|
extra_operational_sequencer_classes: extra_operational_sequencer_classes,
|
@@ -1,22 +1,16 @@
|
|
1
1
|
module SuperDiff
|
2
2
|
class EqualityMatcher
|
3
|
-
|
4
|
-
new(*args).call
|
5
|
-
end
|
3
|
+
extend AttrExtras.mixin
|
6
4
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
5
|
+
method_object(
|
6
|
+
[
|
7
|
+
:expected!,
|
8
|
+
:actual!,
|
9
|
+
extra_classes: [],
|
10
|
+
extra_operational_sequencer_classes: [],
|
11
|
+
extra_diff_formatter_classes: [],
|
12
|
+
],
|
13
13
|
)
|
14
|
-
@expected = expected
|
15
|
-
@actual = actual
|
16
|
-
@extra_classes = extra_classes
|
17
|
-
@extra_operational_sequencer_classes = extra_operational_sequencer_classes
|
18
|
-
@extra_diff_formatter_classes = extra_diff_formatter_classes
|
19
|
-
end
|
20
14
|
|
21
15
|
def call
|
22
16
|
resolved_class.call(
|
@@ -29,14 +23,7 @@ module SuperDiff
|
|
29
23
|
|
30
24
|
private
|
31
25
|
|
32
|
-
attr_reader :expected, :actual, :extra_classes,
|
33
|
-
:extra_operational_sequencer_classes, :extra_diff_formatter_classes
|
34
|
-
|
35
26
|
def resolved_class
|
36
|
-
matching_class || EqualityMatchers::Object
|
37
|
-
end
|
38
|
-
|
39
|
-
def matching_class
|
40
27
|
(EqualityMatchers::DEFAULTS + extra_classes).find do |klass|
|
41
28
|
klass.applies_to?(expected) && klass.applies_to?(actual)
|
42
29
|
end
|
@@ -1,5 +1,23 @@
|
|
1
1
|
module SuperDiff
|
2
2
|
module EqualityMatchers
|
3
|
-
|
3
|
+
autoload :Array, "super_diff/equality_matchers/array"
|
4
|
+
autoload :Base, "super_diff/equality_matchers/base"
|
5
|
+
autoload :Hash, "super_diff/equality_matchers/hash"
|
6
|
+
autoload :MultilineString, "super_diff/equality_matchers/multiline_string"
|
7
|
+
autoload :Default, "super_diff/equality_matchers/default"
|
8
|
+
autoload :Primitive, "super_diff/equality_matchers/primitive"
|
9
|
+
autoload(
|
10
|
+
:SinglelineString,
|
11
|
+
"super_diff/equality_matchers/singleline_string",
|
12
|
+
)
|
13
|
+
|
14
|
+
DEFAULTS = [
|
15
|
+
Primitive,
|
16
|
+
Array,
|
17
|
+
Hash,
|
18
|
+
MultilineString,
|
19
|
+
SinglelineString,
|
20
|
+
Default,
|
21
|
+
].freeze
|
4
22
|
end
|
5
23
|
end
|
@@ -11,14 +11,16 @@ module SuperDiff
|
|
11
11
|
|
12
12
|
#{
|
13
13
|
Helpers.style(
|
14
|
-
:
|
15
|
-
"Expected:
|
14
|
+
:alpha,
|
15
|
+
"Expected: " +
|
16
|
+
ObjectInspection.inspect(expected, as_single_line: true),
|
16
17
|
)
|
17
18
|
}
|
18
19
|
#{
|
19
20
|
Helpers.style(
|
20
|
-
:
|
21
|
-
" Actual:
|
21
|
+
:beta,
|
22
|
+
" Actual: " +
|
23
|
+
ObjectInspection.inspect(actual, as_single_line: true),
|
22
24
|
)
|
23
25
|
}
|
24
26
|
|
@@ -5,21 +5,16 @@ module SuperDiff
|
|
5
5
|
raise NotImplementedError
|
6
6
|
end
|
7
7
|
|
8
|
-
|
9
|
-
new(*args).call
|
10
|
-
end
|
8
|
+
extend AttrExtras.mixin
|
11
9
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
10
|
+
method_object(
|
11
|
+
[
|
12
|
+
:expected!,
|
13
|
+
:actual!,
|
14
|
+
extra_operational_sequencer_classes: [],
|
15
|
+
extra_diff_formatter_classes: [],
|
16
|
+
]
|
17
17
|
)
|
18
|
-
@expected = expected
|
19
|
-
@actual = actual
|
20
|
-
@extra_operational_sequencer_classes = extra_operational_sequencer_classes
|
21
|
-
@extra_diff_formatter_classes = extra_diff_formatter_classes
|
22
|
-
end
|
23
18
|
|
24
19
|
def call
|
25
20
|
if expected == actual
|
@@ -31,9 +26,6 @@ module SuperDiff
|
|
31
26
|
|
32
27
|
protected
|
33
28
|
|
34
|
-
attr_reader :expected, :actual, :extra_operational_sequencer_classes,
|
35
|
-
:extra_diff_formatter_classes
|
36
|
-
|
37
29
|
def fail
|
38
30
|
raise NotImplementedError
|
39
31
|
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module SuperDiff
|
2
|
+
module EqualityMatchers
|
3
|
+
class Default < Base
|
4
|
+
def self.applies_to?(_value)
|
5
|
+
true
|
6
|
+
end
|
7
|
+
|
8
|
+
def fail
|
9
|
+
<<~OUTPUT.strip
|
10
|
+
Differing objects.
|
11
|
+
|
12
|
+
#{expected_line}
|
13
|
+
#{actual_line}
|
14
|
+
#{diff_section}
|
15
|
+
OUTPUT
|
16
|
+
end
|
17
|
+
|
18
|
+
protected
|
19
|
+
|
20
|
+
def expected_line
|
21
|
+
Helpers.style(
|
22
|
+
:alpha,
|
23
|
+
"Expected: " +
|
24
|
+
ObjectInspection.inspect(expected, as_single_line: true),
|
25
|
+
)
|
26
|
+
end
|
27
|
+
|
28
|
+
def actual_line
|
29
|
+
Helpers.style(
|
30
|
+
:beta,
|
31
|
+
" Actual: " +
|
32
|
+
ObjectInspection.inspect(actual, as_single_line: true),
|
33
|
+
)
|
34
|
+
end
|
35
|
+
|
36
|
+
def diff_section
|
37
|
+
if diff.blank?
|
38
|
+
""
|
39
|
+
else
|
40
|
+
<<~SECTION
|
41
|
+
|
42
|
+
Diff:
|
43
|
+
|
44
|
+
#{diff}
|
45
|
+
SECTION
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def diff
|
50
|
+
Differ.call(
|
51
|
+
expected,
|
52
|
+
actual,
|
53
|
+
indent_level: 0,
|
54
|
+
extra_operational_sequencer_classes: extra_operational_sequencer_classes,
|
55
|
+
extra_diff_formatter_classes: extra_diff_formatter_classes,
|
56
|
+
)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -11,14 +11,16 @@ module SuperDiff
|
|
11
11
|
|
12
12
|
#{
|
13
13
|
Helpers.style(
|
14
|
-
:
|
15
|
-
"Expected:
|
14
|
+
:alpha,
|
15
|
+
"Expected: " +
|
16
|
+
ObjectInspection.inspect(expected, as_single_line: true),
|
16
17
|
)
|
17
18
|
}
|
18
19
|
#{
|
19
20
|
Helpers.style(
|
20
|
-
:
|
21
|
-
" Actual:
|
21
|
+
:beta,
|
22
|
+
" Actual: " +
|
23
|
+
ObjectInspection.inspect(actual, as_single_line: true),
|
22
24
|
)
|
23
25
|
}
|
24
26
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module SuperDiff
|
2
2
|
module EqualityMatchers
|
3
|
-
class
|
3
|
+
class MultilineString < Base
|
4
4
|
def self.applies_to?(value)
|
5
5
|
value.is_a?(::String) && value.include?("\n")
|
6
6
|
end
|
@@ -10,15 +10,18 @@ module SuperDiff
|
|
10
10
|
Differing strings.
|
11
11
|
|
12
12
|
#{
|
13
|
+
# TODO: This whole thing should not be red or green, just the values
|
13
14
|
Helpers.style(
|
14
|
-
:
|
15
|
-
"Expected:
|
15
|
+
:alpha,
|
16
|
+
"Expected: " +
|
17
|
+
ObjectInspection.inspect(expected, as_single_line: true),
|
16
18
|
)
|
17
19
|
}
|
18
20
|
#{
|
19
21
|
Helpers.style(
|
20
|
-
:
|
21
|
-
" Actual:
|
22
|
+
:beta,
|
23
|
+
" Actual: " +
|
24
|
+
ObjectInspection.inspect(actual, as_single_line: true),
|
22
25
|
)
|
23
26
|
}
|
24
27
|
|
@@ -31,7 +34,7 @@ module SuperDiff
|
|
31
34
|
private
|
32
35
|
|
33
36
|
def diff
|
34
|
-
Differs::
|
37
|
+
Differs::MultilineString.call(
|
35
38
|
expected,
|
36
39
|
actual,
|
37
40
|
indent_level: 0,
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module SuperDiff
|
2
|
+
module EqualityMatchers
|
3
|
+
class Primitive < Base
|
4
|
+
def self.applies_to?(value)
|
5
|
+
value.is_a?(Symbol) ||
|
6
|
+
value.is_a?(Numeric) ||
|
7
|
+
# TODO: Test this
|
8
|
+
value == true ||
|
9
|
+
value == false
|
10
|
+
end
|
11
|
+
|
12
|
+
def fail
|
13
|
+
<<~OUTPUT.strip
|
14
|
+
Differing #{Helpers.plural_type_for(actual)}.
|
15
|
+
|
16
|
+
#{
|
17
|
+
Helpers.style(
|
18
|
+
:alpha,
|
19
|
+
"Expected: " +
|
20
|
+
ObjectInspection.inspect(expected, as_single_line: true),
|
21
|
+
)
|
22
|
+
}
|
23
|
+
#{
|
24
|
+
Helpers.style(
|
25
|
+
:beta,
|
26
|
+
" Actual: " +
|
27
|
+
ObjectInspection.inspect(actual, as_single_line: true),
|
28
|
+
)
|
29
|
+
}
|
30
|
+
OUTPUT
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|