- commit
- 543cb7041c9fa3237a6d4bd6824ba451aecfbab1
- parent
- 38ee7e677ca8d1b13997479e72ab152bef520555
- Author
- Tobias Bengfort <tobias.bengfort@posteo.de>
- Date
- 2019-02-09 09:47
outcomes
Diffstat
| M | assamtest/decorators.py | 3 | ++- |
| M | assamtest/reporter.py | 51 | +++++++++++++++++++++++++++++++++++---------------- |
| M | assamtest/runner.py | 21 | ++++++++++++++++++--- |
3 files changed, 55 insertions, 20 deletions
diff --git a/assamtest/decorators.py b/assamtest/decorators.py
@@ -2,6 +2,7 @@ import asyncio 2 2 import functools 3 3 4 4 from .expect import expect -1 5 from .runner import Outcome 5 6 6 7 7 8 def fail(fn): @@ -15,7 +16,7 @@ def fail(fn): 15 16 def skip(fn): 16 17 @functools.wraps(fn) 17 18 def wrapper(*args, **kwargs):18 -1 pass-1 19 raise Outcome(None, 'skipped', 'INFO') 19 20 return wrapper 20 21 21 22
diff --git a/assamtest/reporter.py b/assamtest/reporter.py
@@ -26,7 +26,7 @@ class Reporter: 26 26 def leave_suite(self, name): 27 27 pass 28 2829 -1 def test(self, name, result):-1 29 def test(self, name, err, status, level): 30 30 pass 31 31 32 32 @@ -34,23 +34,39 @@ class SpecReporter(Reporter): 34 34 def __init__(self): 35 35 self.stack = [] 36 36 self.stats = {37 -1 'fail': 0,38 -1 'pass': 0,-1 37 'SUCCESS': {}, -1 38 'INFO': {}, -1 39 'WARNING': {}, -1 40 'ERROR': {}, 39 41 } 40 42 -1 43 def render_level(self, msg, level, status): -1 44 if status == 'passed': -1 45 char = '✓' -1 46 elif status == 'failed': -1 47 char = '✖' -1 48 else: -1 49 char = status[0].upper() -1 50 color = { -1 51 'SUCCESS': 'GREEN', -1 52 'INFO': 'CYAN', -1 53 'WARNING': 'YELLOW', -1 54 'ERROR': 'RED', -1 55 }[level] -1 56 return colored('%s %s' % (char, msg), color) -1 57 41 58 def _print(self, msg): 42 59 print(' ' * len(self.stack) + msg) 43 60 44 61 def leave_run(self): 45 62 print()46 -1 if self.stats['pass']:47 -1 print(colored('✓ %i passing' % self.stats['pass'], 'GREEN'))48 -1 if self.stats['fail']:49 -1 print(colored('✖ %i failing' % self.stats['fail'], 'RED'))-1 63 for level in ['SUCCESS', 'INFO', 'WARNING', 'ERROR']: -1 64 for status, count in sorted(self.stats[level].items()): -1 65 print(self.render_level('%i %s' % (count, status), level, status)) 50 6651 -1 if self.stats['fail']:-1 67 if sum(self.stats['ERROR'].values()) != 0: 52 68 return 153 -1 elif sum(self.stats.values()) == 0:-1 69 elif sum(sum(l.values()) for l in self.stats.values()) == 0: 54 70 print(colored('No tests found', 'YELLOW')) 55 71 return 5 56 72 @@ -61,11 +77,14 @@ class SpecReporter(Reporter): 61 77 def leave_suite(self, name): 62 78 self.stack.pop() 63 7964 -1 def test(self, name, result):65 -1 if result:66 -1 self.stats['fail'] += 167 -1 self._print(colored('✖ %s' % name, 'RED'))68 -1 self._print(' %s' % result)-1 80 def test(self, name, err, status, level): -1 81 self.stats[level].setdefault(status, 0) -1 82 self.stats[level][status] += 1 -1 83 -1 84 if level == 'SUCCESS': -1 85 self._print(self.render_level('', level, status) + colored(name, 'DIM')) 69 86 else:70 -1 self.stats['pass'] += 171 -1 self._print('%s %s' % (colored('✓', 'GREEN'), colored(name, 'DIM')))-1 87 self._print(self.render_level(name, level, status)) -1 88 -1 89 if err and str(err): -1 90 self._print(' %s' % err)
diff --git a/assamtest/runner.py b/assamtest/runner.py
@@ -1,8 +1,23 @@ -1 1 class Outcome(Exception): -1 2 def __init__(self, err, status, level): -1 3 self.err = err -1 4 self.status = status -1 5 self.level = level -1 6 -1 7 def __str__(self): -1 8 return str(self.err or '') -1 9 -1 10 1 11 def run_test(test): 2 12 try: 3 13 test()4 -1 except Exception as e:5 -1 return e-1 14 except Outcome as err: -1 15 return err, err.status, err.level -1 16 except AssertionError as err: -1 17 return err, 'failed', 'ERROR' -1 18 except Exception as err: -1 19 return err, 'errored', 'ERROR' -1 20 return None, 'passed', 'SUCCESS' 6 21 7 22 8 23 def _run(suite, reporter, before_each=[], after_each=[]): @@ -18,7 +33,7 @@ def _run(suite, reporter, before_each=[], after_each=[]): 18 33 for fn in before_each: 19 34 fn() 20 3521 -1 reporter.test(name, run_test(test))-1 36 reporter.test(name, *run_test(test)) 22 37 23 38 for fn in after_each: 24 39 fn()