message/pipeline: set fallback language for tests

also add catalog comparison file.

Change-Id: I66c066fb52b8fb74d05a4be6d89a1f4ad3e701f8
Reviewed-on: https://go-review.googlesource.com/83817
Run-TryBot: Marcel van Lohuizen <mpvl@golang.org>
Reviewed-by: Nigel Tao <nigeltao@golang.org>
diff --git a/message/pipeline/pipeline_test.go b/message/pipeline/pipeline_test.go
index cb1d3b5..327e90d 100644
--- a/message/pipeline/pipeline_test.go
+++ b/message/pipeline/pipeline_test.go
@@ -14,7 +14,10 @@
 	"os"
 	"path"
 	"path/filepath"
+	"strings"
 	"testing"
+
+	"golang.org/x/text/language"
 )
 
 var genFiles = flag.Bool("gen", false, "generate output files instead of comparing")
@@ -36,10 +39,11 @@
 			dir := filepath.Join(path, f.Name())
 			pkgPath := fmt.Sprintf("%s/%s", path, f.Name())
 			config := Config{
-				Packages:   []string{pkgPath},
-				Dir:        filepath.Join(dir, "locales"),
-				GenFile:    "catalog_gen.go",
-				GenPackage: pkgPath,
+				SourceLanguage: language.AmericanEnglish,
+				Packages:       []string{pkgPath},
+				Dir:            filepath.Join(dir, "locales"),
+				GenFile:        "catalog_gen.go",
+				GenPackage:     pkgPath,
 			}
 			// TODO: load config if available.
 			s, err := Extract(&config)
@@ -85,9 +89,19 @@
 			scanGot := bufio.NewScanner(bytes.NewReader(got))
 			scanWant := bufio.NewScanner(bytes.NewReader(want))
 			line := 0
