فهرست منبع

goprotobuf: Fix diffing in golden tests. Fix compiler golden test file.

TBR=r
CC=golang-dev
http://codereview.appspot.com/5671050
David Symonds 14 سال پیش
والد
کامیت
a7b34e612d
4فایلهای تغییر یافته به همراه92 افزوده شده و 6 حذف شده
  1. 1 2
      Makefile
  2. 2 1
      proto/testdata/golden_test.go
  3. 86 0
      protoc-gen-go/testdata/golden_test.go
  4. 3 3
      protoc-gen-go/testdata/my_test/test.pb.go

+ 1 - 2
Makefile

@@ -38,8 +38,7 @@ install:
 
 test:
 	go test ./proto
-	echo compiler tests are disabled
-	# cd protoc-gen-go && go test
+	go test ./protoc-gen-go/testdata
 
 clean:
 	go clean ./...

+ 2 - 1
proto/testdata/golden_test.go

@@ -49,6 +49,7 @@ func sum(t *testing.T, name string) string {
 	if err != nil {
 		t.Fatal(err)
 	}
+	t.Logf("sum(%q): length is %d", name, len(data))
 	hash := sha1.New()
 	_, err = hash.Write(data)
 	if err != nil {
@@ -79,7 +80,7 @@ func TestGolden(t *testing.T) {
 	newSum := sum(t, newFile)
 	// Verify
 	if newSum != goldenSum {
-		run(t, "hg", "diff", "test.pb.go")
+		run(t, "diff", "-u", "test.pb.go", newFile)
 		t.Fatal("Code generated by protoc-gen-go has changed; update test.pb.go")
 	}
 }

+ 86 - 0
protoc-gen-go/testdata/golden_test.go

@@ -0,0 +1,86 @@
+// Go support for Protocol Buffers - Google's data interchange format
+//
+// Copyright 2013 Google Inc.  All rights reserved.
+// http://code.google.com/p/goprotobuf/
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// Verify that the compiler output for test.proto is unchanged.
+
+package testdata
+
+import (
+	"crypto/sha1"
+	"fmt"
+	"io/ioutil"
+	"os"
+	"os/exec"
+	"path/filepath"
+	"testing"
+)
+
+// sum returns in string form (for easy comparison) the SHA-1 hash of the named file.
+func sum(t *testing.T, name string) string {
+	data, err := ioutil.ReadFile(name)
+	if err != nil {
+		t.Fatal(err)
+	}
+	t.Logf("sum(%q): length is %d", name, len(data))
+	hash := sha1.New()
+	_, err = hash.Write(data)
+	if err != nil {
+		t.Fatal(err)
+	}
+	return fmt.Sprintf("% x", hash.Sum(nil))
+}
+
+func run(t *testing.T, name string, args ...string) {
+	cmd := exec.Command(name, args...)
+	cmd.Stdin = os.Stdin
+	cmd.Stdout = os.Stdout
+	cmd.Stderr = os.Stderr
+	err := cmd.Run()
+	if err != nil {
+		t.Fatal(err)
+	}
+}
+
+func TestGolden(t *testing.T) {
+	// Compute the original checksum.
+	goldenSum := sum(t, "my_test/test.pb.go")
+	// Run the proto compiler.
+	run(t, "protoc", "--go_out="+os.TempDir(), "my_test/test.proto")
+	newFile := filepath.Join(os.TempDir(), "my_test/test.pb.go")
+	defer os.Remove(newFile)
+	// Compute the new checksum.
+	newSum := sum(t, newFile)
+	// Verify
+	if newSum != goldenSum {
+		run(t, "diff", "-u", "my_test/test.pb.go", newFile)
+		t.Fatal("Code generated by protoc-gen-go has changed; update test.pb.go")
+	}
+}

+ 3 - 3
protoc-gen-go/testdata/my_test/test.pb.go

@@ -1,4 +1,4 @@
-// Code generated by protoc-gen-go from "test.proto"
+// Code generated by protoc-gen-go from "my_test/test.proto"
 // DO NOT EDIT!
 
 package my_test
@@ -189,7 +189,7 @@ var E_ReplyExtensions_Time = &proto.ExtensionDesc{
 	ExtendedType:  (*Reply)(nil),
 	ExtensionType: (*float64)(nil),
 	Field:         101,
-	Name:          "my_test.ReplyExtensions.time",
+	Name:          "my.test.ReplyExtensions.time",
 	Tag:           "fixed64,101,opt,name=time",
 }
 
@@ -230,7 +230,7 @@ var E_Tag = &proto.ExtensionDesc{
 	ExtendedType:  (*Reply)(nil),
 	ExtensionType: (*string)(nil),
 	Field:         103,
-	Name:          "my_test.tag",
+	Name:          "my.test.tag",
 	Tag:           "bytes,103,opt,name=tag",
 }