...
Run Format

Source file src/cmd/vet/testdata/structtag.go

Documentation: cmd/vet/testdata

  // 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 testdata
  
  import "encoding/xml"
  
  type StructTagTest struct {
  	A   int "hello"            // ERROR "not compatible with reflect.StructTag.Get: bad syntax for struct tag pair"
  	B   int "\tx:\"y\""        // ERROR "not compatible with reflect.StructTag.Get: bad syntax for struct tag key"
  	C   int "x:\"y\"\tx:\"y\"" // ERROR "not compatible with reflect.StructTag.Get"
  	D   int "x:`y`"            // ERROR "not compatible with reflect.StructTag.Get: bad syntax for struct tag value"
  	E   int "ct\brl:\"char\""  // ERROR "not compatible with reflect.StructTag.Get: bad syntax for struct tag pair"
  	F   int `:"emptykey"`      // ERROR "not compatible with reflect.StructTag.Get: bad syntax for struct tag key"
  	G   int `x:"noEndQuote`    // ERROR "not compatible with reflect.StructTag.Get: bad syntax for struct tag value"
  	H   int `x:"trunc\x0"`     // ERROR "not compatible with reflect.StructTag.Get: bad syntax for struct tag value"
  	I   int `x:"foo",y:"bar"`  // ERROR "not compatible with reflect.StructTag.Get: key:.value. pairs not separated by spaces"
  	J   int `x:"foo"y:"bar"`   // ERROR "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"` // ERROR "struct field x has json tag but is not exported"
  	y int `xml:"yy"`  // ERROR "struct field y has xml tag but is not exported"
  	z int
  	A int `json:"aa" xml:"bb"`
  }
  
  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 DuplicateJSONFields struct {
  	JSON              int `json:"a"`
  	DuplicateJSON     int `json:"a"` // ERROR "struct field DuplicateJSON repeats json tag .a. also at testdata/structtag.go:46"
  	IgnoredJSON       int `json:"-"`
  	OtherIgnoredJSON  int `json:"-"`
  	OmitJSON          int `json:",omitempty"`
  	OtherOmitJSON     int `json:",omitempty"`
  	DuplicateOmitJSON int `json:"a,omitempty"` // ERROR "struct field DuplicateOmitJSON repeats json tag .a. also at testdata/structtag.go:46"
  	NonJSON           int `foo:"a"`
  	DuplicateNonJSON  int `foo:"a"`
  	Embedded          struct {
  		DuplicateJSON int `json:"a"` // OK because its not in the same struct type
  	}
  	AnonymousJSON `json:"a"` // ERROR "struct field AnonymousJSON repeats json tag .a. also at testdata/structtag.go:46"
  
  	XML              int `xml:"a"`
  	DuplicateXML     int `xml:"a"` // ERROR "struct field DuplicateXML repeats xml tag .a. also at testdata/structtag.go:60"
  	IgnoredXML       int `xml:"-"`
  	OtherIgnoredXML  int `xml:"-"`
  	OmitXML          int `xml:",omitempty"`
  	OtherOmitXML     int `xml:",omitempty"`
  	DuplicateOmitXML int `xml:"a,omitempty"` // ERROR "struct field DuplicateOmitXML repeats xml tag .a. also at testdata/structtag.go:60"
  	NonXML           int `foo:"a"`
  	DuplicateNonXML  int `foo:"a"`
  	Embedded         struct {
  		DuplicateXML int `xml:"a"` // OK because its not in the same struct type
  	}
  	AnonymousXML `xml:"a"` // ERROR "struct field AnonymousXML repeats xml tag .a. also at testdata/structtag.go:60"
  	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"`           // ERROR "struct field DupAttr repeats xml attribute tag .b. also at testdata/structtag.go:76"
  		DupOmitAttr int      `xml:"b,omitempty,attr"` // ERROR "struct field DupOmitAttr repeats xml attribute tag .b. also at testdata/structtag.go:76"
  
  		AnonymousXML `xml:"b,attr"` // ERROR "struct field AnonymousXML repeats xml attribute tag .b. also at testdata/structtag.go:76"
  	}
  }
  

View as plain text