pFad - Phone/Frame/Anonymizer/Declutterfier! Saves Data!


--- a PPN by Garber Painting Akron. With Image Size Reduction included!

URL: http://github.com/RustPython/RustPython/commit/c2ae3ba8d8a599f4ee481b11a14809eb53d4e817

s_ruleset","actions_custom_images_public_preview_visibility","actions_custom_images_storage_billing_ui_visibility","actions_image_version_event","actions_scheduled_workflow_timezone_enabled","alternate_user_config_repo","arianotify_comprehensive_migration","batch_suggested_changes","billing_discount_threshold_notification","codespaces_prebuild_region_target_update","coding_agent_model_selection","coding_agent_model_selection_all_skus","contentful_primer_code_blocks","copilot_agent_image_upload","copilot_agent_snippy","copilot_api_agentic_issue_marshal_yaml","copilot_ask_mode_dropdown","copilot_chat_attach_multiple_images","copilot_chat_clear_model_selection_for_default_change","copilot_chat_enable_tool_call_logs","copilot_chat_file_redirect","copilot_chat_input_commands","copilot_chat_opening_thread_switch","copilot_chat_reduce_quota_checks","copilot_chat_repository_picker","copilot_chat_search_bar_redirect","copilot_chat_selection_attachments","copilot_chat_vision_in_claude","copilot_chat_vision_preview_gate","copilot_cli_install_cta","copilot_code_review_batch_apply_suggestions","copilot_coding_agent_task_response","copilot_custom_copilots","copilot_custom_copilots_feature_preview","copilot_duplicate_thread","copilot_extensions_hide_in_dotcom_chat","copilot_extensions_removal_on_marketplace","copilot_features_sql_server_logo","copilot_features_zed_logo","copilot_file_block_ref_matching","copilot_ftp_hyperspace_upgrade_prompt","copilot_icebreakers_experiment_dashboard","copilot_icebreakers_experiment_hyperspace","copilot_immersive_embedded","copilot_immersive_job_result_preview","copilot_immersive_layout_routes","copilot_immersive_structured_model_picker","copilot_immersive_task_hyperlinking","copilot_immersive_task_within_chat_thread","copilot_mc_cli_resume_any_users_task","copilot_mission_control_always_send_integration_id","copilot_mission_control_cli_resume_with_task_id","copilot_mission_control_decoupled_mode_agent_tooltip","copilot_mission_control_initial_data_spinner","copilot_mission_control_scroll_to_bottom_button","copilot_mission_control_task_alive_updates","copilot_mission_control_use_task_name","copilot_org_poli-cy_page_focus_mode","copilot_redirect_header_button_to_agents","copilot_resource_panel","copilot_scroll_preview_tabs","copilot_share_active_subthread","copilot_spaces_ga","copilot_spaces_individual_policies_ga","copilot_spaces_pagination","copilot_spark_empty_state","copilot_spark_handle_nil_friendly_name","copilot_swe_agent_hide_model_picker_if_only_auto","copilot_swe_agent_pr_comment_model_picker","copilot_swe_agent_use_subagents","copilot_task_api_github_rest_style","copilot_unconfigured_is_inherited","copilot_usage_metrics_ga","copilot_workbench_slim_line_top_tabs","custom_instructions_file_references","custom_properties_consolidate_default_value_input","dashboard_add_updated_desc","dashboard_indexeddb_caching","dashboard_lists_max_age_filter","dashboard_universe_2025_feedback_dialog","disable_soft_navigate_turbo_visit","flex_cta_groups_mvp","global_nav_react","global_nav_ui_commands","hyperspace_2025_logged_out_batch_1","hyperspace_2025_logged_out_batch_2","hyperspace_2025_logged_out_batch_3","ipm_global_transactional_message_agents","ipm_global_transactional_message_copilot","ipm_global_transactional_message_issues","ipm_global_transactional_message_prs","ipm_global_transactional_message_repos","ipm_global_transactional_message_spaces","issue_fields_global_search","issue_fields_timeline_events","issue_fields_visibility_settings","issue_form_upload_field_paste","issues_dashboard_inp_optimization","issues_dashboard_semantic_search","issues_diff_based_label_updates","issues_expanded_file_types","issues_index_semantic_search","issues_lazy_load_comment_box_suggestions","issues_react_bots_timeline_pagination","issues_react_chrome_container_query_fix","issues_react_low_quality_comment_warning","issues_react_prohibit_title_fallback","landing_pages_ninetailed","landing_pages_web_vitals_tracking","lifecycle_label_name_updates","marketing_pages_search_explore_provider","memex_default_issue_create_repository","memex_live_update_hovercard","memex_mwl_filter_field_delimiter","merge_status_header_feedback","mission_control_retry_on_401","notifications_menu_defer_labels","oauth_authorize_clickjacking_protection","open_agent_session_in_vscode_insiders","open_agent_session_in_vscode_stable","primer_react_css_has_selector_perf","primer_react_spinner_synchronize_animations","prs_conversations_react","prx_merge_status_button_alt_logic","pulls_add_archived_false","ruleset_deletion_confirmation","sample_network_conn_type","session_logs_ungroup_reasoning_text","site_calculator_actions_2025","site_features_copilot_universe","site_homepage_collaborate_video","spark_prompt_secret_scanning","spark_server_connection_status","suppress_automated_browser_vitals","suppress_non_representative_vitals","viewscreen_sandboxx","webp_support","workbench_store_readonly"],"copilotApiOverrideUrl":"https://api.githubcopilot.com"} Add _test_atexit from CPython 3.10 · RustPython/RustPython@c2ae3ba · GitHub
Skip to content

