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(): ''' 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(): ''' 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(): ''' 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(): ''' 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 list(map(lambda p:p.pathname, 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 list(map(lambda p:p.pathname, 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 list(map(lambda p:p.pathname, any_dark)) == ['test-none.sh', 'none-none.sh']