Add subunit script that notifies the test results.
authorJelmer Vernooij <jelmer@samba.org>
Thu, 14 Jan 2010 11:03:56 +0000 (00:03 +1300)
committerJelmer Vernooij <jelmer@samba.org>
Thu, 14 Jan 2010 11:03:56 +0000 (00:03 +1300)
filters/subunit-notify [new file with mode: 0755]

diff --git a/filters/subunit-notify b/filters/subunit-notify
new file mode 100755 (executable)
index 0000000..076487e
--- /dev/null
@@ -0,0 +1,58 @@
+#!/usr/bin/env python
+#  subunit: extensions to python unittest to get test results from subprocesses.
+#  Copyright (C) 2010 Jelmer Vernooij <jelmer@samba.org>
+#
+#  Licensed under either the Apache License, Version 2.0 or the BSD 3-clause
+#  license at the users choice. A copy of both licenses are available in the
+#  project source as Apache-2.0 and BSD. You may not use this file except in
+#  compliance with one of these two licences.
+#  
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under these licenses is distributed on an "AS IS" BASIS, WITHOUT
+#  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+#  license you chose for the specific language governing permissions and
+#  limitations under that license.
+#
+
+"""Notify the user of a finished test run."""
+
+from optparse import OptionParser
+import sys
+
+import pygtk
+pygtk.require('2.0')
+import pynotify
+
+from subunit import DiscardStream, ProtocolTestCase, TestResultStats
+
+if not pynotify.init("Subunit-notify"):
+       sys.exit(1)
+
+parser = OptionParser(description=__doc__)
+parser.add_option("--no-passthrough", action="store_true",
+    help="Hide all non subunit input.", default=False, dest="no_passthrough")
+(options, args) = parser.parse_args()
+result = TestResultStats(sys.stdout)
+if options.no_passthrough:
+    passthrough_stream = DiscardStream()
+else:
+    passthrough_stream = None
+test = ProtocolTestCase(sys.stdin, passthrough=passthrough_stream)
+test.run(result)
+if result.failed_tests > 0:
+       summary = "Test run failed"
+else:
+       summary = "Test run successful"
+body = "Total tests: %d; Passed: %d; Failed: %d" % (
+       result.total_tests,
+       result.passed_tests,
+       result.failed_tests,
+       )
+nw = pynotify.Notification(summary, body)
+nw.show()
+
+if result.wasSuccessful():
+    exit_code = 0
+else:
+    exit_code = 1
+sys.exit(exit_code)