|
51 | 51 | import _testinternalcapi |
52 | 52 |
|
53 | 53 |
|
| 54 | +NULL = None |
| 55 | + |
54 | 56 | def decode_stderr(err): |
55 | 57 | return err.decode('utf-8', 'replace').replace('\r', '') |
56 | 58 |
|
@@ -2576,5 +2578,46 @@ def testfunc(it): |
2576 | 2578 | with self.assertRaises(StopIteration): |
2577 | 2579 | next(it) |
2578 | 2580 |
|
| 2581 | + def test_sys_getobject(self): |
| 2582 | + getobject = _testcapi.sys_getobject |
| 2583 | + |
| 2584 | + self.assertIs(getobject(b'stdout'), sys.stdout) |
| 2585 | + with support.swap_attr(sys, '\U0001f40d', 42): |
| 2586 | + self.assertEqual(getobject('\U0001f40d'.encode()), 42) |
| 2587 | + |
| 2588 | + self.assertIs(getobject(b'nonexisting'), AttributeError) |
| 2589 | + self.assertIs(getobject(b'\xff'), AttributeError) |
| 2590 | + # CRASHES getobject(NULL) |
| 2591 | + |
| 2592 | + def test_sys_setobject(self): |
| 2593 | + setobject = _testcapi.sys_setobject |
| 2594 | + |
| 2595 | + value = ['value'] |
| 2596 | + value2 = ['value2'] |
| 2597 | + try: |
| 2598 | + self.assertEqual(setobject(b'newattr', value), 0) |
| 2599 | + self.assertIs(sys.newattr, value) |
| 2600 | + self.assertEqual(setobject(b'newattr', value2), 0) |
| 2601 | + self.assertIs(sys.newattr, value2) |
| 2602 | + self.assertEqual(setobject(b'newattr', NULL), 0) |
| 2603 | + self.assertFalse(hasattr(sys, 'newattr')) |
| 2604 | + self.assertEqual(setobject(b'newattr', NULL), 0) |
| 2605 | + finally: |
| 2606 | + with contextlib.suppress(AttributeError): |
| 2607 | + del sys.newattr |
| 2608 | + try: |
| 2609 | + self.assertEqual(setobject('\U0001f40d'.encode(), value), 0) |
| 2610 | + self.assertIs(getattr(sys, '\U0001f40d'), value) |
| 2611 | + self.assertEqual(setobject('\U0001f40d'.encode(), NULL), 0) |
| 2612 | + self.assertFalse(hasattr(sys, '\U0001f40d')) |
| 2613 | + finally: |
| 2614 | + with contextlib.suppress(AttributeError): |
| 2615 | + delattr(sys, '\U0001f40d') |
| 2616 | + |
| 2617 | + with self.assertRaises(UnicodeDecodeError): |
| 2618 | + setobject(b'\xff', value) |
| 2619 | + # CRASHES setobject(NULL, value) |
| 2620 | + |
| 2621 | + |
2579 | 2622 | if __name__ == "__main__": |
2580 | 2623 | unittest.main() |
0 commit comments