1 package ini
2
3 import (
4 "testing"
5
6 "github.com/stretchr/testify/assert"
7 "github.com/stretchr/testify/require"
8 )
9
10 func TestSection_SetBody(t *testing.T) {
11 t.Run("set body of raw section", func(t *testing.T) {
12 f := Empty()
13 require.NotNil(t, f)
14
15 sec, err := f.NewRawSection("comments", `1111111111111111111000000000000000001110000
16 111111111111111111100000000000111000000000`)
17 require.NoError(t, err)
18 require.NotNil(t, sec)
19 assert.Equal(t, `1111111111111111111000000000000000001110000
20 111111111111111111100000000000111000000000`, sec.Body())
21
22 sec.SetBody("1111111111111111111000000000000000001110000")
23 assert.Equal(t, `1111111111111111111000000000000000001110000`, sec.Body())
24
25 t.Run("set for non-raw section", func(t *testing.T) {
26 sec, err := f.NewSection("author")
27 require.NoError(t, err)
28 require.NotNil(t, sec)
29 assert.Empty(t, sec.Body())
30
31 sec.SetBody("1111111111111111111000000000000000001110000")
32 assert.Empty(t, sec.Body())
33 })
34 })
35 }
36
37 func TestSection_NewKey(t *testing.T) {
38 t.Run("create a new key", func(t *testing.T) {
39 f := Empty()
40 require.NotNil(t, f)
41
42 k, err := f.Section("").NewKey("NAME", "ini")
43 require.NoError(t, err)
44 require.NotNil(t, k)
45 assert.Equal(t, "NAME", k.Name())
46 assert.Equal(t, "ini", k.Value())
47
48 t.Run("with duplicated name", func(t *testing.T) {
49 k, err := f.Section("").NewKey("NAME", "ini.v1")
50 require.NoError(t, err)
51 require.NotNil(t, k)
52
53
54 assert.Equal(t, "ini.v1", k.Value())
55 })
56
57 t.Run("with empty string", func(t *testing.T) {
58 _, err := f.Section("").NewKey("", "")
59 require.Error(t, err)
60 })
61 })
62
63 t.Run("create keys with same name and allow shadow", func(t *testing.T) {
64 f, err := ShadowLoad([]byte(""))
65 require.NoError(t, err)
66 require.NotNil(t, f)
67
68 k, err := f.Section("").NewKey("NAME", "ini")
69 require.NoError(t, err)
70 require.NotNil(t, k)
71 k, err = f.Section("").NewKey("NAME", "ini.v1")
72 require.NoError(t, err)
73 require.NotNil(t, k)
74
75 assert.Equal(t, []string{"ini", "ini.v1"}, k.ValueWithShadows())
76 })
77 }
78
79 func TestSection_NewBooleanKey(t *testing.T) {
80 t.Run("create a new boolean key", func(t *testing.T) {
81 f := Empty()
82 require.NotNil(t, f)
83
84 k, err := f.Section("").NewBooleanKey("start-ssh-server")
85 require.NoError(t, err)
86 require.NotNil(t, k)
87 assert.Equal(t, "start-ssh-server", k.Name())
88 assert.Equal(t, "true", k.Value())
89
90 t.Run("with empty string", func(t *testing.T) {
91 _, err := f.Section("").NewBooleanKey("")
92 require.Error(t, err)
93 })
94 })
95 }
96
97 func TestSection_GetKey(t *testing.T) {
98 t.Run("get a key", func(t *testing.T) {
99 f := Empty()
100 require.NotNil(t, f)
101
102 k, err := f.Section("").NewKey("NAME", "ini")
103 require.NoError(t, err)
104 require.NotNil(t, k)
105
106 k, err = f.Section("").GetKey("NAME")
107 require.NoError(t, err)
108 require.NotNil(t, k)
109 assert.Equal(t, "NAME", k.Name())
110 assert.Equal(t, "ini", k.Value())
111
112 t.Run("key not exists", func(t *testing.T) {
113 _, err := f.Section("").GetKey("404")
114 require.Error(t, err)
115 })
116
117 t.Run("key exists in parent section", func(t *testing.T) {
118 k, err := f.Section("parent").NewKey("AGE", "18")
119 require.NoError(t, err)
120 require.NotNil(t, k)
121
122 k, err = f.Section("parent.child.son").GetKey("AGE")
123 require.NoError(t, err)
124 require.NotNil(t, k)
125 assert.Equal(t, "18", k.Value())
126 })
127 })
128 }
129
130 func TestSection_HasKey(t *testing.T) {
131 t.Run("check if a key exists", func(t *testing.T) {
132 f := Empty()
133 require.NotNil(t, f)
134
135 k, err := f.Section("").NewKey("NAME", "ini")
136 require.NoError(t, err)
137 require.NotNil(t, k)
138
139 assert.True(t, f.Section("").HasKey("NAME"))
140 assert.True(t, f.Section("").HasKey("NAME"))
141 assert.False(t, f.Section("").HasKey("404"))
142 assert.False(t, f.Section("").HasKey("404"))
143 })
144 }
145
146 func TestSection_HasValue(t *testing.T) {
147 t.Run("check if contains a value in any key", func(t *testing.T) {
148 f := Empty()
149 require.NotNil(t, f)
150
151 k, err := f.Section("").NewKey("NAME", "ini")
152 require.NoError(t, err)
153 require.NotNil(t, k)
154
155 assert.True(t, f.Section("").HasValue("ini"))
156 assert.False(t, f.Section("").HasValue("404"))
157 })
158 }
159
160 func TestSection_Key(t *testing.T) {
161 t.Run("get a key", func(t *testing.T) {
162 f := Empty()
163 require.NotNil(t, f)
164
165 k, err := f.Section("").NewKey("NAME", "ini")
166 require.NoError(t, err)
167 require.NotNil(t, k)
168
169 k = f.Section("").Key("NAME")
170 require.NotNil(t, k)
171 assert.Equal(t, "NAME", k.Name())
172 assert.Equal(t, "ini", k.Value())
173
174 t.Run("key not exists", func(t *testing.T) {
175 k := f.Section("").Key("404")
176 require.NotNil(t, k)
177 assert.Equal(t, "404", k.Name())
178 })
179
180 t.Run("key exists in parent section", func(t *testing.T) {
181 k, err := f.Section("parent").NewKey("AGE", "18")
182 require.NoError(t, err)
183 require.NotNil(t, k)
184
185 k = f.Section("parent.child.son").Key("AGE")
186 require.NotNil(t, k)
187 assert.Equal(t, "18", k.Value())
188 })
189 })
190 }
191
192 func TestSection_Keys(t *testing.T) {
193 t.Run("get all keys in a section", func(t *testing.T) {
194 f := Empty()
195 require.NotNil(t, f)
196
197 k, err := f.Section("").NewKey("NAME", "ini")
198 require.NoError(t, err)
199 require.NotNil(t, k)
200 k, err = f.Section("").NewKey("VERSION", "v1")
201 require.NoError(t, err)
202 require.NotNil(t, k)
203 k, err = f.Section("").NewKey("IMPORT_PATH", "gopkg.in/ini.v1")
204 require.NoError(t, err)
205 require.NotNil(t, k)
206
207 keys := f.Section("").Keys()
208 names := []string{"NAME", "VERSION", "IMPORT_PATH"}
209 assert.Equal(t, len(names), len(keys))
210 for i, name := range names {
211 assert.Equal(t, name, keys[i].Name())
212 }
213 })
214 }
215
216 func TestSection_ParentKeys(t *testing.T) {
217 t.Run("get all keys of parent sections", func(t *testing.T) {
218 f := Empty()
219 require.NotNil(t, f)
220
221 k, err := f.Section("package").NewKey("NAME", "ini")
222 require.NoError(t, err)
223 require.NotNil(t, k)
224 k, err = f.Section("package").NewKey("VERSION", "v1")
225 require.NoError(t, err)
226 require.NotNil(t, k)
227 k, err = f.Section("package").NewKey("IMPORT_PATH", "gopkg.in/ini.v1")
228 require.NoError(t, err)
229 require.NotNil(t, k)
230
231 keys := f.Section("package.sub.sub2").ParentKeys()
232 names := []string{"NAME", "VERSION", "IMPORT_PATH"}
233 assert.Equal(t, len(names), len(keys))
234 for i, name := range names {
235 assert.Equal(t, name, keys[i].Name())
236 }
237 })
238 }
239
240 func TestSection_KeyStrings(t *testing.T) {
241 t.Run("get all key names in a section", func(t *testing.T) {
242 f := Empty()
243 require.NotNil(t, f)
244
245 k, err := f.Section("").NewKey("NAME", "ini")
246 require.NoError(t, err)
247 require.NotNil(t, k)
248 k, err = f.Section("").NewKey("VERSION", "v1")
249 require.NoError(t, err)
250 require.NotNil(t, k)
251 k, err = f.Section("").NewKey("IMPORT_PATH", "gopkg.in/ini.v1")
252 require.NoError(t, err)
253 require.NotNil(t, k)
254
255 assert.Equal(t, []string{"NAME", "VERSION", "IMPORT_PATH"}, f.Section("").KeyStrings())
256 })
257 }
258
259 func TestSection_KeyHash(t *testing.T) {
260 t.Run("get clone of key hash", func(t *testing.T) {
261 f, err := Load([]byte(`
262 key = one
263 [log]
264 name = app
265 file = a.log
266 `), []byte(`
267 key = two
268 [log]
269 name = app2
270 file = b.log
271 `))
272 require.NoError(t, err)
273 require.NotNil(t, f)
274
275 assert.Equal(t, "two", f.Section("").Key("key").String())
276
277 hash := f.Section("log").KeysHash()
278 relation := map[string]string{
279 "name": "app2",
280 "file": "b.log",
281 }
282 for k, v := range hash {
283 assert.Equal(t, relation[k], v)
284 }
285 })
286 }
287
288 func TestSection_DeleteKey(t *testing.T) {
289 t.Run("delete a key", func(t *testing.T) {
290 f := Empty()
291 require.NotNil(t, f)
292
293 k, err := f.Section("").NewKey("NAME", "ini")
294 require.NoError(t, err)
295 require.NotNil(t, k)
296
297 assert.True(t, f.Section("").HasKey("NAME"))
298 f.Section("").DeleteKey("NAME")
299 assert.False(t, f.Section("").HasKey("NAME"))
300 })
301 }
302
View as plain text