104 lines
2.0 KiB
Go
104 lines
2.0 KiB
Go
|
package prototest
|
||
|
|
||
|
import (
|
||
|
"strconv"
|
||
|
"testing"
|
||
|
|
||
|
"github.com/stretchr/testify/require"
|
||
|
)
|
||
|
|
||
|
type wrap struct {
|
||
|
V int
|
||
|
O string
|
||
|
}
|
||
|
|
||
|
func (w *wrap) String() string {
|
||
|
return strconv.Itoa(w.V)
|
||
|
}
|
||
|
|
||
|
func (w *wrap) GoString() string {
|
||
|
return w.String()
|
||
|
}
|
||
|
|
||
|
func TestDiffElements_noProtobufs(t *testing.T) {
|
||
|
// NOTE: this test only tests non-protobuf slices initially
|
||
|
|
||
|
type testcase struct {
|
||
|
a, b []*wrap
|
||
|
notSame bool
|
||
|
}
|
||
|
|
||
|
run := func(t *testing.T, tc testcase) {
|
||
|
diff := diffElements(tc.a, tc.b)
|
||
|
if tc.notSame {
|
||
|
require.False(t, diff == "", "expected not to be the same")
|
||
|
} else {
|
||
|
require.True(t, diff == "", "expected to be the same")
|
||
|
}
|
||
|
}
|
||
|
|
||
|
w := func(v int) *wrap {
|
||
|
return &wrap{V: v}
|
||
|
}
|
||
|
|
||
|
cases := map[string]testcase{
|
||
|
"nil": {},
|
||
|
"empty": {a: []*wrap{}, b: []*wrap{}},
|
||
|
"nil and empty": {a: []*wrap{}, b: nil},
|
||
|
"ordered match": {
|
||
|
a: []*wrap{w(1), w(22), w(303), w(43004), w(-5)},
|
||
|
b: []*wrap{w(1), w(22), w(303), w(43004), w(-5)},
|
||
|
},
|
||
|
"permuted match": {
|
||
|
a: []*wrap{w(1), w(22), w(303), w(43004), w(-5)},
|
||
|
b: []*wrap{w(-5), w(43004), w(303), w(22), w(1)},
|
||
|
},
|
||
|
"duplicates": {
|
||
|
a: []*wrap{w(1), w(2), w(2), w(3)},
|
||
|
b: []*wrap{w(2), w(1), w(3), w(2)},
|
||
|
},
|
||
|
// no match
|
||
|
"1 vs nil": {
|
||
|
a: []*wrap{w(1)},
|
||
|
b: nil,
|
||
|
notSame: true,
|
||
|
},
|
||
|
"1 vs 2": {
|
||
|
a: []*wrap{w(1)},
|
||
|
b: []*wrap{w(2)},
|
||
|
notSame: true,
|
||
|
},
|
||
|
"1,2 vs 2,3": {
|
||
|
a: []*wrap{w(1), w(2)},
|
||
|
b: []*wrap{w(2), w(3)},
|
||
|
notSame: true,
|
||
|
},
|
||
|
"1,2 vs 1,2,3": {
|
||
|
a: []*wrap{w(1), w(2)},
|
||
|
b: []*wrap{w(1), w(2), w(3)},
|
||
|
notSame: true,
|
||
|
},
|
||
|
"duplicates omitted": {
|
||
|
a: []*wrap{w(1), w(2), w(2), w(3)},
|
||
|
b: []*wrap{w(1), w(3), w(2)},
|
||
|
notSame: true,
|
||
|
},
|
||
|
}
|
||
|
|
||
|
allCases := make(map[string]testcase)
|
||
|
for name, tc := range cases {
|
||
|
allCases[name] = tc
|
||
|
allCases[name+" (flipped)"] = testcase{
|
||
|
a: tc.b,
|
||
|
b: tc.a,
|
||
|
notSame: tc.notSame,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
for name, tc := range allCases {
|
||
|
t.Run(name, func(t *testing.T) {
|
||
|
run(t, tc)
|
||
|
})
|
||
|
}
|
||
|
}
|