make error print their strings as well as values.
diff --git a/checkers.go b/checkers.go
index 335fc59..00766ec 100644
--- a/checkers.go
+++ b/checkers.go
@@ -229,7 +229,7 @@
}
valueStr, valueIsStr := value.(string)
if !valueIsStr {
- if valueWithStr, valueHasStr := value.(hasString); valueHasStr {
+ if valueWithStr, valueHasStr := value.(stringer); valueHasStr {
valueStr, valueIsStr = valueWithStr.String(), true
}
}
diff --git a/gocheck.go b/gocheck.go
index 9dcc2d4..a57ccdd 100644
--- a/gocheck.go
+++ b/gocheck.go
@@ -5,9 +5,9 @@
"errors"
"fmt"
"io"
+ "math/rand"
"os"
"path"
- "rand"
"reflect"
"regexp"
"runtime"
@@ -149,29 +149,38 @@
}
}
-type hasString interface {
+type stringer interface {
String() string
}
+func hasStringOrError(x interface{}) (ok bool) {
+ _, ok = x.(stringer)
+ if ok {
+ return
+ }
+ _, ok = x.(error)
+ return
+}
+
func (c *C) logValue(label string, value interface{}) {
if label == "" {
- if v, ok := value.(hasString); ok {
- c.logf("... %#v (%q)", value, v.String())
+ if hasStringOrError(value) {
+ c.logf("... %#v (%q)", value, value)
} else {
c.logf("... %#v", value)
}
} else if value == nil {
c.logf("... %s = nil", label)
} else {
- if v, ok := value.(hasString); ok {
+ if hasStringOrError(value) {
fv := fmt.Sprintf("%#v", value)
- qv := fmt.Sprintf("%q", v.String())
+ qv := fmt.Sprintf("%q", value)
if fv != qv {
- c.logf("... %s %s = %s (%s)", label, reflect.TypeOf(value).String(), fv, qv)
+ c.logf("... %s %s = %s (%s)", label, reflect.TypeOf(value), fv, qv)
return
}
}
- c.logf("... %s %s = %#v", label, reflect.TypeOf(value).String(), value)
+ c.logf("... %s %s = %#v", label, reflect.TypeOf(value), value)
}
}