diff --git a/go.mod b/go.mod index 0915e02..684fa25 100644 --- a/go.mod +++ b/go.mod @@ -1,5 +1,13 @@ 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 +) diff --git a/go.sum b/go.sum index e387ff0..c221f64 100644 --- a/go.sum +++ b/go.sum @@ -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/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/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/templatestrings.go b/templatestrings.go index 3c0673c..83ef8a1 100644 --- a/templatestrings.go +++ b/templatestrings.go @@ -2,6 +2,7 @@ package templatestrings import ( "errors" + "io/fs" "os" "path/filepath" @@ -15,6 +16,11 @@ type TemplateStrings struct { // Load the strings from the specified files into memory 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{ map[string]map[string]string{}, defaultVariant, diff --git a/templatestrings_test.go b/templatestrings_test.go index 214235b..f87bcfe 100644 --- a/templatestrings_test.go +++ b/templatestrings_test.go @@ -1,122 +1,91 @@ package templatestrings import ( + "embed" "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) +//go:embed testdata/* +var embeddedTestData embed.FS + func TestAll(t *testing.T) { t.Run("Faulty initialization", func(t *testing.T) { _, err := InitTemplateStrings("testdata", ".yaml", "en", "faulty") - if err == nil { - t.Error() - } + require.Error(t, err) }) t.Run("Missing dir", func(t *testing.T) { _, err := InitTemplateStrings("testdata/x", ".yaml", "en") - if err == nil { - t.Error() - } + require.Error(t, err) }) t.Run("Missing file", func(t *testing.T) { _, err := InitTemplateStrings("testdata", ".yaml", "en", "x") - if err != nil { - t.Error() - } + require.NoError(t, err) }) t.Run("File as directory", func(t *testing.T) { _, err := InitTemplateStrings("testdata/en.yaml", ".yaml", "en") - if err == nil { - t.Error() - } + require.Error(t, err) }) t.Run("Missing default variant", func(t *testing.T) { _, err := InitTemplateStrings("testdata", ".yaml", "x", "en") - if err == nil { - t.Error() - } + require.Error(t, err) }) t.Run("No variants", func(t *testing.T) { _, err := InitTemplateStrings("testdata", ".yaml", "x") - if err == nil { - t.Error() - } + require.Error(t, err) }) t.Run("Language twice", func(t *testing.T) { _, err := InitTemplateStrings("testdata", ".yaml", "en", "en", "de") - if err != nil { - t.Error() - } + require.NoError(t, err) }) t.Run("Empty language", func(t *testing.T) { _, err := InitTemplateStrings("testdata", ".yaml", "") - if err == nil { - t.Error() - } + require.Error(t, err) }) t.Run("Wrong number of inputs", func(t *testing.T) { ts, err := InitTemplateStrings("testdata", ".yaml", "en", "de") - if err != nil { - t.FailNow() - } - if ts.GetTemplateStringVariant("simple", "en", "x") != "" { - t.Error() - } + require.NoError(t, err) + assert.Empty(t, ts.GetTemplateStringVariant("simple", "en", "x")) }) t.Run("Default variant", func(t *testing.T) { ts, err := InitTemplateStrings("testdata", ".yaml", "en", "de") - if err != nil { - t.FailNow() - } - if ts.GetTemplateStringVariant("simple") != "Simple" { - t.Error() - } + require.NoError(t, err) + assert.Equal(t, "Simple", ts.GetTemplateStringVariant("simple")) }) t.Run("Specified variant", func(t *testing.T) { ts, err := InitTemplateStrings("testdata", ".yaml", "en", "de") - if err != nil { - t.FailNow() - } - if ts.GetTemplateStringVariant("en", "simple") != "Simple" { - t.Error() - } - if ts.GetTemplateStringVariant("de", "simple") != "Einfach" { - t.Error() - } + require.NoError(t, err) + assert.Equal(t, "Simple", ts.GetTemplateStringVariant("en", "simple")) + assert.Equal(t, "Einfach", ts.GetTemplateStringVariant("de", "simple")) }) t.Run("Fallback to default variant", func(t *testing.T) { ts, err := InitTemplateStrings("testdata", ".yaml", "en", "de") - if err != nil { - t.FailNow() - } - if ts.GetTemplateStringVariant("de", "fallback") != "Fallback" { - t.Error() - } + require.NoError(t, err) + assert.Equal(t, "Fallback", ts.GetTemplateStringVariant("de", "fallback")) }) t.Run("Missing variant", func(t *testing.T) { ts, err := InitTemplateStrings("testdata", ".yaml", "en", "de") - if err != nil { - t.FailNow() - } - if ts.GetTemplateStringVariant("x", "simple") != "Simple" { - t.Error() - } + require.NoError(t, err) + assert.Equal(t, "Simple", ts.GetTemplateStringVariant("x", "simple")) }) t.Run("Missing string", func(t *testing.T) { ts, err := InitTemplateStrings("testdata", ".yaml", "en", "de") - if err != nil { - t.FailNow() - } - if ts.GetTemplateStringVariant("x") != "" { - t.Error() - } + require.NoError(t, err) + assert.Empty(t, ts.GetTemplateStringVariant("x")) }) t.Run("Template func", func(t *testing.T) { ts, err := InitTemplateStrings("testdata", ".yaml", "en", "de") - if err != nil { - t.FailNow() - } - if ts.GetTemplateStringVariantFunc()("simple") != "Simple" { - t.Error() - } + require.NoError(t, err) + assert.Equal(t, "Simple", ts.GetTemplateStringVariantFunc()("simple")) + }) + + // 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")) }) }