You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
1.2 KiB
52 lines
1.2 KiB
#!/usr/bin/env python |
|
""" |
|
The module facilitates testing in cmake. |
|
It takes a command and a regex for failure ok passing. |
|
It passes if: |
|
* No stderr output. |
|
* Stdout doesn't match failure regex. |
|
* Stdout matches ok regex if given. |
|
""" |
|
from __future__ import print_function |
|
import argparse |
|
import subprocess |
|
import re |
|
import sys |
|
|
|
#pylint: disable=invalid-name |
|
|
|
parser = argparse.ArgumentParser() |
|
|
|
parser.add_argument('cmd') |
|
parser.add_argument('--re-fail') |
|
parser.add_argument('--re-ok') |
|
parser.add_argument('--verbose', '-v', dest='verbose', action='store_true') |
|
|
|
parser.set_defaults(verbose=False) |
|
args = parser.parse_args() |
|
|
|
proc = subprocess.Popen(args.cmd.split(), stdout=subprocess.PIPE, stderr=subprocess.PIPE) |
|
stdout, stderr = proc.communicate() |
|
|
|
if stderr != "": |
|
print(stderr) |
|
sys.exit(1) |
|
|
|
if args.re_fail is not None: |
|
fail_match = re.search(args.re_fail, stdout) |
|
if fail_match is not None: |
|
print(stdout) |
|
sys.exit(1) |
|
|
|
if args.re_ok is not None: |
|
ok_match = re.search(args.re_ok, stdout) |
|
if re.match(args.re_ok, stdout) is None: |
|
print(stdout) |
|
sys.exit(1) |
|
|
|
if args.verbose: |
|
print(stdout) |
|
|
|
sys.exit(0) |
|
|
|
# vim: set et ft=python fenc=utf-8 ff=unix sts=4 sw=4 ts=4 :
|
|
|