[test] Don't drop existing categories for methods.
authorJonas Devlieghere <jonas@devlieghere.com>
Wed, 7 Feb 2018 17:34:46 +0000 (17:34 +0000)
committerJonas Devlieghere <jonas@devlieghere.com>
Wed, 7 Feb 2018 17:34:46 +0000 (17:34 +0000)
The change in r324488 dropped the existing category attribute in for
instance methods. This patch corrects that.

Differential revision: https://reviews.llvm.org/D43024

llvm-svn: 324492

lldb/packages/Python/lldbsuite/test/decorators.py

index 4248c46..f0afa9a 100644 (file)
@@ -304,13 +304,16 @@ def add_test_categories(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)
-        # For instance methods, the attribute must be set on the actual function.
-        if inspect.ismethod(func):
-            func.__func__.categories = cat
-        else:
-            func.categories = cat
+
+        # Update or set the categories attribute. For instance methods, the
+        # attribute must be set on the actual function.
+        func_for_attr = func
+        if inspect.ismethod(func_for_attr):
+            func_for_attr = func.__func__
+        if hasattr(func_for_attr, "categories"):
+            cat.extend(func_for_attr.categories)
+        setattr(func_for_attr, "categories", cat)
+
         return func
 
     return impl