diff options
Diffstat (limited to 'meta/lib')
-rw-r--r-- | meta/lib/oeqa/oetest.py | 17 | ||||
-rw-r--r-- | meta/lib/oeqa/utils/decorators.py | 40 |
2 files changed, 34 insertions, 23 deletions
diff --git a/meta/lib/oeqa/oetest.py b/meta/lib/oeqa/oetest.py index 0db6cb80a9..ecb8e53705 100644 --- a/meta/lib/oeqa/oetest.py +++ b/meta/lib/oeqa/oetest.py | |||
@@ -11,7 +11,6 @@ import os, re, mmap | |||
11 | import unittest | 11 | import unittest |
12 | import inspect | 12 | import inspect |
13 | 13 | ||
14 | |||
15 | def loadTests(tc): | 14 | def loadTests(tc): |
16 | 15 | ||
17 | # set the context object passed from the test class | 16 | # set the context object passed from the test class |
@@ -36,24 +35,9 @@ def runTests(tc): | |||
36 | 35 | ||
37 | return result | 36 | return result |
38 | 37 | ||
39 | |||
40 | class oeTest(unittest.TestCase): | 38 | class oeTest(unittest.TestCase): |
41 | 39 | ||
42 | longMessage = True | 40 | longMessage = True |
43 | testFailures = [] | ||
44 | testSkipped = [] | ||
45 | testErrors = [] | ||
46 | |||
47 | def run(self, result=None): | ||
48 | super(oeTest, self).run(result) | ||
49 | |||
50 | # we add to our own lists the results, we use those for decorators | ||
51 | if len(result.failures) > len(oeTest.testFailures): | ||
52 | oeTest.testFailures.append(str(result.failures[-1][0]).split()[0]) | ||
53 | if len(result.skipped) > len(oeTest.testSkipped): | ||
54 | oeTest.testSkipped.append(str(result.skipped[-1][0]).split()[0]) | ||
55 | if len(result.errors) > len(oeTest.testErrors): | ||
56 | oeTest.testErrors.append(str(result.errors[-1][0]).split()[0]) | ||
57 | 41 | ||
58 | @classmethod | 42 | @classmethod |
59 | def hasPackage(self, pkg): | 43 | def hasPackage(self, pkg): |
@@ -71,7 +55,6 @@ class oeTest(unittest.TestCase): | |||
71 | else: | 55 | else: |
72 | return False | 56 | return False |
73 | 57 | ||
74 | |||
75 | class oeRuntimeTest(oeTest): | 58 | class oeRuntimeTest(oeTest): |
76 | 59 | ||
77 | def __init__(self, methodName='runTest'): | 60 | def __init__(self, methodName='runTest'): |
diff --git a/meta/lib/oeqa/utils/decorators.py b/meta/lib/oeqa/utils/decorators.py index a0d94e6d24..439e80a42b 100644 --- a/meta/lib/oeqa/utils/decorators.py +++ b/meta/lib/oeqa/utils/decorators.py | |||
@@ -6,9 +6,34 @@ | |||
6 | # Most useful is skipUnlessPassed which can be used for | 6 | # Most useful is skipUnlessPassed which can be used for |
7 | # creating dependecies between two test methods. | 7 | # creating dependecies between two test methods. |
8 | 8 | ||
9 | from oeqa.oetest import * | ||
10 | import logging | 9 | import logging |
11 | import sys | 10 | import sys |
11 | import unittest | ||
12 | |||
13 | #get the "result" object from one of the upper frames provided that one of these upper frames is a unittest.case frame | ||
14 | class getResults(object): | ||
15 | def __init__(self): | ||
16 | #dynamically determine the unittest.case frame and use it to get the name of the test method | ||
17 | upperf = sys._current_frames().values()[0] | ||
18 | while (upperf.f_globals['__name__'] != 'unittest.case'): | ||
19 | upperf = upperf.f_back | ||
20 | self.faillist = [ seq[0]._testMethodName for seq in upperf.f_locals['result'].failures ] | ||
21 | self.errorlist = [ seq[0]._testMethodName for seq in upperf.f_locals['result'].errors ] | ||
22 | #ignore the _ErrorHolder objects from the skipped tests list | ||
23 | self.skiplist = [] | ||
24 | for seq in upperf.f_locals['result'].skipped: | ||
25 | try: | ||
26 | self.skiplist.append(seq[0]._testMethodName) | ||
27 | except: pass | ||
28 | |||
29 | def getFailList(self): | ||
30 | return self.faillist | ||
31 | |||
32 | def getErrorList(self): | ||
33 | return self.errorlist | ||
34 | |||
35 | def getSkipList(self): | ||
36 | return self.skiplist | ||
12 | 37 | ||
13 | class skipIfFailure(object): | 38 | class skipIfFailure(object): |
14 | 39 | ||
@@ -17,7 +42,8 @@ class skipIfFailure(object): | |||
17 | 42 | ||
18 | def __call__(self,f): | 43 | def __call__(self,f): |
19 | def wrapped_f(*args): | 44 | def wrapped_f(*args): |
20 | if self.testcase in (oeTest.testFailures or oeTest.testErrors): | 45 | res = getResults() |
46 | if self.testcase in (res.getFailList() or res.getErrorList()): | ||
21 | raise unittest.SkipTest("Testcase dependency not met: %s" % self.testcase) | 47 | raise unittest.SkipTest("Testcase dependency not met: %s" % self.testcase) |
22 | return f(*args) | 48 | return f(*args) |
23 | wrapped_f.__name__ = f.__name__ | 49 | wrapped_f.__name__ = f.__name__ |
@@ -30,7 +56,8 @@ class skipIfSkipped(object): | |||
30 | 56 | ||
31 | def __call__(self,f): | 57 | def __call__(self,f): |
32 | def wrapped_f(*args): | 58 | def wrapped_f(*args): |
33 | if self.testcase in oeTest.testSkipped: | 59 | res = getResults() |
60 | if self.testcase in res.getSkipList(): | ||
34 | raise unittest.SkipTest("Testcase dependency not met: %s" % self.testcase) | 61 | raise unittest.SkipTest("Testcase dependency not met: %s" % self.testcase) |
35 | return f(*args) | 62 | return f(*args) |
36 | wrapped_f.__name__ = f.__name__ | 63 | wrapped_f.__name__ = f.__name__ |
@@ -43,9 +70,10 @@ class skipUnlessPassed(object): | |||
43 | 70 | ||
44 | def __call__(self,f): | 71 | def __call__(self,f): |
45 | def wrapped_f(*args): | 72 | def wrapped_f(*args): |
46 | if self.testcase in oeTest.testSkipped or \ | 73 | res = getResults() |
47 | self.testcase in oeTest.testFailures or \ | 74 | if self.testcase in res.getSkipList() or \ |
48 | self.testcase in oeTest.testErrors: | 75 | self.testcase in res.getFailList() or \ |
76 | self.testcase in res.getErrorList(): | ||
49 | raise unittest.SkipTest("Testcase dependency not met: %s" % self.testcase) | 77 | raise unittest.SkipTest("Testcase dependency not met: %s" % self.testcase) |
50 | return f(*args) | 78 | return f(*args) |
51 | wrapped_f.__name__ = f.__name__ | 79 | wrapped_f.__name__ = f.__name__ |