Fix passthrough handling (#37). (#38)
diff --git a/formatter.go b/formatter.go
index 5efaa94..a317d7b 100644
--- a/formatter.go
+++ b/formatter.go
@@ -30,7 +30,7 @@
}
func (fo formatter) String() string {
- return fmt.Sprint(fo.v) // unwrap it
+ return fmt.Sprint(fo.v.Interface()) // unwrap it
}
func (fo formatter) passThrough(f fmt.State, c rune) {
@@ -47,7 +47,7 @@
s += fmt.Sprintf(".%d", p)
}
s += string(c)
- fmt.Fprintf(f, s, fo.v)
+ fmt.Fprintf(f, s, fo.v.Interface())
}
func (fo formatter) Format(f fmt.State, c rune) {
diff --git a/formatter_test.go b/formatter_test.go
index 5f3204e..c8c0b51 100644
--- a/formatter_test.go
+++ b/formatter_test.go
@@ -13,6 +13,11 @@
s string
}
+type passtest struct {
+ v interface{}
+ f, s string
+}
+
type LongStructTypeName struct {
longFieldName interface{}
otherLongFieldName interface{}
@@ -33,8 +38,30 @@
fmt.Fprintf(s, "F(%d)", int(f))
}
+type Stringer struct { i int }
+
+func (s *Stringer) String() string { return "foo" }
+
var long = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
+var passthrough = []passtest{
+ {1, "%d", "1"},
+ {"a", "%s", "a"},
+ {&Stringer{}, "%s", "foo"},
+}
+
+func TestPassthrough(t *testing.T) {
+ for _, tt := range passthrough {
+ s := fmt.Sprintf(tt.f, Formatter(tt.v))
+ if tt.s != s {
+ t.Errorf("expected %q", tt.s)
+ t.Errorf("got %q", s)
+ t.Errorf("expraw\n%s", tt.s)
+ t.Errorf("gotraw\n%s", s)
+ }
+ }
+}
+
var gosyntax = []test{
{nil, `nil`},
{"", `""`},