| import unittest | |
| import types | |
| from test.support import import_helper | |
| _testinternalcapi = import_helper.import_module("_testinternalcapi") | |
| class TestRareEventCounters(unittest.TestCase): | |
| def setUp(self): | |
| _testinternalcapi.reset_rare_event_counters() | |
| 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"] | |
| ) | |
| class TestOptimizerSymbols(unittest.TestCase): | |
| @unittest.skipUnless(hasattr(_testinternalcapi, "uop_symbols_test"), | |
| "requires _testinternalcapi.uop_symbols_test") | |
| def test_optimizer_symbols(self): | |
| _testinternalcapi.uop_symbols_test() | |
| if __name__ == "__main__": | |
| unittest.main() |