131 lines
3.6 KiB
Python
131 lines
3.6 KiB
Python
from pathlib import Path
|
|
|
|
from symconf import ConfigManager
|
|
|
|
config_dir = Path(__file__, "..", "test-config-dir/").resolve()
|
|
cm = ConfigManager(config_dir)
|
|
|
|
|
|
def test_matching_configs_exact() -> None:
|
|
"""
|
|
Test matching exact style and scheme. Given strict mode not set (allowing
|
|
relaxation to "none"), the order of matching should be
|
|
|
|
1. (none, none) :: none-none.aaa
|
|
2. (none, scheme) :: none-light.aaa
|
|
3. (style, none) :: test-none.aaa
|
|
4. (style, scheme) :: test-light.ccc
|
|
|
|
Yielding "test-light.aaa", "test-light.ccc" (unique only on config
|
|
pathname).
|
|
"""
|
|
any_light = cm.get_matching_configs(
|
|
"test",
|
|
style="test",
|
|
scheme="light",
|
|
)
|
|
print(any_light)
|
|
|
|
assert len(any_light) == 2
|
|
assert any_light["aaa"].pathname == "test-none.aaa"
|
|
assert any_light["ccc"].pathname == "test-light.ccc"
|
|
|
|
|
|
def test_matching_configs_any_style() -> None:
|
|
"""
|
|
Test matching "any" style and exact scheme. Given strict mode not set
|
|
(allowing relaxation to "none"), the order of matching should be
|
|
|
|
1. (style, none) :: none-none.aaa, test-none.aaa
|
|
2. (none, none) :: none-none.aaa
|
|
3. (style, scheme) :: test-dark.bbb
|
|
4. (none, scheme) :: (nothing)
|
|
|
|
Yielding "none-none.aaa" (should always overwrite "test-none.aaa" due to
|
|
"any"'s preference for non-specific matches, i.e., "none"s),
|
|
"test-none.ddd", "test-dark.bbb" (unique only on config pathname).
|
|
"""
|
|
any_dark = cm.get_matching_configs(
|
|
"test",
|
|
style="any",
|
|
scheme="dark",
|
|
)
|
|
|
|
assert len(any_dark) == 2
|
|
assert any_dark["aaa"].pathname == "none-none.aaa"
|
|
assert any_dark["bbb"].pathname == "test-dark.bbb"
|
|
|
|
|
|
def test_matching_configs_any_scheme() -> None:
|
|
"""
|
|
Test matching exact style and "any" scheme. Given strict mode not set
|
|
(allowing relaxation to "none"), the order of matching should be
|
|
|
|
1. (none, scheme) :: none-light.aaa & none-none.aaa
|
|
2. (none, none) :: none-none.aaa
|
|
3. (style, scheme) :: test-dark.bbb & test-light.ccc & test-none.aaa
|
|
4. (style, none) :: test-none.aaa
|
|
|
|
Yielding "test-none.aaa", "test-light.ccc", "test-dark.bbb"
|
|
"""
|
|
test_any = cm.get_matching_configs(
|
|
"test",
|
|
style="test",
|
|
scheme="any",
|
|
)
|
|
|
|
assert len(test_any) == 3
|
|
assert test_any["aaa"].pathname == "test-none.aaa"
|
|
assert test_any["bbb"].pathname == "test-dark.bbb"
|
|
assert test_any["ccc"].pathname == "test-light.ccc"
|
|
|
|
|
|
def test_matching_scripts() -> None:
|
|
"""
|
|
Test matching exact style and scheme. Given strict mode not set (allowing
|
|
relaxation to "none"), the order of matching should be
|
|
|
|
1. (none, none) :: none-none.sh
|
|
2. (none, scheme) :: none-light.sh
|
|
3. (style, none) :: test-none.sh
|
|
4. (style, scheme) :: (nothing)
|
|
|
|
Yielding (ordered by dec specificity) "test-none.sh" as primary match, then
|
|
relaxation match "none-none.sh".
|
|
"""
|
|
test_any = cm.get_matching_scripts(
|
|
"test",
|
|
style="test",
|
|
scheme="any",
|
|
)
|
|
|
|
assert len(test_any) == 2
|
|
assert [p.pathname for p in test_any] == [
|
|
"test-none.sh",
|
|
"none-none.sh",
|
|
]
|
|
|
|
any_light = cm.get_matching_scripts(
|
|
"test",
|
|
style="any",
|
|
scheme="light",
|
|
)
|
|
|
|
assert len(any_light) == 2
|
|
assert [p.pathname for p in any_light] == [
|
|
"none-light.sh",
|
|
"none-none.sh",
|
|
]
|
|
|
|
any_dark = cm.get_matching_scripts(
|
|
"test",
|
|
style="any",
|
|
scheme="dark",
|
|
)
|
|
|
|
assert len(any_dark) == 2
|
|
assert [p.pathname for p in any_dark] == [
|
|
"test-none.sh",
|
|
"none-none.sh",
|
|
]
|