summaryrefslogtreecommitdiff
path: root/test/git/test_config.py
diff options
context:
space:
mode:
authorSebastian Thiel <byronimo@gmail.com>2009-10-19 15:04:04 +0200
committerSebastian Thiel <byronimo@gmail.com>2009-10-19 15:04:04 +0200
commit8f42db54c6b2cfbd7d68e6d34ac2ed70578402f7 (patch)
tree1a0ce488e628df94f61048e1e9c691c59a83e867 /test/git/test_config.py
parent657a57adbff49c553752254c106ce1d5b5690cf8 (diff)
parent26029c29765043376370a2877b7e635c17f5e76d (diff)
downloadgitpython-8f42db54c6b2cfbd7d68e6d34ac2ed70578402f7.tar.gz
Merge branch 'config' into improvements
* config: added additional testing for the configuration, concurrent access and config reading, all tests work implemented config class as far as necessary, one check is still failing Added frame for configuration reader involving a meta class, decorators and tests - most of which still has to be filled out
Diffstat (limited to 'test/git/test_config.py')
-rw-r--r--test/git/test_config.py89
1 files changed, 89 insertions, 0 deletions
diff --git a/test/git/test_config.py b/test/git/test_config.py
new file mode 100644
index 00000000..c5a8dc2c
--- /dev/null
+++ b/test/git/test_config.py
@@ -0,0 +1,89 @@
+# test_config.py
+# Copyright (C) 2008, 2009 Michael Trier (mtrier@gmail.com) and contributors
+#
+# This module is part of GitPython and is released under
+# the BSD License: http://www.opensource.org/licenses/bsd-license.php
+
+from test.testlib import *
+from git import *
+import StringIO
+from copy import copy
+
+class TestBase(TestCase):
+
+ @classmethod
+ def setUpAll(cls):
+ cls.repo = Repo(GIT_REPO)
+
+ def _to_memcache(self, file_path):
+ fp = open(file_path, "r")
+ sio = StringIO.StringIO()
+ sio.write(fp.read())
+ sio.seek(0)
+ sio.name = file_path
+ return sio
+
+ def _parsers_equal_or_raise(self, lhs, rhs):
+ pass
+
+ def test_read_write(self):
+ # writer must create the exact same file as the one read before
+ for filename in ("git_config", "git_config_global"):
+ file_obj = self._to_memcache(fixture_path(filename))
+ file_obj_orig = copy(file_obj)
+ w_config = GitConfigParser(file_obj, read_only = False)
+ w_config.read() # enforce reading
+ assert w_config._sections
+ w_config.write() # enforce writing
+ assert file_obj.getvalue() == file_obj_orig.getvalue()
+
+ # creating an additional config writer must fail due to exclusive access
+ self.failUnlessRaises(IOError, GitConfigParser, file_obj, read_only = False)
+
+ # should still have a lock and be able to make changes
+ assert w_config._has_lock()
+
+ # changes should be written right away
+ sname = "my_section"
+ oname = "mykey"
+ val = "myvalue"
+ w_config.add_section(sname)
+ assert w_config.has_section(sname)
+ w_config.set(sname, oname, val)
+ assert w_config.has_option(sname,oname)
+ assert w_config.get(sname, oname) == val
+
+ file_obj.seek(0)
+ r_config = GitConfigParser(file_obj, read_only=True)
+ assert r_config.has_section(sname)
+ assert r_config.has_option(sname, oname)
+ assert r_config.get(sname, oname) == val
+
+ # END for each filename
+
+ def test_base(self):
+ path_repo = fixture_path("git_config")
+ path_global = fixture_path("git_config_global")
+ r_config = GitConfigParser([path_repo, path_global], read_only=True)
+ assert r_config.read_only
+ num_sections = 0
+ num_options = 0
+
+ # test reader methods
+ assert r_config._is_initialized == False
+ for section in r_config.sections():
+ num_sections += 1
+ for option in r_config.options(section):
+ num_options += 1
+ val = r_config.get(section, option)
+ assert val
+
+ # writing must fail
+ self.failUnlessRaises(IOError, r_config.set, section, option, None)
+ self.failUnlessRaises(IOError, r_config.remove_option, section, option )
+ # END for each option
+ self.failUnlessRaises(IOError, r_config.remove_section, section)
+ # END for each section
+ assert num_sections and num_options
+ assert r_config._is_initialized == True
+