internal/encoding/text: add extra random space to make output unstable.

Make output deliberately unstable so users don't rely on exactness.

For multi-line output, add another extra random space after <key>: for
at most one field per message.

-- example --
key1: field1
key2:  {
    foo:  bar
}

For single-line output, add another extra random space after a field per
message.

-- example --
key1:field1  key2:{foo:bar}

Change-Id: I3ab25d4d970fdebb88bbd9dd8fa6d73af84338ea
Reviewed-on: https://go-review.googlesource.com/c/150977
Reviewed-by: Joe Tsai <thebrokentoaster@gmail.com>
diff --git a/internal/encoding/text/text_test.go b/internal/encoding/text/text_test.go
index b5ca63c..221d6ab 100644
--- a/internal/encoding/text/text_test.go
+++ b/internal/encoding/text/text_test.go
@@ -7,6 +7,7 @@
 import (
 	"fmt"
 	"math"
+	"regexp"
 	"strings"
 	"testing"
 	"unicode/utf8"
@@ -17,13 +18,15 @@
 	"github.com/google/go-cmp/cmp/cmpopts"
 )
 
+var S = fmt.Sprintf
+var V = ValueOf
+var ID = func(n protoreflect.Name) Value { return V(n) }
+
+type Lst = []Value
+type Msg = [][2]Value
+
 func Test(t *testing.T) {
 	const space = " \n\r\t"
-	var S = fmt.Sprintf
-	var V = ValueOf
-	var ID = func(n protoreflect.Name) Value { return V(n) }
-	type Lst = []Value
-	type Msg = [][2]Value
 
 	tests := []struct {
 		in             string
@@ -824,7 +827,7 @@
 				if err != nil {
 					t.Errorf("Marshal(): got %v, want nil error", err)
 				}
-				if string(gotOut) != tt.wantOut {
+				if removeRandomSpace(gotOut, false) != tt.wantOut {
 					t.Errorf("Marshal():\ngot:  %s\nwant: %s", gotOut, tt.wantOut)
 				}
 			}
@@ -833,7 +836,7 @@
 				if err != nil {
 					t.Errorf("Marshal(Bracket): got %v, want nil error", err)
 				}
-				if string(gotOut) != tt.wantOutBracket {
+				if removeRandomSpace(gotOut, false) != tt.wantOutBracket {
 					t.Errorf("Marshal(Bracket):\ngot:  %s\nwant: %s", gotOut, tt.wantOutBracket)
 				}
 			}
@@ -842,7 +845,7 @@
 				if err != nil {
 					t.Errorf("Marshal(ASCII): got %v, want nil error", err)
 				}
-				if string(gotOut) != tt.wantOutASCII {
+				if removeRandomSpace(gotOut, false) != tt.wantOutASCII {
 					t.Errorf("Marshal(ASCII):\ngot:  %s\nwant: %s", gotOut, tt.wantOutASCII)
 				}
 			}
@@ -851,10 +854,24 @@
 				if err != nil {
 					t.Errorf("Marshal(Indent): got %v, want nil error", err)
 				}
-				if string(gotOut) != tt.wantOutIndent {
+				if removeRandomSpace(gotOut, true) != tt.wantOutIndent {
 					t.Errorf("Marshal(Indent):\ngot:  %s\nwant: %s", gotOut, tt.wantOutIndent)
 				}
 			}
 		})
 	}
 }
+
+var expandedRE = regexp.MustCompile(":  +")
+
+// This works only for the test cases above.
+func removeRandomSpace(b []byte, useIndent bool) string {
+	s := string(b)
+	if useIndent {
+		return expandedRE.ReplaceAllString(s, ": ")
+	}
+	s = strings.Replace(s, "  ", " ", -1)
+	s = strings.Replace(s, " }", "}", -1)
+	s = strings.Replace(s, " >", ">", -1)
+	return strings.TrimRight(s, " ")
+}