gdbm 1.2 → 1.3.0

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.
@@ -1,732 +0,0 @@
1
- require 'test/unit'
2
- require 'tmpdir'
3
-
4
- begin
5
- # require 'gdbm'
6
- rescue LoadError
7
- end
8
-
9
- #This is needed because JRuby does not have it implemented yet,
10
- #but it's in MRI 1.9 and in the tests below (remove_entry_secure).
11
- #
12
- #This is NOT NECESSARILY 1.9's implementation of it, though.
13
- class File::Stat
14
- unless self.instance_methods.include? :world_writable?
15
- def world_writable?
16
- (self.mode & 0002) != 0
17
- end
18
- end
19
- end
20
-
21
- if defined? GDBM
22
-
23
- $stderr.puts "WARNING: Loaded non-FFI gdbm library (probably from the standard lib)." unless defined? GDBM_FFI
24
-
25
- require 'tmpdir'
26
- require 'fileutils'
27
-
28
- class TestGDBM < Test::Unit::TestCase
29
- def TestGDBM.uname_s
30
- require 'rbconfig'
31
- case RbConfig::CONFIG['target_os']
32
- when 'cygwin'
33
- require 'Win32API'
34
- uname = Win32API.new('cygwin1', 'uname', 'P', 'I')
35
- utsname = ' ' * 100
36
- raise 'cannot get system name' if uname.call(utsname) == -1
37
-
38
- utsname.unpack('A20' * 5)[0]
39
- else
40
- RbConfig::CONFIG['target_os']
41
- end
42
- end
43
- SYSTEM = uname_s
44
-
45
- def setup
46
- @tmpdir = Dir.mktmpdir("tmptest_gdbm")
47
- @prefix = "tmptest_gdbm_#{$$}"
48
- @path = "#{@tmpdir}/#{@prefix}_"
49
- assert_instance_of(GDBM, @gdbm = GDBM.new(@path))
50
-
51
- # prepare to make readonly GDBM file
52
- GDBM.open("#{@tmpdir}/#{@prefix}_rdonly", 0400) {|gdbm|
53
- gdbm['foo'] = 'FOO'
54
- }
55
- assert_instance_of(GDBM, @gdbm_rdonly = GDBM.new("#{@tmpdir}/#{@prefix}_rdonly", nil))
56
- end
57
- def teardown
58
- assert_nil(@gdbm.close)
59
- assert_nil(@gdbm_rdonly.close)
60
- ObjectSpace.each_object(GDBM) do |obj|
61
- obj.close unless obj.closed?
62
- end
63
- FileUtils.remove_entry_secure @tmpdir
64
- end
65
-
66
- def check_size(expect, gdbm=@gdbm)
67
- assert_equal(expect, gdbm.size)
68
- n = 0
69
- gdbm.each { n+=1 }
70
- assert_equal(expect, n)
71
- if expect == 0
72
- assert_equal(true, gdbm.empty?)
73
- else
74
- assert_equal(false, gdbm.empty?)
75
- end
76
- end
77
-
78
- def have_fork?
79
- begin
80
- fork{}
81
- true
82
- rescue NotImplementedError
83
- false
84
- end
85
- end
86
-
87
- def test_s_new_has_no_block
88
- # GDBM.new ignore the block
89
- foo = true
90
- assert_instance_of(GDBM, gdbm = GDBM.new("#{@tmpdir}/#{@prefix}") { foo = false })
91
- assert_equal(foo, true)
92
- assert_nil(gdbm.close)
93
- end
94
- def test_s_open_create_new
95
- return if /^CYGWIN_9/ =~ SYSTEM
96
-
97
- save_mask = File.umask(0)
98
- begin
99
- assert_instance_of(GDBM, gdbm = GDBM.open("#{@tmpdir}/#{@prefix}"))
100
- gdbm.close
101
- assert_equal(File.stat("#{@tmpdir}/#{@prefix}").mode & 0777, 0666)
102
- assert_instance_of(GDBM, gdbm = GDBM.open("#{@tmpdir}/#{@prefix}2", 0644))
103
- gdbm.close
104
- assert_equal(File.stat("#{@tmpdir}/#{@prefix}2").mode & 0777, 0644)
105
- ensure
106
- File.umask save_mask
107
- end
108
- end
109
- def test_s_open_no_create
110
- assert_nil(gdbm = GDBM.open("#{@tmpdir}/#{@prefix}", nil),
111
- "this test is failed on libgdbm 1.8.0")
112
- ensure
113
- gdbm.close if gdbm
114
- end
115
- def test_s_open_3rd_arg
116
- assert_instance_of(GDBM, gdbm = GDBM.open("#{@tmpdir}/#{@prefix}", 0644,
117
- GDBM::FAST))
118
- gdbm.close
119
-
120
- # gdbm 1.8.0 specific
121
- if defined? GDBM::SYNC
122
- assert_instance_of(GDBM, gdbm = GDBM.open("#{@tmpdir}/#{@prefix}", 0644,
123
- GDBM::SYNC))
124
- gdbm.close
125
- end
126
- # gdbm 1.8.0 specific
127
- if defined? GDBM::NOLOCK
128
- assert_instance_of(GDBM, gdbm = GDBM.open("#{@tmpdir}/#{@prefix}", 0644,
129
- GDBM::NOLOCK))
130
- gdbm.close
131
- end
132
- end
133
- def test_s_open_with_block
134
- assert_equal(GDBM.open("#{@tmpdir}/#{@prefix}") { :foo }, :foo)
135
- end
136
- def test_s_open_lock
137
- return unless have_fork? # snip this test
138
- pid = fork() {
139
- assert_instance_of(GDBM, gdbm = GDBM.open("#{@tmpdir}/#{@prefix}", 0644))
140
- sleep 2
141
- }
142
- begin
143
- sleep 1
144
- assert_raise(Errno::EWOULDBLOCK) {
145
- begin
146
- assert_instance_of(GDBM, gdbm2 = GDBM.open("#{@tmpdir}/#{@prefix}", 0644))
147
- rescue Errno::EAGAIN, Errno::EACCES
148
- raise Errno::EWOULDBLOCK
149
- end
150
- }
151
- ensure
152
- Process.wait pid
153
- end
154
- end
155
-
156
- =begin
157
- # Is it guaranteed on many OS?
158
- def test_s_open_lock_one_process
159
- # locking on one process
160
- assert_instance_of(GDBM, gdbm = GDBM.open("#{@tmpdir}/#{@prefix}", 0644))
161
- assert_raise(Errno::EWOULDBLOCK) {
162
- begin
163
- GDBM.open("#{@tmpdir}/#{@prefix}", 0644)
164
- rescue Errno::EAGAIN
165
- raise Errno::EWOULDBLOCK
166
- end
167
- }
168
- end
169
- =end
170
-
171
- def test_s_open_nolock
172
- # gdbm 1.8.0 specific
173
- if not defined? GDBM::NOLOCK
174
- return
175
- end
176
- return unless have_fork? # snip this test
177
-
178
- pid = fork() {
179
- assert_instance_of(GDBM, gdbm = GDBM.open("#{@tmpdir}/#{@prefix}", 0644,
180
- GDBM::NOLOCK))
181
- sleep 2
182
- }
183
- sleep 1
184
- begin
185
- gdbm2 = nil
186
- assert_nothing_raised(Errno::EWOULDBLOCK, Errno::EAGAIN, Errno::EACCES) {
187
- assert_instance_of(GDBM, gdbm2 = GDBM.open("#{@tmpdir}/#{@prefix}", 0644))
188
- }
189
- ensure
190
- Process.wait pid
191
- gdbm2.close if gdbm2
192
- end
193
-
194
- p Dir.glob("#{@tmpdir}/#{@prefix}*") if $DEBUG
195
-
196
- pid = fork() {
197
- assert_instance_of(GDBM, gdbm = GDBM.open("#{@tmpdir}/#{@prefix}", 0644))
198
- sleep 2
199
- }
200
- begin
201
- sleep 1
202
- gdbm2 = nil
203
- assert_nothing_raised(Errno::EWOULDBLOCK, Errno::EAGAIN, Errno::EACCES) {
204
- # this test is failed on Cygwin98 (???)
205
- assert_instance_of(GDBM, gdbm2 = GDBM.open("#{@tmpdir}/#{@prefix}", 0644,
206
- GDBM::NOLOCK))
207
- }
208
- ensure
209
- Process.wait pid
210
- gdbm2.close if gdbm2
211
- end
212
- end
213
-
214
- def test_s_open_error
215
- assert_instance_of(GDBM, gdbm = GDBM.open("#{@tmpdir}/#{@prefix}", 0))
216
- assert_raise(Errno::EACCES) {
217
- GDBM.open("#{@tmpdir}/#{@prefix}", 0)
218
- }
219
- gdbm.close
220
- end
221
-
222
- def test_close
223
- assert_instance_of(GDBM, gdbm = GDBM.open("#{@tmpdir}/#{@prefix}"))
224
- assert_nil(gdbm.close)
225
-
226
- # closed GDBM file
227
- assert_raise(RuntimeError) { gdbm.close }
228
- end
229
-
230
- def test_aref
231
- assert_equal('bar', @gdbm['foo'] = 'bar')
232
- assert_equal('bar', @gdbm['foo'])
233
-
234
- assert_nil(@gdbm['bar'])
235
- end
236
-
237
- def test_fetch
238
- assert_equal('bar', @gdbm['foo']='bar')
239
- assert_equal('bar', @gdbm.fetch('foo'))
240
-
241
- # key not found
242
- assert_raise(IndexError) {
243
- @gdbm.fetch('bar')
244
- }
245
-
246
- # test for `ifnone' arg
247
- assert_equal('baz', @gdbm.fetch('bar', 'baz'))
248
-
249
- # test for `ifnone' block
250
- assert_equal('foobar', @gdbm.fetch('bar') {|key| 'foo' + key })
251
- end
252
-
253
- def test_aset
254
- num = 0
255
- 2.times {|i|
256
- assert_equal('foo', @gdbm['foo'] = 'foo')
257
- assert_equal('foo', @gdbm['foo'])
258
- assert_equal('bar', @gdbm['foo'] = 'bar')
259
- assert_equal('bar', @gdbm['foo'])
260
-
261
- num += 1 if i == 0
262
- assert_equal(num, @gdbm.size)
263
-
264
- # assign nil
265
- assert_equal('', @gdbm['bar'] = '')
266
- assert_equal('', @gdbm['bar'])
267
-
268
- num += 1 if i == 0
269
- assert_equal(num, @gdbm.size)
270
-
271
- # empty string
272
- assert_equal('', @gdbm[''] = '')
273
- assert_equal('', @gdbm[''])
274
-
275
- num += 1 if i == 0
276
- assert_equal(num, @gdbm.size)
277
-
278
- # Fixnum
279
- assert_equal('200', @gdbm['100'] = '200')
280
- assert_equal('200', @gdbm['100'])
281
-
282
- num += 1 if i == 0
283
- assert_equal(num, @gdbm.size)
284
-
285
- # Big key and value
286
- assert_equal('y' * 100, @gdbm['x' * 100] = 'y' * 100)
287
- assert_equal('y' * 100, @gdbm['x' * 100])
288
-
289
- num += 1 if i == 0
290
- assert_equal(num, @gdbm.size)
291
- }
292
- end
293
-
294
- def test_key
295
- assert_equal('bar', @gdbm['foo'] = 'bar')
296
- assert_equal('foo', @gdbm.key('bar'))
297
- assert_nil(@gdbm['bar'])
298
- end
299
-
300
- def test_values_at
301
- keys = %w(foo bar baz)
302
- values = %w(FOO BAR BAZ)
303
- @gdbm[keys[0]], @gdbm[keys[1]], @gdbm[keys[2]] = values
304
- assert_equal(values.reverse, @gdbm.values_at(*keys.reverse))
305
- end
306
-
307
- def test_select_with_block
308
- keys = %w(foo bar baz)
309
- values = %w(FOO BAR BAZ)
310
- @gdbm[keys[0]], @gdbm[keys[1]], @gdbm[keys[2]] = values
311
- ret = @gdbm.select {|k,v|
312
- assert_equal(k.upcase, v)
313
- k != "bar"
314
- }
315
- assert_equal([['baz', 'BAZ'], ['foo', 'FOO']],
316
- ret.sort)
317
- end
318
-
319
- def test_length
320
- num = 10
321
- assert_equal(0, @gdbm.size)
322
- num.times {|i|
323
- i = i.to_s
324
- @gdbm[i] = i
325
- }
326
- assert_equal(num, @gdbm.size)
327
-
328
- @gdbm.shift
329
-
330
- assert_equal(num - 1, @gdbm.size)
331
- end
332
-
333
- def test_empty?
334
- assert_equal(true, @gdbm.empty?)
335
- @gdbm['foo'] = 'FOO'
336
- assert_equal(false, @gdbm.empty?)
337
- end
338
-
339
- def test_each_pair
340
- n = 0
341
- @gdbm.each_pair { n += 1 }
342
- assert_equal(0, n)
343
-
344
- keys = %w(foo bar baz)
345
- values = %w(FOO BAR BAZ)
346
-
347
- @gdbm[keys[0]], @gdbm[keys[1]], @gdbm[keys[2]] = values
348
-
349
- n = 0
350
- ret = @gdbm.each_pair {|key, val|
351
- assert_not_nil(i = keys.index(key))
352
- assert_equal(val, values[i])
353
-
354
- n += 1
355
- }
356
- assert_equal(keys.size, n)
357
- assert_equal(@gdbm, ret)
358
- end
359
-
360
- def test_each_value
361
- n = 0
362
- @gdbm.each_value { n += 1 }
363
- assert_equal(0, n)
364
-
365
- keys = %w(foo bar baz)
366
- values = %w(FOO BAR BAZ)
367
-
368
- @gdbm[keys[0]], @gdbm[keys[1]], @gdbm[keys[2]] = values
369
-
370
- n = 0
371
- ret = @gdbm.each_value {|val|
372
- assert_not_nil(key = @gdbm.key(val))
373
- assert_not_nil(i = keys.index(key))
374
- assert_equal(val, values[i])
375
-
376
- n += 1
377
- }
378
- assert_equal(keys.size, n)
379
- assert_equal(@gdbm, ret)
380
- end
381
-
382
- def test_each_key
383
- n = 0
384
- @gdbm.each_key { n += 1 }
385
- assert_equal(0, n)
386
-
387
- keys = %w(foo bar baz)
388
- values = %w(FOO BAR BAZ)
389
-
390
- @gdbm[keys[0]], @gdbm[keys[1]], @gdbm[keys[2]] = values
391
-
392
- n = 0
393
- ret = @gdbm.each_key {|key|
394
- assert_not_nil(i = keys.index(key))
395
- assert_equal(@gdbm[key], values[i])
396
-
397
- n += 1
398
- }
399
- assert_equal(keys.size, n)
400
- assert_equal(@gdbm, ret)
401
- end
402
-
403
- def test_keys
404
- assert_equal([], @gdbm.keys)
405
-
406
- keys = %w(foo bar baz)
407
- values = %w(FOO BAR BAZ)
408
-
409
- @gdbm[keys[0]], @gdbm[keys[1]], @gdbm[keys[2]] = values
410
-
411
- assert_equal(keys.sort, @gdbm.keys.sort)
412
- assert_equal(values.sort, @gdbm.values.sort)
413
- end
414
-
415
- def test_values
416
- test_keys
417
- end
418
-
419
- def test_shift
420
- assert_nil(@gdbm.shift)
421
- assert_equal(0, @gdbm.size)
422
-
423
- keys = %w(foo bar baz)
424
- values = %w(FOO BAR BAZ)
425
-
426
- @gdbm[keys[0]], @gdbm[keys[1]], @gdbm[keys[2]] = values
427
-
428
- ret_keys = []
429
- ret_values = []
430
- while ret = @gdbm.shift
431
- ret_keys.push ret[0]
432
- ret_values.push ret[1]
433
-
434
- assert_equal(keys.size - ret_keys.size, @gdbm.size)
435
- end
436
-
437
- assert_equal(keys.sort, ret_keys.sort)
438
- assert_equal(values.sort, ret_values.sort)
439
- end
440
-
441
- def test_delete
442
- keys = %w(foo bar baz)
443
- values = %w(FOO BAR BAZ)
444
- key = keys[1]
445
-
446
- assert_nil(@gdbm.delete(key))
447
- assert_equal(0, @gdbm.size)
448
-
449
- @gdbm[keys[0]], @gdbm[keys[1]], @gdbm[keys[2]] = values
450
-
451
- assert_equal('BAR', @gdbm.delete(key))
452
- assert_nil(@gdbm[key])
453
- assert_equal(2, @gdbm.size)
454
-
455
- assert_nil(@gdbm.delete(key))
456
-
457
- if /^CYGWIN_9/ !~ SYSTEM
458
- assert_raise(GDBMError) {
459
- @gdbm_rdonly.delete("foo")
460
- }
461
-
462
- assert_nil(@gdbm_rdonly.delete("bar"))
463
- end
464
- end
465
- def test_delete_with_block
466
- key = 'no called block'
467
- @gdbm[key] = 'foo'
468
- assert_equal('foo', @gdbm.delete(key) {|k| k.replace 'called block'})
469
- assert_equal('no called block', key)
470
- assert_equal(0, @gdbm.size)
471
-
472
- key = 'no called block'
473
- assert_equal(:blockval,
474
- @gdbm.delete(key) {|k| k.replace 'called block'; :blockval})
475
- assert_equal('called block', key)
476
- assert_equal(0, @gdbm.size)
477
- end
478
-
479
- def test_delete_if
480
- v = "0"
481
- 100.times {@gdbm[v] = v; v = v.next}
482
-
483
- ret = @gdbm.delete_if {|key, val| key.to_i < 50}
484
- assert_equal(@gdbm, ret)
485
- check_size(50, @gdbm)
486
-
487
- ret = @gdbm.delete_if {|key, val| key.to_i >= 50}
488
- assert_equal(@gdbm, ret)
489
- check_size(0, @gdbm)
490
-
491
- # break
492
- v = "0"
493
- 100.times {@gdbm[v] = v; v = v.next}
494
- check_size(100, @gdbm)
495
- n = 0;
496
- @gdbm.delete_if {|key, val|
497
- break if n > 50
498
- n+=1
499
- true
500
- }
501
- assert_equal(51, n)
502
- check_size(49, @gdbm)
503
-
504
- @gdbm.clear
505
-
506
- # raise
507
- v = "0"
508
- 100.times {@gdbm[v] = v; v = v.next}
509
- check_size(100, @gdbm)
510
- n = 0;
511
- begin
512
- @gdbm.delete_if {|key, val|
513
- raise "runtime error" if n > 50
514
- n+=1
515
- true
516
- }
517
- rescue
518
- end
519
- assert_equal(51, n)
520
- check_size(49, @gdbm)
521
- end
522
-
523
- def test_reject
524
- v = "0"
525
- 100.times {@gdbm[v] = v; v = v.next}
526
-
527
- hash = @gdbm.reject {|key, val| key.to_i < 50}
528
- assert_instance_of(Hash, hash)
529
- assert_equal(100, @gdbm.size)
530
-
531
- assert_equal(50, hash.size)
532
- hash.each_pair {|key,val|
533
- assert_equal(false, key.to_i < 50)
534
- assert_equal(key, val)
535
- }
536
-
537
- hash = @gdbm.reject {|key, val| key.to_i < 100}
538
- assert_instance_of(Hash, hash)
539
- assert_equal(true, hash.empty?)
540
- end
541
-
542
- def test_clear
543
- v = "1"
544
- 100.times {v = v.next; @gdbm[v] = v}
545
-
546
- assert_equal(@gdbm, @gdbm.clear)
547
-
548
- # validate GDBM#size
549
- i = 0
550
- @gdbm.each { i += 1 }
551
- assert_equal(@gdbm.size, i)
552
- assert_equal(0, i)
553
- end
554
-
555
- def test_invert
556
- v = "0"
557
- 100.times {@gdbm[v] = v; v = v.next}
558
-
559
- hash = @gdbm.invert
560
- assert_instance_of(Hash, hash)
561
- assert_equal(100, hash.size)
562
- hash.each_pair {|key, val|
563
- assert_equal(key.to_i, val.to_i)
564
- }
565
- end
566
-
567
- def test_update
568
- hash = {}
569
- v = "0"
570
- 100.times {v = v.next; hash[v] = v}
571
-
572
- @gdbm["101"] = "101"
573
- @gdbm.update hash
574
- assert_equal(101, @gdbm.size)
575
- @gdbm.each_pair {|key, val|
576
- assert_equal(key.to_i, val.to_i)
577
- }
578
- end
579
-
580
- def test_replace
581
- hash = {}
582
- v = "0"
583
- 100.times {v = v.next; hash[v] = v}
584
-
585
- @gdbm["101"] = "101"
586
- @gdbm.replace hash
587
- assert_equal(100, @gdbm.size)
588
- @gdbm.each_pair {|key, val|
589
- assert_equal(key.to_i, val.to_i)
590
- }
591
- end
592
-
593
- def test_reorganize
594
- size1 = File.size(@path)
595
- i = "1"
596
- 1000.times {i = i.next; @gdbm[i] = i}
597
- @gdbm.clear
598
- @gdbm.sync
599
-
600
- size2 = File.size(@path)
601
- @gdbm.reorganize
602
- size3 = File.size(@path)
603
-
604
- # p [size1, size2, size3]
605
- assert_equal(true, size1 < size2)
606
- # this test is failed on Cygwin98. `GDBM version 1.8.0, as of May 19, 1999'
607
- assert_equal(true, size3 < size2)
608
- assert_equal(size1, size3)
609
- end
610
-
611
- def test_sync
612
- assert_instance_of(GDBM, gdbm = GDBM.open("#{@tmpdir}/#{@prefix}", 0666, GDBM::FAST))
613
- assert_equal(gdbm.sync, gdbm)
614
- gdbm.close
615
- assert_instance_of(GDBM, gdbm = GDBM.open("#{@tmpdir}/#{@prefix}", 0666))
616
- assert_equal(gdbm.sync, gdbm)
617
- gdbm.close
618
- end
619
-
620
- def test_cachesize=
621
- assert_equal(@gdbm.cachesize = 1024, 1024)
622
- end
623
-
624
- def test_fastmode=
625
- assert_equal(@gdbm.fastmode = true, true)
626
- end
627
-
628
- def test_syncmode=
629
- assert_equal(@gdbm.syncmode = true, true)
630
- end
631
-
632
- def test_haskey?
633
- assert_equal('bar', @gdbm['foo']='bar')
634
- assert_equal(true, @gdbm.has_key?('foo'))
635
- assert_equal(false, @gdbm.has_key?('bar'))
636
- end
637
-
638
- def test_has_value?
639
- assert_equal('bar', @gdbm['foo']='bar')
640
- assert_equal(true, @gdbm.has_value?('bar'))
641
- assert_equal(false, @gdbm.has_value?('foo'))
642
- end
643
-
644
- def test_to_a
645
- v = "0"
646
- 100.times {v = v.next; @gdbm[v] = v}
647
-
648
- ary = @gdbm.to_a
649
- assert_instance_of(Array, ary)
650
- assert_equal(100, ary.size)
651
- ary.each {|key,val|
652
- assert_equal(key.to_i, val.to_i)
653
- }
654
- end
655
-
656
- def test_to_hash
657
- v = "0"
658
- 100.times {v = v.next; @gdbm[v] = v}
659
-
660
- hash = @gdbm.to_hash
661
- assert_instance_of(Hash, hash)
662
- assert_equal(100, hash.size)
663
- hash.each {|key,val|
664
- assert_equal(key.to_i, val.to_i)
665
- }
666
- end
667
- end
668
-
669
- class TestGDBM2 < Test::Unit::TestCase
670
- def setup
671
- @tmproot = Dir.mktmpdir('ruby-gdbm')
672
- end
673
-
674
- def teardown
675
- FileUtils.remove_entry_secure @tmproot if File.directory?(@tmproot)
676
- end
677
-
678
- def test_reader_open_notexist
679
- assert_raise(Errno::ENOENT) {
680
- GDBM.open("#{@tmproot}/a", 0666, GDBM::READER)
681
- }
682
- end
683
-
684
- def test_writer_open_notexist
685
- assert_raise(Errno::ENOENT) {
686
- GDBM.open("#{@tmproot}/a", 0666, GDBM::WRITER)
687
- }
688
- end
689
-
690
- def test_wrcreat_open_notexist
691
- v = GDBM.open("#{@tmproot}/a", 0666, GDBM::WRCREAT)
692
- assert_instance_of(GDBM, v)
693
- v.close
694
- end
695
-
696
- def test_newdb_open_notexist
697
- v = GDBM.open("#{@tmproot}/a", 0666, GDBM::NEWDB)
698
- assert_instance_of(GDBM, v)
699
- v.close
700
- end
701
-
702
- def test_reader_open
703
- GDBM.open("#{@tmproot}/a.dbm") {} # create a db.
704
- v = GDBM.open("#{@tmproot}/a.dbm", nil, GDBM::READER) {|d|
705
- assert_raise(GDBMError) { d["k"] = "v" }
706
- true
707
- }
708
- assert(v)
709
- end
710
-
711
- def test_newdb_open
712
- GDBM.open("#{@tmproot}/a.dbm") {|dbm|
713
- dbm["k"] = "v"
714
- }
715
- v = GDBM.open("#{@tmproot}/a.dbm", nil, GDBM::NEWDB) {|d|
716
- assert_equal(0, d.length)
717
- assert_nil(d["k"])
718
- true
719
- }
720
- assert(v)
721
- end
722
-
723
- def test_freeze
724
- GDBM.open("#{@tmproot}/a.dbm") {|d|
725
- d.freeze
726
- assert_raise(RuntimeError) { d["k"] = "v" }
727
- }
728
- end
729
- end
730
- else
731
- $stderr.puts "WARNING: Did not load gdbm library."
732
- end