Files
BigChef/processor/json_deepequal_test.go

154 lines
2.8 KiB
Go

package processor
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestDeepEqual(t *testing.T) {
tests := []struct {
name string
a interface{}
b interface{}
expected bool
}{
{
name: "both nil",
a: nil,
b: nil,
expected: true,
},
{
name: "first nil",
a: nil,
b: "something",
expected: false,
},
{
name: "second nil",
a: "something",
b: nil,
expected: false,
},
{
name: "equal primitives",
a: 42,
b: 42,
expected: true,
},
{
name: "different primitives",
a: 42,
b: 43,
expected: false,
},
{
name: "equal strings",
a: "hello",
b: "hello",
expected: true,
},
{
name: "equal maps",
a: map[string]interface{}{
"key1": "value1",
"key2": 42,
},
b: map[string]interface{}{
"key1": "value1",
"key2": 42,
},
expected: true,
},
{
name: "maps different lengths",
a: map[string]interface{}{
"key1": "value1",
},
b: map[string]interface{}{
"key1": "value1",
"key2": 42,
},
expected: false,
},
{
name: "maps different values",
a: map[string]interface{}{
"key1": "value1",
},
b: map[string]interface{}{
"key1": "value2",
},
expected: false,
},
{
name: "map vs non-map",
a: map[string]interface{}{
"key1": "value1",
},
b: "not a map",
expected: false,
},
{
name: "equal arrays",
a: []interface{}{1, 2, 3},
b: []interface{}{1, 2, 3},
expected: true,
},
{
name: "arrays different lengths",
a: []interface{}{1, 2},
b: []interface{}{1, 2, 3},
expected: false,
},
{
name: "arrays different values",
a: []interface{}{1, 2, 3},
b: []interface{}{1, 2, 4},
expected: false,
},
{
name: "array vs non-array",
a: []interface{}{1, 2, 3},
b: "not an array",
expected: false,
},
{
name: "nested equal structures",
a: map[string]interface{}{
"outer": map[string]interface{}{
"inner": []interface{}{1, 2, 3},
},
},
b: map[string]interface{}{
"outer": map[string]interface{}{
"inner": []interface{}{1, 2, 3},
},
},
expected: true,
},
{
name: "nested different structures",
a: map[string]interface{}{
"outer": map[string]interface{}{
"inner": []interface{}{1, 2, 3},
},
},
b: map[string]interface{}{
"outer": map[string]interface{}{
"inner": []interface{}{1, 2, 4},
},
},
expected: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
result := deepEqual(tt.a, tt.b)
assert.Equal(t, tt.expected, result)
})
}
}