From 6865d3ff7d9d0718fdbc6b8b8deb36bca9534dfb Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Thu, 20 Jan 2011 20:43:21 +0000 Subject: Add more functionality and tests to NameGenerator. --- genbackupdatalib/names.py | 15 +++++++++++++-- genbackupdatalib/names_tests.py | 28 ++++++++++++++++++++++++++-- 2 files changed, 39 insertions(+), 4 deletions(-) diff --git a/genbackupdatalib/names.py b/genbackupdatalib/names.py index 1ce0c20..8cca24c 100644 --- a/genbackupdatalib/names.py +++ b/genbackupdatalib/names.py @@ -14,12 +14,23 @@ # along with this program. If not, see . +import os + + class NameGenerator(object): '''Generate names for new output files.''' def __init__(self, dirname): self.dirname = dirname - + self.counter = 0 + + def _next_candidate_name(self): + self.counter += 1 + return os.path.join(self.dirname, 'file%d' % self.counter) + def new(self): - return 'foo' + while True: + name = self._next_candidate_name() + if not os.path.exists(name): + return name diff --git a/genbackupdatalib/names_tests.py b/genbackupdatalib/names_tests.py index 7590921..55cdfd7 100644 --- a/genbackupdatalib/names_tests.py +++ b/genbackupdatalib/names_tests.py @@ -31,7 +31,31 @@ class NameGeneratorTests(unittest.TestCase): def tearDown(self): shutil.rmtree(self.tempdir) - def test_generates_name_that_does_not_exist(self): + def test_generates_name_that_is_inside_target_directory(self): name = self.names.new() - self.assertFalse(os.path.exists(name)) + self.assert_(name.startswith(self.tempdir + os.sep)) + + def test_generates_different_names_every_time(self): + names = set(self.names.new() for i in range(10)) + self.assertEqual(len(names), 10) + + def test_generates_names_that_do_not_exist(self): + for i in range(10): + name = self.names.new() + self.assertFalse(os.path.exists(name)) + + def test_generates_the_same_sequence_with_every_instance(self): + n = 10 + first = [self.names.new() for i in range(n)] + names2 = genbackupdatalib.NameGenerator(self.tempdir) + second = [names2.new() for i in range(n)] + self.assertEqual(first, second) + + def test_does_not_generate_names_of_existing_files(self): + name = self.names.new() + file(name, 'w').close() + names2 = genbackupdatalib.NameGenerator(self.tempdir) + name2 = names2.new() + self.assertNotEqual(name, name2) + self.assertFalse(os.path.exists(name2)) -- cgit v1.2.1