aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Symonds <dsymonds@golang.org>2013-01-30 17:07:26 +1100
committerDavid Symonds <dsymonds@golang.org>2013-01-30 17:07:26 +1100
commit6e8ab8784338b90a5e515346a6193852f33d397b (patch)
tree53ca74392fa2bf4691b7dda92b0a9eb558f6b326
parente182aafb024b07fe021c8311f4c42ef0772c058d (diff)
downloadprotobuf-6e8ab8784338b90a5e515346a6193852f33d397b.tar.gz
goprotobuf: Fix text formatting of typed nil.
R=adg CC=golang-dev https://codereview.appspot.com/7223057
-rw-r--r--proto/text.go5
-rw-r--r--proto/text_test.go14
2 files changed, 17 insertions, 2 deletions
diff --git a/proto/text.go b/proto/text.go
index fc3763e..64a4ae7 100644
--- a/proto/text.go
+++ b/proto/text.go
@@ -615,7 +615,8 @@ func (w *textWriter) writeIndent() {
}
func marshalText(w io.Writer, pb Message, compact bool) error {
- if pb == nil {
+ val := reflect.ValueOf(pb)
+ if pb == nil || val.IsNil() {
w.Write([]byte("<nil>"))
return nil
}
@@ -632,7 +633,7 @@ func marshalText(w io.Writer, pb Message, compact bool) error {
}
// Dereference the received pointer so we don't have outer < and >.
- v := reflect.Indirect(reflect.ValueOf(pb))
+ v := reflect.Indirect(val)
if err := writeStruct(aw, v); err != nil {
return err
}
diff --git a/proto/text_test.go b/proto/text_test.go
index 69ae0cc..4904295 100644
--- a/proto/text_test.go
+++ b/proto/text_test.go
@@ -152,6 +152,20 @@ func TestMarshalText(t *testing.T) {
}
}
+func TestMarshalTextNil(t *testing.T) {
+ want := "<nil>"
+ tests := []proto.Message{nil, (*pb.MyMessage)(nil)}
+ for i, test := range tests {
+ buf := new(bytes.Buffer)
+ if err := proto.MarshalText(buf, test); err != nil {
+ t.Fatal(err)
+ }
+ if got := buf.String(); got != want {
+ t.Errorf("%d: got %q want %q", i, got, want)
+ }
+ }
+}
+
func BenchmarkMarshalTextBuffered(b *testing.B) {
buf := new(bytes.Buffer)
m := newTestMessage()