mmengine/tests/test_config/test_collect_meta.py

44 lines
1.6 KiB
Python

# Copyright (c) OpenMMLab. All rights reserved.
import os.path
import pytest
from mmengine.config.utils import (_get_external_cfg_base_path,
_get_package_and_cfg_path)
def test_get_external_cfg_base_path(tmp_path):
package_path = tmp_path
rel_cfg_path = os.path.join('cfg_dir', 'cfg_file')
with pytest.raises(FileNotFoundError):
_get_external_cfg_base_path(str(package_path), rel_cfg_path)
cfg_dir = tmp_path / '.mim' / 'configs' / 'cfg_dir'
cfg_dir.mkdir(parents=True, exist_ok=True)
f = open(cfg_dir / 'cfg_file', 'w')
f.close()
cfg_path = _get_external_cfg_base_path(str(package_path), rel_cfg_path)
assert cfg_path == f'{os.path.join(str(cfg_dir), "cfg_file")}'
def test_get_external_cfg_path():
external_cfg_path = 'mmdet::path/cfg'
package, rel_cfg_path = _get_package_and_cfg_path(external_cfg_path)
assert package == 'mmdet'
assert rel_cfg_path == 'path/cfg'
# external config must contain `::`.
external_cfg_path = 'path/cfg'
with pytest.raises(ValueError):
_get_package_and_cfg_path(external_cfg_path)
# Use `:::` as operator will raise an error.
external_cfg_path = 'mmdet:::path/cfg'
with pytest.raises(ValueError):
_get_package_and_cfg_path(external_cfg_path)
# Use `:` as operator will raise an error.
external_cfg_path = 'mmdet:path/cfg'
with pytest.raises(ValueError):
_get_package_and_cfg_path(external_cfg_path)
# Too much `::`
external_cfg_path = 'mmdet::path/cfg::error'
with pytest.raises(ValueError):
_get_package_and_cfg_path(external_cfg_path)