[Lldb-commits] [PATCH] D15451: Make test categories composable

Pavel Labath via lldb-commits lldb-commits at lists.llvm.org
Fri Dec 11 07:41:47 PST 2015


labath updated this revision to Diff 42522.
labath added a comment.

I've changed my mind and I'm moving back the getCategoriesForTest function into test_result.py.
The function only works when the test is currently executing (because of the magic
_testMethodName hack), so it's usability as a general utility function is very limited. Let's keep it here until we have a reason to do otherwise.


http://reviews.llvm.org/D15451

Files:
  packages/Python/lldbsuite/test/lldbtest.py
  packages/Python/lldbsuite/test/test_categories.py
  packages/Python/lldbsuite/test/test_result.py

Index: packages/Python/lldbsuite/test/test_result.py
===================================================================
--- packages/Python/lldbsuite/test/test_result.py
+++ packages/Python/lldbsuite/test/test_result.py
@@ -101,22 +101,17 @@
         else:
             return str(test)
 
-    def getCategoriesForTest(self,test):
-        if hasattr(test,"_testMethodName"):
-            test_method = getattr(test,"_testMethodName")
-            test_method = getattr(test,test_method)
-        else:
-            test_method = None
-        if test_method != None and hasattr(test_method,"getCategories"):
-            test_categories = test_method.getCategories(test)
-        elif hasattr(test,"getCategories"):
-            test_categories = test.getCategories()
-        elif inspect.ismethod(test) and test.__self__ != None and hasattr(test.__self__,"getCategories"):
-            test_categories = test.__self__.getCategories()
-        else:
-            test_categories = []
-        if test_categories == None:
-            test_categories = []
+    def getCategoriesForTest(self, test):
+        """
+        Gets all the categories for the currently running test method in test case
+        """
+        test_categories = []
+        test_method = getattr(test, test._testMethodName)
+        if test_method != None and hasattr(test_method, "categories"):
+            test_categories.extend(test_method.categories)
+
+        test_categories.extend(test.getCategories())
+
         return test_categories
 
     def hardMarkAsSkipped(self,test):
Index: packages/Python/lldbsuite/test/test_categories.py
===================================================================
--- packages/Python/lldbsuite/test/test_categories.py
+++ packages/Python/lldbsuite/test/test_categories.py
@@ -3,6 +3,7 @@
 """
 
 from __future__ import absolute_import
+from __future__ import print_function
 
 # System modules
 import sys
Index: packages/Python/lldbsuite/test/lldbtest.py
===================================================================
--- packages/Python/lldbsuite/test/lldbtest.py
+++ packages/Python/lldbsuite/test/lldbtest.py
@@ -507,12 +507,18 @@
 # Decorators for categorizing test cases.
 #
 from functools import wraps
+
 def add_test_categories(cat):
-    """Decorate an item with test categories"""
+    """Add test categories to a test item"""
     cat = test_categories.validate(cat, True)
     def impl(func):
-        func.getCategories = lambda test: cat
+        if isinstance(func, type) and issubclass(func, unittest2.TestCase):
+            raise Exception("@add_test_categories can only be used to decorate a test method")
+        if hasattr(func, "categories"):
+            cat.extend(func.categories)
+        func.categories = cat
         return func
+
     return impl
 
 def benchmarks_test(func):


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D15451.42522.patch
Type: text/x-patch
Size: 2838 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20151211/76516f6d/attachment.bin>


More information about the lldb-commits mailing list