[SCM] GUI front-end for Debian Live. branch, master, updated. 612af879898607b23ce2e07fcc9a4f9ae68b5f06

Chris Lamb chris at chris-lamb.co.uk
Tue Mar 4 15:34:29 UTC 2008


The following commit has been merged in the master branch:
commit 612af879898607b23ce2e07fcc9a4f9ae68b5f06
Author: Chris Lamb <chris at chris-lamb.co.uk>
Date:   Tue Mar 4 15:33:56 2008 +0000

    Towards 100% passing tests and 100% coverage.
    
    Signed-off-by: Chris Lamb <chris at chris-lamb.co.uk>

diff --git a/DebianLive/elements/key_var.py b/DebianLive/elements/key_var.py
index a2eb1a4..5e155ad 100644
--- a/DebianLive/elements/key_var.py
+++ b/DebianLive/elements/key_var.py
@@ -13,25 +13,6 @@ SHELL_ESCAPES = (
 
 REGEX = re.compile(r"""^\s*(\w+)=(?:(["\'])(([^\\\2]|\\.)*|)\2|((\w|\\["'])*))\s*(?:#.*)?$""")
 
-"""
-TODO
- - Test case where:
-    >>> my_key_var = KeyVar('.', None, {'spam': list})
-    >>> print my_key_var['spam']
-    []
-    >>> print my_key_var['stale']
-    set([])
-    >>> print my_key_var['spam'] = ['spam']
-    >>> print my_key_var.stale
-    set(['spam'])
-    >>> my_key_var.save()
-    >>> print my_key_var.stale
-    set([])
-    >>> my_key_var['spam'].append('eggs')
-    >>> print my_key_var.stale
-    set([])  <-- Should be 'spam'
-"""
-
 class KeyVar(dict):
     '''
     Represents a POSIX shell KEY="VAR" configuration file.
@@ -90,6 +71,8 @@ class KeyVar(dict):
 
     def __setitem__(self, key, value):
         self.stale.add(key)
+        if type(value) is list:
+            value = ListObserver(value, lambda: self.stale.add(key))
         dict.__setitem__(self, key, value)
 
     def save(self):
@@ -136,3 +119,5 @@ class KeyVar(dict):
         f = open(self.filename, 'w')
         f.writelines(lines)
         f.close()
+
+        self.stale = set()
diff --git a/tests/test_config.py b/tests/test_config.py
index 7611193..78c034e 100755
--- a/tests/test_config.py
+++ b/tests/test_config.py
@@ -18,16 +18,37 @@ class TestConfig(unittest.TestCase):
         import shutil
         shutil.rmtree(self.dir)
 
-class TestCreation(TestConfig):
+class TestSimple(TestConfig):
     def testLhConfigRun(self):
         assert os.path.exists(os.path.join(self.dir, 'config'))
 
     def testFailingNewConfiguration(self):
-        """
-        Should throw IOError for an invalid directory.
-        """
         self.assertRaises(IOError, Config, '/proc')
 
+    def testNoDirectory(self):
+        self.tearDown()
+        Config(self.dir)
+
+    def testStr(self):
+        self.assertEqual(type(str(self.lh)), str)
+
+    def testRepr(self):
+        self.assertEqual(type(repr(self.lh)), str)
+
+    def testStrReprEquality(self):
+        self.assertEqual(repr(self.lh), str(self.lh))
+
+    def testSave(self):
+        def contents():
+            return open(os.path.join(self.dir, 'config', 'common')).readlines()
+
+        before = contents()
+        self.lh.common['LH_APT'] = 'spam'
+        self.lh.save()
+
+        self.assert_('LH_APT="spam"\n' in contents())
+        self.assertEqual(len(before), len(contents()))
+
 class TestElements(TestConfig):
     def testBinary(self):
         from DebianLive.elements import KeyVar
diff --git a/tests/test_folder_of_files.py b/tests/test_folder_of_files.py
index bf6ec3f..4dfa788 100755
--- a/tests/test_folder_of_files.py
+++ b/tests/test_folder_of_files.py
@@ -56,7 +56,6 @@ class TestSave(TestFolderOfFiles):
         self.fof.save()
         self.assertEqual(self.f_c('spam'), 'eggs')
 
-
     def testEditFile(self):
         self.write('spam', 'eggs')
         self.reload()
@@ -66,7 +65,6 @@ class TestSave(TestFolderOfFiles):
         self.fof.save()
         self.assertEqual(self.f_c('spam'), 'bacon')
 
-
 class TestRename(TestFolderOfFiles):
     def testNoSave(self):
         self.fof['spam'] = 'eggs'
@@ -171,5 +169,25 @@ class TestImport(TestFolderOfFiles):
         self.assertEqual(self.f_c("%s-1" % self.conf_name), 'spam')
         self.assertEqual(self.fof["%s-1" % self.conf_name], 'spam')
 
+    def testAlreadyExistsTwo(self):
+        self.fof[self.conf_name] = 'existing_file'
+        self.fof.save()
+
+        self.fof.import_file(self.filename)
+        self.fof.save()
+
+        self.write(self.filename, 'eggs')
+        self.fof.import_file(self.filename)
+        self.fof.save()
+
+        self.assertEqual(self.f_c(self.conf_name), 'existing_file')
+        self.assertEqual(self.fof[self.conf_name], 'existing_file')
+
+        self.assertEqual(self.f_c("%s-1" % self.conf_name), 'spam')
+        self.assertEqual(self.fof["%s-1" % self.conf_name], 'spam')
+
+        self.assertEqual(self.f_c("%s-2" % self.conf_name), 'eggs')
+        self.assertEqual(self.fof["%s-2" % self.conf_name], 'eggs')
+
 if __name__ == "__main__":
     unittest.main()
diff --git a/tests/test_key_var.py b/tests/test_key_var.py
index 9fb7413..c0b0b8d 100755
--- a/tests/test_key_var.py
+++ b/tests/test_key_var.py
@@ -57,8 +57,15 @@ class TestSimple(TestKeyVar):
         self.assertEqual(self.key_var['LH_SPAM'], 'eggs')
 
     def testSaveKnownOption(self):
-        self.key_var['LH_SPAM'] = "eggs"
-        assert 'LH_SPAM="eggs"' in self.f_c()
+        self.key_var['LH_SPAM'] = 'new value'
+        self.key_var.save()
+        self.assert_('LH_SPAM="new value"' in self.f_c())
+
+    def testSaveKnownOptionNoChange(self):
+        before = self.f_c()
+        self.key_var['LH_SPAM'] = 'eggs'
+        self.key_var.save()
+        self.assertEqual(before, self.f_c())
 
     def testSaveUnknownOption(self):
         """
@@ -66,7 +73,16 @@ class TestSimple(TestKeyVar):
         """
         self.key_var['LH_UNKNOWN_OPTION'] = 'spam'
         self.key_var.save()
-        assert 'LH_UNKNOWN_OPTION="spam"' in self.f_c()
+        self.assert_('LH_UNKNOWN_OPTION="spam"' in self.f_c())
+
+    def testSaveUnknownOptionNewSize(self):
+        len_before = len(self.f_c())
+        self.key_var['LH_UKNOWN_OPTION'] = 'new value'
+        self.key_var.save()
+        self.assert_(len(self.f_c()) > len_before)
+
+    def testSaveNoChanges(self):
+        self.key_var.save()
 
 class TestSaveEscaped(TestKeyVar):
     def testSavingEscapingCharacters(self):
@@ -175,6 +191,57 @@ class TestSaveLists(TestKeyVar):
             assert 'LH_SPAM_LIST="%s"' % v in self.f_c()
 
 
+class TestLists(TestKeyVar):
+    def testAppend(self):
+        self.key_var['LH_SPAM_LIST'].append('ketchup')
+        self.assert_('LH_SPAM_LIST' in self.key_var.stale)
+
+    def testSetItem(self):
+        self.key_var['LH_SPAM_LIST'][0] = 'ketchup'
+        self.assert_('LH_SPAM_LIST' in self.key_var.stale)
+
+    def testDelItem(self):
+        del self.key_var['LH_SPAM_LIST'][0]
+        self.assert_('LH_SPAM_LIST' in self.key_var.stale)
+
+    def testSetSlice(self):
+        self.key_var['LH_SPAM_LIST'][:] = []
+        self.assert_('LH_SPAM_LIST' in self.key_var.stale)
+
+    def testDelSlice(self):
+        del self.key_var['LH_SPAM_LIST'][:]
+        self.assert_('LH_SPAM_LIST' in self.key_var.stale)
+
+    def testPop(self):
+        self.key_var['LH_SPAM_LIST'].pop()
+        self.assert_('LH_SPAM_LIST' in self.key_var.stale)
+
+    def testExtend(self):
+        self.key_var['LH_SPAM_LIST'].extend(range(3))
+        self.assert_('LH_SPAM_LIST' in self.key_var.stale)
+
+    def testInsert(self):
+        self.key_var['LH_SPAM_LIST'].insert(0, 'spam')
+        self.assert_('LH_SPAM_LIST' in self.key_var.stale)
+
+    def testRemove(self):
+        self.key_var['LH_SPAM_LIST'].remove('spam')
+        self.assert_('LH_SPAM_LIST' in self.key_var.stale)
+
+    def testReverse(self):
+        self.key_var['LH_SPAM_LIST'].reverse()
+        self.assert_('LH_SPAM_LIST' in self.key_var.stale)
+
+    def testSort(self):
+        self.key_var['LH_SPAM_LIST'].sort()
+        self.assert_('LH_SPAM_LIST' in self.key_var.stale)
+
+    def testSetList(self):
+        self.key_var['LH_SPAM_LIST'] = ['spam']
+        self.key_var.save()
+        self.key_var['LH_SPAM_LIST'].append('ketchup')
+        self.assert_('LH_SPAM_LIST' in self.key_var.stale)
+
 class TestLoadLists(TestKeyVar):
     def assertLoadsAs(self, input, expected):
         self.initial = 'LH_SPAM_LIST="%s"' % input

-- 
GUI front-end for Debian Live.



More information about the debian-live-changes mailing list