a zeK@sddlZddlZddlZddlZddlZddlZddlmZddlm Z ddl m Z ddgZ dZ dZdZgd Zejd re jrd Z d Zqe d nHejd rdZ dZn2ejdkrd Zn"ejdkrdZnejdkrd Z d Zd ZeejdvoeedoeedZddZdZedeZGdddeZdZdZdada da!ddZ"Gdd d ej#Z$Gd!d"d"e$Z%e j&e'e(d#d$Gd%d&d&e$Z)d'd(Z*e+d)kre,dS)*N) namedtuple)support)run_python_until_endCz invalid.asciiasciiT)zC.UTF-8zC.utf8UTF-8linuxutf-8ZPOSIXZaixz iso8859-1darwincygwinFZvxworks)r r nl_langinfoCODESETcCs6d}tr|d7}||}td|dd\}}|jdkS)Nz=import locale; print(locale.setlocale(locale.LC_CTYPE, '{}'))z>; import sys; sys.exit(not locale.nl_langinfo(locale.CODESET))-cPYTHONCOERCECLOCALEr)_check_nl_langinfo_CODESETformatrrc)Z locale_nameZcmd_fmtcmdresultpy_cmdrO/opt/bitninja-python-dojo/embedded/lib/python3.9/test/test_c_locale_coercion.py_set_locale_in_subprocessWs  rzBfsencoding stdin_info stdout_info stderr_info lang lc_ctype lc_allEncodingDetailsc@s2eZdZdgdZeddZeddZdS)r;)zimport sys, osz"print(sys.getfilesystemencoding())z2print(sys.stdin.encoding + ':' + sys.stdin.errors)z4print(sys.stdout.encoding + ':' + sys.stdout.errors)z4print(sys.stderr.encoding + ':' + sys.stderr.errors)z(print(os.environ.get('LANG', 'not set'))z,print(os.environ.get('LC_CTYPE', 'not set'))z*print(os.environ.get('LC_ALL', 'not set'))c Cs||d}d|dg}||d|dd}|r>t}n |dd}|dd} ||| f} t||g|| RS) Nz:{}surrogateescapebackslashreplaceLANGznot setLC_CTYPELC_ALL)rappendgetCLI_COERCION_TARGETdict_asdict) clscoercion_expected fs_encodingstream_encodingenv_vars_streamZ stream_infoZ expected_langZexpected_lc_ctypeZexpected_lc_allZenv_inforrrget_expected_detailsrs    z$EncodingDetails.get_expected_detailscCsltddd|jfi|\}}|jdks0|||jd}t||}|j d }||fS)Nz-Xzutf8=0rrr) rCHILD_PROCESS_SCRIPTrZfailoutdecode splitlinesr&r'errrstrip)r(r,rrZ stdout_linesZchild_encoding_details stderr_linesrrrget_child_detailss     z!EncodingDetails.get_child_detailsN)__name__ __module__ __qualname__joinr/ classmethodr.r6rrrrres   zPython runtime initialized with LC_CTYPE=C (a locale with default ASCII encoding), which may cause Unicode compatibility problems. Using C.UTF-8, C.utf8, or UTF-8 (if available) as alternative Unicode-compatible locales is recommended.zPython detected LC_CTYPE=C: LC_CTYPE coerced to {} (set another locale or PYTHONCOERCECLOCALE=0 to disable this locale coercion behavior).cCstdur dSgatD]}t|rt|qtrBtdattatj rt dtt dt t dt t dt t dtt dtt dtdS) NrzAVAILABLE_TARGETS = z EXPECTED_C_LOCALE_EQUIVALENTS = z$EXPECTED_C_LOCALE_STREAM_ENCODING = z EXPECTED_C_LOCALE_FS_ENCODING = z$EXPECT_COERCION_IN_DEFAULT_LOCALE = z_C_UTF8_LOCALES = z_check_nl_langinfo_CODESET = )AVAILABLE_TARGETS_C_UTF8_LOCALESrr#r%CLI_COERCION_WARNING_FMTrCLI_COERCION_WARNINGrverboseprintEXPECTED_C_LOCALE_EQUIVALENTS!EXPECTED_C_LOCALE_STREAM_ENCODINGEXPECTED_C_LOCALE_FS_ENCODING!EXPECT_COERCION_IN_DEFAULT_LOCALEr)Z target_localerrr setUpModules"  rFc@seZdZddZdS)_LocaleHandlingTestCasec CsJt|}|\}}t||||} ||| |dur:g}|||dSN)rr6r. assertEqual) selfr,expected_fs_encodingexpected_stream_encodingexpected_warningsr)rZencoding_detailsr5Zexpected_detailsrrr_check_child_encoding_detailss  z5_LocaleHandlingTestCase._check_child_encoding_detailsN)r7r8r9rNrrrrrGsrGc@s eZdZeddZddZdS)LocaleConfigurationTestscCststddS)Nz No C-with-UTF-8 locale available)r<unittestZSkipTest)r(rrr setUpClasssz#LocaleConfigurationTests.setUpClassc Csd|_d}d}ddddd}dD]r}tD]h}|dkr>|dkr>q(|j||d4|}|||<|j|||ddd Wdq(1s0Yq(q dS) Nr rr r!r"rr r!r r)env_varZconfigured_localeF)rMr))maxDiffr<subTestcopyrN)rJrKrL base_var_dictrT locale_to_setvar_dictrrr)test_external_target_locale_configurations.zBLocaleConfigurationTests.test_external_target_locale_configurationN)r7r8r9r;rQr[rrrrrOs rOZPY_COERCE_C_LOCALEz(C locale coercion disabled at build timec@sFeZdZdddZddZddZd d Zd d Zd dZddZ dS)LocaleCoercionTestsNTc Ksd|_ts t}t}d}|r tg}ddddd}|||durH||d<|jd|dLtrf|}|} nd}d} tj r|t gkrd}| ||||| Wdn1s0Yt D]b} dD]X} |j| | |d2| } | | | <| | ||||Wdq1s 0YqqdS) NFrrRrT)Zdefault_localerrS)rTZnominal_localer)rUr<rDrCLEGACY_LOCALE_WARNINGupdaterVrEr is_androidr?rNrBrW) rJr*r+coerce_c_localerMr)Z extra_varsrXZ_expected_warningsZ_coercion_expectedrYrTrZrrr_check_c_locale_coercions^ "z,LocaleCoercionTests._check_c_locale_coercioncCs|jdddddS)Nr r`rarJrrr test_PYTHONCOERCECLOCALE_not_setisz4LocaleCoercionTests.test_PYTHONCOERCECLOCALE_not_setcCsdD]}|jdd|dqdS)N)r1trueZfalser rbrc)rJZsettingrrr!test_PYTHONCOERCECLOCALE_not_zeromsz5LocaleCoercionTests.test_PYTHONCOERCECLOCALE_not_zerocCs|jdddtgddS)Nr warn)r`rM)rar?rdrrr$test_PYTHONCOERCECLOCALE_set_to_warnssz8LocaleCoercionTests.test_PYTHONCOERCECLOCALE_set_to_warncCs*|jttddd|jttdddddS)N0F)r`r)rr`r"r))rarDrCrdrrr$test_PYTHONCOERCECLOCALE_set_to_zerozsz8LocaleCoercionTests.test_PYTHONCOERCECLOCALE_set_to_zerocCs0|jttdddd|jttddtgdddS)NrFrlri)r`r"rMr))rarDrCr]rdrrrtest_LC_ALL_set_to_Csz(LocaleCoercionTests.test_LC_ALL_set_to_Cc Csttjd}|tjtj|zttjd}Wn4tjyf}z|t|WYd}~n d}~00|dkrz|d|tvr|d|d}tt j dd}t j t jd|gt j|d d }||j|dS) Nrrz.test requires LC_CTYPE locale different than Czcoerced LC_CTYPE locale: %sz=import locale; print(locale.setlocale(locale.LC_CTYPE, None))rfrrT)stdoutenvtext)locale setlocaler!Z addCleanupErrorZskipTeststrTARGET_LOCALESr&osenviron subprocessrunsys executablePIPErIror4)rJZold_loclocecoderprrrr#test_PYTHONCOERCECLOCALE_set_to_ones$$ z7LocaleCoercionTests.test_PYTHONCOERCECLOCALE_set_to_one)NT) r7r8r9rarerhrjrmrnrrrrrr\s  J r\cCs tdSrH)r reap_childrenrrrrtearDownModulesr__main__)-rrrwryr{Z sysconfigrP collectionsrtestrZtest.support.script_helperrrBrCrDrErvplatform startswithr_r#r=boolhasattrrr_fieldsZ_EncodingDetailsrr]r>r<r%r?rFZTestCaserGrOZ cpython_onlyZ skipUnlessZget_config_varr\rr7mainrrrrst             : -