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;
-}
-