[conduit: 34/138] Test all datatypes we know about
- From: John Carr <johncarr src gnome org>
- To: svn-commits-list gnome org
- Subject: [conduit: 34/138] Test all datatypes we know about
- Date: Thu, 21 May 2009 03:29:48 -0400 (EDT)
commit 6bcf4577d9f11b56e31c6d2ddd31675b8c84fdc5
Author: John Carr <john carr unrouted co uk>
Date: Wed Apr 29 01:38:02 2009 -0700
Test all datatypes we know about
---
test/soup/__init__.py | 5 +---
test/soup/data/__init__.py | 37 +++++++++++++++++++++++++++-
test/soup/test_dataprovider.py | 1 +
test/soup/test_datatypes.py | 52 ++++++++++++++++++++++++++++++++++++++++
4 files changed, 90 insertions(+), 5 deletions(-)
diff --git a/test/soup/__init__.py b/test/soup/__init__.py
index 535e56d..2289b18 100644
--- a/test/soup/__init__.py
+++ b/test/soup/__init__.py
@@ -46,7 +46,7 @@ class TestCase(unittest.TestCase):
Returns something like TestClass.test_function: Tests how good Conduit is """
return "%s.%s: %s" % (self.name(), self.testMethodName, super(TestCase, self).shortDescription())
- def setUp(self):
+ def setUpSync(self):
#Set up our own mapping DB so we dont pollute the global one
dbFile = os.path.join(os.environ['TEST_DIRECTORY'],Utils.random_string()+".db")
conduit.GLOBALS.mappingDB = MappingDB.MappingDB(dbFile)
@@ -60,9 +60,6 @@ class TestCase(unittest.TestCase):
self.sync_manager = conduit.Synchronization.SyncManager(self.type_converter)
conduit.GLOBALS.syncManager = self.sync_manager
- def tearDown(self):
- pass
-
def get_dataprovider(self, name):
wrapper = None
for dp in self.modules.get_all_modules():
diff --git a/test/soup/data/__init__.py b/test/soup/data/__init__.py
index 3f2ac98..474dcf7 100644
--- a/test/soup/data/__init__.py
+++ b/test/soup/data/__init__.py
@@ -5,6 +5,10 @@ class DataWrapper(object):
This class provides a wrapper around some test data.
"""
+ @classmethod
+ def name(cls):
+ return cls.__name__
+
def get_data_dir(self):
return os.path.join(os.path.dirname(__file__),"..","..","python-tests","data")
@@ -14,6 +18,37 @@ class DataWrapper(object):
for i in glob.glob(os.path.join(self.get_data_dir(),glob_str)):
yield os.path.abspath(i)
- def get_all(self):
+ def iter_samples(self):
+ """ Yield DataType objects containing sample data """
+ raise NotImplementedError
+
+ def generate_sample(self):
+ """ Generate a single DataType object with random data """
+ raise NotImplementedError
+
+ def mutate_sample(self, obj):
+ """ Modify a DataType object randomly """
raise NotImplementedError
+def load_modules():
+ basepath = os.path.dirname(__file__)
+ for root, dirs, files in os.walk(basepath):
+ for dir in dirs:
+ if dir[:1] != ".":
+ load_module(dir)
+ for file in files:
+ if file.endswith(".py") and not file.startswith("__"):
+ load_module(file[:-3])
+ break
+
+def load_module(module):
+ if sys.modules.has_key(module):
+ reload(sys.modules[module])
+ else:
+ __import__("soup.data", {}, {}, [module])
+
+def get_all():
+ if len(DataWrapper.__subclasses__()) == 0:
+ load_modules()
+ return DataWrapper.__subclasses__()
+
diff --git a/test/soup/test_dataprovider.py b/test/soup/test_dataprovider.py
index 13018bf..c993204 100644
--- a/test/soup/test_dataprovider.py
+++ b/test/soup/test_dataprovider.py
@@ -10,6 +10,7 @@ def make_testcase(wrp):
def setUp(self):
super(TestDataprovider, self).setUp()
+ self.setUpSync()
self.wrapper = self.wrapperclass(self)
self.dp = self.wrapper.dp
self.data = self.wrapper.dataclass()
diff --git a/test/soup/test_datatypes.py b/test/soup/test_datatypes.py
new file mode 100644
index 0000000..f76aec3
--- /dev/null
+++ b/test/soup/test_datatypes.py
@@ -0,0 +1,52 @@
+import soup
+
+import pickle
+
+def make_testcase(wrp):
+ class TestDatatype(soup.TestCase):
+ wrapperclass = wrp
+
+ @classmethod
+ def name(self):
+ return "TestDatatype%s" % self.wrapperclass.name()
+
+ def setUp(self):
+ super(TestDatatype, self).setUp()
+ self.wrapper = self.wrapperclass()
+
+ def test_uid(self):
+ """ Datatype should implemenent get_UID """
+ obj = self.wrapper.iter_samples().next()
+ assert obj.get_UID != None
+
+ def test_rid(self):
+ """ Datatype should implement get_rid """
+ obj = self.wrapper.iter_samples().next()
+ assert obj.get_rid() != None
+
+ def test_pickle(self):
+ """ Should be able to pickle a Datatype """
+ obj = self.wrapper.iter_samples().next()
+ pickled = pickle.dumps(obj)
+ clone = pickle.loads(pickled)
+
+ assert type(obj) == type(clone)
+ assert obj.get_UID() == clone.get_UID()
+ assert obj.get_mtime() == clone.get_mtime()
+ assert obj.get_hash() == clone.get_hash()
+ assert obj.get_rid() == clone.get_rid()
+
+ return TestDatatype
+
+
+# Generate TestCase objects for each datatype wrapper
+self = soup.get_module(__name__)
+for wrapper in soup.data.get_all():
+ testklass = make_testcase(wrapper)
+ setattr(self, testklass.name(), testklass)
+
+
+# Allow people to run the test case directly
+if __name__ == "__main__":
+ import unittest
+ unittest.main()
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]