aboutsummaryrefslogtreecommitdiff
blob: 6873c7c1972e509bc08b3d8111b9244b5c9c8d63 (plain)
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
import pytest

import os

dbm = pytest.importorskip('dbm')


def test_get(tmpdir):
    path = str(tmpdir.join('test_dbm_extra.test_get'))
    d = dbm.open(path, 'c')
    x = d.get("42")
    assert x is None
    d.close()

def test_delitem(tmpdir):
    path = str(tmpdir.join('test_dbm_extra.test_delitem'))
    d = dbm.open(path, 'c')
    with pytest.raises(KeyError):
        del d['xyz']

def test_nonstring(tmpdir):
    path = str(tmpdir.join('test_dbm_extra.test_nonstring'))
    d = dbm.open(path, 'c')
    with pytest.raises(TypeError):
        d[123] = 'xyz'
    with pytest.raises(TypeError):
        d['xyz'] = 123
    with pytest.raises(TypeError):
        d['xyz'] = None
    with pytest.raises(TypeError):
        del d[123]
    with pytest.raises(TypeError):
        d[123]
    with pytest.raises(TypeError):
        123 in d
    with pytest.raises(TypeError):
        d.has_key(123)
    with pytest.raises(TypeError):
        d.setdefault(123, 'xyz')
    with pytest.raises(TypeError):
        d.setdefault('xyz', 123)
    with pytest.raises(TypeError):
        d.get(123)
    assert dict(d) == {}
    d.setdefault('xyz', '123')
    assert dict(d) == {'xyz': '123'}
    d.close()

def test_multiple_sets(tmpdir):
    path = str(tmpdir.join('test_dbm_extra.test_multiple_sets'))
    d = dbm.open(path, 'c')
    d['xyz'] = '12'
    d['xyz'] = '3'
    d['xyz'] = '546'
    assert dict(d) == {'xyz': '546'}
    assert d['xyz'] == '546'

@pytest.mark.skipif("'__pypy__' not in sys.modules")
def test_extra():
    with pytest.raises(TypeError):
        dbm.datum(123)
    with pytest.raises(TypeError):
        dbm.datum(False)

def test_null():
    db = dbm.open('test', 'c')
    db['1'] = 'a\x00b'
    db.close()

    db = dbm.open('test', 'r')
    assert db['1'] == 'a\x00b'
    db.close()

def test_key_with_empty_value(tmpdir):
    # this test fails on CPython too (at least on tannit), and the
    # case shows up when gdbm is not installed and test_anydbm.py
    # falls back dbm.
    pytest.skip("test may fail on CPython too")
    path = str(tmpdir.join('test_dbm_extra.test_key_with_empty_value'))
    d = dbm.open(path, 'c')
    assert 'key_with_empty_value' not in d
    d['key_with_empty_value'] = ''
    assert 'key_with_empty_value' in d
    assert d['key_with_empty_value'] == ''
    d.close()

def test_unicode_filename(tmpdir):
    path = str(tmpdir) + os.sep + u'test_dbm_extra.test_unicode_filename'
    d = dbm.open(path, 'c')
    d.close()