+++ /dev/null
-// Copyright 2010 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// This file contains the test for canonical struct tags.
-
-package a
-
-import (
- "a/b"
- "encoding/xml"
-)
-
-type StructTagTest struct {
- A int "hello" // want "`hello` not compatible with reflect.StructTag.Get: bad syntax for struct tag pair"
- B int "\tx:\"y\"" // want "not compatible with reflect.StructTag.Get: bad syntax for struct tag key"
- C int "x:\"y\"\tx:\"y\"" // want "not compatible with reflect.StructTag.Get"
- D int "x:`y`" // want "not compatible with reflect.StructTag.Get: bad syntax for struct tag value"
- E int "ct\brl:\"char\"" // want "not compatible with reflect.StructTag.Get: bad syntax for struct tag pair"
- F int `:"emptykey"` // want "not compatible with reflect.StructTag.Get: bad syntax for struct tag key"
- G int `x:"noEndQuote` // want "not compatible with reflect.StructTag.Get: bad syntax for struct tag value"
- H int `x:"trunc\x0"` // want "not compatible with reflect.StructTag.Get: bad syntax for struct tag value"
- I int `x:"foo",y:"bar"` // want "not compatible with reflect.StructTag.Get: key:.value. pairs not separated by spaces"
- J int `x:"foo"y:"bar"` // want "not compatible with reflect.StructTag.Get: key:.value. pairs not separated by spaces"
- OK0 int `x:"y" u:"v" w:""`
- OK1 int `x:"y:z" u:"v" w:""` // note multiple colons.
- OK2 int "k0:\"values contain spaces\" k1:\"literal\ttabs\" k2:\"and\\tescaped\\tabs\""
- OK3 int `under_scores:"and" CAPS:"ARE_OK"`
-}
-
-type UnexportedEncodingTagTest struct {
- x int `json:"xx"` // want "struct field x has json tag but is not exported"
- y int `xml:"yy"` // want "struct field y has xml tag but is not exported"
- z int
- A int `json:"aa" xml:"bb"`
- b int `json:"-"`
- C int `json:"-"`
-}
-
-type unexp struct{}
-
-type JSONEmbeddedField struct {
- UnexportedEncodingTagTest `is:"embedded"`
- unexp `is:"embedded,notexported" json:"unexp"` // OK for now, see issue 7363
-}
-
-type AnonymousJSON struct{}
-type AnonymousXML struct{}
-
-type AnonymousJSONField struct {
- DuplicateAnonJSON int `json:"a"`
-
- A int "hello" // want "`hello` not compatible with reflect.StructTag.Get: bad syntax for struct tag pair"
-}
-
-// With different names to allow using as anonymous fields multiple times.
-
-type AnonymousJSONField2 struct {
- DuplicateAnonJSON int `json:"a"`
-}
-type AnonymousJSONField3 struct {
- DuplicateAnonJSON int `json:"a"`
-}
-
-type DuplicateJSONFields struct {
- JSON int `json:"a"`
- DuplicateJSON int `json:"a"` // want "struct field DuplicateJSON repeats json tag .a. also at a.go:66"
- IgnoredJSON int `json:"-"`
- OtherIgnoredJSON int `json:"-"`
- OmitJSON int `json:",omitempty"`
- OtherOmitJSON int `json:",omitempty"`
- DuplicateOmitJSON int `json:"a,omitempty"` // want "struct field DuplicateOmitJSON repeats json tag .a. also at a.go:66"
- NonJSON int `foo:"a"`
- DuplicateNonJSON int `foo:"a"`
- Embedded struct {
- DuplicateJSON int `json:"a"` // OK because it's not in the same struct type
- }
- AnonymousJSON `json:"a"` // want "struct field AnonymousJSON repeats json tag .a. also at a.go:66"
-
- XML int `xml:"a"`
- DuplicateXML int `xml:"a"` // want "struct field DuplicateXML repeats xml tag .a. also at a.go:80"
- IgnoredXML int `xml:"-"`
- OtherIgnoredXML int `xml:"-"`
- OmitXML int `xml:",omitempty"`
- OtherOmitXML int `xml:",omitempty"`
- DuplicateOmitXML int `xml:"a,omitempty"` // want "struct field DuplicateOmitXML repeats xml tag .a. also at a.go:80"
- NonXML int `foo:"a"`
- DuplicateNonXML int `foo:"a"`
- Embedded2 struct {
- DuplicateXML int `xml:"a"` // OK because it's not in the same struct type
- }
- AnonymousXML `xml:"a"` // want "struct field AnonymousXML repeats xml tag .a. also at a.go:80"
- Attribute struct {
- XMLName xml.Name `xml:"b"`
- NoDup int `xml:"b"` // OK because XMLName above affects enclosing struct.
- Attr int `xml:"b,attr"` // OK because <b b="0"><b>0</b></b> is valid.
- DupAttr int `xml:"b,attr"` // want "struct field DupAttr repeats xml attribute tag .b. also at a.go:96"
- DupOmitAttr int `xml:"b,omitempty,attr"` // want "struct field DupOmitAttr repeats xml attribute tag .b. also at a.go:96"
-
- AnonymousXML `xml:"b,attr"` // want "struct field AnonymousXML repeats xml attribute tag .b. also at a.go:96"
- }
-
- AnonymousJSONField2 `json:"not_anon"` // ok; fields aren't embedded in JSON
- AnonymousJSONField3 `json:"-"` // ok; entire field is ignored in JSON
-}
-
-type UnexpectedSpacetest struct {
- A int `json:"a,omitempty"`
- B int `json:"b, omitempty"` // want "suspicious space in struct tag value"
- C int `json:"c ,omitempty"`
- D int `json:"d,omitempty, string"` // want "suspicious space in struct tag value"
- E int `xml:"e local"`
- F int `xml:"f "` // want "suspicious space in struct tag value"
- G int `xml:" g"` // want "suspicious space in struct tag value"
- H int `xml:"h ,omitempty"` // want "suspicious space in struct tag value"
- I int `xml:"i, omitempty"` // want "suspicious space in struct tag value"
- J int `xml:"j local ,omitempty"` // want "suspicious space in struct tag value"
- K int `xml:"k local, omitempty"` // want "suspicious space in struct tag value"
- L int `xml:" l local,omitempty"` // want "suspicious space in struct tag value"
- M int `xml:"m local,omitempty"` // want "suspicious space in struct tag value"
- N int `xml:" "` // want "suspicious space in struct tag value"
- O int `xml:""`
- P int `xml:","`
- Q int `foo:" doesn't care "`
-}
-
-// Nested fiels can be shadowed by fields further up. For example,
-// ShadowingAnonJSON replaces the json:"a" field in AnonymousJSONField.
-// However, if the two conflicting fields appear at the same level like in
-// DuplicateWithAnotherPackage, we should error.
-
-type ShadowingJsonFieldName struct {
- AnonymousJSONField
- ShadowingAnonJSON int `json:"a"`
-}
-
-type DuplicateWithAnotherPackage struct {
- b.AnonymousJSONField
- AnonymousJSONField2 // want "struct field DuplicateAnonJSON repeats json tag .a. also at b.b.go:8"
-}