Commits

Anonymous committed 1918958

0.11-stable: Add support for running tests under figleaf. Thanks to Tim for the original work on this.

Comments (0)

Files changed (2)

 }}}
 This is particularly useful when a test fails and you want to explore the environment to debug the problem.
 
+ == Test Coverage ==
+You can now determine statement coverage of unittests and functional tests.  But you'll have to run them separately for now.
+
+`figleaf` will need to be on your `PATH`.  Set the `FIGLEAF` environment variable to the figleaf command.
+
+Create a figleaf-exclude file with filename patterns to exclude.  For example:
+{{{
+/usr/lib/python.*/.*.py
+.*.html
+}}}
+
+Then run the tests something like this:
+{{{
+export FIGLEAF=figleaf
+figleaf ./trac/test.py -v --skip-functional-tests
+mv .figleaf .figleaf.unittests
+python trac/tests/functional/testcases.py -v
+mv .figleaf .figleaf.functional
+figleaf2html --exclude-patterns=../figleaf-exclude .figleaf.functional .figleaf.unittests
+}}}
+Also, this is very slow; on a decent machine, 10 minutes for the functional tests is normal.
+
+To run without figleaf, be sure to unset `FIGLEAF`.
+
 --------------------------------------------------------------------------------
 == TROUBLESHOOTING: ==
 

trac/tests/functional/testenv.py

 
     def start(self):
         """Starts the webserver"""
-        server = Popen([sys.executable, "./trac/web/standalone.py",
+        if 'FIGLEAF' in os.environ:
+            exe = os.environ['FIGLEAF']
+        else:
+            exe = sys.executable
+        server = Popen([exe, "./trac/web/standalone.py",
                         "--port=%s" % self.port, "-s",
                         "--hostname=localhost",
                         "--basic-auth=trac,%s," % self.htpasswd,
                 call(["taskkill", "/f", "/pid", str(self.pid)],
                      stdin=PIPE, stdout=PIPE, stderr=PIPE)
             else:
-                os.kill(self.pid, signal.SIGTERM)
+                os.kill(self.pid, signal.SIGINT)
                 try:
                     os.waitpid(self.pid, 0)
                 except OSError, e: