1
Fork 0

Support using FS

This commit is contained in:
Jan-Lukas Else 2022-02-10 11:15:39 +01:00
parent cfa3bd35ae
commit 6a4e1cfaf1
4 changed files with 63 additions and 71 deletions

12
go.mod
View File

@ -1,5 +1,13 @@
module git.jlel.se/jlelse/template-strings module git.jlel.se/jlelse/template-strings
go 1.16 go 1.17
require gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b require (
github.com/stretchr/testify v1.7.0
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b
)
require (
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
)

9
go.sum
View File

@ -1,4 +1,13 @@
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo=
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

View File

@ -2,6 +2,7 @@ package templatestrings
import ( import (
"errors" "errors"
"io/fs"
"os" "os"
"path/filepath" "path/filepath"
@ -15,6 +16,11 @@ type TemplateStrings struct {
// Load the strings from the specified files into memory // Load the strings from the specified files into memory
func InitTemplateStrings(stringsDir string, fileExt string, defaultVariant string, otherVariants ...string) (*TemplateStrings, error) { func InitTemplateStrings(stringsDir string, fileExt string, defaultVariant string, otherVariants ...string) (*TemplateStrings, error) {
return InitTemplateStringsFS(os.DirFS("."), stringsDir, fileExt, defaultVariant, otherVariants...)
}
// Load the strings from the specified files using a file system into memory
func InitTemplateStringsFS(filesystem fs.FS, stringsDir string, fileExt string, defaultVariant string, otherVariants ...string) (*TemplateStrings, error) {
ts := &TemplateStrings{ ts := &TemplateStrings{
map[string]map[string]string{}, map[string]map[string]string{},
defaultVariant, defaultVariant,

View File

@ -1,122 +1,91 @@
package templatestrings package templatestrings
import ( import (
"embed"
"testing" "testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
) )
//go:embed testdata/*
var embeddedTestData embed.FS
func TestAll(t *testing.T) { func TestAll(t *testing.T) {
t.Run("Faulty initialization", func(t *testing.T) { t.Run("Faulty initialization", func(t *testing.T) {
_, err := InitTemplateStrings("testdata", ".yaml", "en", "faulty") _, err := InitTemplateStrings("testdata", ".yaml", "en", "faulty")
if err == nil { require.Error(t, err)
t.Error()
}
}) })
t.Run("Missing dir", func(t *testing.T) { t.Run("Missing dir", func(t *testing.T) {
_, err := InitTemplateStrings("testdata/x", ".yaml", "en") _, err := InitTemplateStrings("testdata/x", ".yaml", "en")
if err == nil { require.Error(t, err)
t.Error()
}
}) })
t.Run("Missing file", func(t *testing.T) { t.Run("Missing file", func(t *testing.T) {
_, err := InitTemplateStrings("testdata", ".yaml", "en", "x") _, err := InitTemplateStrings("testdata", ".yaml", "en", "x")
if err != nil { require.NoError(t, err)
t.Error()
}
}) })
t.Run("File as directory", func(t *testing.T) { t.Run("File as directory", func(t *testing.T) {
_, err := InitTemplateStrings("testdata/en.yaml", ".yaml", "en") _, err := InitTemplateStrings("testdata/en.yaml", ".yaml", "en")
if err == nil { require.Error(t, err)
t.Error()
}
}) })
t.Run("Missing default variant", func(t *testing.T) { t.Run("Missing default variant", func(t *testing.T) {
_, err := InitTemplateStrings("testdata", ".yaml", "x", "en") _, err := InitTemplateStrings("testdata", ".yaml", "x", "en")
if err == nil { require.Error(t, err)
t.Error()
}
}) })
t.Run("No variants", func(t *testing.T) { t.Run("No variants", func(t *testing.T) {
_, err := InitTemplateStrings("testdata", ".yaml", "x") _, err := InitTemplateStrings("testdata", ".yaml", "x")
if err == nil { require.Error(t, err)
t.Error()
}
}) })
t.Run("Language twice", func(t *testing.T) { t.Run("Language twice", func(t *testing.T) {
_, err := InitTemplateStrings("testdata", ".yaml", "en", "en", "de") _, err := InitTemplateStrings("testdata", ".yaml", "en", "en", "de")
if err != nil { require.NoError(t, err)
t.Error()
}
}) })
t.Run("Empty language", func(t *testing.T) { t.Run("Empty language", func(t *testing.T) {
_, err := InitTemplateStrings("testdata", ".yaml", "") _, err := InitTemplateStrings("testdata", ".yaml", "")
if err == nil { require.Error(t, err)
t.Error()
}
}) })
t.Run("Wrong number of inputs", func(t *testing.T) { t.Run("Wrong number of inputs", func(t *testing.T) {
ts, err := InitTemplateStrings("testdata", ".yaml", "en", "de") ts, err := InitTemplateStrings("testdata", ".yaml", "en", "de")
if err != nil { require.NoError(t, err)
t.FailNow() assert.Empty(t, ts.GetTemplateStringVariant("simple", "en", "x"))
}
if ts.GetTemplateStringVariant("simple", "en", "x") != "" {
t.Error()
}
}) })
t.Run("Default variant", func(t *testing.T) { t.Run("Default variant", func(t *testing.T) {
ts, err := InitTemplateStrings("testdata", ".yaml", "en", "de") ts, err := InitTemplateStrings("testdata", ".yaml", "en", "de")
if err != nil { require.NoError(t, err)
t.FailNow() assert.Equal(t, "Simple", ts.GetTemplateStringVariant("simple"))
}
if ts.GetTemplateStringVariant("simple") != "Simple" {
t.Error()
}
}) })
t.Run("Specified variant", func(t *testing.T) { t.Run("Specified variant", func(t *testing.T) {
ts, err := InitTemplateStrings("testdata", ".yaml", "en", "de") ts, err := InitTemplateStrings("testdata", ".yaml", "en", "de")
if err != nil { require.NoError(t, err)
t.FailNow() assert.Equal(t, "Simple", ts.GetTemplateStringVariant("en", "simple"))
} assert.Equal(t, "Einfach", ts.GetTemplateStringVariant("de", "simple"))
if ts.GetTemplateStringVariant("en", "simple") != "Simple" {
t.Error()
}
if ts.GetTemplateStringVariant("de", "simple") != "Einfach" {
t.Error()
}
}) })
t.Run("Fallback to default variant", func(t *testing.T) { t.Run("Fallback to default variant", func(t *testing.T) {
ts, err := InitTemplateStrings("testdata", ".yaml", "en", "de") ts, err := InitTemplateStrings("testdata", ".yaml", "en", "de")
if err != nil { require.NoError(t, err)
t.FailNow() assert.Equal(t, "Fallback", ts.GetTemplateStringVariant("de", "fallback"))
}
if ts.GetTemplateStringVariant("de", "fallback") != "Fallback" {
t.Error()
}
}) })
t.Run("Missing variant", func(t *testing.T) { t.Run("Missing variant", func(t *testing.T) {
ts, err := InitTemplateStrings("testdata", ".yaml", "en", "de") ts, err := InitTemplateStrings("testdata", ".yaml", "en", "de")
if err != nil { require.NoError(t, err)
t.FailNow() assert.Equal(t, "Simple", ts.GetTemplateStringVariant("x", "simple"))
}
if ts.GetTemplateStringVariant("x", "simple") != "Simple" {
t.Error()
}
}) })
t.Run("Missing string", func(t *testing.T) { t.Run("Missing string", func(t *testing.T) {
ts, err := InitTemplateStrings("testdata", ".yaml", "en", "de") ts, err := InitTemplateStrings("testdata", ".yaml", "en", "de")
if err != nil { require.NoError(t, err)
t.FailNow() assert.Empty(t, ts.GetTemplateStringVariant("x"))
}
if ts.GetTemplateStringVariant("x") != "" {
t.Error()
}
}) })
t.Run("Template func", func(t *testing.T) { t.Run("Template func", func(t *testing.T) {
ts, err := InitTemplateStrings("testdata", ".yaml", "en", "de") ts, err := InitTemplateStrings("testdata", ".yaml", "en", "de")
if err != nil { require.NoError(t, err)
t.FailNow() assert.Equal(t, "Simple", ts.GetTemplateStringVariantFunc()("simple"))
} })
if ts.GetTemplateStringVariantFunc()("simple") != "Simple" {
t.Error() // Test using embedded strings
} t.Run("Specified variant", func(t *testing.T) {
ts, err := InitTemplateStringsFS(embeddedTestData, "testdata", ".yaml", "en", "de")
require.NoError(t, err)
assert.Equal(t, "Simple", ts.GetTemplateStringVariant("en", "simple"))
assert.Equal(t, "Einfach", ts.GetTemplateStringVariant("de", "simple"))
}) })
} }