mirror of
https://github.com/protocolbuffers/protobuf-go.git
synced 2025-01-30 12:32:36 +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 (
|
||||
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/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.20190228024137-c81281657ad9/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
||||
github.com/google/go-cmp v0.2.1-0.20190312032427-6f77996f0c42 h1:q3pnF5JFBNRz8sRD+IRj7Y6DMyYGTNqnZ9axTbSfoNI=
|
||||
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
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
// +build golden
|
||||
|
||||
package protogen
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/golang/protobuf/proto"
|
||||
"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"
|
||||
pluginpb "github.com/golang/protobuf/v2/types/plugin"
|
||||
@ -60,31 +54,32 @@ func TestPluginParameterErrors(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestFiles(t *testing.T) {
|
||||
gen, err := New(makeRequest(t, "testdata/go_package/no_go_package_import.proto"), nil)
|
||||
func TestNoGoPackage(t *testing.T) {
|
||||
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 {
|
||||
t.Fatal(err)
|
||||
}
|
||||
for _, test := range []struct {
|
||||
path string
|
||||
wantGenerate bool
|
||||
}{
|
||||
{
|
||||
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
|
||||
|
||||
for i, f := range gen.Files {
|
||||
if got, want := string(f.GoPackageName), "goproto_testdata"; got != want {
|
||||
t.Errorf("gen.Files[%d].GoPackageName = %v, want %v", i, got, want)
|
||||
}
|
||||
if f.Generate != test.wantGenerate {
|
||||
t.Errorf("%q: Generate=%v, want %v", test.path, f.Generate, test.wantGenerate)
|
||||
if got, want := string(f.GoImportPath), "testdata/go_package"; got != want {
|
||||
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 {
|
||||
t.Fatalf("g.Content() = %v", err)
|
||||
}
|
||||
if want != string(got) {
|
||||
t.Fatalf(`want:
|
||||
==========
|
||||
%v
|
||||
==========
|
||||
|
||||
got:
|
||||
==========
|
||||
%v
|
||||
==========`,
|
||||
want, string(got))
|
||||
if diff := cmp.Diff(string(want), string(got)); diff != "" {
|
||||
t.Fatalf("content mismatch (-want +got):\n%s", diff)
|
||||
}
|
||||
}
|
||||
|
||||
@ -329,7 +315,9 @@ func TestImportRewrites(t *testing.T) {
|
||||
g.P("var _ = ", GoIdent{GoName: "X", GoImportPath: "golang.org/x/bar"})
|
||||
want := `package foo
|
||||
|
||||
import bar "prefix/golang.org/x/bar"
|
||||
import (
|
||||
bar "prefix/golang.org/x/bar"
|
||||
)
|
||||
|
||||
var _ = bar.X
|
||||
`
|
||||
@ -337,64 +325,7 @@ var _ = bar.X
|
||||
if err != nil {
|
||||
t.Fatalf("g.Content() = %v", err)
|
||||
}
|
||||
if want != string(got) {
|
||||
t.Fatalf(`want:
|
||||
==========
|
||||
%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)
|
||||
if diff := cmp.Diff(string(want), string(got)); diff != "" {
|
||||
t.Fatalf("content mismatch (-want +got):\n%s", diff)
|
||||
}
|
||||
}
|
||||
|
@ -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