Skip to content

Commit

Permalink
Add arrays to diff (#66)
Browse files Browse the repository at this point in the history
* add support for arrays
  • Loading branch information
FarhanSajid1 authored Sep 6, 2021
1 parent b0d6a43 commit 514e132
Show file tree
Hide file tree
Showing 2 changed files with 125 additions and 0 deletions.
2 changes: 2 additions & 0 deletions diff.go
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,8 @@ func (d *Differ) diff(path []string, a, b reflect.Value, parent interface{}) err
return d.diffStruct(path, a, b)
case are(a, b, reflect.Slice, reflect.Invalid):
return d.diffSlice(path, a, b)
case are(a, b, reflect.Array, reflect.Invalid):
return d.diffSlice(path, a, b)
case are(a, b, reflect.String, reflect.Invalid):
return d.diffString(path, a, b, parent)
case are(a, b, reflect.Bool, reflect.Invalid):
Expand Down
123 changes: 123 additions & 0 deletions diff_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -98,20 +98,41 @@ func TestDiff(t *testing.T) {
},
nil,
},
{
"uint-array-insert", [3]uint{1, 2, 3}, [4]uint{1, 2, 3, 4},
Changelog{
Change{Type: CREATE, Path: []string{"3"}, To: uint(4)},
},
nil,
},
{
"int-slice-insert", []int{1, 2, 3}, []int{1, 2, 3, 4},
Changelog{
Change{Type: CREATE, Path: []string{"3"}, To: 4},
},
nil,
},
{
"int-array-insert", [3]int{1, 2, 3}, [4]int{1, 2, 3, 4},
Changelog{
Change{Type: CREATE, Path: []string{"3"}, To: 4},
},
nil,
},
{
"uint-slice-delete", []uint{1, 2, 3}, []uint{1, 3},
Changelog{
Change{Type: DELETE, Path: []string{"1"}, From: uint(2)},
},
nil,
},
{
"uint-array-delete", [3]uint{1, 2, 3}, [2]uint{1, 3},
Changelog{
Change{Type: DELETE, Path: []string{"1"}, From: uint(2)},
},
nil,
},
{
"int-slice-delete", []int{1, 2, 3}, []int{1, 3},
Changelog{
Expand All @@ -127,6 +148,14 @@ func TestDiff(t *testing.T) {
},
nil,
},
{
"uint-slice-array-delete", [3]uint{1, 2, 3}, [3]uint{1, 3, 4},
Changelog{
Change{Type: DELETE, Path: []string{"1"}, From: uint(2)},
Change{Type: CREATE, Path: []string{"2"}, To: uint(4)},
},
nil,
},
{
"int-slice-insert-delete", []int{1, 2, 3}, []int{1, 3, 4},
Changelog{
Expand All @@ -142,13 +171,27 @@ func TestDiff(t *testing.T) {
},
nil,
},
{
"string-array-insert", [3]string{"1", "2", "3"}, [4]string{"1", "2", "3", "4"},
Changelog{
Change{Type: CREATE, Path: []string{"3"}, To: "4"},
},
nil,
},
{
"string-slice-delete", []string{"1", "2", "3"}, []string{"1", "3"},
Changelog{
Change{Type: DELETE, Path: []string{"1"}, From: "2"},
},
nil,
},
{
"string-slice-delete", [3]string{"1", "2", "3"}, [2]string{"1", "3"},
Changelog{
Change{Type: DELETE, Path: []string{"1"}, From: "2"},
},
nil,
},
{
"string-slice-insert-delete", []string{"1", "2", "3"}, []string{"1", "3", "4"},
Changelog{
Expand All @@ -157,6 +200,14 @@ func TestDiff(t *testing.T) {
},
nil,
},
{
"string-array-insert-delete", [3]string{"1", "2", "3"}, [3]string{"1", "3", "4"},
Changelog{
Change{Type: DELETE, Path: []string{"1"}, From: "2"},
Change{Type: CREATE, Path: []string{"2"}, To: "4"},
},
nil,
},
{
"comparable-slice-insert", []tistruct{{"one", 1}}, []tistruct{{"one", 1}, {"two", 2}},
Changelog{
Expand All @@ -165,6 +216,14 @@ func TestDiff(t *testing.T) {
},
nil,
},
{
"comparable-array-insert", [1]tistruct{{"one", 1}}, [2]tistruct{{"one", 1}, {"two", 2}},
Changelog{
Change{Type: CREATE, Path: []string{"two", "name"}, To: "two"},
Change{Type: CREATE, Path: []string{"two", "value"}, To: 2},
},
nil,
},
{
"comparable-slice-delete", []tistruct{{"one", 1}, {"two", 2}}, []tistruct{{"one", 1}},
Changelog{
Expand All @@ -173,41 +232,84 @@ func TestDiff(t *testing.T) {
},
nil,
},
{
"comparable-array-delete", [2]tistruct{{"one", 1}, {"two", 2}}, [1]tistruct{{"one", 1}},
Changelog{
Change{Type: DELETE, Path: []string{"two", "name"}, From: "two"},
Change{Type: DELETE, Path: []string{"two", "value"}, From: 2},
},
nil,
},
{
"comparable-slice-update", []tistruct{{"one", 1}}, []tistruct{{"one", 50}},
Changelog{
Change{Type: UPDATE, Path: []string{"one", "value"}, From: 1, To: 50},
},
nil,
},
{
"comparable-array-update", [1]tistruct{{"one", 1}}, [1]tistruct{{"one", 50}},
Changelog{
Change{Type: UPDATE, Path: []string{"one", "value"}, From: 1, To: 50},
},
nil,
},
{
"map-slice-insert", []map[string]string{{"test": "123"}}, []map[string]string{{"test": "123", "tset": "456"}},
Changelog{
Change{Type: CREATE, Path: []string{"0", "tset"}, To: "456"},
},
nil,
},
{
"map-array-insert", [1]map[string]string{{"test": "123"}}, [1]map[string]string{{"test": "123", "tset": "456"}},
Changelog{
Change{Type: CREATE, Path: []string{"0", "tset"}, To: "456"},
},
nil,
},
{
"map-slice-update", []map[string]string{{"test": "123"}}, []map[string]string{{"test": "456"}},
Changelog{
Change{Type: UPDATE, Path: []string{"0", "test"}, From: "123", To: "456"},
},
nil,
},
{
"map-array-update", [1]map[string]string{{"test": "123"}}, [1]map[string]string{{"test": "456"}},
Changelog{
Change{Type: UPDATE, Path: []string{"0", "test"}, From: "123", To: "456"},
},
nil,
},
{
"map-slice-delete", []map[string]string{{"test": "123", "tset": "456"}}, []map[string]string{{"test": "123"}},
Changelog{
Change{Type: DELETE, Path: []string{"0", "tset"}, From: "456"},
},
nil,
},
{
"map-array-delete", [1]map[string]string{{"test": "123", "tset": "456"}}, [1]map[string]string{{"test": "123"}},
Changelog{
Change{Type: DELETE, Path: []string{"0", "tset"}, From: "456"},
},
nil,
},
{
"map-interface-slice-update", []map[string]interface{}{{"test": nil}}, []map[string]interface{}{{"test": "456"}},
Changelog{
Change{Type: UPDATE, Path: []string{"0", "test"}, From: nil, To: "456"},
},
nil,
},
{
"map-interface-array-update", [1]map[string]interface{}{{"test": nil}}, [1]map[string]interface{}{{"test": "456"}},
Changelog{
Change{Type: UPDATE, Path: []string{"0", "test"}, From: nil, To: "456"},
},
nil,
},
{
"map-nil", map[string]string{"one": "test"}, nil,
Changelog{
Expand Down Expand Up @@ -257,20 +359,41 @@ func TestDiff(t *testing.T) {
},
nil,
},
{
"nested-array-insert", map[string][3]int{"a": {1, 2, 3}}, map[string][4]int{"a": {1, 2, 3, 4}},
Changelog{
Change{Type: CREATE, Path: []string{"a", "3"}, To: 4},
},
nil,
},
{
"nested-slice-update", map[string][]int{"a": {1, 2, 3}}, map[string][]int{"a": {1, 4, 3}},
Changelog{
Change{Type: UPDATE, Path: []string{"a", "1"}, From: 2, To: 4},
},
nil,
},
{
"nested-array-update", map[string][3]int{"a": {1, 2, 3}}, map[string][3]int{"a": {1, 4, 3}},
Changelog{
Change{Type: UPDATE, Path: []string{"a", "1"}, From: 2, To: 4},
},
nil,
},
{
"nested-slice-delete", map[string][]int{"a": {1, 2, 3}}, map[string][]int{"a": {1, 3}},
Changelog{
Change{Type: DELETE, Path: []string{"a", "1"}, From: 2, To: nil},
},
nil,
},
{
"nested-array-delete", map[string][3]int{"a": {1, 2, 3}}, map[string][2]int{"a": {1, 3}},
Changelog{
Change{Type: DELETE, Path: []string{"a", "1"}, From: 2, To: nil},
},
nil,
},
{
"struct-string-update", tstruct{Name: "one"}, tstruct{Name: "two"},
Changelog{
Expand Down

0 comments on commit 514e132

Please sign in to comment.