mirror of
https://github.com/restic/restic.git
synced 2024-09-06 19:39:26 +02:00
Among others, this updates minio-go, so that the new "eu-west-3" zone for AWS is supported.
127 lines
2.9 KiB
Go
127 lines
2.9 KiB
Go
// Copyright 2017 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.
|
|
|
|
package pipeline
|
|
|
|
import (
|
|
"bufio"
|
|
"bytes"
|
|
"encoding/json"
|
|
"flag"
|
|
"fmt"
|
|
"io/ioutil"
|
|
"os"
|
|
"path"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
|
|
"golang.org/x/text/language"
|
|
)
|
|
|
|
var genFiles = flag.Bool("gen", false, "generate output files instead of comparing")
|
|
|
|
// setHelper is testing.T.Helper on Go 1.9+, overridden by go19_test.go.
|
|
var setHelper = func(t *testing.T) {}
|
|
|
|
func TestFullCycle(t *testing.T) {
|
|
const path = "./testdata"
|
|
dirs, err := ioutil.ReadDir(path)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
for _, f := range dirs {
|
|
t.Run(f.Name(), func(t *testing.T) {
|
|
chk := func(t *testing.T, err error) {
|
|
setHelper(t)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
dir := filepath.Join(path, f.Name())
|
|
pkgPath := fmt.Sprintf("%s/%s", path, f.Name())
|
|
config := Config{
|
|
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)
|
|
chk(t, err)
|
|
chk(t, s.Import())
|
|
chk(t, s.Merge())
|
|
// TODO:
|
|
// for range s.Config.Actions {
|
|
// // TODO: do the actions.
|
|
// }
|
|
chk(t, s.Export())
|
|
chk(t, s.Generate())
|
|
|
|
writeJSON(t, filepath.Join(dir, "extracted.gotext.json"), s.Extracted)
|
|
checkOutput(t, dir)
|
|
})
|
|
}
|
|
}
|
|
|
|
func checkOutput(t *testing.T, p string) {
|
|
filepath.Walk(p, func(p string, f os.FileInfo, err error) error {
|
|
if f.IsDir() {
|
|
return nil
|
|
}
|
|
if filepath.Ext(p) != ".want" {
|
|
return nil
|
|
}
|
|
gotFile := p[:len(p)-len(".want")]
|
|
got, err := ioutil.ReadFile(gotFile)
|
|
if err != nil {
|
|
t.Errorf("failed to read %q", p)
|
|
return nil
|
|
}
|
|
if *genFiles {
|
|
if err := ioutil.WriteFile(p, got, 0644); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
want, err := ioutil.ReadFile(p)
|
|
if err != nil {
|
|
t.Errorf("failed to read %q", p)
|
|
} else {
|
|
scanGot := bufio.NewScanner(bytes.NewReader(got))
|
|
scanWant := bufio.NewScanner(bytes.NewReader(want))
|
|
line := 0
|
|
clean := func(s string) string {
|
|
if i := strings.LastIndex(s, "//"); i != -1 {
|
|
s = s[:i]
|
|
}
|
|
return path.Clean(filepath.ToSlash(s))
|
|
}
|
|
for scanGot.Scan() && scanWant.Scan() {
|
|
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
|
|
}
|
|
line++
|
|
}
|
|
if scanGot.Scan() || scanWant.Scan() {
|
|
t.Errorf("file %q differs from .want file at line %d.", gotFile, line)
|
|
}
|
|
}
|
|
return nil
|
|
})
|
|
}
|
|
|
|
func writeJSON(t *testing.T, path string, x interface{}) {
|
|
data, err := json.MarshalIndent(x, "", " ")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := ioutil.WriteFile(path, data, 0644); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|