+			clean := func(s string) string {
+				s = path.Clean(filepath.ToSlash(s))
+				if i := strings.LastIndex(s, "Size:"); i != -1 {
+					s = s[:i]
+				}
+				if i := strings.LastIndex(s, "Total table size"); i != -1 {
+					s = s[:i]
+				}
+				return s
+			}
 			for scanGot.Scan() && scanWant.Scan() {
-				got := path.Clean(filepath.ToSlash(scanGot.Text()))
-				want := path.Clean(filepath.ToSlash(scanWant.Text()))
+				got := clean(scanGot.Text())
+				want := clean(scanWant.Text())
 				if got != want {
 					t.Errorf("file %q differs from .want file at line %d:\n\t%s\n\t%s", gotFile, line, got, want)
 					break
diff --git a/message/pipeline/testdata/test1/catalog_gen.go b/message/pipeline/testdata/test1/catalog_gen.go
index 08ab3b8..8195287 100644
--- a/message/pipeline/testdata/test1/catalog_gen.go
+++ b/message/pipeline/testdata/test1/catalog_gen.go
@@ -28,7 +28,7 @@
 		"en_US": &dictionary{index: en_USIndex, data: en_USData},
 		"zh":    &dictionary{index: zhIndex, data: zhData},
 	}
-	fallback := language.MustParse("und")
+	fallback := language.MustParse("en-US")
 	cat, err := catalog.NewFromMap(dict, catalog.Fallback(fallback))
 	if err != nil {
 		panic(err)
diff --git a/message/pipeline/testdata/test1/catalog_gen.go.want b/message/pipeline/testdata/test1/catalog_gen.go.want
new file mode 100644
index 0000000..8195287
--- /dev/null
+++ b/message/pipeline/testdata/test1/catalog_gen.go.want
@@ -0,0 +1,83 @@
+// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
+
+package main
+
+import (
+	"golang.org/x/text/language"
+	"golang.org/x/text/message"
+	"golang.org/x/text/message/catalog"
+)
+
+type dictionary struct {
+	index []uint32
+	data  string
+}
+
+func (d *dictionary) Lookup(key string) (data string, ok bool) {
+	p := messageKeyToIndex[key]
+	start, end := d.index[p], d.index[p+1]
+	if start == end {
+		return "", false
+	}
+	return d.data[start:end], true
+}
+
+func init() {
+	dict := map[string]catalog.Dictionary{
+		"de":    &dictionary{index: deIndex, data: deData},
+		"en_US": &dictionary{index: en_USIndex, data: en_USData},
+		"zh":    &dictionary{index: zhIndex, data: zhData},
+	}
+	fallback := language.MustParse("en-US")
+	cat, err := catalog.NewFromMap(dict, catalog.Fallback(fallback))
+	if err != nil {
+		panic(err)
+	}
+	message.DefaultCatalog = cat
+}
+
+var messageKeyToIndex = map[string]int{
+	"%.2[1]f miles traveled (%[1]f)": 7,
+	"%[1]s is visiting %[3]s!\n":     3,
+	"%d files remaining!":            4,
+	"%d more files remaining!":       5,
+	"%s is out of order!":            6,
+	"%s is visiting %s!\n":           2,
+	"Hello %s!\n":                    1,
+	"Hello world!\n":                 0,
+}
+
+var deIndex = []uint32{ // 9 elements
+	0x00000000, 0x00000011, 0x00000023, 0x0000003d,
+	0x00000057, 0x00000075, 0x00000094, 0x00000094,
+	0x00000094,
+} // Size: 60 bytes
+
+const deData string = "" + // Size: 148 bytes
+	"\x04\x00\x01\x0a\x0c\x02Hallo Welt!\x04\x00\x01\x0a\x0d\x02Hallo %[1]s!" +
+	"\x04\x00\x01\x0a\x15\x02%[1]s besucht %[2]s!\x04\x00\x01\x0a\x15\x02%[1]" +
+	"s besucht %[3]s!\x02Noch zwei Bestände zu gehen!\x02Noch %[1]d Bestände " +
+	"zu gehen!"
+
+var en_USIndex = []uint32{ // 9 elements
+	0x00000000, 0x00000012, 0x00000024, 0x00000042,
+	0x00000060, 0x00000060, 0x000000a3, 0x000000ba,
+	0x000000d9,
+} // Size: 60 bytes
+
+const en_USData string = "" + // Size: 217 bytes
+	"\x04\x00\x01\x0a\x0d\x02Hello world!\x04\x00\x01\x0a\x0d\x02Hello %[1]s!" +
+	"\x04\x00\x01\x0a\x19\x02%[1]s is visiting %[2]s!\x04\x00\x01\x0a\x19\x02" +
+	"%[1]s is visiting %[3]s!\x14\x01\x81\x01\x00\x02\x14\x02One file remaini" +
+	"ng!\x00&\x02There are %[1]d more files remaining!\x02%[1]s is out of ord" +
+	"er!\x02%.2[1]f miles traveled (%[1]f)"
+
+var zhIndex = []uint32{ // 9 elements
+	0x00000000, 0x00000000, 0x00000000, 0x00000000,
+	0x00000000, 0x00000000, 0x00000000, 0x00000000,
+	0x00000000,
+} // Size: 60 bytes
+
+const zhData string = ""
+
+// Total table size 545 bytes (0KiB); checksum: 343E0210
diff --git a/message/pipeline/testdata/test1/extracted.gotext.json b/message/pipeline/testdata/test1/extracted.gotext.json
index e109c32..4d317af 100644
--- a/message/pipeline/testdata/test1/extracted.gotext.json
+++ b/message/pipeline/testdata/test1/extracted.gotext.json
@@ -1,5 +1,5 @@
 {
-    "language": "und",
+    "language": "en-US",
     "messages": [
         {
             "id": "Hello world!",
diff --git a/message/pipeline/testdata/test1/extracted.gotext.json.want b/message/pipeline/testdata/test1/extracted.gotext.json.want
index e109c32..4d317af 100644
--- a/message/pipeline/testdata/test1/extracted.gotext.json.want
+++ b/message/pipeline/testdata/test1/extracted.gotext.json.want
@@ -1,5 +1,5 @@
 {
-    "language": "und",
+    "language": "en-US",
     "messages": [
         {
             "id": "Hello world!",