#!/usr/bin/python import argparse import glob import os import shutil import subprocess import sys if sys.platform not in ('darwin', 'linux2'): print 'Tests are only enabled on Linux.' exit(0) parser = argparse.ArgumentParser() parser.add_argument('tests', nargs=argparse.REMAINDER) arguments = parser.parse_args() root = os.path.dirname(os.path.join(os.getcwd(), os.path.dirname(__file__))) tmp = os.path.join(root, 'tmp') logs = os.path.join(root, 'logs') tests = os.path.join(root, 'tests') executable = os.path.join(root, 'tildefriends') if not os.path.isdir(logs): os.makedirs(logs) selectedTests = set() if not arguments.tests: for test in glob.glob(os.path.join(tests, '*')): selectedTests.add(test) for pattern in arguments.tests: for match in glob.glob(os.path.join(tests, '*' + pattern + '*')): selectedTests.add(match) env = os.environ.copy() env['TILDEFRIENDS'] = executable env['LOGDIR'] = logs def indent(text): return '\n'.join('\t' + line for line in text.split('\n')) passCount = 0 failCount = 0 for test in selectedTests: if os.path.isdir(tmp): shutil.rmtree(tmp) if not os.path.isdir(tmp): os.makedirs(tmp) process = subprocess.Popen(['bash', test], stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd=tmp, env=env) stdout, stderr = process.communicate() if process.returncode == 0: if stdout.strip() == "SKIP": print 'SKIPPED', test else: print 'PASSED', test passCount += 1 else: print 'FAILED', test print 'RETURNED:', process.returncode print 'STDOUT:' print indent(stdout) print 'STDERR:' print indent(stderr) failCount += 1 if os.path.isdir(tmp): shutil.rmtree(tmp) print passCount, 'tests passed. ', failCount, 'tests failed.' exit(failCount)