-
Notifications
You must be signed in to change notification settings - Fork 91
/
Copy pathfile_loader_test.go
123 lines (103 loc) · 3.35 KB
/
file_loader_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
package translation
import (
"os"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/suite"
"github.com/goravel/framework/contracts/foundation"
"github.com/goravel/framework/errors"
"github.com/goravel/framework/foundation/json"
"github.com/goravel/framework/support/env"
"github.com/goravel/framework/support/file"
)
type FileLoaderTestSuite struct {
suite.Suite
json foundation.Json
}
func TestFileLoaderTestSuite(t *testing.T) {
suite.Run(t, &FileLoaderTestSuite{})
}
func (f *FileLoaderTestSuite) SetupSuite() {
assert.Nil(f.T(), file.PutContent("lang/en/test.json", `{"foo": "bar", "baz": {"foo": "bar"}}`))
assert.Nil(f.T(), file.PutContent("lang/en/another/test.json", `{"foo": "backagebar", "baz": "backagesplash"}`))
assert.Nil(f.T(), file.PutContent("lang/another/en/test.json", `{"foo": "backagebar", "baz": "backagesplash"}`))
assert.Nil(f.T(), file.PutContent("lang/en/invalid/test.json", `{"foo": "bar",}`))
assert.Nil(f.T(), file.PutContent("lang/cn.json", `{"foo": "bar", "baz": {"foo": "bar"}}`))
restrictedFilePath := "lang/en/restricted/test.json"
assert.Nil(f.T(), file.PutContent(restrictedFilePath, `{"foo": "restricted"}`))
assert.Nil(f.T(), os.Chmod(restrictedFilePath, 0000))
}
func (f *FileLoaderTestSuite) TearDownSuite() {
f.Nil(file.Remove("lang"))
}
func (f *FileLoaderTestSuite) SetupTest() {
f.json = json.NewJson()
}
func (f *FileLoaderTestSuite) TestLoad() {
paths := []string{"./lang"}
loader := NewFileLoader(paths, f.json)
translations, err := loader.Load("en", "test")
f.NoError(err)
f.NotNil(translations)
f.Equal("bar", translations["foo"])
f.Equal("bar", translations["baz"].(map[string]any)["foo"])
translations, err = loader.Load("cn", "*")
f.NoError(err)
f.NotNil(translations)
f.Equal("bar", translations["foo"])
f.Equal("bar", translations["baz"].(map[string]any)["foo"])
paths = []string{"./lang/another", "./lang"}
loader = NewFileLoader(paths, f.json)
translations, err = loader.Load("en", "test")
f.NoError(err)
f.NotNil(translations)
f.Equal("backagebar", translations["foo"])
paths = []string{"./lang"}
loader = NewFileLoader(paths, f.json)
translations, err = loader.Load("en", "another/test")
f.NoError(err)
f.NotNil(translations)
f.Equal("backagebar", translations["foo"])
paths = []string{"./lang"}
loader = NewFileLoader(paths, f.json)
translations, err = loader.Load("en", "restricted/test")
if env.IsWindows() {
f.NoError(err)
f.NotNil(translations)
f.Equal("restricted", translations["foo"])
} else {
f.Error(err)
f.Nil(translations)
}
}
func (f *FileLoaderTestSuite) TestLoadNonExistentFile() {
paths := []string{"./lang"}
loader := NewFileLoader(paths, f.json)
translations, err := loader.Load("hi", "test")
f.Error(err)
f.Nil(translations)
f.EqualError(err, errors.LangFileNotExist.Error())
}
func (f *FileLoaderTestSuite) TestLoadInvalidJSON() {
paths := []string{"./lang"}
loader := NewFileLoader(paths, f.json)
translations, err := loader.Load("en", "invalid/test")
f.Error(err)
f.Nil(translations)
}
func Benchmark_Load(b *testing.B) {
s := new(FileLoaderTestSuite)
s.SetT(&testing.T{})
s.SetupSuite()
s.SetupTest()
b.StartTimer()
b.ResetTimer()
paths := []string{"./lang"}
loader := NewFileLoader(paths, s.json)
for i := 0; i < b.N; i++ {
_, err := loader.Load("en", "test")
s.NoError(err)
}
b.StopTimer()
s.TearDownSuite()
}