mirror of https://github.com/status-im/consul.git
76 lines
1.8 KiB
Go
76 lines
1.8 KiB
Go
package prototest
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/google/go-cmp/cmp"
|
|
"google.golang.org/protobuf/testing/protocmp"
|
|
)
|
|
|
|
func AssertDeepEqual(t testing.TB, x, y interface{}, opts ...cmp.Option) {
|
|
t.Helper()
|
|
|
|
opts = append(opts, protocmp.Transform())
|
|
|
|
if diff := cmp.Diff(x, y, opts...); diff != "" {
|
|
t.Fatalf("assertion failed: values are not equal\n--- expected\n+++ actual\n%v", diff)
|
|
}
|
|
}
|
|
|
|
// AssertElementsMatch asserts that the specified listX(array, slice...) is
|
|
// equal to specified listY(array, slice...) ignoring the order of the
|
|
// elements. If there are duplicate elements, the number of appearances of each
|
|
// of them in both lists should match.
|
|
//
|
|
// prototest.AssertElementsMatch(t, [1, 3, 2, 3], [1, 3, 3, 2])
|
|
func AssertElementsMatch[V any](
|
|
t testing.TB, listX, listY []V, opts ...cmp.Option,
|
|
) {
|
|
t.Helper()
|
|
|
|
if len(listX) == 0 && len(listY) == 0 {
|
|
return
|
|
}
|
|
|
|
opts = append(opts, protocmp.Transform())
|
|
|
|
// dump into a map keyed by sliceID
|
|
mapX := make(map[int]V)
|
|
for i, val := range listX {
|
|
mapX[i] = val
|
|
}
|
|
|
|
mapY := make(map[int]V)
|
|
for i, val := range listY {
|
|
mapY[i] = val
|
|
}
|
|
|
|
var outX, outY []V
|
|
for i, itemX := range mapX {
|
|
for j, itemY := range mapY {
|
|
if diff := cmp.Diff(itemX, itemY, opts...); diff == "" {
|
|
outX = append(outX, itemX)
|
|
outY = append(outY, itemY)
|
|
delete(mapX, i)
|
|
delete(mapY, j)
|
|
}
|
|
}
|
|
}
|
|
|
|
if len(outX) == len(outY) && len(outX) == len(listX) {
|
|
return // matches
|
|
}
|
|
|
|
// dump remainder into the slice so we can generate a useful error
|
|
for _, itemX := range mapX {
|
|
outX = append(outX, itemX)
|
|
}
|
|
for _, itemY := range mapY {
|
|
outY = append(outY, itemY)
|
|
}
|
|
|
|
if diff := cmp.Diff(outX, outY, opts...); diff != "" {
|
|
t.Fatalf("assertion failed: slices do not have matching elements\n--- expected\n+++ actual\n%v", diff)
|
|
}
|
|
}
|