| import _testinternalcapi |
| import unittest |
| import types |
| |
| |
| class TestRareEventCounters(unittest.TestCase): |
| def test_set_class(self): |
| class A: |
| pass |
| class B: |
| pass |
| a = A() |
| |
| orig_counter = _testinternalcapi.get_rare_event_counters()["set_class"] |
| a.__class__ = B |
| self.assertEqual( |
| orig_counter + 1, |
| _testinternalcapi.get_rare_event_counters()["set_class"] |
| ) |
| |
| def test_set_bases(self): |
| class A: |
| pass |
| class B: |
| pass |
| class C(B): |
| pass |
| |
| orig_counter = _testinternalcapi.get_rare_event_counters()["set_bases"] |
| C.__bases__ = (A,) |
| self.assertEqual( |
| orig_counter + 1, |
| _testinternalcapi.get_rare_event_counters()["set_bases"] |
| ) |
| |
| def test_set_eval_frame_func(self): |
| orig_counter = _testinternalcapi.get_rare_event_counters()["set_eval_frame_func"] |
| _testinternalcapi.set_eval_frame_record([]) |
| self.assertEqual( |
| orig_counter + 1, |
| _testinternalcapi.get_rare_event_counters()["set_eval_frame_func"] |
| ) |
| _testinternalcapi.set_eval_frame_default() |
| |
| def test_builtin_dict(self): |
| orig_counter = _testinternalcapi.get_rare_event_counters()["builtin_dict"] |
| if isinstance(__builtins__, types.ModuleType): |
| builtins = __builtins__.__dict__ |
| else: |
| builtins = __builtins__ |
| builtins["FOO"] = 42 |
| self.assertEqual( |
| orig_counter + 1, |
| _testinternalcapi.get_rare_event_counters()["builtin_dict"] |
| ) |
| del builtins["FOO"] |
| |
| def test_func_modification(self): |
| def func(x=0): |
| pass |
| |
| for attribute in ( |
| "__code__", |
| "__defaults__", |
| "__kwdefaults__" |
| ): |
| orig_counter = _testinternalcapi.get_rare_event_counters()["func_modification"] |
| setattr(func, attribute, getattr(func, attribute)) |
| self.assertEqual( |
| orig_counter + 1, |
| _testinternalcapi.get_rare_event_counters()["func_modification"] |
| ) |
| |
| if __name__ == "__main__": |
| unittest.main() |