inifile_alt 2.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.idea/.name +1 -0
- data/.idea/.rakeTasks +7 -0
- data/.idea/compiler.xml +25 -0
- data/.idea/encodings.xml +5 -0
- data/.idea/misc.xml +23 -0
- data/.idea/modules.xml +9 -0
- data/.idea/scopes/scope_settings.xml +5 -0
- data/.idea/uiDesigner.xml +125 -0
- data/.idea/vcs.xml +7 -0
- data/.idea/workspace.xml +757 -0
- data/.travis.yml +12 -0
- data/History.txt +59 -0
- data/README.md +193 -0
- data/Rakefile +26 -0
- data/inifile.iml +16 -0
- data/lib/inifile.rb +570 -0
- data/test/data/bad_1.ini +6 -0
- data/test/data/browscap.ini +5 -0
- data/test/data/comment.ini +10 -0
- data/test/data/escape.ini +13 -0
- data/test/data/global.ini +3 -0
- data/test/data/good.ini +19 -0
- data/test/data/merge.ini +5 -0
- data/test/data/mixed_comment.ini +7 -0
- data/test/data/multiline.ini +24 -0
- data/test/data/no_escaping.ini +4 -0
- data/test/data/param.ini +5 -0
- data/test/test_inifile.rb +505 -0
- metadata +163 -0
data/test/data/bad_1.ini
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
; this test file demonstrates escape sequences supported by IniFile
|
2
|
+
[normal]
|
3
|
+
foo = http://en.wikipedia.org/wiki/Foobar
|
4
|
+
|
5
|
+
[escaped]
|
6
|
+
tabs = There is a tab\tcharacter in here somewhere
|
7
|
+
carriage return = Who uses these anyways?\r
|
8
|
+
newline = Trust newline!\nAlways there when you need him.\nSplittin' those lines.
|
9
|
+
null = Who'd be silly enough to put\0 a null character in the middle of a string? \
|
10
|
+
Stroustrup would not approve!
|
11
|
+
backslash = This string \\t contains \\n no \\r special \\0 characters!
|
12
|
+
quoted = "Escaping works\tinside quoted strings!"
|
13
|
+
|
data/test/data/good.ini
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
[section_one]
|
2
|
+
one = 1
|
3
|
+
two = 2
|
4
|
+
|
5
|
+
[section_two]
|
6
|
+
three = 3
|
7
|
+
multi = multiline \
|
8
|
+
support
|
9
|
+
|
10
|
+
; comments should be ignored
|
11
|
+
[section three]
|
12
|
+
four =4
|
13
|
+
five=5
|
14
|
+
six =6
|
15
|
+
|
16
|
+
[section_four]
|
17
|
+
[section_five]
|
18
|
+
seven and eight= 7 & 8
|
19
|
+
|
data/test/data/merge.ini
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
[section_one]
|
2
|
+
one = 1
|
3
|
+
two = 2
|
4
|
+
|
5
|
+
[section_two]
|
6
|
+
three = 3
|
7
|
+
|
8
|
+
; comments should be ignored
|
9
|
+
[section_three]
|
10
|
+
three = hello \
|
11
|
+
multiline
|
12
|
+
other = "stuff"
|
13
|
+
|
14
|
+
[section_four]
|
15
|
+
four = hello \ # comments work here, too
|
16
|
+
multiple \ # and here !!!
|
17
|
+
multilines # and even here (OMG)
|
18
|
+
five = "multiple lines
|
19
|
+
inside of quotations
|
20
|
+
preserve everything"
|
21
|
+
|
22
|
+
[empty_lines]
|
23
|
+
empty =
|
24
|
+
not_empty=full
|
data/test/data/param.ini
ADDED
@@ -0,0 +1,505 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
libpath = File.expand_path '../../lib', __FILE__
|
4
|
+
require File.join(libpath, 'inifile')
|
5
|
+
require 'fileutils'
|
6
|
+
require 'test/unit'
|
7
|
+
|
8
|
+
|
9
|
+
class TestIniFile < Test::Unit::TestCase
|
10
|
+
|
11
|
+
def setup
|
12
|
+
@ini_file = IniFile.new(:filename => 'test/data/good.ini')
|
13
|
+
@contents = [
|
14
|
+
['section_one', 'one', '1'],
|
15
|
+
['section_one', 'two', '2'],
|
16
|
+
['section_two', 'three', '3'],
|
17
|
+
['section_two', 'multi', "multiline support"],
|
18
|
+
['section three', 'four', '4'],
|
19
|
+
['section three', 'five', '5'],
|
20
|
+
['section three', 'six', '6'],
|
21
|
+
['section_five', 'seven and eight', '7 & 8']
|
22
|
+
].sort
|
23
|
+
|
24
|
+
FileUtils.rm_rf "test/data/tmp.ini"
|
25
|
+
FileUtils.cp "test/data/good.ini", "test/data/tmp.ini"
|
26
|
+
end
|
27
|
+
|
28
|
+
def teardown
|
29
|
+
FileUtils.rm_rf "test/data/tmp.ini"
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_class_load
|
33
|
+
ini_file = IniFile.load 'test/data/good.ini'
|
34
|
+
assert_instance_of IniFile, ini_file
|
35
|
+
|
36
|
+
# see if we can parse different style comments
|
37
|
+
assert_raise(IniFile::Error) {IniFile.load 'test/data/comment.ini', :comment => ';'}
|
38
|
+
|
39
|
+
ini_file = IniFile.load 'test/data/comment.ini', :comment => '#'
|
40
|
+
assert_instance_of IniFile, ini_file
|
41
|
+
|
42
|
+
# see if we can parse mixed style comments
|
43
|
+
assert_raise(IniFile::Error) {IniFile.load 'test/data/mixed_comment.ini', :comment => '#'}
|
44
|
+
|
45
|
+
ini_file = IniFile.load 'test/data/mixed_comment.ini', :comment => ';#'
|
46
|
+
assert_instance_of IniFile, ini_file
|
47
|
+
|
48
|
+
# see if we can parse different style param separators
|
49
|
+
assert_raise(IniFile::Error) {IniFile.load 'test/data/param.ini'}
|
50
|
+
|
51
|
+
ini_file = IniFile.load 'test/data/param.ini', :parameter => ':'
|
52
|
+
assert_instance_of IniFile, ini_file
|
53
|
+
|
54
|
+
# make sure we error out on files with bad lines
|
55
|
+
assert_raise(IniFile::Error) {IniFile.load 'test/data/bad_1.ini'}
|
56
|
+
|
57
|
+
# make sure we error out on sloppy escaping
|
58
|
+
assert_raise(IniFile::Error) {IniFile.load 'test/data/no_escaping.ini'}
|
59
|
+
|
60
|
+
ini_file = IniFile.load 'test/data/no_escaping.ini', :escape => false
|
61
|
+
assert_instance_of IniFile, ini_file
|
62
|
+
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_clone
|
66
|
+
clone = @ini_file.clone
|
67
|
+
assert_equal @ini_file, clone
|
68
|
+
assert !clone.tainted?
|
69
|
+
assert !clone.frozen?
|
70
|
+
|
71
|
+
# the clone should be completely independent of the original
|
72
|
+
clone['new_section']['one'] = 1
|
73
|
+
assert_not_equal @ini_file, clone
|
74
|
+
|
75
|
+
# the tainted state is copied to clones
|
76
|
+
@ini_file.taint
|
77
|
+
assert @ini_file.tainted?
|
78
|
+
|
79
|
+
clone = @ini_file.clone
|
80
|
+
assert clone.tainted?
|
81
|
+
|
82
|
+
# the frozen state is also copied to clones
|
83
|
+
@ini_file.freeze
|
84
|
+
assert @ini_file.frozen?
|
85
|
+
|
86
|
+
clone = @ini_file.clone
|
87
|
+
assert clone.tainted?
|
88
|
+
assert clone.frozen?
|
89
|
+
end
|
90
|
+
|
91
|
+
def test_delete_section
|
92
|
+
assert_nil @ini_file.delete_section('section_nil')
|
93
|
+
|
94
|
+
h = {'one' => '1', 'two' => '2'}
|
95
|
+
assert_equal true, @ini_file.has_section?('section_one')
|
96
|
+
assert_equal h, @ini_file.delete_section('section_one')
|
97
|
+
assert_equal false, @ini_file.has_section?('section_one')
|
98
|
+
assert_nil @ini_file.delete_section('section_one')
|
99
|
+
end
|
100
|
+
|
101
|
+
def test_dup
|
102
|
+
dup = @ini_file.dup
|
103
|
+
assert_equal @ini_file, dup
|
104
|
+
assert !dup.tainted?
|
105
|
+
assert !dup.frozen?
|
106
|
+
|
107
|
+
# the duplicate should be completely independent of the original
|
108
|
+
dup['new_section']['one'] = 1
|
109
|
+
assert_not_equal @ini_file, dup
|
110
|
+
|
111
|
+
# the tainted state is copied to duplicates
|
112
|
+
@ini_file.taint
|
113
|
+
assert @ini_file.tainted?
|
114
|
+
|
115
|
+
dup = @ini_file.dup
|
116
|
+
assert dup.tainted?
|
117
|
+
|
118
|
+
# the frozen state, however, is not
|
119
|
+
@ini_file.freeze
|
120
|
+
assert @ini_file.frozen?
|
121
|
+
|
122
|
+
dup = @ini_file.dup
|
123
|
+
assert dup.tainted?
|
124
|
+
assert !dup.frozen?
|
125
|
+
end
|
126
|
+
|
127
|
+
def test_each
|
128
|
+
ary = []
|
129
|
+
@ini_file.each {|*args| ary << args}
|
130
|
+
|
131
|
+
assert_equal @contents, ary.sort
|
132
|
+
|
133
|
+
ary = []
|
134
|
+
IniFile.new(:filename => 'temp.ini').each {|*args| ary << args}
|
135
|
+
assert_equal [], ary
|
136
|
+
end
|
137
|
+
|
138
|
+
def test_each_section
|
139
|
+
expected = [
|
140
|
+
'section_one', 'section_two', 'section three',
|
141
|
+
'section_four', 'section_five'
|
142
|
+
].sort
|
143
|
+
|
144
|
+
ary = []
|
145
|
+
@ini_file.each_section {|section| ary << section}
|
146
|
+
|
147
|
+
assert_equal expected, ary.sort
|
148
|
+
|
149
|
+
ary = []
|
150
|
+
IniFile.new(:filename => 'temp.ini').each_section {|section| ary << section}
|
151
|
+
assert_equal [], ary
|
152
|
+
end
|
153
|
+
|
154
|
+
def test_eql_eh
|
155
|
+
assert @ini_file.eql?(@ini_file)
|
156
|
+
assert @ini_file.eql?(@ini_file.clone)
|
157
|
+
assert !@ini_file.eql?('string')
|
158
|
+
assert !@ini_file.eql?(IniFile.new(''))
|
159
|
+
end
|
160
|
+
|
161
|
+
def test_freeze
|
162
|
+
assert_equal false, @ini_file.frozen?
|
163
|
+
@ini_file.each_section do |s|
|
164
|
+
assert_equal false, @ini_file[s].frozen?
|
165
|
+
end
|
166
|
+
|
167
|
+
@ini_file.freeze
|
168
|
+
|
169
|
+
assert_equal true, @ini_file.frozen?
|
170
|
+
@ini_file.each_section do |s|
|
171
|
+
assert_equal true, @ini_file[s].frozen?
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
175
|
+
def test_has_section_eh
|
176
|
+
assert_equal true, @ini_file.has_section?('section_one')
|
177
|
+
assert_equal false, @ini_file.has_section?('section_ten')
|
178
|
+
assert_equal true, @ini_file.has_section?(:section_two)
|
179
|
+
assert_equal false, @ini_file.has_section?(nil)
|
180
|
+
|
181
|
+
ini_file = IniFile.new(:filename => 'temp.ini')
|
182
|
+
assert_equal false, ini_file.has_section?('section_one')
|
183
|
+
assert_equal false, ini_file.has_section?('one')
|
184
|
+
assert_equal false, ini_file.has_section?('two')
|
185
|
+
end
|
186
|
+
|
187
|
+
def test_index
|
188
|
+
expected = {
|
189
|
+
'one' => '1',
|
190
|
+
'two' => '2'
|
191
|
+
}
|
192
|
+
assert_equal expected, @ini_file[:section_one]
|
193
|
+
|
194
|
+
expected = {'three' => '3', 'multi' => "multiline support"}
|
195
|
+
assert_equal expected, @ini_file['section_two']
|
196
|
+
|
197
|
+
expected = {
|
198
|
+
'four' => '4',
|
199
|
+
'five' => '5',
|
200
|
+
'six' => '6',
|
201
|
+
}
|
202
|
+
assert_equal expected, @ini_file['section three']
|
203
|
+
|
204
|
+
expected = {}
|
205
|
+
assert_equal expected, @ini_file['section_four']
|
206
|
+
|
207
|
+
expected = {'seven and eight' => '7 & 8'}
|
208
|
+
assert_equal expected, @ini_file['section_five']
|
209
|
+
|
210
|
+
expected = {}
|
211
|
+
assert_equal expected, @ini_file['section_six']
|
212
|
+
|
213
|
+
assert_nil @ini_file[nil]
|
214
|
+
|
215
|
+
expected = {}
|
216
|
+
ini_file = IniFile.new(:filename => 'temp.ini')
|
217
|
+
assert_equal expected, ini_file['section_one']
|
218
|
+
assert_equal expected, ini_file['one']
|
219
|
+
assert_nil ini_file[nil]
|
220
|
+
end
|
221
|
+
|
222
|
+
def test_match
|
223
|
+
expected = {
|
224
|
+
"section_two" =>
|
225
|
+
{
|
226
|
+
"three"=>"3", "multi"=>"multiline support"
|
227
|
+
},
|
228
|
+
"section three" =>
|
229
|
+
{
|
230
|
+
"four"=>"4", "five"=>"5", "six"=>"6"
|
231
|
+
}
|
232
|
+
}
|
233
|
+
assert_equal expected, @ini_file.match(/(two|three)/)
|
234
|
+
|
235
|
+
# the match function should not delete entries from the inifile hash
|
236
|
+
assert_equal({'seven and eight' => '7 & 8'}, @ini_file['section_five'])
|
237
|
+
|
238
|
+
expected = {}
|
239
|
+
assert_equal expected, @ini_file.match(/houndreds/)
|
240
|
+
end
|
241
|
+
|
242
|
+
def test_initialize
|
243
|
+
# see if we can parse different style comments
|
244
|
+
#assert_raise(IniFile::Error) {IniFile.new 'test/data/comment.ini'}
|
245
|
+
|
246
|
+
ini_file = IniFile.new(:filename => 'test/data/comment.ini', :comment => '#')
|
247
|
+
assert ini_file.has_section?('section_one')
|
248
|
+
assert_equal '20 + 22 = 42', ini_file['section_two']['multi']
|
249
|
+
|
250
|
+
# see if we can parse different style param separators
|
251
|
+
assert_raise(IniFile::Error) {IniFile.new(:filename => 'test/data/param.ini')}
|
252
|
+
|
253
|
+
ini_file = IniFile.new(:filename => 'test/data/param.ini', :parameter => ':')
|
254
|
+
assert ini_file.has_section?('section_one')
|
255
|
+
assert_equal '1', ini_file['section_one']['one']
|
256
|
+
assert_equal '2', ini_file['section_one']['two']
|
257
|
+
|
258
|
+
# make sure we error out on files with bad lines
|
259
|
+
assert_raise(IniFile::Error) {IniFile.new :filename => 'test/data/bad_1.ini'}
|
260
|
+
end
|
261
|
+
|
262
|
+
def test_initialize_from_string_without_ending_newline
|
263
|
+
content = "[section_one]\n foo=bar"
|
264
|
+
ini_file = IniFile.new(content)
|
265
|
+
assert ini_file.has_section?('section_one')
|
266
|
+
assert_equal 'bar', ini_file['section_one']['foo']
|
267
|
+
end
|
268
|
+
|
269
|
+
def test_initialize_from_string
|
270
|
+
content = File.read('test/data/good.ini')
|
271
|
+
|
272
|
+
ini_file = IniFile.new(content, :comment => ';')
|
273
|
+
assert ini_file.has_section?('section_one')
|
274
|
+
assert ini_file.has_section?('section_two')
|
275
|
+
assert ini_file.has_section?('section three')
|
276
|
+
assert ini_file.has_section?('section_four')
|
277
|
+
assert ini_file.has_section?('section_five')
|
278
|
+
|
279
|
+
assert_equal '7 & 8', ini_file['section_five']['seven and eight']
|
280
|
+
end
|
281
|
+
|
282
|
+
def test_sections
|
283
|
+
expected = [
|
284
|
+
'section_one', 'section_two', 'section three',
|
285
|
+
'section_four', 'section_five'
|
286
|
+
].sort
|
287
|
+
|
288
|
+
assert_equal expected, @ini_file.sections.sort
|
289
|
+
|
290
|
+
ini_file = IniFile.new(:filename => 'temp.ini')
|
291
|
+
assert_equal [], ini_file.sections
|
292
|
+
end
|
293
|
+
|
294
|
+
def test_taint
|
295
|
+
assert_equal false, @ini_file.tainted?
|
296
|
+
@ini_file.each_section do |s|
|
297
|
+
assert_equal false, @ini_file[s].tainted?
|
298
|
+
end
|
299
|
+
|
300
|
+
@ini_file.taint
|
301
|
+
|
302
|
+
assert_equal true, @ini_file.tainted?
|
303
|
+
@ini_file.each_section do |s|
|
304
|
+
assert_equal true, @ini_file[s].tainted?
|
305
|
+
end
|
306
|
+
end
|
307
|
+
|
308
|
+
def test_write
|
309
|
+
tmp = 'test/data/temp.ini'
|
310
|
+
File.delete tmp if Kernel.test(?f, tmp)
|
311
|
+
|
312
|
+
@ini_file.save(:filename => tmp)
|
313
|
+
assert_equal true, Kernel.test(?f, tmp)
|
314
|
+
|
315
|
+
File.delete tmp if Kernel.test(?f, tmp)
|
316
|
+
|
317
|
+
ini_file = IniFile.new(:filename => tmp)
|
318
|
+
ini_file.save
|
319
|
+
assert_nil Kernel.test(?s, tmp)
|
320
|
+
|
321
|
+
File.delete tmp if Kernel.test(?f, tmp)
|
322
|
+
end
|
323
|
+
|
324
|
+
def test_read
|
325
|
+
assert @ini_file.has_section?('section_one')
|
326
|
+
|
327
|
+
@ini_file['section_one']['one'] = 42
|
328
|
+
@ini_file['section_one']['two'] = 42
|
329
|
+
assert_equal 42, @ini_file['section_one']['one']
|
330
|
+
assert_equal 42, @ini_file['section_one']['two']
|
331
|
+
|
332
|
+
@ini_file.read
|
333
|
+
assert_equal '1', @ini_file['section_one']['one']
|
334
|
+
assert_equal '2', @ini_file['section_one']['two']
|
335
|
+
|
336
|
+
@ini_file.read(:filename => 'test/data/mixed_comment.ini')
|
337
|
+
assert_equal false, @ini_file.has_section?('section_two')
|
338
|
+
end
|
339
|
+
|
340
|
+
def test_modifies_current_keys
|
341
|
+
ini = IniFile.load("test/data/tmp.ini")
|
342
|
+
ini["section one"]["one"] = 17
|
343
|
+
ini.save
|
344
|
+
|
345
|
+
assert File.read("test/data/tmp.ini") =~ /one = 17/
|
346
|
+
end
|
347
|
+
|
348
|
+
def test_can_add_key_to_inifile
|
349
|
+
ini_file = IniFile.new(:filename => "test/data/tmp.ini")
|
350
|
+
ini_file["new_section"] = {}
|
351
|
+
ini_file.save
|
352
|
+
|
353
|
+
assert File.read("test/data/tmp.ini") =~ /\[new_section\]/
|
354
|
+
end
|
355
|
+
|
356
|
+
def test_adds_correct_key_to_inifile
|
357
|
+
ini_file = IniFile.new(:filename => "test/data/tmp.ini")
|
358
|
+
ini_file["foo"] = {}
|
359
|
+
ini_file.save
|
360
|
+
|
361
|
+
assert File.read("test/data/tmp.ini") =~ /\[foo\]/
|
362
|
+
end
|
363
|
+
|
364
|
+
def test_assigns_values_to_inifile
|
365
|
+
ini_file = IniFile.new(:filename => "test/data/tmp.ini")
|
366
|
+
ini_file["foo"] = {
|
367
|
+
:bar => "baz"
|
368
|
+
}
|
369
|
+
|
370
|
+
assert_equal ini_file["foo"], { :bar => "baz" }
|
371
|
+
end
|
372
|
+
|
373
|
+
def test_assigns_correct_values_to_inifile
|
374
|
+
ini_file = IniFile.new(:filename => "test/data/tmp.ini")
|
375
|
+
ini_file["foo"] = {
|
376
|
+
:one => "two"
|
377
|
+
}
|
378
|
+
|
379
|
+
assert_equal ini_file["foo"], { :one => "two" }
|
380
|
+
end
|
381
|
+
|
382
|
+
def test_assignment_stringifies_key
|
383
|
+
ini_file = IniFile.new(:filename => "test/data/tmp.ini")
|
384
|
+
ini_file["foo"] = {:one => :two}
|
385
|
+
ini_file[:foo] = {}
|
386
|
+
assert_equal ini_file["foo"], {}
|
387
|
+
end
|
388
|
+
|
389
|
+
def test_multiline_parsing
|
390
|
+
ini_file = IniFile.load('test/data/multiline.ini')
|
391
|
+
|
392
|
+
multiline = ini_file['section_three']
|
393
|
+
expected = {"three" => "hello multiline", "other" => "stuff"}
|
394
|
+
assert_equal expected, multiline
|
395
|
+
|
396
|
+
multiple = ini_file['section_four']
|
397
|
+
expected = {"four" => "hello multiple multilines",
|
398
|
+
"five" => "multiple lines\ninside of quotations\npreserve everything" }
|
399
|
+
assert_equal expected, multiple
|
400
|
+
|
401
|
+
multiple = ini_file['empty_lines']
|
402
|
+
expected = {'empty' => '', 'not_empty' => 'full'}
|
403
|
+
assert_equal expected, multiple
|
404
|
+
end
|
405
|
+
|
406
|
+
def test_merge
|
407
|
+
ini_file = @ini_file.merge(IniFile.load("test/data/merge.ini"))
|
408
|
+
assert_equal '3', ini_file['section_one']['one']
|
409
|
+
assert_equal '2', ini_file['section_one']['two']
|
410
|
+
|
411
|
+
# make sure that the rest haven't changed
|
412
|
+
assert_equal '3', ini_file['section_two']['three']
|
413
|
+
|
414
|
+
# and that we got any additional sections too
|
415
|
+
assert_equal '5', ini_file['section_five']['five']
|
416
|
+
|
417
|
+
# original object is unchanged
|
418
|
+
assert_equal '1', @ini_file['section_one']['one']
|
419
|
+
end
|
420
|
+
|
421
|
+
def test_merge_hash
|
422
|
+
ini_file = @ini_file.merge({
|
423
|
+
'section_one' => { 'one' => '3' },
|
424
|
+
'section_five' => { 'five' => '5' }
|
425
|
+
})
|
426
|
+
assert_equal '3', ini_file['section_one']['one']
|
427
|
+
assert_equal '2', ini_file['section_one']['two']
|
428
|
+
|
429
|
+
# make sure that the rest haven't changed
|
430
|
+
assert_equal '3', ini_file['section_two']['three']
|
431
|
+
|
432
|
+
# and that we got any additional sections too
|
433
|
+
assert_equal '5', ini_file['section_five']['five']
|
434
|
+
|
435
|
+
# original object is unchanged
|
436
|
+
assert_equal '1', @ini_file['section_one']['one']
|
437
|
+
end
|
438
|
+
|
439
|
+
if RUBY_VERSION >= '1.9'
|
440
|
+
def test_parse_encoding
|
441
|
+
ini_file = IniFile.new(:filename => "test/data/browscap.ini", :encoding => 'ISO-8859-1')
|
442
|
+
assert_equal ini_file['www.substancia.com AutoHTTPAgent (ver *)']['Browser'], "Subst\xE2ncia".force_encoding('ISO-8859-1')
|
443
|
+
end
|
444
|
+
|
445
|
+
def test_write_encoding
|
446
|
+
tmp = 'test/data/tmp.ini'
|
447
|
+
File.delete tmp if Kernel.test(?f, tmp)
|
448
|
+
|
449
|
+
@ini_file = IniFile.new(:filename => tmp, :encoding => 'UTF-8')
|
450
|
+
@ini_file['testutf-8'] = {"utf-8" => "appr\u20accier"}
|
451
|
+
|
452
|
+
@ini_file.save(:filename => tmp)
|
453
|
+
|
454
|
+
test = File.open(tmp)
|
455
|
+
assert_equal test.external_encoding.to_s, 'UTF-8'
|
456
|
+
end
|
457
|
+
end
|
458
|
+
|
459
|
+
def test_value_escaping
|
460
|
+
ini_file = IniFile.load('test/data/escape.ini')
|
461
|
+
escaped = ini_file['escaped']
|
462
|
+
|
463
|
+
assert_equal %Q{There is a tab\tcharacter in here somewhere}, escaped['tabs']
|
464
|
+
assert_equal %Q{Who uses these anyways?\r}, escaped['carriage return']
|
465
|
+
assert_equal %Q{Trust newline!\nAlways there when you need him.\nSplittin' those lines.}, escaped['newline']
|
466
|
+
assert_equal %Q{Who'd be silly enough to put\0 a null character in the middle of a string? Stroustrup would not approve!}, escaped['null']
|
467
|
+
assert_equal %q{This string \t contains \n no \r special \0 characters!}, escaped['backslash']
|
468
|
+
assert_equal %Q{Escaping works\tinside quoted strings!}, escaped['quoted']
|
469
|
+
end
|
470
|
+
|
471
|
+
def test_value_escaping_disabled
|
472
|
+
ini_file = IniFile.load('test/data/escape.ini', :escape => false)
|
473
|
+
escaped = ini_file['escaped']
|
474
|
+
|
475
|
+
assert_equal %q{There is a tab\tcharacter in here somewhere}, escaped['tabs']
|
476
|
+
assert_equal %q{Who uses these anyways?\r}, escaped['carriage return']
|
477
|
+
assert_equal %q{Trust newline!\nAlways there when you need him.\nSplittin' those lines.}, escaped['newline']
|
478
|
+
assert_equal %Q{Who'd be silly enough to put\\0 a null character in the middle of a string? Stroustrup would not approve!}, escaped['null']
|
479
|
+
assert_equal %q{This string \\\\t contains \\\\n no \\\\r special \\\\0 characters!}, escaped['backslash']
|
480
|
+
assert_equal %q{Escaping works\tinside quoted strings!}, escaped['quoted']
|
481
|
+
end
|
482
|
+
|
483
|
+
def test_global_section
|
484
|
+
ini_file = IniFile.load('test/data/global.ini')
|
485
|
+
|
486
|
+
assert_equal %w[global], ini_file.sections
|
487
|
+
assert_equal '1', ini_file['global']['one']
|
488
|
+
assert_equal '2', ini_file['global']['two']
|
489
|
+
end
|
490
|
+
|
491
|
+
def test_default_global_section
|
492
|
+
ini_file = IniFile.load('test/data/global.ini', :default => 'nonce')
|
493
|
+
|
494
|
+
assert_equal %w[nonce], ini_file.sections
|
495
|
+
assert_equal '1', ini_file['nonce']['one']
|
496
|
+
assert_equal '2', ini_file['nonce']['two']
|
497
|
+
end
|
498
|
+
|
499
|
+
def test_unescaped_items
|
500
|
+
ini_file = IniFile.load('test/data/no_escaping.ini', :escape => false)
|
501
|
+
|
502
|
+
assert_equal 'key\=value', ini_file['unescaped_param']['two']
|
503
|
+
end
|
504
|
+
end
|
505
|
+
|