Index: recipe_engine/third_party/expect_tests/type_definitions.py |
diff --git a/recipe_engine/third_party/expect_tests/type_definitions.py b/recipe_engine/third_party/expect_tests/type_definitions.py |
index 308c7aae3913ebfc3a5c1f26758c5c3a0b3a2779..d716a0cdc494fdc10ecde19aea0fddb6a83dfcfe 100644 |
--- a/recipe_engine/third_party/expect_tests/type_definitions.py |
+++ b/recipe_engine/third_party/expect_tests/type_definitions.py |
@@ -16,11 +16,59 @@ from collections import namedtuple |
UnknownError = namedtuple('UnknownError', 'message') |
NoMatchingTestsError = namedtuple('NoMatchingTestsError', '') |
-Result = namedtuple('Result', 'data') |
+Result = namedtuple('Result', 'data checks') |
+Result.__new__.__defaults__ = ((),) # checks defaults to empty sequence |
+ |
GenStageError = namedtuple('GenStageError', 'error') |
MultiResult = namedtuple('MultiResult', 'results') |
DirSeen = namedtuple('DirSeen', 'dir') |
+class CheckFrame(namedtuple('CheckFrame', 'fname line function code varmap')): |
+ def format(self, indent): |
+ lines = [ |
+ '%s%s:%s - %s()' % ((' '*indent), self.fname, self.line, self.function) |
+ ] |
+ indent += 2 |
+ lines.append('%s`%s`' % ((' '*indent), self.code)) |
+ indent += 2 |
+ if self.varmap: |
+ lines.extend('%s%s: %s' % ((' '*indent), k, v) |
+ for k, v in self.varmap.iteritems()) |
+ return '\n'.join(lines) |
+ |
+ |
+class Check(namedtuple('Check', ( |
+ 'name ctx_filename ctx_lineno ctx_func ctx_args ctx_kwargs ' |
+ 'frames passed'))): |
+ def format(self, indent): |
+ '''Example: |
+ CHECK "something was run" (FAIL): |
+ added /.../recipes-py/recipes/engine_tests/whitelist_steps.py:28 |
+ MustRun('fakiestep') |
+ /.../recipes-py/recipe_engine/post_process.py:160 - MustRun() |
+ `check("something was run", (step_name in step_odict))` |
+ step_odict.keys(): ['something important', 'fakestep', '$result'] |
+ step_name: 'fakiestep' |
+ ''' |
+ |
+ ret = (' '*indent)+'CHECK%(name)s(%(passed)s):\n' % { |
+ 'name': ' %r ' % self.name if self.name else '', |
+ 'passed': 'PASS' if self.passed else 'FAIL', |
+ } |
+ indent += 2 |
+ ret += '\n'.join(map(lambda f: f.format(indent), self.frames)) + '\n' |
+ |
+ ret += (' '*indent)+'added %s:%d\n' % (self.ctx_filename, self.ctx_lineno) |
+ func = '%s(' % self.ctx_func |
+ if self.ctx_args: |
+ func += ', '.join(self.ctx_args) |
+ if self.ctx_kwargs: |
+ func += ', '.join(['%s=%s' % i for i in self.ctx_kwargs.iteritems()]) |
+ func += ')' |
+ ret += (' '*indent)+' '+func |
+ return ret |
+ |
+ |
class ResultStageAbort(Exception): |
pass |