encoding: add Format helper function and method

The Format function and MarshalOptions.Format method are helper
functions for directly obtaining the formatted string for a message
without having to deal with errors or convert a []byte to string.
It is only intended for human consumption (e.g., debugging or logging).

We also add a MarshalOptions.Multiline option to specify that the output
should use some default indentation in a multiline output.

This assists in the v1 to v2 migration where:
	protoV1.CompactTextString(m) => prototext.MarshalOptions{}.Format(m)
	protoV1.MarshalTextString(m) => prototext.Format(m)

At Google, there are approximately 10x more usages of MarshalTextString than
CompactTextString, so it makes sense that the top-level Format function
does multiline expansion by default.

Fixes #850

Change-Id: I149c9e190a6d99b985d3884df675499a3313e9b3
Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/213460
Reviewed-by: Damien Neil <dneil@google.com>
Reviewed-by: Herbie Ong <herbie@google.com>
diff --git a/proto/equal_test.go b/proto/equal_test.go
index ac529ec..65a8bfb 100644
--- a/proto/equal_test.go
+++ b/proto/equal_test.go
@@ -8,6 +8,7 @@
 	"math"
 	"testing"
 
+	"google.golang.org/protobuf/encoding/prototext"
 	"google.golang.org/protobuf/internal/encoding/pack"
 	"google.golang.org/protobuf/proto"
 
@@ -431,13 +432,13 @@
 
 	for _, tt := range tests {
 		if !tt.eq && !proto.Equal(tt.x, tt.x) {
-			t.Errorf("Equal(x, x) = false, want true\n==== x ====\n%v", marshalText(tt.x))
+			t.Errorf("Equal(x, x) = false, want true\n==== x ====\n%v", prototext.Format(tt.x))
 		}
 		if !tt.eq && !proto.Equal(tt.y, tt.y) {
-			t.Errorf("Equal(y, y) = false, want true\n==== y ====\n%v", marshalText(tt.y))
+			t.Errorf("Equal(y, y) = false, want true\n==== y ====\n%v", prototext.Format(tt.y))
 		}
 		if eq := proto.Equal(tt.x, tt.y); eq != tt.eq {
-			t.Errorf("Equal(x, y) = %v, want %v\n==== x ====\n%v==== y ====\n%v", eq, tt.eq, marshalText(tt.x), marshalText(tt.y))
+			t.Errorf("Equal(x, y) = %v, want %v\n==== x ====\n%v==== y ====\n%v", eq, tt.eq, prototext.Format(tt.x), prototext.Format(tt.y))
 		}
 	}
 }