test_config.py 2.86 KB
Newer Older
Kai Chen's avatar
Kai Chen committed
1
2
3
import os.path as osp

import pytest
4
from mmcv import Config, FileNotFoundError
Kai Chen's avatar
Kai Chen committed
5
6


Kai Chen's avatar
Kai Chen committed
7
def test_construct():
Kai Chen's avatar
Kai Chen committed
8
9
10
11
12
13
    cfg = Config()
    assert cfg.filename is None
    assert cfg.text == ''
    assert len(cfg) == 0
    assert cfg._cfg_dict == {}

Kai Chen's avatar
Kai Chen committed
14
15
16
    with pytest.raises(TypeError):
        Config([0, 1])

Kai Chen's avatar
Kai Chen committed
17
18
19
20
21
22
23
24
25

def test_fromfile():
    for filename in ['a.py', 'b.json', 'c.yaml']:
        cfg_file = osp.join(osp.dirname(__file__), 'data/config', filename)
        cfg = Config.fromfile(cfg_file)
        assert isinstance(cfg, Config)
        assert cfg.filename == cfg_file
        assert cfg.text == open(cfg_file, 'r').read()

26
27
    with pytest.raises(FileNotFoundError):
        Config.fromfile('no_such_file.py')
Kai Chen's avatar
Kai Chen committed
28
    with pytest.raises(ValueError):
29
        Config.fromfile(osp.join(osp.dirname(__file__), 'data/config/a.b.py'))
Kai Chen's avatar
Kai Chen committed
30
31
    with pytest.raises(IOError):
        Config.fromfile(osp.join(osp.dirname(__file__), 'data/color.jpg'))
Kai Chen's avatar
Kai Chen committed
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


def test_dict():
    cfg_dict = dict(item1=[1, 2], item2=dict(a=0), item3=True, item4='test')

    for filename in ['a.py', 'b.json', 'c.yaml']:
        cfg_file = osp.join(osp.dirname(__file__), 'data/config', filename)
        cfg = Config.fromfile(cfg_file)

        # len(cfg)
        assert len(cfg) == 4
        # cfg.keys()
        assert set(cfg.keys()) == set(cfg_dict.keys())
        assert set(cfg._cfg_dict.keys()) == set(cfg_dict.keys())
        # cfg.values()
        for value in cfg.values():
            assert value in cfg_dict.values()
        # cfg.items()
        for name, value in cfg.items():
            assert name in cfg_dict
            assert value in cfg_dict.values()
        # cfg.field
        assert cfg.item1 == cfg_dict['item1']
        assert cfg.item2 == cfg_dict['item2']
        assert cfg.item2.a == 0
        assert cfg.item3 == cfg_dict['item3']
        assert cfg.item4 == cfg_dict['item4']
59
60
        with pytest.raises(AttributeError):
            cfg.not_exist
Kai Chen's avatar
Kai Chen committed
61
62
63
64
65
        # field in cfg, cfg[field], cfg.get()
        for name in ['item1', 'item2', 'item3', 'item4']:
            assert name in cfg
            assert cfg[name] == cfg_dict[name]
            assert cfg.get(name) == cfg_dict[name]
66
            assert cfg.get('not_exist') is None
Kai Chen's avatar
Kai Chen committed
67
            assert cfg.get('not_exist', 0) == 0
68
69
70
            with pytest.raises(KeyError):
                cfg['not_exist']
        assert 'item1' in cfg
Kai Chen's avatar
Kai Chen committed
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
        assert 'not_exist' not in cfg
        # cfg.update()
        cfg.update(dict(item1=0))
        assert cfg.item1 == 0
        cfg.update(dict(item2=dict(a=1)))
        assert cfg.item2.a == 1


def test_setattr():
    cfg = Config()
    cfg.item1 = [1, 2]
    cfg.item2 = {'a': 0}
    cfg['item5'] = {'a': {'b': None}}
    assert cfg._cfg_dict['item1'] == [1, 2]
    assert cfg.item1 == [1, 2]
    assert cfg._cfg_dict['item2'] == {'a': 0}
    assert cfg.item2.a == 0
    assert cfg._cfg_dict['item5'] == {'a': {'b': None}}
    assert cfg.item5.a.b is None