Skip to content

Commit

Permalink
Compare complex item values when preparing diff
Browse files Browse the repository at this point in the history
The diffing algorithm should only recurse when the values are (shallow)
equal. Fixes #32.
  • Loading branch information
novemberborn committed Jul 13, 2017
1 parent f127100 commit 221c11e
Show file tree
Hide file tree
Showing 4 changed files with 76 additions and 1 deletion.
3 changes: 2 additions & 1 deletion lib/metaDescriptors/item.js
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,8 @@ class ComplexItem {
}
}

const mustRecurse = this.tag === complexTag && initialExpected.tag === complexTag
const mustRecurse = this.tag === complexTag && initialExpected.tag === complexTag &&
this.value.compare(initialExpected.value) !== UNEQUAL
return {
mustRecurse,
isUnequal: !mustRecurse,
Expand Down
20 changes: 20 additions & 0 deletions test/diff.js
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,26 @@ test('diffs diverging complex types', t => {
map([1, {foo: 'bar'}, 2]),
map([1, {baz: 'qux'}, 2]))
t.snapshot(actual2)

class Foo {
constructor () {
this.foo = 'foo'
}
}
class Bar {
constructor () {
this.bar = 'bar'
}
}
const actual3 = diff(
map([new Foo()]),
map([new Bar()]))
t.snapshot(actual3)

const actual4 = diff(
map([Buffer.alloc(0)]),
map([new Uint8Array()]))
t.snapshot(actual4)
}
test('diffs arrays', equalLength, mapArray)
test('diffs arguments', equalLength, mapArguments)
Expand Down
54 changes: 54 additions & 0 deletions test/snapshots/diff.js.md
Original file line number Diff line number Diff line change
Expand Up @@ -465,6 +465,24 @@ Generated by [AVA](https://ava.li).
%diffGutters.padding# % %number.open%2%number.close%%item.after#,%␊
%diffGutters.padding# %%list.closeBracket#]%`

> Snapshot 3
`%diffGutters.padding# %%object.ctor.open%Arguments%object.ctor.close% %list.openBracket#[%␊
%diffGutters.actual#- % %object.ctor.open%Foo%object.ctor.close% %object.openBracket#{%␊
%diffGutters.actual#- % foo%property.separator#: %%string.line.open#'%%string.open%foo%string.close%%string.line.close#'%%property.after#,%␊
%diffGutters.actual#- % %object.closeBracket#}%%item.after#,%␊
%diffGutters.expected#+ % %object.ctor.open%Bar%object.ctor.close% %object.openBracket#{%␊
%diffGutters.expected#+ % bar%property.separator#: %%string.line.open#'%%string.open%bar%string.close%%string.line.close#'%%property.after#,%␊
%diffGutters.expected#+ % %object.closeBracket#}%%item.after#,%␊
%diffGutters.padding# %%list.closeBracket#]%`

> Snapshot 4
`%diffGutters.padding# %%object.ctor.open%Arguments%object.ctor.close% %list.openBracket#[%␊
%diffGutters.actual#- % %object.ctor.open%Buffer%object.ctor.close% %object.secondaryStringTag.open#@%Uint8Array%object.secondaryStringTag.close% %list.openBracket#[%%list.closeBracket#]%%item.after#,%␊
%diffGutters.expected#+ % %object.ctor.open%Uint8Array%object.ctor.close% %list.openBracket#[%%list.closeBracket#]%%item.after#,%␊
%diffGutters.padding# %%list.closeBracket#]%`

## diffs arrays

> Snapshot 1
Expand All @@ -487,6 +505,24 @@ Generated by [AVA](https://ava.li).
%diffGutters.padding# % %number.open%2%number.close%%item.after#,%␊
%diffGutters.padding# %%list.closeBracket#]%`

> Snapshot 3
`%diffGutters.padding# %%list.openBracket#[%␊
%diffGutters.actual#- % %object.ctor.open%Foo%object.ctor.close% %object.openBracket#{%␊
%diffGutters.actual#- % foo%property.separator#: %%string.line.open#'%%string.open%foo%string.close%%string.line.close#'%%property.after#,%␊
%diffGutters.actual#- % %object.closeBracket#}%%item.after#,%␊
%diffGutters.expected#+ % %object.ctor.open%Bar%object.ctor.close% %object.openBracket#{%␊
%diffGutters.expected#+ % bar%property.separator#: %%string.line.open#'%%string.open%bar%string.close%%string.line.close#'%%property.after#,%␊
%diffGutters.expected#+ % %object.closeBracket#}%%item.after#,%␊
%diffGutters.padding# %%list.closeBracket#]%`

> Snapshot 4
`%diffGutters.padding# %%list.openBracket#[%␊
%diffGutters.actual#- % %object.ctor.open%Buffer%object.ctor.close% %object.secondaryStringTag.open#@%Uint8Array%object.secondaryStringTag.close% %list.openBracket#[%%list.closeBracket#]%%item.after#,%␊
%diffGutters.expected#+ % %object.ctor.open%Uint8Array%object.ctor.close% %list.openBracket#[%%list.closeBracket#]%%item.after#,%␊
%diffGutters.padding# %%list.closeBracket#]%`

## diffs boxed primitives with extra properties

> Snapshot 1
Expand Down Expand Up @@ -1007,6 +1043,24 @@ Generated by [AVA](https://ava.li).
%diffGutters.padding# % %number.open%2%number.close%%item.after#,%␊
%diffGutters.padding# %%object.closeBracket#}%`

> Snapshot 3
`%diffGutters.padding# %%object.ctor.open%Set%object.ctor.close% %object.openBracket#{%␊
%diffGutters.actual#- % %object.ctor.open%Foo%object.ctor.close% %object.openBracket#{%␊
%diffGutters.actual#- % foo%property.separator#: %%string.line.open#'%%string.open%foo%string.close%%string.line.close#'%%property.after#,%␊
%diffGutters.actual#- % %object.closeBracket#}%%item.after#,%␊
%diffGutters.expected#+ % %object.ctor.open%Bar%object.ctor.close% %object.openBracket#{%␊
%diffGutters.expected#+ % bar%property.separator#: %%string.line.open#'%%string.open%bar%string.close%%string.line.close#'%%property.after#,%␊
%diffGutters.expected#+ % %object.closeBracket#}%%item.after#,%␊
%diffGutters.padding# %%object.closeBracket#}%`

> Snapshot 4
`%diffGutters.padding# %%object.ctor.open%Set%object.ctor.close% %object.openBracket#{%␊
%diffGutters.actual#- % %object.ctor.open%Buffer%object.ctor.close% %object.secondaryStringTag.open#@%Uint8Array%object.secondaryStringTag.close% %list.openBracket#[%%list.closeBracket#]%%item.after#,%␊
%diffGutters.expected#+ % %object.ctor.open%Uint8Array%object.ctor.close% %list.openBracket#[%%list.closeBracket#]%%item.after#,%␊
%diffGutters.padding# %%object.closeBracket#}%`

## diffs single line strings

> Snapshot 1
Expand Down
Binary file modified test/snapshots/diff.js.snap
Binary file not shown.

0 comments on commit 221c11e

Please sign in to comment.