[conduit: 122/138] Try and run environment setup as early as possible



commit e075ee5ec4c598f48bb35fe7c180d5924a4a6ddf
Author: John Carr <john carr unrouted co uk>
Date:   Wed May 6 11:04:26 2009 -0700

    Try and run environment setup as early as possible
---
 test/soup/env/__init__.py  |   19 ++++++++++
 test/soup/env/fake-dbus.py |    2 +-
 test/soup/soup             |   87 ++++++++++++++++++++++----------------------
 test/soup/utils/test.py    |   16 +--------
 4 files changed, 65 insertions(+), 59 deletions(-)

diff --git a/test/soup/env/__init__.py b/test/soup/env/__init__.py
index f68e161..e081fd8 100644
--- a/test/soup/env/__init__.py
+++ b/test/soup/env/__init__.py
@@ -27,4 +27,23 @@ class _EnvironmentLoader(PluginLoader):
     _module_ = "soup.env"
     _path_ = os.path.dirname(__file__)
 
+    def prepare_environment(self, opts):
+        self.active = []
+        for eklass in self.get_all():
+            if eklass.enabled(opts):
+                e = eklass()
+                e.prepare_environment()
+                self.active.append(e)
+
+    def decorate_test(self, test):
+        t = test
+        for e in self.active:
+            t = e.decorate_test(t)
+        return t
+
+    def finalize_environment(self):
+        for e in self.active:
+            e.finalize_environment()
+
+
 EnvironmentLoader = _EnvironmentLoader()
diff --git a/test/soup/env/fake-dbus.py b/test/soup/env/fake-dbus.py
index 616601b..2206ee2 100644
--- a/test/soup/env/fake-dbus.py
+++ b/test/soup/env/fake-dbus.py
@@ -15,7 +15,7 @@ class Dbus(soup.env.EnvironmentWrapper):
 
     @classmethod
     def enabled(cls, opts):
-        return False
+        return True
 
     def prepare_environment(self):
         conffile = os.path.join(os.path.dirname(__file__), "fake-session-bus.conf")
diff --git a/test/soup/soup b/test/soup/soup
index ce78a92..89fb238 100755
--- a/test/soup/soup
+++ b/test/soup/soup
@@ -9,20 +9,17 @@ os.environ['TEST_DIRECTORY'] = 'tmp'
 if not os.path.exists('tmp'):
     os.mkdir('tmp')
 
+from soup.env import EnvironmentLoader
+
 import soup
 from soup.utils import test
 
 known_failures = [
     'Evo',          # Will trash your main evo :/
-    'Tomboy',
     'Audio',        # GStreamer hanging
     'Video',        # Probably same as ^
 ]
 
-from test_datatypes import *
-from test_dataprovider import *
-from test_synchronization import *
-
 def run_tests(tests, opts):
     runner = test.TestRunner(opts)
 
@@ -31,56 +28,60 @@ def run_tests(tests, opts):
 
     res = runner.run(unittest.TestSuite(tests))
 
-    sys.exit(not res.wasSuccessful())
-
 def list_tests(tests, opts):
     for test in tests:
         print test.name(), test.testMethodName
-    sys.exit(0)
 
+import optparse
 
-if __name__ == "__main__":
-    import optparse
+parser = optparse.OptionParser(usage="usage: %prog [options] arg1 arg2")
 
-    parser = optparse.OptionParser(usage="usage: %prog [options] arg1 arg2")
+# Options about which tests are run
+parser.add_option("-x", "--exclude", action="append", type="string", dest="exclude",
+                  help="Exclude patterns matching PATTERN", metavar="PATTERN")
 
-    # Options about which tests are run
-    parser.add_option("-x", "--exclude", action="append", type="string", dest="exclude",
-                      help="Exclude patterns matching PATTERN", metavar="PATTERN")
+# Options about how the tests are run
+parser.add_option("-r", "--randomize", action="store_true", dest="randomize",
+                  help="Run tests in a random order")
+parser.add_option("-v", "--verbose", action="store_true", dest="verbose",
+                  help="Output lots of noise as tests are run")
+parser.add_option("-c", "--coverage", action="store_true", dest="coverage",
+                  help="Enable code coverage")
+parser.add_option("-p", "--profile", action="store_true", dest="profile",
+                  help="Profile execution")
 
