[conduit: 117/138] Skip tests if prereqs for running are not met
- From: John Carr <johncarr src gnome org>
- To: svn-commits-list gnome org
- Subject: [conduit: 117/138] Skip tests if prereqs for running are not met
- Date: Thu, 21 May 2009 03:36:45 -0400 (EDT)
commit 7d27f1943d33f65681a6bb42c69a35d49f123968
Author: John Carr <john carr unrouted co uk>
Date: Wed May 6 08:59:02 2009 -0700
Skip tests if prereqs for running are not met
---
test/soup/__init__.py | 8 ++++++++
test/soup/data/__init__.py | 2 ++
test/soup/modules/__init__.py | 2 ++
test/soup/modules/ipod.py | 22 ++++++++++++++++++++--
test/soup/test_dataprovider.py | 3 +++
test/soup/test_datatypes.py | 3 +++
test/soup/test_synchronization.py | 6 ++++++
test/soup/utils/test.py | 4 ++--
8 files changed, 46 insertions(+), 4 deletions(-)
diff --git a/test/soup/__init__.py b/test/soup/__init__.py
index 8a5640d..ceb21c1 100644
--- a/test/soup/__init__.py
+++ b/test/soup/__init__.py
@@ -62,11 +62,19 @@ class TestCase(unittest.TestCase):
""" Returns the name of the class and the test this particular instance will run """
return self.name() + "." + self.testMethodName
+ def requires(self):
+ """ Yields feature objects that we depend on to run this test, such as an internet connection or python-gpod """
+ return []
+
def shortDescription(self):
""" Describe the test that is currently running
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):
+ for feature in self.requires():
+ feature.require()
+
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")
diff --git a/test/soup/data/__init__.py b/test/soup/data/__init__.py
index 8784c61..0b552b2 100644
--- a/test/soup/data/__init__.py
+++ b/test/soup/data/__init__.py
@@ -9,6 +9,8 @@ class DataWrapper(object):
This class provides a wrapper around some test data.
"""
+ requires = []
+
@classmethod
def name(cls):
return cls.__name__
diff --git a/test/soup/modules/__init__.py b/test/soup/modules/__init__.py
index 0a86020..7bb6495 100644
--- a/test/soup/modules/__init__.py
+++ b/test/soup/modules/__init__.py
@@ -4,6 +4,8 @@ from soup.utils.pluginloader import PluginLoader
class ModuleWrapper(object):
+ requires = []
+
def __init__(self, conduit):
self.conduit = conduit
self.dp = self.create_dataprovider()
diff --git a/test/soup/modules/ipod.py b/test/soup/modules/ipod.py
index b11f262..61edf83 100644
--- a/test/soup/modules/ipod.py
+++ b/test/soup/modules/ipod.py
@@ -13,11 +13,24 @@ import conduit.utils as Utils
import uuid
import shutil
-import gpod
-class iPodWrapper(object):
+class _GpodModule(soup.Feature):
+
+ def probe(self):
+ import pdb
+ pdb.set_trace()
+ try:
+ import gpod
+ return True
+ except:
+ return False
+
+GpodModule = _GpodModule()
+
+class iPodWrapper(object):
def create_dataprovider(self):
+ import gpod
self.folder = Utils.new_tempdir()
assert gpod.gpod.itdb_init_ipod(self.folder, "MA450", "Test iPod", None)
return self.klass(self.folder, str(uuid.uuid4()))
@@ -28,20 +41,25 @@ class iPodWrapper(object):
class iPodNote(soup.modules.ModuleWrapper, iPodWrapper):
klass = iPodModule.IPodNoteTwoWay
dataclass = NoteWrapper
+ requires = [GpodModule]
class iPodContacts(soup.modules.ModuleWrapper, iPodWrapper):
klass = iPodModule.IPodContactsTwoWay
dataclass = ContactWrapper
+ requires = [GpodModule]
class iPodCalendar(soup.modules.ModuleWrapper, iPodWrapper):
klass = iPodModule.IPodCalendarTwoWay
dataclass = EventWrapper
+ requires = [GpodModule]
class iPodPhoto(soup.modules.ModuleWrapper, iPodWrapper):
klass = iPodModule.IPodPhotoSink
dataclass = PhotoWrapper
+ requires = [GpodModule]
class iPodMusic(soup.modules.ModuleWrapper, iPodWrapper):
klass = iPodModule.IPodMusicTwoWay
dataclass = MusicWrapper
+ requires = [GpodModule]
diff --git a/test/soup/test_dataprovider.py b/test/soup/test_dataprovider.py
index 91f03da..0ca4d38 100644
--- a/test/soup/test_dataprovider.py
+++ b/test/soup/test_dataprovider.py
@@ -9,6 +9,9 @@ def make_testcase(wrp):
def name(self):
return "TestDataProvider%s" % self.wrapperclass.name()
+ def requires(self):
+ return self.wrapperclass.requires
+
def setUp(self):
super(TestDataprovider, self).setUp()
self.wrapper = self.wrapperclass(self)
diff --git a/test/soup/test_datatypes.py b/test/soup/test_datatypes.py
index b93360a..3a8410f 100644
--- a/test/soup/test_datatypes.py
+++ b/test/soup/test_datatypes.py
@@ -11,6 +11,9 @@ def make_testcase(wrp):
def name(self):
return "TestDatatype%s" % self.wrapperclass.name()
+ def requires(self):
+ return self.wrapperclass.requires
+
def setUp(self):
super(TestDatatype, self).setUp()
self.wrapper = self.wrapperclass()
diff --git a/test/soup/test_synchronization.py b/test/soup/test_synchronization.py
index 3c2849a..d992184 100644
--- a/test/soup/test_synchronization.py
+++ b/test/soup/test_synchronization.py
@@ -15,7 +15,13 @@ def make_testcase(src, src_data, snk, snk_data):
def name(self):
return "TestSynchronization%s%s" % (self.source_class.name(), self.sink_class.name())
+ def requires(self):
+ for obj in (self.source_class, self.source_data_class, self.sink_class, self.sink_data_class):
+ for thing in obj.requires:
+ yield thing
+
def setUp(self):
+ super(TestSynchronization, self).setUp()
self.setUpSync()
self.source = self.source_class(self)
diff --git a/test/soup/utils/test.py b/test/soup/utils/test.py
index 62c5820..2ebec6c 100644
--- a/test/soup/utils/test.py
+++ b/test/soup/utils/test.py
@@ -28,8 +28,8 @@ class TestResult(unittest.TestResult):
self.report_test_stop(test)
def addError(self, test, err):
- if isinstance(err, UnavailableFeature):
- self.addSkipped(self, test)
+ if isinstance(err[1], UnavailableFeature):
+ self.addSkipped(test)
else:
super(TestResult, self).addError(test, err)
self.report_error(test)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]