Пример #1
0
class TestProfile(unittest.TestCase):
    def setUp(self):
        self.cfg = Config()
        #self.cfg.load(TEST_CONFIG)
        self.cfg.add_defaults({
            'root': {},
            'current_profile': 'default'
        })
        self.profile = Profile(self.cfg, 'root', 'current_profile')

    def test_basic(self):
        # just to check if everthing still works if all profiles were deleted
        for i in range(1):
            # Test the basic functions
            value = {'value': 42}
            self.profile.set('value', 21)
            self.assertEqual(self.profile.get('value'), 21)
            self.profile.add_profile('hello_world', initial_value=value)
            self.profile.current_profile = 'hello_world'
            self.assertEqual(self.profile.current_profile, 'hello_world')
            self.assertEqual(self.profile.get('value'), 42)

            # This should switch to the default profile automaticallyy6
            self.profile.delete_profile('hello_world')
            self.assertEqual(self.profile.current_profile, 'default')
            self.assertEqual(self.profile.get('value'), 21)
            self.profile.delete_profile('default')
            self.assertEqual(self.profile.get('value'), None)

            # Now hijack the system a bit, change the config setting
            # directly and see if the profile reacts accordingly
            self.profile.add_profile('default', initial_value=value)
            self.profile.set('value', 21)
            self.profile.add_profile('another_one', initial_value={'ancient_gods': 3})
            self.cfg.set('current_profile', 'another_one')
            self.assertEqual(self.profile.get('ancient_gods'), 3)
Пример #2
0
class TestConfig(unittest.TestCase):
    def setUp(self):
        self.cfg = Config()
        self.cfg.load(TEST_CONFIG)

    def test_get(self):
        # Invalid:
        for urn in ['', '.', '..', '  ', 'profiles.', 'profiles..', 'profiles.default.']:
            self.assertEqual(self.cfg.get(urn), None)

        with self.assertRaises(ValueError):
            self.cfg.get('profiles.default.host.')

        # Valid:
        self.assertEqual(self.cfg.get('profiles.default.port'), 6600)

    def test_set_get_combo(self):
        # Create new node not present in default
        self.cfg.set('some.new_value', 42)
        self.assertEqual(self.cfg.get('some.new_value'), 42)

        # This shouldn't work, new_value is an "endpoint"
        with self.assertRaises(ValueError):
            self.cfg.set('some.new_value.oh_crap', 3)

        # test non-existent key
        self.assertEqual(self.cfg.get('some_value'), None)
        self.assertEqual(self.cfg.get('some.value'), None)

        defaults = {
            'some_value': 42,
            'some': {
                'value': 21
            },
            'active_profile': 'Ha! Override it!'
        }

        self.cfg.add_defaults(defaults)
        self.assertEqual(self.cfg.get('some_value'), 42)
        self.cfg.set('some_value', 0)
        self.assertEqual(self.cfg.get('some_value'), 0)
        self.assertEqual(self.cfg.get('some.value'), 21)
        self.assertEqual(self.cfg.get('active_profile'), 'default')

        # Manually overwrite values:
        self.cfg.set('some.value', 1)

        self.assertEqual(self.cfg.get('some_value'), 0)
        self.assertEqual(self.cfg.get('some.value'), 1)
        self.cfg.add_defaults(defaults)
        self.assertEqual(self.cfg.get('some_value'), 0)
        self.assertEqual(self.cfg.get('some.value'), 1)

    def test_add_default(self):
        # Recursive merging of two dicts is difficutlt,
        # therefore stress this a bit.
        self.cfg.set('a.aa', 2)
        self.cfg.set('b.bb', 2)

        self.cfg.add_defaults({
            'a': {
                'aa': {
                    'aaa': 1
                }
            },
            'b': {
                'bb': 1
            },
            'c': {
                'cc': 1
            },
            'd': 1
        })
        self.cfg.set('a.aa', 2)

        self.assertEqual(self.cfg.get('a.aa'), 2)
        with self.assertRaises(ValueError):
            self.cfg.get('a.aa.aaa', None)
        self.assertEqual(self.cfg.get('b.bb'), 2)
        self.assertEqual(self.cfg.get('c.cc'), 1)
        self.assertEqual(self.cfg.get('d'), 1)

    def test_operators(self):
        self.assertEqual(self.cfg.get('profiles.default.host'), self.cfg['profiles.default.host'])
        self.assertEqual(self.cfg.get('profiles.default.port'), 6600)
        self.cfg['profiles.default.port'] = 6666
        self.assertEqual(self.cfg.get('profiles.default.port'), 6666)

    def test_save(self):
        try:
            self.cfg.save('')
        except FileNotFoundError:
            pass

        path = '/tmp/.test_config.save'
        self.cfg.save(path)
        with open(path, 'r') as f:
            content = f.read()
            self.assertEqual(content.strip(), TEST_CONFIG.strip())

    def test_malformed(self):
        # Pass in a HTML Document. Whyever.
        # Handle it gracefully, i.e. without exception
        self.cfg.load('''
                <html>
                    <head>
                        <title>Faulty Config</title>
                    </head>
                    <body>
                        <p>Config Body.</p>
                    </body>
                </html>
        ''')
        self.cfg.load('')
        self.cfg.load('''
            empty_key:
        ''')