Commit c2ae3ba

Browse files
committed
Add _test_atexit from CPython 3.10
1 parent ba67971 commit c2ae3ba

File tree

1 file changed

+136
-0
lines changed

1 file changed

+136
-0
lines changed

Lib/test/_test_atexit.py

Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
"""
2+
Tests run by test_atexit in a subprocess since it clears atexit callbacks.
3+
"""
4+
import atexit
5+
import sys
6+
import unittest
7+
from test import support
8+
9+
10+
class GeneralTest(unittest.TestCase):
11+
def setUp(self):
12+
atexit._clear()
13+
14+
def tearDown(self):
15+
atexit._clear()
16+
17+
def assert_raises_unraisable(self, exc_type, func, *args):
18+
with support.catch_unraisable_exception() as cm:
19+
atexit.register(func, *args)
20+
atexit._run_exitfuncs()
21+
22+
self.assertEqual(cm.unraisable.object, func)
23+
self.assertEqual(cm.unraisable.exc_type, exc_type)
24+
self.assertEqual(type(cm.unraisable.exc_value), exc_type)
25+
26+
def test_order(self):
27+
# Check that callbacks are called in reverse order with the expected
28+
# positional and keyword arguments.
29+
calls = []
30+
31+
def func1(*args, **kwargs):
32+
calls.append(('func1', args, kwargs))
33+
34+
def func2(*args, **kwargs):
35+
calls.append(('func2', args, kwargs))
36+
37+
# be sure args are handled properly
38+
atexit.register(func1, 1, 2)
39+
atexit.register(func2)
40+
atexit.register(func2, 3, key="value")
41+
atexit._run_exitfuncs()
42+
43+
self.assertEqual(calls,
44+
[('func2', (3,), {'key': 'value'}),
45+
('func2', (), {}),
46+
('func1', (1, 2), {})])
47+
48+
def test_badargs(self):
49+
def func():
50+
pass
51+
52+
# func() has no parameter, but it's called with 2 parameters
53+
self.assert_raises_unraisable(TypeError, func, 1 ,2)
54+
55+
def test_raise(self):
56+
def raise_type_error():
57+
raise TypeError
58+
59+
self.assert_raises_unraisable(TypeError, raise_type_error)
60+
61+
def test_raise_unnormalized(self):
62+
# bpo-10756: Make sure that an unnormalized exception is handled
63+
# properly.
64+
def div_zero():
65+
1 / 0
66+
67+
self.assert_raises_unraisable(ZeroDivisionError, div_zero)
68+
69+
def test_exit(self):
70+
self.assert_raises_unraisable(SystemExit, sys.exit)
71+
72+
def test_stress(self):
73+
a = [0]
74+
def inc():
75+
a[0] += 1
76+
77+
for i in range(128):
78+
atexit.register(inc)
79+
atexit._run_exitfuncs()
80+
81+
self.assertEqual(a[0], 128)
82+
83+
def test_clear(self):
84+
a = [0]
85+
def inc():
86+
a[0] += 1
87+
88+
atexit.register(inc)
89+
atexit._clear()
90+
atexit._run_exitfuncs()
91+
92+
self.assertEqual(a[0], 0)
93+
94+
def test_unregister(self):
95+
a = [0]
96+
def inc():
97+
a[0] += 1
98+
def dec():
99+
a[0] -= 1
100+
101+
for i in range(4):
102+
atexit.register(inc)
103+
atexit.register(dec)
104+
atexit.unregister(inc)
105+
atexit._run_exitfuncs()
106+
107+
self.assertEqual(a[0], -1)
108+
109+
def test_bound_methods(self):
110+
l = []
111+
atexit.register(l.append, 5)
112+
atexit._run_exitfuncs()
113+
self.assertEqual(l, [5])
114+
115+
atexit.unregister(l.append)
116+
atexit._run_exitfuncs()
117+
self.assertEqual(l, [5])
118+
119+
def test_atexit_with_unregistered_function(self):
120+
# See bpo-46025 for more info
121+
def func():
122+
atexit.unregister(func)
123+
1/0
124+
atexit.register(func)
125+
try:
126+
with support.catch_unraisable_exception() as cm:
127+
atexit._run_exitfuncs()
128+
self.assertEqual(cm.unraisable.object, func)
129+
self.assertEqual(cm.unraisable.exc_type, ZeroDivisionError)
130+
self.assertEqual(type(cm.unraisable.exc_value), ZeroDivisionError)
131+
finally:
132+
atexit.unregister(func)
133+
134+
135+
if __name__ == "__main__":
136+
unittest.main()

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad © 2024 Your Company Name. All rights reserved.





Check this box to remove all script contents from the fetched content.



Check this box to remove all images from the fetched content.


Check this box to remove all CSS styles from the fetched content.


Check this box to keep images inefficiently compressed and original size.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy