func (p *test) Generate(imports generator.PluginImports, file *generator.FileDescriptor) bool { used := false randPkg := imports.NewImport("math/rand") timePkg := imports.NewImport("time") testingPkg := imports.NewImport("testing") fmtPkg := imports.NewImport("fmt") for _, message := range file.Messages() { ccTypeName := generator.CamelCaseSlice(message.TypeName()) if !gogoproto.IsStringer(file.FileDescriptorProto, message.DescriptorProto) { continue } if gogoproto.HasTestGen(file.FileDescriptorProto, message.DescriptorProto) { used = true p.P(`func Test`, ccTypeName, `Stringer(t *`, testingPkg.Use(), `.T) {`) p.In() p.P(`popr := `, randPkg.Use(), `.New(`, randPkg.Use(), `.NewSource(`, timePkg.Use(), `.Now().UnixNano()))`) p.P(`p := NewPopulated`, ccTypeName, `(popr, false)`) p.P(`s1 := p.String()`) p.P(`s2 := `, fmtPkg.Use(), `.Sprintf("%v", p)`) p.P(`if s1 != s2 {`) p.In() p.P(`t.Fatalf("String want %v got %v", s1, s2)`) p.Out() p.P(`}`) p.Out() p.P(`}`) } } return used }
func (p *test) Generate(imports generator.PluginImports, file *generator.FileDescriptor) bool { used := false randPkg := imports.NewImport("math/rand") timePkg := imports.NewImport("time") testingPkg := imports.NewImport("testing") for _, message := range file.Messages() { if !gogoproto.IsUnion(file.FileDescriptorProto, message.DescriptorProto) || !gogoproto.HasTestGen(file.FileDescriptorProto, message.DescriptorProto) { continue } used = true ccTypeName := generator.CamelCaseSlice(message.TypeName()) p.P(`func Test`, ccTypeName, `OnlyOne(t *`, testingPkg.Use(), `.T) {`) p.In() p.P(`popr := `, randPkg.Use(), `.New(`, randPkg.Use(), `.NewSource(`, timePkg.Use(), `.Now().UnixNano()))`) p.P(`p := NewPopulated`, ccTypeName, `(popr, true)`) p.P(`v := p.GetValue()`) p.P(`msg := &`, ccTypeName, `{}`) p.P(`if !msg.SetValue(v) {`) p.In() p.P(`t.Fatalf("OnlyOne: Could not set Value")`) p.Out() p.P(`}`) p.P(`if !p.Equal(msg) {`) p.In() p.P(`t.Fatalf("%#v !OnlyOne Equal %#v", msg, p)`) p.Out() p.P(`}`) p.Out() p.P(`}`) } return used }
func (p *test) Generate(imports generator.PluginImports, file *generator.FileDescriptor) bool { used := false testingPkg := imports.NewImport("testing") for _, message := range file.Messages() { if !gogoproto.HasDescription(file.FileDescriptorProto, message.DescriptorProto) || !gogoproto.HasTestGen(file.FileDescriptorProto, message.DescriptorProto) { continue } used = true } if used { localName := generator.FileName(file) p.P(`func Test`, localName, `Description(t *`, testingPkg.Use(), `.T) {`) p.In() p.P(localName, `Description()`) p.Out() p.P(`}`) } return used }
func (p *test) Generate(imports generator.PluginImports, file *generator.FileDescriptor) bool { used := false randPkg := imports.NewImport("math/rand") timePkg := imports.NewImport("time") testingPkg := imports.NewImport("testing") protoPkg := imports.NewImport("github.com/dropbox/goprotoc/proto") for _, message := range file.Messages() { ccTypeName := generator.CamelCaseSlice(message.TypeName()) if !gogoproto.HasVerboseEqual(file.FileDescriptorProto, message.DescriptorProto) { continue } if gogoproto.HasTestGen(file.FileDescriptorProto, message.DescriptorProto) { used = true p.P(`func Test`, ccTypeName, `VerboseEqual(t *`, testingPkg.Use(), `.T) {`) p.In() p.P(`popr := `, randPkg.Use(), `.New(`, randPkg.Use(), `.NewSource(`, timePkg.Use(), `.Now().UnixNano()))`) p.P(`p := NewPopulated`, ccTypeName, `(popr, false)`) p.P(`data, err := `, protoPkg.Use(), `.Marshal(p)`) p.P(`if err != nil {`) p.In() p.P(`panic(err)`) p.Out() p.P(`}`) p.P(`msg := &`, ccTypeName, `{}`) p.P(`if err := `, protoPkg.Use(), `.Unmarshal(data, msg); err != nil {`) p.In() p.P(`panic(err)`) p.Out() p.P(`}`) p.P(`if err := p.VerboseEqual(msg); err != nil {`) p.In() p.P(`t.Fatalf("%#v !VerboseEqual %#v, since %v", msg, p, err)`) p.Out() p.P(`}`) p.Out() p.P(`}`) } } return used }
func (p *testAPI) Generate(imports generator.PluginImports, file *generator.FileDescriptor) bool { used := false testingPkg := imports.NewImport("testing") randPkg := imports.NewImport("math/rand") timePkg := imports.NewImport("time") for _, message := range file.Messages() { ccTypeName := generator.CamelCaseSlice(message.TypeName()) if !gogoproto.HasTestGen(file.FileDescriptorProto, message.DescriptorProto) { continue } used = true p.P(`func Test`, ccTypeName, `API(t *`, testingPkg.Use(), `.T) {`) p.In() p.P(`popr := `, randPkg.Use(), `.New(`, randPkg.Use(), `.NewSource(`, timePkg.Use(), `.Now().UnixNano()))`) p.P(`p := NewPopulated`, ccTypeName, `(popr, false)`) p.P(`msg := &`, ccTypeName, `{}`) p.P(`if !apiEmpty`, ccTypeName, `(msg, t) {`) p.In() p.P(`t.Fatalf("`, ccTypeName, ` should be empty")`) p.Out() p.P(`}`) p.P(`apiCopy`, ccTypeName, `(msg, p, t)`) if gogoproto.HasVerboseEqual(file.FileDescriptorProto, message.DescriptorProto) { p.P(`if err := p.VerboseEqual(msg); err != nil {`) p.In() p.P(`t.Fatalf("%#v !VerboseEqual %#v, since %v", msg, p, err)`) p.Out() p.P(`}`) } p.P(`if apiEmpty`, ccTypeName, `(p, t) != apiEmpty`, ccTypeName, `(msg, t) {`) p.In() p.P(`t.Fatalf("`, ccTypeName, ` should not be empty")`) p.Out() p.P(`}`) p.P(`if !p.Equal(msg) {`) p.In() p.P(`t.Fatalf("%#v !Proto %#v", msg, p)`) p.Out() p.P(`}`) p.P(`msg.Clear()`) p.P(`if !apiEmpty`, ccTypeName, `(msg, t) {`) p.In() p.P(`t.Fatalf("`, ccTypeName, ` should be empty")`) p.Out() p.P(`}`) p.Out() p.P(`}`) p.P() p.P(`func apiCopy`, ccTypeName, `(dst *`, ccTypeName, `, src *`, ccTypeName, `, t *`, testingPkg.Use(), `.T) {`) p.In() p.P(`if dst == nil || src == nil {`) p.In() p.P(`t.Fatalf("Cannot copy to(%v) or from(%v) nil message", dst, src)`) p.Out() p.P(`}`) for _, field := range message.Field { if gogoproto.IsEmbed(field) { p.P(`t.Skip("Cannot copy embed field")`) break } if gogoproto.IsCustomType(field) { p.P(`t.Skip("Cannot copy costum field")`) break } fieldName := generator.CamelCase(p.GetFieldName(message, field)) fieldType, _ := p.GoType(message, field) fieldTypeName := generator.GoTypeToName(fieldType) if generator.IsRepeated(field) { p.P(`for i := 0; i < src.`, fieldName, `Size(); i++ {`) p.In() if generator.IsMessageType(field) { p.P(`src`, fieldName, `, _ := src.Get`, fieldName, `(i)`) p.P(`dst`, fieldName, `, _ := dst.Add`, fieldName, `()`) p.P(`apiCopy`, fieldTypeName, `(dst`, fieldName, `, src`, fieldName, `, t)`) } else { p.P(`value, _ := src.Get`, fieldName, `(i)`) p.P(`dst.Add`, fieldName, `(value)`) } p.Out() p.P(`}`) } else { p.P(`if src.Has`, fieldName, `() {`) p.In() if generator.IsMessageType(field) { p.P(`src`, fieldName, ` := src.Get`, fieldName, `()`) p.P(`dst`, fieldName, `, _ := dst.Mutate`, fieldName, `()`) p.P(`apiCopy`, fieldTypeName, `(dst`, fieldName, `, src`, fieldName, `, t)`) } else { p.P(`dst.Set`, fieldName, `(src.Get`, fieldName, `())`) } p.Out() p.P(`}`) } } p.P(`src.XXX_unrecognized = dst.XXX_unrecognized`) if len(message.ExtensionRange) > 0 { p.P(`src.XXX_extensions = dst.XXX_extensions`) } p.Out() p.P(`}`) p.P() p.P(`func apiEmpty`, ccTypeName, `(msg *`, ccTypeName, `, t *`, testingPkg.Use(), `.T) bool {`) p.In() p.P(`if msg == nil {`) p.In() p.P(`return true`) p.Out() p.P(`}`) for _, field := range message.Field { if gogoproto.IsEmbed(field) { p.P(`t.Skip("Cannot check embed field")`) break } if gogoproto.IsCustomType(field) { p.P(`t.Skip("Cannot check costum field")`) break } fieldName := generator.CamelCase(p.GetFieldName(message, field)) if generator.IsRepeated(field) { p.P(`if msg.`, fieldName, `Size() != 0 {`) } else { p.P(`if msg.Has`, fieldName, `() {`) } p.In() p.P(`return false`) p.Out() p.P(`}`) } p.P(`return true`) p.Out() p.P(`}`) p.P() } return used }
func (p *testProto) Generate(imports generator.PluginImports, file *generator.FileDescriptor) bool { used := false testingPkg := imports.NewImport("testing") randPkg := imports.NewImport("math/rand") timePkg := imports.NewImport("time") protoPkg := imports.NewImport("github.com/dropbox/goprotoc/proto") for _, message := range file.Messages() { ccTypeName := generator.CamelCaseSlice(message.TypeName()) if gogoproto.HasTestGen(file.FileDescriptorProto, message.DescriptorProto) { used = true p.P(`func Test`, ccTypeName, `Proto(t *`, testingPkg.Use(), `.T) {`) p.In() p.P(`popr := `, randPkg.Use(), `.New(`, randPkg.Use(), `.NewSource(`, timePkg.Use(), `.Now().UnixNano()))`) p.P(`p := NewPopulated`, ccTypeName, `(popr, false)`) p.P(`data, err := `, protoPkg.Use(), `.Marshal(p)`) p.P(`if err != nil {`) p.In() p.P(`panic(err)`) p.Out() p.P(`}`) p.P(`msg := &`, ccTypeName, `{}`) p.P(`if err := `, protoPkg.Use(), `.Unmarshal(data, msg); err != nil {`) p.In() p.P(`panic(err)`) p.Out() p.P(`}`) p.P(`for i := range data {`) p.In() p.P(`data[i] = byte(popr.Intn(256))`) p.Out() p.P(`}`) if gogoproto.HasVerboseEqual(file.FileDescriptorProto, message.DescriptorProto) { p.P(`if err := p.VerboseEqual(msg); err != nil {`) p.In() p.P(`t.Fatalf("%#v !VerboseProto %#v, since %v", msg, p, err)`) p.Out() p.P(`}`) } p.P(`if !p.Equal(msg) {`) p.In() p.P(`t.Fatalf("%#v !Proto %#v", msg, p)`) p.Out() p.P(`}`) p.Out() p.P(`}`) p.P() } if gogoproto.HasTestGen(file.FileDescriptorProto, message.DescriptorProto) { if gogoproto.IsMarshaler(file.FileDescriptorProto, message.DescriptorProto) { p.P(`func Test`, ccTypeName, `MarshalTo(t *`, testingPkg.Use(), `.T) {`) p.In() p.P(`popr := `, randPkg.Use(), `.New(`, randPkg.Use(), `.NewSource(`, timePkg.Use(), `.Now().UnixNano()))`) p.P(`p := NewPopulated`, ccTypeName, `(popr, false)`) p.P(`size := p.Size()`) p.P(`data := make([]byte, size)`) p.P(`for i := range data {`) p.In() p.P(`data[i] = byte(popr.Intn(256))`) p.Out() p.P(`}`) p.P(`_, err := p.MarshalTo(data)`) p.P(`if err != nil {`) p.In() p.P(`panic(err)`) p.Out() p.P(`}`) p.P(`msg := &`, ccTypeName, `{}`) p.P(`if err := `, protoPkg.Use(), `.Unmarshal(data, msg); err != nil {`) p.In() p.P(`panic(err)`) p.Out() p.P(`}`) p.P(`for i := range data {`) p.In() p.P(`data[i] = byte(popr.Intn(256))`) p.Out() p.P(`}`) if gogoproto.HasVerboseEqual(file.FileDescriptorProto, message.DescriptorProto) { p.P(`if err := p.VerboseEqual(msg); err != nil {`) p.In() p.P(`t.Fatalf("%#v !VerboseProto %#v, since %v", msg, p, err)`) p.Out() p.P(`}`) } p.P(`if !p.Equal(msg) {`) p.In() p.P(`t.Fatalf("%#v !Proto %#v", msg, p)`) p.Out() p.P(`}`) p.Out() p.P(`}`) p.P() } } if gogoproto.HasBenchGen(file.FileDescriptorProto, message.DescriptorProto) { used = true p.P(`func Benchmark`, ccTypeName, `ProtoMarshal(b *`, testingPkg.Use(), `.B) {`) p.In() p.P(`popr := `, randPkg.Use(), `.New(`, randPkg.Use(), `.NewSource(616))`) p.P(`total := 0`) p.P(`pops := make([]*`, ccTypeName, `, 10000)`) p.P(`for i := 0; i < 10000; i++ {`) p.In() p.P(`pops[i] = NewPopulated`, ccTypeName, `(popr, false)`) p.Out() p.P(`}`) p.P(`b.ResetTimer()`) p.P(`for i := 0; i < b.N; i++ {`) p.In() p.P(`data, err := `, protoPkg.Use(), `.Marshal(pops[i%10000])`) p.P(`if err != nil {`) p.In() p.P(`panic(err)`) p.Out() p.P(`}`) p.P(`total += len(data)`) p.Out() p.P(`}`) p.P(`b.SetBytes(int64(total / b.N))`) p.Out() p.P(`}`) p.P() p.P(`func Benchmark`, ccTypeName, `ProtoUnmarshal(b *`, testingPkg.Use(), `.B) {`) p.In() p.P(`popr := `, randPkg.Use(), `.New(`, randPkg.Use(), `.NewSource(616))`) p.P(`total := 0`) p.P(`datas := make([][]byte, 10000)`) p.P(`for i := 0; i < 10000; i++ {`) p.In() p.P(`data, err := `, protoPkg.Use(), `.Marshal(NewPopulated`, ccTypeName, `(popr, false))`) p.P(`if err != nil {`) p.In() p.P(`panic(err)`) p.Out() p.P(`}`) p.P(`datas[i] = data`) p.Out() p.P(`}`) p.P(`msg := &`, ccTypeName, `{}`) p.P(`b.ResetTimer()`) p.P(`for i := 0; i < b.N; i++ {`) p.In() p.P(`total += len(datas[i%10000])`) p.P(`if err := `, protoPkg.Use(), `.Unmarshal(datas[i%10000], msg); err != nil {`) p.In() p.P(`panic(err)`) p.Out() p.P(`}`) p.Out() p.P(`}`) p.P(`b.SetBytes(int64(total / b.N))`) p.Out() p.P(`}`) p.P() } } return used }
func (p *test) Generate(imports generator.PluginImports, file *generator.FileDescriptor) bool { used := false randPkg := imports.NewImport("math/rand") timePkg := imports.NewImport("time") testingPkg := imports.NewImport("testing") protoPkg := imports.NewImport("github.com/dropbox/goprotoc/proto") for _, message := range file.Messages() { ccTypeName := generator.CamelCaseSlice(message.TypeName()) if !gogoproto.IsSizer(file.FileDescriptorProto, message.DescriptorProto) { continue } if gogoproto.HasTestGen(file.FileDescriptorProto, message.DescriptorProto) { used = true p.P(`func Test`, ccTypeName, `Size(t *`, testingPkg.Use(), `.T) {`) p.In() p.P(`popr := `, randPkg.Use(), `.New(`, randPkg.Use(), `.NewSource(`, timePkg.Use(), `.Now().UnixNano()))`) p.P(`p := NewPopulated`, ccTypeName, `(popr, true)`) p.P(`size2 := `, protoPkg.Use(), `.Size(p)`) p.P(`data, err := `, protoPkg.Use(), `.Marshal(p)`) p.P(`if err != nil {`) p.In() p.P(`panic(err)`) p.Out() p.P(`}`) p.P(`size := p.Size()`) p.P(`if len(data) != size {`) p.In() p.P(`t.Fatalf("size %v != marshalled size %v", size, len(data))`) p.Out() p.P(`}`) p.P(`if size2 != size {`) p.In() p.P(`t.Fatalf("size %v != before marshal proto.Size %v", size, size2)`) p.Out() p.P(`}`) p.P(`size3 := `, protoPkg.Use(), `.Size(p)`) p.P(`if size3 != size {`) p.In() p.P(`t.Fatalf("size %v != after marshal proto.Size %v", size, size3)`) p.Out() p.P(`}`) p.Out() p.P(`}`) p.P() } if gogoproto.HasBenchGen(file.FileDescriptorProto, message.DescriptorProto) { used = true p.P(`func Benchmark`, ccTypeName, `Size(b *`, testingPkg.Use(), `.B) {`) p.In() p.P(`popr := `, randPkg.Use(), `.New(`, randPkg.Use(), `.NewSource(616))`) p.P(`total := 0`) p.P(`pops := make([]*`, ccTypeName, `, 1000)`) p.P(`for i := 0; i < 1000; i++ {`) p.In() p.P(`pops[i] = NewPopulated`, ccTypeName, `(popr, false)`) p.Out() p.P(`}`) p.P(`b.ResetTimer()`) p.P(`for i := 0; i < b.N; i++ {`) p.In() p.P(`total += pops[i%1000].Size()`) p.Out() p.P(`}`) p.P(`b.SetBytes(int64(total / b.N))`) p.Out() p.P(`}`) p.P() } } return used }