def test_save(self):
        """ save """

        config = PyConfigFile(file(self.example))

        self.assertEqual('blue', config['acme.ui']['bgcolor'])
        self.assertEqual(50, config['acme.ui']['width'])
        self.assertEqual(1.0, config['acme.ui']['ratio'])
        self.assertEqual(True, config['acme.ui']['visible'])
        self.assertEqual({'a': 1, 'b': 2}, config['acme.ui']['foo'])
        self.assertEqual([1, 2, 3, 4], config['acme.ui']['bar'])
        self.assertEqual('red', config['acme.ui.other']['fred'])
        self.assertEqual(100, config['acme.ui.other']['wilma'])
        self.assertEqual(90, config['tds.foogle']['joe'])
        self.assertEqual("meerkat", config['simples']['animal'])

        # Save the config to another file.
        tmpdir = tempfile.mkdtemp()
        tmp = join(tmpdir, 'tmp.ini')

        config.save(tmp)
        try:
            self.assert_(os.path.exists(tmp))

            # Make sure we can read the file back in and that we get the same
            # values!
            config = PyConfigFile(file(tmp))

            self.assertEqual('blue', config['acme.ui']['bgcolor'])
            self.assertEqual(50, config['acme.ui']['width'])
            self.assertEqual(1.0, config['acme.ui']['ratio'])
            self.assertEqual(True, config['acme.ui']['visible'])
            self.assertEqual({'a': 1, 'b': 2}, config['acme.ui']['foo'])
            self.assertEqual([1, 2, 3, 4], config['acme.ui']['bar'])
            self.assertEqual((1, 'a', 6, 4), config['acme.ui']['baz'])
            self.assertEqual('red', config['acme.ui.other']['fred'])
            self.assertEqual(100, config['acme.ui.other']['wilma'])
            self.assertEqual(90, config['tds.foogle']['joe'])
            self.assertEqual("meerkat", config['simples']['animal'])

        finally:
            # Clean up!
            os.remove(tmp)
            os.removedirs(tmpdir)

        return
    def test_load_from_file(self):
        """ load from file """

        config = PyConfigFile(file(self.example))

        self.assertEqual('blue', config['acme.ui']['bgcolor'])
        self.assertEqual(50, config['acme.ui']['width'])
        self.assertEqual(1.0, config['acme.ui']['ratio'])
        self.assertEqual(True, config['acme.ui']['visible'])
        self.assertEqual({'a': 1, 'b': 2}, config['acme.ui']['foo'])
        self.assertEqual([1, 2, 3, 4], config['acme.ui']['bar'])
        self.assertEqual((1, 'a', 6, 4), config['acme.ui']['baz'])
        self.assertEqual('red', config['acme.ui.other']['fred'])
        self.assertEqual(100, config['acme.ui.other']['wilma'])
        self.assertEqual(90, config['tds.foogle']['joe'])
        self.assertEqual("meerkat", config['simples']['animal'])

        return
    def test_load_multiple_files(self):
        """ load multiple files """

        config = PyConfigFile(self.example)

        self.assertEqual('blue', config['acme.ui']['bgcolor'])
        self.assertEqual(50, config['acme.ui']['width'])
        self.assertEqual(1.0, config['acme.ui']['ratio'])
        self.assertEqual(True, config['acme.ui']['visible'])
        self.assertEqual({'a': 1, 'b': 2}, config['acme.ui']['foo'])
        self.assertEqual([1, 2, 3, 4], config['acme.ui']['bar'])
        self.assertEqual((1, 'a', 6, 4), config['acme.ui']['baz'])
        self.assertEqual('red', config['acme.ui.other']['fred'])
        self.assertEqual(100, config['acme.ui.other']['wilma'])
        self.assertEqual(90, config['tds.foogle']['joe'])
        self.assertEqual("meerkat", config['simples']['animal'])

        # Load another file.
        config.load(self.example_2)

        # Make sure we still have the unchanged values...
        self.assertEqual('red', config['acme.ui']['bgcolor'])
        self.assertEqual(50, config['acme.ui']['width'])
        self.assertEqual(1.0, config['acme.ui']['ratio'])
        self.assertEqual(True, config['acme.ui']['visible'])
        self.assertEqual({'a': 1, 'b': 2}, config['acme.ui']['foo'])
        self.assertEqual([1, 2, 3, 4], config['acme.ui']['bar'])
        self.assertEqual((1, 'a', 6, 4), config['acme.ui']['baz'])
        self.assertEqual('red', config['acme.ui.other']['fred'])
        self.assertEqual(100, config['acme.ui.other']['wilma'])
        self.assertEqual(90, config['tds.foogle']['joe'])
        self.assertEqual("meerkat", config['simples']['animal'])

        # ... and the values that were overwritten...
        self.assertEqual('red', config['acme.ui']['bgcolor'])

        # ... and that we have the new ones.
        self.assertEqual(42, config['acme.ui']['bazzle'])

        # ... and that the new ones can refer to the old ones!
        self.assertEqual(180, config['acme.ui']['blimey'])

        return