]> Cypherpunks repositories - gostls13.git/commitdiff
json: some tests to demonstrate bad error messages
authorBrad Fitzpatrick <bradfitz@golang.org>
Thu, 15 Dec 2011 18:02:47 +0000 (10:02 -0800)
committerBrad Fitzpatrick <bradfitz@golang.org>
Thu, 15 Dec 2011 18:02:47 +0000 (10:02 -0800)
Not a fix yet (help wanted), but part of Issue 2331

R=rsc
CC=golang-dev
https://golang.org/cl/5490043

src/pkg/encoding/json/decode_test.go

index bf3953eb051f908ee9299f318afec1654408cf55..e569fa2f708ffdc9d1e1388a2e30ba489b9a9320 100644 (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