internal/errors: fix New in eliding prefix
Change-Id: I59c4c03f4115bfe6c4377924fadfd664245e878f
Reviewed-on: https://go-review.googlesource.com/c/164277
Reviewed-by: Joe Tsai <thebrokentoaster@gmail.com>
diff --git a/internal/errors/errors.go b/internal/errors/errors.go
index 4fddf39..377d2ab 100644
--- a/internal/errors/errors.go
+++ b/internal/errors/errors.go
@@ -116,7 +116,7 @@
// returns an error that has a "proto" prefix.
func New(f string, x ...interface{}) error {
for i := 0; i < len(x); i++ {
- if e, ok := x[i].(prefixError); ok {
+ if e, ok := x[i].(*prefixError); ok {
x[i] = e.s // avoid "proto: " prefix when chaining
}
}
diff --git a/internal/errors/errors_test.go b/internal/errors/errors_test.go
index 8dd635e..1d6464d 100644
--- a/internal/errors/errors_test.go
+++ b/internal/errors/errors_test.go
@@ -7,6 +7,7 @@
import (
"errors"
"reflect"
+ "strings"
"testing"
)
@@ -91,3 +92,24 @@
func (customRequiredNotSetError) Error() string { return "required field not set" }
func (customRequiredNotSetError) RequiredNotSet() bool { return true }
+
+func TestNewPrefix(t *testing.T) {
+ e1 := New("abc")
+ got := e1.Error()
+ if !strings.HasPrefix(got, "proto:") {
+ t.Errorf("missing \"proto:\" prefix in %q", got)
+ }
+ if !strings.Contains(got, "abc") {
+ t.Errorf("missing text \"abc\" in %q", got)
+ }
+
+ e2 := New("%v", e1)
+ got = e2.Error()
+ if !strings.HasPrefix(got, "proto:") {
+ t.Errorf("missing \"proto:\" prefix in %q", got)
+ }
+ // Test to make sure prefix is removed from the embedded error.
+ if strings.Contains(strings.TrimPrefix(got, "proto:"), "proto:") {
+ t.Errorf("prefix \"proto:\" not elided in embedded error: %q", got)
+ }
+}