1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
|
package schema
import (
"errors"
"strings"
"testing"
)
func TestMultiErrorError(t *testing.T) {
var m MultiError
if got := m.Error(); got != "(0 errors)" {
t.Fatalf("expected (0 errors), got %q", got)
}
errA := errors.New("a")
m = MultiError{"a": errA}
if got := m.Error(); got != errA.Error() {
t.Fatalf("expected %q, got %q", errA.Error(), got)
}
errB := errors.New("b")
m = MultiError{"a": errA, "b": errB}
out := m.Error()
if !strings.HasSuffix(out, "(and 1 other error)") {
t.Fatalf("unexpected output %q", out)
}
if !strings.HasPrefix(out, errA.Error()) && !strings.HasPrefix(out, errB.Error()) {
t.Fatalf("unexpected prefix %q", out)
}
errC := errors.New("c")
m = MultiError{"a": errA, "b": errB, "c": errC}
out = m.Error()
if !strings.HasSuffix(out, "(and 2 other errors)") {
t.Fatalf("unexpected output %q", out)
}
}
func TestMultiErrorMerge(t *testing.T) {
errA := errors.New("a")
m1 := MultiError{"a": errA}
errB := errors.New("b")
m2 := MultiError{"a": errors.New("ignore"), "b": errB}
m1.merge(m2)
if len(m1) != 2 {
t.Fatalf("expected len 2, got %d", len(m1))
}
if m1["a"] != errA {
t.Errorf("existing key overwritten")
}
if m1["b"].Error() != errB.Error() {
t.Errorf("missing merged error")
}
}
func BenchmarkMultiErrorError(b *testing.B) {
m := MultiError{"a": errors.New("a"), "b": errors.New("b"), "c": errors.New("c")}
for b.Loop() {
_ = m.Error()
}
}
|