-    # Options about how the tests are run
-    parser.add_option("-r", "--randomize", action="store_true", dest="randomize",
-                      help="Run tests in a random order")
-    parser.add_option("-v", "--verbose", action="store_true", dest="verbose",
-                      help="Output lots of noise as tests are run")
-    parser.add_option("-c", "--coverage", action="store_true", dest="coverage",
-                      help="Enable code coverage")
-    parser.add_option("-p", "--profile", action="store_true", dest="profile",
-                      help="Profile execution")
+# Add the different execution modes..
+parser.add_option("-l", "--list", action="store_const", const="list", dest="mode",
+                  help="List tests instead of running them")
+parser.add_option("-e", "--execute", action="store_const", const="execute", dest="mode",
+                  help="Run the tests")
 
-    # Add the different execution modes..
-    parser.add_option("-l", "--list", action="store_const", const="list", dest="mode",
-                      help="List tests instead of running them")
-    parser.add_option("-e", "--execute", action="store_const", const="execute", dest="mode",
-                      help="Run the tests")
+# Set parse defaults
+parser.set_defaults(mode="execute", randomize=False, verbose=False, coverage=False,
+                    exclude=known_failures)
 
-    # Set parse defaults
-    parser.set_defaults(mode="execute", randomize=False, verbose=False, coverage=False,
-                        exclude=known_failures)
+# And parse..
+opts, args = parser.parse_args()
+
+EnvironmentLoader.prepare_environment(opts)
+
+from test_datatypes import *
+from test_dataprovider import *
+from test_synchronization import *
 
-    # And parse..
-    opts, args = parser.parse_args()
+# Figure out which tests to run
+tests = soup.TestLoader(include=args, exclude=opts.exclude).loadTestsFromMain()
 
-    # Figure out which tests to run
-    tests = soup.TestLoader(include=args, exclude=opts.exclude).loadTestsFromMain()
+if opts.randomize:
+   import random
+   random.shuffle(tests)
 
-    if opts.randomize:
-        import random
-        random.shuffle(tests)
+# And run.
+if opts.mode == "execute":
+    run_tests(tests, opts)
+elif opts.mode == "list":
+    list_tests(tests, opts)
 
-    # And run.
-    if opts.mode == "execute":
-        run_tests(tests, opts)
-    elif opts.mode == "list":
-        list_tests(tests, opts)
+EnvironmentLoader.finalize_environment()
 
+sys.exit(0)
diff --git a/test/soup/utils/test.py b/test/soup/utils/test.py
index b73fde2..ccebbb2 100644
--- a/test/soup/utils/test.py
+++ b/test/soup/utils/test.py
@@ -163,12 +163,6 @@ class TestRunner(object):
         self.descriptions = 0
         self.verbosity = 0
 
-        # Discover all enabled EnvironmentWrapper objects
-        self.env = []
-        for e in soup.env.EnvironmentLoader.get_all():
-            if e.enabled(opts):
-                self.env.append(e())
-
     def make_results(self, tests):
         if self.verbosity > 1:
             klass = VerboseConsoleTextResult
@@ -189,22 +183,14 @@ class TestRunner(object):
         result = self.make_results(tests)
         result.report_starting()
 
-        for e in self.env:
-            e.prepare_environment()
-
         start_time = time.time()
 
         for t in self.iter_tests(tests):
-            tr = t.run
-            for e in self.env:
-                tr = e.decorate_test(tr)
+            tr = soup.env.EnvironmentLoader.decorate_test(t.run)
             tr(result)
 
         time_taken = time.time() - start_time
 
-        for e in self.env:
-            e.finalize_environment()
-
         result.report_finished(time_taken)
         return result
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]