encoding/json: fix out of phase error unmarshaling non-string into TextUnmarshaler

Fixes #9650.

Change-Id: I45b879124691e485b86c1e99a3227032283850d2
Reviewed-on: https://go-review.googlesource.com/12208
Reviewed-by: Andrew Gerrand <adg@golang.org>
This commit is contained in:
Russ Cox 2015-07-14 19:31:44 -04:00
parent 29f03a37c1
commit 671bddf0b0
2 changed files with 26 additions and 0 deletions

View file

@ -9,6 +9,7 @@ import (
"encoding"
"fmt"
"image"
"net"
"reflect"
"strings"
"testing"
@ -1394,6 +1395,30 @@ func TestInvalidUnmarshal(t *testing.T) {
}
}
var invalidUnmarshalTextTests = []struct {
v interface{}
want string
}{
{nil, "json: Unmarshal(nil)"},
{struct{}{}, "json: Unmarshal(non-pointer struct {})"},
{(*int)(nil), "json: Unmarshal(nil *int)"},
{new(net.IP), "json: cannot unmarshal string into Go value of type *net.IP"},
}
func TestInvalidUnmarshalText(t *testing.T) {
buf := []byte(`123`)
for _, tt := range invalidUnmarshalTextTests {
err := Unmarshal(buf, tt.v)
if err == nil {
t.Errorf("Unmarshal expecting error, got nil")
continue
}
if got := err.Error(); got != tt.want {
t.Errorf("Unmarshal = %q; want %q", got, tt.want)
}
}
}
// Test that string option is ignored for invalid types.
// Issue 9812.
func TestInvalidStringOption(t *testing.T) {