@@ -2829,3 +2829,48 @@ Traceback (most recent call last):
28292829 File "native.py", line 5, in __del__
28302830 raise Exception("e2")
28312831Exception: e2
2832+
2833+ [case testNonExtensionClassAttr]
2834+ from mypy_extensions import mypyc_attr
2835+ from testutil import assertRaises
2836+
2837+ @mypyc_attr(non_extension_class=True)
2838+ class AnnontatedNonExtensionClass:
2839+ pass
2840+
2841+ class DerivedClass(AnnontatedNonExtensionClass):
2842+ pass
2843+
2844+ class ExtensionClass():
2845+ pass
2846+
2847+ def test_function():
2848+ setattr(AnnontatedNonExtensionClass, 'attr_class', 5)
2849+ assert(hasattr(AnnontatedNonExtensionClass, 'attr_class') == True)
2850+ assert(getattr(AnnontatedNonExtensionClass, 'attr_class') == 5)
2851+ delattr(AnnontatedNonExtensionClass, 'attr_class')
2852+ assert(hasattr(AnnontatedNonExtensionClass, 'attr_class') == False)
2853+
2854+ inst = AnnontatedNonExtensionClass()
2855+ setattr(inst, 'attr_instance', 6)
2856+ assert(hasattr(inst, 'attr_instance') == True)
2857+ assert(getattr(inst, 'attr_instance') == 6)
2858+ delattr(inst, 'attr_instance')
2859+ assert(hasattr(inst, 'attr_instance') == False)
2860+
2861+ setattr(DerivedClass, 'attr_class', 5)
2862+ assert(hasattr(DerivedClass, 'attr_class') == True)
2863+ assert(getattr(DerivedClass, 'attr_class') == 5)
2864+ delattr(DerivedClass, 'attr_class')
2865+ assert(hasattr(DerivedClass, 'attr_class') == False)
2866+
2867+ derived_inst = DerivedClass()
2868+ setattr(derived_inst, 'attr_instance', 6)
2869+ assert(hasattr(derived_inst, 'attr_instance') == True)
2870+ assert(getattr(derived_inst, 'attr_instance') == 6)
2871+ delattr(derived_inst, 'attr_instance')
2872+ assert(hasattr(derived_inst, 'attr_instance') == False)
2873+
2874+ ext_inst = ExtensionClass()
2875+ with assertRaises(AttributeError, "'ExtensionClass' object has no attribute 'attr_instance' and no __dict__ for setting new attributes"):
2876+ setattr(ext_inst, 'attr_instance', 6)
0 commit comments