1
0
mirror of https://github.com/golang/go synced 2024-11-25 09:57:57 -07:00

json: some tests to demonstrate bad error messages

Not a fix yet (help wanted), but part of Issue 2331

R=rsc
CC=golang-dev
https://golang.org/cl/5490043
This commit is contained in:
Brad Fitzpatrick 2011-12-15 10:02:47 -08:00
parent 1b82e03a8f
commit f89b5746fb

View File

@ -6,6 +6,7 @@ package json
import (
"bytes"
"fmt"
"reflect"
"strings"
"testing"
@ -242,6 +243,38 @@ func TestHTMLEscape(t *testing.T) {
}
}
// WrongString is a struct that's misusing the ,string modifier.
type WrongString struct {
Message string `json:"result,string"`
}
type wrongStringTest struct {
in, err string
}
// TODO(bradfitz): as part of Issue 2331, fix these tests' expected
// error values to be helpful, rather than the confusing messages they
// are now.
var wrongStringTests = []wrongStringTest{
{`{"result":"x"}`, "JSON decoder out of sync - data changing underfoot?"},
{`{"result":"foo"}`, "json: cannot unmarshal bool into Go value of type string"},
{`{"result":"123"}`, "json: cannot unmarshal number into Go value of type string"},
}
// If people misuse the ,string modifier, the error message should be
// helpful, telling the user that they're doing it wrong.
func TestErrorMessageFromMisusedString(t *testing.T) {
for n, tt := range wrongStringTests {
r := strings.NewReader(tt.in)
var s WrongString
err := NewDecoder(r).Decode(&s)
got := fmt.Sprintf("%v", err)
if got != tt.err {
t.Errorf("%d. got err = %q, want %q", n, got, tt.err)
}
}
}
func noSpace(c rune) rune {
if isSpace(c) {
return -1