mirror of
https://github.com/protocolbuffers/protobuf-go.git
synced 2025-02-19 12:40:24 +00:00
protogen: fix protogen_test.go
The test had a "golden" tag, which meant that it wasn't being tested. Changes made: * Alter the test to avoid shelling out to protoc * Modify TestFiles to TestNoGoPackage, where the testdata files seem concerned about making sure the lack of a go_package statement works * Upgrade to latest cmp, which provides diffing for multiline strings * Delete protogen/testdata directory Change-Id: Ic576167bfce1046f45c8c614d0ab76af8c5ba723 Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/167279 Reviewed-by: Damien Neil <dneil@google.com>
This commit is contained in:
parent
250c6eaf92
commit
94a8510010
2
go.mod
2
go.mod
@ -2,5 +2,5 @@ module github.com/golang/protobuf/v2
|
|||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/golang/protobuf v1.2.1-0.20190311233832-968e039ade03
|
github.com/golang/protobuf v1.2.1-0.20190311233832-968e039ade03
|
||||||
github.com/google/go-cmp v0.2.1-0.20190228024137-c81281657ad9
|
github.com/google/go-cmp v0.2.1-0.20190312032427-6f77996f0c42
|
||||||
)
|
)
|
||||||
|
4
go.sum
4
go.sum
@ -1,4 +1,4 @@
|
|||||||
github.com/golang/protobuf v1.2.1-0.20190311233832-968e039ade03 h1:9fMonKrK3A/zUsodyCLUQVFrEDPi/veKKdEemKA8H9k=
|
github.com/golang/protobuf v1.2.1-0.20190311233832-968e039ade03 h1:9fMonKrK3A/zUsodyCLUQVFrEDPi/veKKdEemKA8H9k=
|
||||||
github.com/golang/protobuf v1.2.1-0.20190311233832-968e039ade03/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
github.com/golang/protobuf v1.2.1-0.20190311233832-968e039ade03/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||||
github.com/google/go-cmp v0.2.1-0.20190228024137-c81281657ad9 h1:GDk30QdVXDf6i734280OeWAO9UCCjXLeWkLLyHQGUkI=
|
github.com/google/go-cmp v0.2.1-0.20190312032427-6f77996f0c42 h1:q3pnF5JFBNRz8sRD+IRj7Y6DMyYGTNqnZ9axTbSfoNI=
|
||||||
github.com/google/go-cmp v0.2.1-0.20190228024137-c81281657ad9/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
github.com/google/go-cmp v0.2.1-0.20190312032427-6f77996f0c42/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
||||||
|
@ -2,22 +2,16 @@
|
|||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
// +build golden
|
|
||||||
|
|
||||||
package protogen
|
package protogen
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
|
||||||
"os"
|
|
||||||
"os/exec"
|
|
||||||
"path/filepath"
|
|
||||||
"strings"
|
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/golang/protobuf/proto"
|
|
||||||
"github.com/golang/protobuf/v2/internal/scalar"
|
"github.com/golang/protobuf/v2/internal/scalar"
|
||||||
|
"github.com/golang/protobuf/v2/reflect/protoreflect"
|
||||||
|
"github.com/google/go-cmp/cmp"
|
||||||
|
|
||||||
descriptorpb "github.com/golang/protobuf/v2/types/descriptor"
|
descriptorpb "github.com/golang/protobuf/v2/types/descriptor"
|
||||||
pluginpb "github.com/golang/protobuf/v2/types/plugin"
|
pluginpb "github.com/golang/protobuf/v2/types/plugin"
|
||||||
@ -60,31 +54,32 @@ func TestPluginParameterErrors(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestFiles(t *testing.T) {
|
func TestNoGoPackage(t *testing.T) {
|
||||||
gen, err := New(makeRequest(t, "testdata/go_package/no_go_package_import.proto"), nil)
|
gen, err := New(&pluginpb.CodeGeneratorRequest{
|
||||||
|
ProtoFile: []*descriptorpb.FileDescriptorProto{
|
||||||
|
{
|
||||||
|
Name: scalar.String("testdata/go_package/no_go_package.proto"),
|
||||||
|
Syntax: scalar.String(protoreflect.Proto3.String()),
|
||||||
|
Package: scalar.String("goproto.testdata"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: scalar.String("testdata/go_package/no_go_package_import.proto"),
|
||||||
|
Syntax: scalar.String(protoreflect.Proto3.String()),
|
||||||
|
Package: scalar.String("goproto.testdata"),
|
||||||
|
Dependency: []string{"go_package/no_go_package.proto"},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
for _, test := range []struct {
|
|
||||||
path string
|
for i, f := range gen.Files {
|
||||||
wantGenerate bool
|
if got, want := string(f.GoPackageName), "goproto_testdata"; got != want {
|
||||||
}{
|
t.Errorf("gen.Files[%d].GoPackageName = %v, want %v", i, got, want)
|
||||||
{
|
|
||||||
path: "go_package/no_go_package_import.proto",
|
|
||||||
wantGenerate: true,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: "go_package/no_go_package.proto",
|
|
||||||
wantGenerate: false,
|
|
||||||
},
|
|
||||||
} {
|
|
||||||
f, ok := gen.FileByName(test.path)
|
|
||||||
if !ok {
|
|
||||||
t.Errorf("%q: not found by gen.FileByName", test.path)
|
|
||||||
continue
|
|
||||||
}
|
}
|
||||||
if f.Generate != test.wantGenerate {
|
if got, want := string(f.GoImportPath), "testdata/go_package"; got != want {
|
||||||
t.Errorf("%q: Generate=%v, want %v", test.path, f.Generate, test.wantGenerate)
|
t.Errorf("gen.Files[%d].GoImportPath = %v, want %v", i, got, want)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -301,17 +296,8 @@ var _ = string1.X // "golang.org/z/string"
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("g.Content() = %v", err)
|
t.Fatalf("g.Content() = %v", err)
|
||||||
}
|
}
|
||||||
if want != string(got) {
|
if diff := cmp.Diff(string(want), string(got)); diff != "" {
|
||||||
t.Fatalf(`want:
|
t.Fatalf("content mismatch (-want +got):\n%s", diff)
|
||||||
==========
|
|
||||||
%v
|
|
||||||
==========
|
|
||||||
|
|
||||||
got:
|
|
||||||
==========
|
|
||||||
%v
|
|
||||||
==========`,
|
|
||||||
want, string(got))
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -329,7 +315,9 @@ func TestImportRewrites(t *testing.T) {
|
|||||||
g.P("var _ = ", GoIdent{GoName: "X", GoImportPath: "golang.org/x/bar"})
|
g.P("var _ = ", GoIdent{GoName: "X", GoImportPath: "golang.org/x/bar"})
|
||||||
want := `package foo
|
want := `package foo
|
||||||
|
|
||||||
import bar "prefix/golang.org/x/bar"
|
import (
|
||||||
|
bar "prefix/golang.org/x/bar"
|
||||||
|
)
|
||||||
|
|
||||||
var _ = bar.X
|
var _ = bar.X
|
||||||
`
|
`
|
||||||
@ -337,64 +325,7 @@ var _ = bar.X
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("g.Content() = %v", err)
|
t.Fatalf("g.Content() = %v", err)
|
||||||
}
|
}
|
||||||
if want != string(got) {
|
if diff := cmp.Diff(string(want), string(got)); diff != "" {
|
||||||
t.Fatalf(`want:
|
t.Fatalf("content mismatch (-want +got):\n%s", diff)
|
||||||
==========
|
|
||||||
%v
|
|
||||||
==========
|
|
||||||
|
|
||||||
got:
|
|
||||||
==========
|
|
||||||
%v
|
|
||||||
==========`,
|
|
||||||
want, string(got))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// makeRequest returns a CodeGeneratorRequest for the given protoc inputs.
|
|
||||||
//
|
|
||||||
// It does this by running protoc with the current binary as the protoc-gen-go
|
|
||||||
// plugin. This "plugin" produces a single file, named 'request', which contains
|
|
||||||
// the code generator request.
|
|
||||||
func makeRequest(t *testing.T, args ...string) *pluginpb.CodeGeneratorRequest {
|
|
||||||
workdir, err := ioutil.TempDir("", "test")
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
defer os.RemoveAll(workdir)
|
|
||||||
|
|
||||||
cmd := exec.Command("protoc", "--plugin=protoc-gen-go="+os.Args[0])
|
|
||||||
cmd.Args = append(cmd.Args, "--go_out="+workdir, "-Itestdata")
|
|
||||||
cmd.Args = append(cmd.Args, args...)
|
|
||||||
cmd.Env = append(os.Environ(), "RUN_AS_PROTOC_PLUGIN=1")
|
|
||||||
out, err := cmd.CombinedOutput()
|
|
||||||
if len(out) > 0 || err != nil {
|
|
||||||
t.Log("RUNNING: ", strings.Join(cmd.Args, " "))
|
|
||||||
}
|
|
||||||
if len(out) > 0 {
|
|
||||||
t.Log(string(out))
|
|
||||||
}
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("protoc: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
b, err := ioutil.ReadFile(filepath.Join(workdir, "request"))
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
req := &pluginpb.CodeGeneratorRequest{}
|
|
||||||
if err := proto.UnmarshalText(string(b), req); err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
return req
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
if os.Getenv("RUN_AS_PROTOC_PLUGIN") != "" {
|
|
||||||
Run(nil, func(p *Plugin) error {
|
|
||||||
g := p.NewGeneratedFile("request", "")
|
|
||||||
return proto.MarshalText(g, p.Request)
|
|
||||||
})
|
|
||||||
os.Exit(0)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,9 +0,0 @@
|
|||||||
// Copyright 2018 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.
|
|
||||||
|
|
||||||
// Proto source file with no go_package option.
|
|
||||||
|
|
||||||
syntax = "proto3";
|
|
||||||
package goproto.testdata;
|
|
||||||
message M {}
|
|
@ -1,13 +0,0 @@
|
|||||||
// Copyright 2018 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.
|
|
||||||
|
|
||||||
// Import of a proto source file with no go_package option.
|
|
||||||
|
|
||||||
syntax = "proto3";
|
|
||||||
package goproto.testdata;
|
|
||||||
import "go_package/no_go_package.proto";
|
|
||||||
message M1 {
|
|
||||||
M Field = 1;
|
|
||||||
}
|
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user