summaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
authorJonathan Lange <jml@mumak.net>2012-03-27 11:19:19 +0100
committerJonathan Lange <jml@mumak.net>2012-03-27 11:19:19 +0100
commit62e78eeac0762123c478586237cb1448a170e51e (patch)
tree923b6fea0efdef1b243b25625ad2e2fa192974db /python
parent15af286c07c358c12676d07ce167aa210731d7c1 (diff)
downloadsubunit-git-62e78eeac0762123c478586237cb1448a170e51e.tar.gz
Try to factor out the filter code.
Diffstat (limited to 'python')
-rw-r--r--python/subunit/filters.py83
1 files changed, 83 insertions, 0 deletions
diff --git a/python/subunit/filters.py b/python/subunit/filters.py
new file mode 100644
index 0000000..9880508
--- /dev/null
+++ b/python/subunit/filters.py
@@ -0,0 +1,83 @@
+# subunit: extensions to python unittest to get test results from subprocesses.
+# Copyright (C) 2009 Robert Collins <robertc@robertcollins.net>
+#
+# 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.
+#
+
+
+from optparse import OptionParser
+import sys
+
+from subunit import DiscardStream, ProtocolTestCase
+from subunit.test_results import CsvResult
+
+
+def make_options():
+ parser = OptionParser(description=__doc__)
+ parser.add_option(
+ "--no-passthrough", action="store_true",
+ help="Hide all non subunit input.", default=False, dest="no_passthrough")
+ parser.add_option(
+ "-o", "--output-to",
+ help="Output the XML to this path rather than stdout.")
+ parser.add_option(
+ "-f", "--forward", action="store_true", default=False,
+ help="Forward subunit stream on stdout.")
+ return parser
+
+
+def get_output_stream(output_to):
+ if output_to is None:
+ return sys.stdout
+ else:
+ return file(output_to, 'wb')
+
+
+def filter_with_result(result, no_passthrough, forward):
+ if no_passthrough:
+ passthrough_stream = DiscardStream()
+ else:
+ passthrough_stream = None
+ if forward:
+ forward_stream = sys.stdout
+ else:
+ forward_stream = None
+
+ test = ProtocolTestCase(
+ sys.stdin, passthrough=passthrough_stream,
+ forward=forward_stream)
+ result.startTestRun()
+ test.run(result)
+ result.stopTestRun()
+
+ return result.wasSuccessful()
+
+
+def something(result_factory, output_path, no_passthrough, forward):
+ output_to = get_output_stream(output_path)
+ result = result_factory(output_to)
+ try:
+ successful = filter_with_result(result, no_passthrough, forward)
+ finally:
+ if output_path:
+ output_to.close()
+ if successful:
+ return 0
+ else:
+ return 1
+
+
+def main():
+ parser = make_options()
+ (options, args) = parser.parse_args()
+ sys.exit(
+ something(CsvResult, options.output_to, options.no_passthrough, options.forward))