[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