class TestBaseConfig(unittest.TestCase): """Test BaseConfig class""" def setUp(self): self.cfg = BaseConfig({'foo':'bar'}) def tearDown(self): del self.cfg def test_create_cfg_from_dict(self): """Test create configuration from dictionary""" self.assertIsInstance(self.cfg, BaseConfig) self.assertDictEqual(self.cfg, {'foo':'bar'}) self.assertListEqual(self.cfg.sections, ['foo']) def test_create_cfg_from_nested_dict(self): """Test create configuration from nested dictionary""" cfg = BaseConfig({'foo': BaseConfig({'bar':'foobar'})}) self.assertIsInstance(cfg, BaseConfig) self.assertIsInstance(cfg['foo'], BaseConfig) self.assertDictEqual(cfg['foo'], {'bar':'foobar'}) self.assertListEqual(cfg.sections, ['foo']) self.assertListEqual(cfg['foo'].sections, ['bar']) def test_create_cfg_from_args(self): """Test create configuration from *args""" cfg = BaseConfig(foo="bar", bar=BaseConfig(foo="bar", bar="foo")) self.assertSetEqual (set(cfg.sections), set(['bar', 'foo'])) self.assertIsInstance(cfg['bar'], BaseConfig) del cfg def test_create_cfg_from_args_kwargs(self): """Test create configuration from *args and **kwargs""" cfg = BaseConfig(foo="bar", bar=BaseConfig(foo="bar", bar="foo"), **{'foobar':'bar', 'barfoo':BaseConfig({'foo':'bar'})}) self.assertSetEqual (set(cfg.sections), set(['bar', 'foo', 'foobar', 'barfoo'])) self.assertIsInstance(cfg['bar'], BaseConfig) self.assertIsInstance(cfg['barfoo'], BaseConfig) del cfg @raises(TypeError) def test_add_section_dict(self): """Test adding a section to config as dict""" self.cfg.add_section({'foobar':'bar'}) def test_add_section_str(self): """Test adding a section to config as str""" self.cfg.add_section('foobar') self.assertSetEqual(set(self.cfg.sections), set(['foo', 'foobar'])) def test_update_config(self): """Test updating configuration with another configuration object. """ cfg2 = BaseConfig({'bar':'foo'}) self.cfg.update(cfg2) self.assertDictEqual(self.cfg, {'foo':'bar', 'bar':'foo'}) del cfg2 def test_update_config_same_section(self): """Test updating configuration with another configuration object whose sections overlap. Note that this will overwrite the first configuration. FIXME: should this be intended behaviour? """ cfg2 = BaseConfig({'foo':'foobar'}) self.cfg.update(cfg2) self.assertDictEqual(self.cfg, {'foo':'foobar'}) del cfg2 def test_update_config_nested(self): """Test updating configuration with another nested configuration""" cfg2 = BaseConfig({'bar': BaseConfig({'foo':'bar'})}) self.cfg.update(cfg2) self.assertDictEqual(self.cfg, {'foo':'bar', 'bar':{'foo':'bar'}}) del cfg2 def test_setting_config_section_to_dict(self): """Test setting a configuration section to a dict""" self.cfg['foo'] = {'foo':'bar'} self.assertIsInstance(self.cfg['foo'], BaseConfig) def test_baseconfig_from_nested_dictionary(self): """Instantiate BaseConfig object from nested dictionary""" d = BaseConfig({'foo':'bar', 'bar' : {'foo':'bar', 'bar':{'foo':'bar', 'bar':{'foo':'bar'}}}}) def assert_sections(d): for k,v in d.items(): if isinstance(v,dict): self.assertIsInstance(v, BaseConfig) assert_sections(d) def test_getitem(self): """Test getting an item from BaseConfig""" d = BaseConfig({'foo' : {'bar' : 'foo'}, 'bar' : lambda: "bar", 'foobar' : lambda x: x, 'barfoo' : lambda x: x['foo'], 'foofoo' : None}) self.assertIsInstance(d['foo'], BaseConfig) self.assertDictEqual(d['foo'], {'bar' : 'foo'}) self.assertIsInstance(d['foo']['bar'], str) self.assertEqual(d['foo']['bar'], 'foo') self.assertIsInstance(d['bar'], str) self.assertEqual(d['bar'], 'bar') self.assertIsInstance(d['foobar', "test"], str) self.assertEqual(d['foobar', "test"], "test") self.assertIsInstance(d['barfoo', {'foo' : "test"}], str) self.assertEqual(d['barfoo', {'foo' : "test"}], "test") self.assertIsNone (d['foofoo'])
def setUp(self): self.cfg = BaseConfig({'foo':'bar'})