def test_search_path_env_var(self): content = '''\ ape activity: resting snack: leaves bonobo extends ape activity: loving snack: kiwi chimp extends ape activity: fighting snack: eggs ''' tmp_file = self.make_named_temp_file('apes.config', content=content) with env_override( env={'_CONFIG_DIR': path.dirname(tmp_file)}) as tmp_env: s = SCL('${_CONFIG_DIR}', '*.config') s.load() self.assertEqual('fighting', s.section('chimp').find_by_key('activity')) self.assertEqual('loving', s.section('bonobo').find_by_key('activity')) self.assertEqual('eggs', s.section('chimp').find_by_key('snack')) self.assertEqual('kiwi', s.section('bonobo').find_by_key('snack'))
def test_env_vars(self): content = '''\ ape activity: ${_CONFIG_ACTIVITY} snack: leaves bonobo extends ape activity: loving snack: ${_CONFIG_SNACK} chimp extends ape activity: fighting snack: eggs ''' tmp_dir = self.make_temp_dir() tmp_file = path.join(tmp_dir, 'apes.config') file_util.save(tmp_file, content=content) with env_override(env={ '_CONFIG_ACTIVITY': 'resting', '_CONFIG_SNACK': 'kiwi' }) as tmp_env: s = SCL(tmp_dir, '*.config') s.load() self.assertEqual('fighting', s.section('chimp').find_by_key('activity')) self.assertEqual('loving', s.section('bonobo').find_by_key('activity')) self.assertEqual('eggs', s.section('chimp').find_by_key('snack')) self.assertEqual('kiwi', s.section('bonobo').find_by_key('snack'))
def test_search_path_expanduser(self): content = '''\ ape activity: resting snack: leaves bonobo extends ape activity: loving snack: kiwi chimp extends ape activity: fighting snack: eggs ''' with env_override.temp_home() as tmp_env: file_util.save(path.join(os.environ['HOME'], '.config', 'apes.config'), content=content) s = SCL('~/.config', '*.config') s.load() self.assertEqual('fighting', s.section('chimp').find_by_key('activity')) self.assertEqual('loving', s.section('bonobo').find_by_key('activity')) self.assertEqual('eggs', s.section('chimp').find_by_key('snack')) self.assertEqual('kiwi', s.section('bonobo').find_by_key('snack'))
def test_section(self): tmp_dir = self._make_temp_configs() s = SCL(tmp_dir, '*.config') s.load() files = [ 'animal.config', 'bacteria.config', 'bird.config', 'cat.config', 'dog.config', 'mammal.config', 'organism.config', 'virus.config', ] self.assertTrue(s.has_unique_section('dog')) self.assertTrue(s.has_unique_section('cat')) self.assertFalse(s.has_unique_section('notthere')) self.assertEqual('false', s.section('dog').find_by_key('food')) self.assertEqual('true', s.section('dog').find_by_key('pet')) self.assertEqual('warm', s.section('dog').find_by_key('blood')) self.assertEqual('aerobic', s.section('dog').find_by_key('respiration')) self.assertEqual('true', s.section('cat').find_by_key('food')) self.assertEqual('true', s.section('cat').find_by_key('pet')) self.assertEqual('warm', s.section('cat').find_by_key('blood')) self.assertEqual('aerobic', s.section('cat').find_by_key('respiration')) self.assertEqual('true', s.section('bird').find_by_key('food')) self.assertEqual('false', s.section('bird').find_by_key('pet')) self.assertEqual('cold', s.section('bird').find_by_key('blood')) self.assertEqual('aerobic', s.section('bird').find_by_key('respiration'))
def test_self_dependency(self): content = '''\ ape extends ape something: yes ''' tmp_dir = self.make_temp_dir() tmp_file = path.join(tmp_dir, 'apes.config') file_util.save(tmp_file, content=content) s = SCL(tmp_dir, '*.config') with self.assertRaises(ERROR) as ctx: s.load() self.assertTrue( 'Self dependency for "ape"' in ctx.exception.message)
def test_missing_dependency(self): content = '''\ ape extends missing_link something: yes ''' tmp_dir = self.make_temp_dir() tmp_file = path.join(tmp_dir, 'apes.config') file_util.save(tmp_file, content=content) s = SCL(tmp_dir, '*.config') s.load() with self.assertRaises(ERROR) as ctx: s.section('ape') self.assertTrue('Missing dependency for ape: missing_link' in ctx.exception.message)
def test_files(self): tmp_dir = self._make_temp_configs() s = SCL(tmp_dir, '*.config') s.load() files = [ 'animal.config', 'bacteria.config', 'bird.config', 'cat.config', 'dog.config', 'mammal.config', 'organism.config', 'virus.config', ] self.assertEqual([path.join(tmp_dir, f) for f in files], s.files)
def test_cyclic_dependency(self): content = '''\ ape extends bonobo something: yes bonobo extends ape something: yes ''' tmp_dir = self.make_temp_dir() tmp_file = path.join(tmp_dir, 'apes.config') file_util.save(tmp_file, content=content) s = SCL(tmp_dir, '*.config') s.load() with self.assertRaises(ERROR) as ctx: s.section('ape') self.assertTrue('Cyclic dependencies found: ape bonobo' in ctx.exception.message)
def test_duplicate_section(self): content = '''\ organism respiration: unknown food: false organism respiration: unknown food: true ''' tmp_dir = self.make_temp_dir() tmp_file = path.join(tmp_dir, 'organisms.config') file_util.save(tmp_file, content=content) s = SCL(tmp_dir, '*.config') with self.assertRaises(ERROR) as ctx: s.load() self.assertTrue( 'Duplicate config section' in ctx.exception.message)
def test_section_one_config_file(self): tmp_file = self._make_one_temp_config() s = SCL(path.dirname(tmp_file), '*.config') s.load() self.assertEqual('false', s.section('dog').find_by_key('food')) self.assertEqual('true', s.section('dog').find_by_key('pet')) self.assertEqual('warm', s.section('dog').find_by_key('blood')) self.assertEqual('aerobic', s.section('dog').find_by_key('respiration')) self.assertEqual('true', s.section('cat').find_by_key('food')) self.assertEqual('true', s.section('cat').find_by_key('pet')) self.assertEqual('warm', s.section('cat').find_by_key('blood')) self.assertEqual('aerobic', s.section('cat').find_by_key('respiration')) self.assertEqual('true', s.section('bird').find_by_key('food')) self.assertEqual('false', s.section('bird').find_by_key('pet')) self.assertEqual('cold', s.section('bird').find_by_key('blood')) self.assertEqual('aerobic', s.section('bird').find_by_key('respiration'))
def test_files_one_config_file(self): tmp_file = self._make_one_temp_config() s = SCL(path.dirname(tmp_file), '*.config') s.load() self.assertEqual([tmp_file], s.files)