test_config.py 2.7 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
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22


def test_empty():
    cfg = Config()
    assert cfg.filename is None
    assert cfg.text == ''
    assert len(cfg) == 0
    assert cfg._cfg_dict == {}


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()

23
24
    with pytest.raises(FileNotFoundError):
        Config.fromfile('no_such_file.py')
Kai Chen's avatar
Kai Chen committed
25
    with pytest.raises(ValueError):
26
        Config.fromfile(osp.join(osp.dirname(__file__), 'data/config/a.b.py'))
Kai Chen's avatar
Kai Chen committed
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


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']
54
55
        with pytest.raises(AttributeError):
            cfg.not_exist
Kai Chen's avatar
Kai Chen committed
56
57
58
59
60
        # 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]
61
            assert cfg.get('not_exist') is None
Kai Chen's avatar
Kai Chen committed
62
            assert cfg.get('not_exist', 0) == 0
63
64
65
            with pytest.raises(KeyError):
                cfg['not_exist']
        assert 'item1' in cfg
Kai Chen's avatar
Kai Chen committed
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
        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