aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/gotext.go49
-rw-r--r--tests/gotext.go47
2 files changed, 56 insertions, 40 deletions
diff --git a/src/gotext.go b/src/gotext.go
index 152b33c..0ac104e 100644
--- a/src/gotext.go
+++ b/src/gotext.go
@@ -8,7 +8,6 @@ import (
"go/token"
"io"
"io/ioutil"
- "log"
"os"
"sort"
"strings"
@@ -84,9 +83,14 @@ type argsT struct{
keywordPlural string
}
+type envT struct{
+ args argsT
+ in io.Reader
+ out io.Writer
+ err io.Writer
+}
-var msgIDs map[string][]msgID
func formatComment(com string) string {
out := ""
@@ -160,6 +164,7 @@ func constructValue(val interface{}) string {
func inspectNodeForTranslations(
args argsT,
+ msgIDs map[string][]msgID,
fset *token.FileSet,
f *ast.File,
n ast.Node,
@@ -227,6 +232,7 @@ func inspectNodeForTranslations(
msgidStr := formatI18nStr(i18nStr)
posCall := fset.Position(n.Pos())
+
msgIDs[msgidStr] = append(msgIDs[msgidStr], msgID{
formatHint: formatHint,
msgidPlural: formatI18nStr(i18nStrPlural),
@@ -257,22 +263,24 @@ func formatI18nStr(s string) string {
return s
}
-func processFiles(args argsT) error {
+func processFiles(args argsT) (map[string][]msgID, error) {
// go over the input files
- msgIDs = make(map[string][]msgID)
+ msgIDs := map[string][]msgID{}
fset := token.NewFileSet()
for _, fname := range args.subArgs {
- if err := processSingleGoSource(args, fset, fname); err != nil {
- return err
+ err := processSingleGoSource(args, msgIDs, fset, fname)
+ if err != nil {
+ return nil, err
}
}
- return nil
+ return msgIDs, nil
}
func processSingleGoSource(
args argsT,
+ msgIDs map[string][]msgID,
fset *token.FileSet,
fname string,
) error {
@@ -288,7 +296,7 @@ func processSingleGoSource(
}
ast.Inspect(f, func(n ast.Node) bool {
- return inspectNodeForTranslations(args, fset, f, n)
+ return inspectNodeForTranslations(args, msgIDs, fset, f, n)
})
return nil
@@ -308,8 +316,7 @@ func formatOutput(in string) string {
}
}
-func writePotFile(out io.Writer) {
-
+func writePotFile(out io.Writer, msgIDs map[string][]msgID) {
header := g.Heredoc(`
#, fuzzy
msgid ""
@@ -358,7 +365,6 @@ func writePotFile(out io.Writer) {
}
fmt.Fprintf(out, "\n")
}
-
}
func usage(argv0 string, w io.Writer) {
@@ -408,6 +414,16 @@ func getopt(allArgs []string, w io.Writer) (argsT, int) {
}, 0
}
+func run(env envT) int {
+ msgIDs, err := processFiles(env.args)
+ if err != nil {
+ fmt.Fprintln(env.err, err)
+ return 1
+ }
+
+ writePotFile(os.Stdout, msgIDs)
+ return 0
+}
func Main() {
// parse args
@@ -421,12 +437,13 @@ func Main() {
g.Init()
args, rc := getopt(os.Args, os.Stderr)
g.ExitIf(rc)
+ os.Exit(run(envT{
+ args: args,
+ in: os.Stdin,
+ out: os.Stdout,
+ err: os.Stderr,
+ }))
- if err := processFiles(args); err != nil {
- log.Fatalf("processFiles failed with: %s", err)
- }
-
- writePotFile(os.Stdout)
}
// SetLocale sets the program's current locale.
diff --git a/tests/gotext.go b/tests/gotext.go
index da57254..25f0f3a 100644
--- a/tests/gotext.go
+++ b/tests/gotext.go
@@ -52,7 +52,7 @@ func test_processFiles() {
}
`))
defer os.Remove(fname)
- g.TErrorIf(processFiles(argsT{
+ msgIDs := g.TMust(processFiles(argsT{
subArgs: []string{fname},
keyword: "i18n.G",
}))
@@ -81,7 +81,7 @@ func test_processFiles() {
}
`))
defer os.Remove(fname)
- g.TErrorIf(processFiles(argsT{
+ msgIDs := g.TMust(processFiles(argsT{
subArgs: []string{fname},
keyword: "i18n.G",
}))
@@ -103,7 +103,6 @@ func test_processFiles() {
})
g.Testing("process files with concat", func() {
- msgIDs = nil
fname := src(g.Heredoc(`
package main
@@ -112,7 +111,7 @@ func test_processFiles() {
i18n.G("foo\n" + "bar\n" + "baz")
}
`))
- g.TErrorIf(processFiles(argsT{
+ msgIDs := g.TMust(processFiles(argsT{
subArgs: []string{fname},
keyword: "i18n.G",
}))
@@ -137,13 +136,13 @@ func test_processFiles() {
}
`), "`"))
defer os.Remove(fname)
- g.TErrorIf(processFiles(argsT{
+ msgIDs := g.TMust(processFiles(argsT{
subArgs: []string{fname},
keyword: "i18n.G",
}))
out := bytes.NewBuffer([]byte(""))
- writePotFile(out)
+ writePotFile(out, msgIDs)
expected := fmt.Sprintf(g.Heredoc(`
#, fuzzy
@@ -167,7 +166,7 @@ func test_writePotFile() {
g.TestStart("writePotFile()")
g.Testing("write simple file", func() {
- msgIDs = map[string][]msgID{
+ msgIDs := map[string][]msgID{
"foo": []msgID{
{
fname: "fname",
@@ -177,7 +176,7 @@ func test_writePotFile() {
},
}
out := bytes.NewBuffer([]byte(""))
- writePotFile(out)
+ writePotFile(out, msgIDs)
expected := g.Heredoc(`
#, fuzzy
@@ -198,7 +197,7 @@ func test_writePotFile() {
})
g.Testing("write template with 2 entries", func() {
- msgIDs = map[string][]msgID{
+ msgIDs := map[string][]msgID{
"foo": []msgID{
{
fname: "fname",
@@ -213,7 +212,7 @@ func test_writePotFile() {
},
}
out := bytes.NewBuffer([]byte(""))
- writePotFile(out)
+ writePotFile(out, msgIDs)
expected := g.Heredoc(`
#, fuzzy
@@ -235,7 +234,7 @@ func test_writePotFile() {
})
g.Testing("template without comment", func() {
- msgIDs = map[string][]msgID{
+ msgIDs := map[string][]msgID{
"foo": []msgID{
{
fname: "fname",
@@ -244,7 +243,7 @@ func test_writePotFile() {
},
}
out := bytes.NewBuffer([]byte(""))
- writePotFile(out)
+ writePotFile(out, msgIDs)
expected := g.Heredoc(`
#, fuzzy
@@ -264,7 +263,7 @@ func test_writePotFile() {
})
g.Testing("output without location", func() {
- msgIDs = map[string][]msgID{
+ msgIDs := map[string][]msgID{
"foo": []msgID{
{
fname: "fname",
@@ -274,7 +273,7 @@ func test_writePotFile() {
}
out := bytes.NewBuffer([]byte(""))
- writePotFile(out)
+ writePotFile(out, msgIDs)
expected := g.Heredoc(`
#, fuzzy
@@ -294,7 +293,7 @@ func test_writePotFile() {
})
g.Testing("output with hint", func() {
- msgIDs = map[string][]msgID{
+ msgIDs := map[string][]msgID{
"foo": []msgID{
{
fname: "fname",
@@ -305,7 +304,7 @@ func test_writePotFile() {
}
out := bytes.NewBuffer([]byte(""))
- writePotFile(out)
+ writePotFile(out, msgIDs)
expected := g.Heredoc(`
#, fuzzy
@@ -326,7 +325,7 @@ func test_writePotFile() {
})
g.Testing("output with plural", func() {
- msgIDs = map[string][]msgID{
+ msgIDs := map[string][]msgID{
"foo": []msgID{
{
msgidPlural: "plural",
@@ -337,7 +336,7 @@ func test_writePotFile() {
}
out := bytes.NewBuffer([]byte(""))
- writePotFile(out)
+ writePotFile(out, msgIDs)
expected := g.Heredoc(`
#, fuzzy
@@ -359,7 +358,7 @@ func test_writePotFile() {
})
g.Testing("multiline output", func() {
- msgIDs = map[string][]msgID{
+ msgIDs := map[string][]msgID{
"foo\\nbar\\nbaz": []msgID{
{
fname: "fname",
@@ -369,7 +368,7 @@ func test_writePotFile() {
},
}
out := bytes.NewBuffer([]byte(""))
- writePotFile(out)
+ writePotFile(out, msgIDs)
expected := g.Heredoc(`
#, fuzzy
msgid ""
@@ -392,7 +391,7 @@ func test_writePotFile() {
})
g.Testing("output tidy output", func() {
- msgIDs = map[string][]msgID{
+ msgIDs := map[string][]msgID{
"foo\\nbar\\nbaz": []msgID{
{
fname: "fname",
@@ -407,7 +406,7 @@ func test_writePotFile() {
},
}
out := bytes.NewBuffer([]byte(""))
- writePotFile(out)
+ writePotFile(out, msgIDs)
expected := g.Heredoc(`
#, fuzzy
msgid ""
@@ -441,13 +440,13 @@ func test_writePotFile() {
}
`))
defer os.Remove(fname)
- g.TErrorIf(processFiles(argsT{
+ msgIDs := g.TMust(processFiles(argsT{
subArgs: []string{fname},
keyword: "i18n.G",
}))
out := bytes.NewBuffer([]byte(""))
- writePotFile(out)
+ writePotFile(out, msgIDs)
expected := fmt.Sprintf(g.Heredoc(`
#, fuzzy