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>
diff --git a/go.mod b/go.mod
index 4f554d8..f201c04 100644
--- a/go.mod
+++ b/go.mod
@@ -2,5 +2,5 @@
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
)
diff --git a/go.sum b/go.sum
index aa04e98..9b14839 100644
--- a/go.sum
+++ b/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=
diff --git a/protogen/protogen_test.go b/protogen/protogen_test.go
index 9218acd..f3852d7 100644
--- a/protogen/protogen_test.go
+++ b/protogen/protogen_test.go
@@ -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 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 @@
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 @@
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 @@
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)
}
}
diff --git a/protogen/testdata/go_package/no_go_package.proto b/protogen/testdata/go_package/no_go_package.proto
deleted file mode 100644
index d71884c..0000000
--- a/protogen/testdata/go_package/no_go_package.proto
+++ /dev/null
@@ -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 {}
diff --git a/protogen/testdata/go_package/no_go_package_import.proto b/protogen/testdata/go_package/no_go_package_import.proto
deleted file mode 100644
index bb1a73f..0000000
--- a/protogen/testdata/go_package/no_go_package_import.proto
+++ /dev/null
@@ -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;
-}
-