mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	gh-137729: Fix support for locales with @-modifiers (GH-137253)
This commit is contained in:
		
							parent
							
								
									bc2872445b
								
							
						
					
					
						commit
						0c8fecc4cf
					
				
					 6 changed files with 164 additions and 16 deletions
				
			
		|  | @ -1,4 +1,5 @@ | |||
| from decimal import Decimal | ||||
| from test import support | ||||
| from test.support import cpython_only, verbose, is_android, linked_to_musl, os_helper | ||||
| from test.support.warnings_helper import check_warnings | ||||
| from test.support.import_helper import ensure_lazy_imports, import_fresh_module | ||||
|  | @ -425,8 +426,8 @@ def test_hyphenated_encoding(self): | |||
|         self.check('cs_CZ.ISO8859-2', 'cs_CZ.ISO8859-2') | ||||
| 
 | ||||
|     def test_euro_modifier(self): | ||||
|         self.check('de_DE@euro', 'de_DE.ISO8859-15') | ||||
|         self.check('en_US.ISO8859-15@euro', 'en_US.ISO8859-15') | ||||
|         self.check('de_DE@euro', 'de_DE.ISO8859-15@euro') | ||||
|         self.check('en_US.ISO8859-15@euro', 'en_US.ISO8859-15@euro') | ||||
|         self.check('de_DE.utf8@euro', 'de_DE.UTF-8') | ||||
| 
 | ||||
|     def test_latin_modifier(self): | ||||
|  | @ -534,6 +535,105 @@ def test_setlocale_long_encoding(self): | |||
|         with self.assertRaises(locale.Error): | ||||
|             locale.setlocale(locale.LC_ALL, loc2) | ||||
| 
 | ||||
|     @support.subTests('localename,localetuple', [ | ||||
|         ('fr_FR.ISO8859-15@euro', ('fr_FR@euro', 'iso885915')), | ||||
|         ('fr_FR.ISO8859-15@euro', ('fr_FR@euro', 'iso88591')), | ||||
|         ('fr_FR.ISO8859-15@euro', ('fr_FR@euro', 'ISO8859-15')), | ||||
|         ('fr_FR.ISO8859-15@euro', ('fr_FR@euro', 'ISO8859-1')), | ||||
|         ('fr_FR.ISO8859-15@euro', ('fr_FR@euro', None)), | ||||
|         ('de_DE.ISO8859-15@euro', ('de_DE@euro', 'iso885915')), | ||||
|         ('de_DE.ISO8859-15@euro', ('de_DE@euro', 'iso88591')), | ||||
|         ('de_DE.ISO8859-15@euro', ('de_DE@euro', 'ISO8859-15')), | ||||
|         ('de_DE.ISO8859-15@euro', ('de_DE@euro', 'ISO8859-1')), | ||||
|         ('de_DE.ISO8859-15@euro', ('de_DE@euro', None)), | ||||
|         ('el_GR.ISO8859-7@euro', ('el_GR@euro', 'iso88597')), | ||||
|         ('el_GR.ISO8859-7@euro', ('el_GR@euro', 'ISO8859-7')), | ||||
|         ('el_GR.ISO8859-7@euro', ('el_GR@euro', None)), | ||||
|         ('ca_ES.ISO8859-15@euro', ('ca_ES@euro', 'iso885915')), | ||||
|         ('ca_ES.ISO8859-15@euro', ('ca_ES@euro', 'iso88591')), | ||||
|         ('ca_ES.ISO8859-15@euro', ('ca_ES@euro', 'ISO8859-15')), | ||||
|         ('ca_ES.ISO8859-15@euro', ('ca_ES@euro', 'ISO8859-1')), | ||||
|         ('ca_ES.ISO8859-15@euro', ('ca_ES@euro', None)), | ||||
|         ('ca_ES.UTF-8@valencia', ('ca_ES@valencia', 'utf8')), | ||||
|         ('ca_ES.UTF-8@valencia', ('ca_ES@valencia', 'UTF-8')), | ||||
|         ('ca_ES.UTF-8@valencia', ('ca_ES@valencia', None)), | ||||
|         ('ks_IN.UTF-8@devanagari', ('ks_IN@devanagari', 'utf8')), | ||||
|         ('ks_IN.UTF-8@devanagari', ('ks_IN@devanagari', 'UTF-8')), | ||||
|         ('ks_IN.UTF-8@devanagari', ('ks_IN@devanagari', None)), | ||||
|         ('sd_IN.UTF-8@devanagari', ('sd_IN@devanagari', 'utf8')), | ||||
|         ('sd_IN.UTF-8@devanagari', ('sd_IN@devanagari', 'UTF-8')), | ||||
|         ('sd_IN.UTF-8@devanagari', ('sd_IN@devanagari', None)), | ||||
|         ('be_BY.UTF-8@latin', ('be_BY@latin', 'utf8')), | ||||
|         ('be_BY.UTF-8@latin', ('be_BY@latin', 'UTF-8')), | ||||
|         ('be_BY.UTF-8@latin', ('be_BY@latin', None)), | ||||
|         ('sr_RS.UTF-8@latin', ('sr_RS@latin', 'utf8')), | ||||
|         ('sr_RS.UTF-8@latin', ('sr_RS@latin', 'UTF-8')), | ||||
|         ('sr_RS.UTF-8@latin', ('sr_RS@latin', None)), | ||||
|         ('ug_CN.UTF-8@latin', ('ug_CN@latin', 'utf8')), | ||||
|         ('ug_CN.UTF-8@latin', ('ug_CN@latin', 'UTF-8')), | ||||
|         ('ug_CN.UTF-8@latin', ('ug_CN@latin', None)), | ||||
|         ('uz_UZ.UTF-8@cyrillic', ('uz_UZ@cyrillic', 'utf8')), | ||||
|         ('uz_UZ.UTF-8@cyrillic', ('uz_UZ@cyrillic', 'UTF-8')), | ||||
|         ('uz_UZ.UTF-8@cyrillic', ('uz_UZ@cyrillic', None)), | ||||
|     ]) | ||||
|     def test_setlocale_with_modifier(self, localename, localetuple): | ||||
|         try: | ||||
|             locale.setlocale(locale.LC_CTYPE, localename) | ||||
|         except locale.Error as exc: | ||||
|             self.skipTest(str(exc)) | ||||
|         loc = locale.setlocale(locale.LC_CTYPE, localetuple) | ||||
|         self.assertEqual(loc, localename) | ||||
| 
 | ||||
|         loctuple = locale.getlocale(locale.LC_CTYPE) | ||||
|         loc = locale.setlocale(locale.LC_CTYPE, loctuple) | ||||
|         self.assertEqual(loc, localename) | ||||
| 
 | ||||
|     @support.subTests('localename,localetuple', [ | ||||
|         ('fr_FR.iso885915@euro', ('fr_FR@euro', 'ISO8859-15')), | ||||
|         ('fr_FR.ISO8859-15@euro', ('fr_FR@euro', 'ISO8859-15')), | ||||
|         ('fr_FR@euro', ('fr_FR@euro', 'ISO8859-15')), | ||||
|         ('de_DE.iso885915@euro', ('de_DE@euro', 'ISO8859-15')), | ||||
|         ('de_DE.ISO8859-15@euro', ('de_DE@euro', 'ISO8859-15')), | ||||
|         ('de_DE@euro', ('de_DE@euro', 'ISO8859-15')), | ||||
|         ('el_GR.iso88597@euro', ('el_GR@euro', 'ISO8859-7')), | ||||
|         ('el_GR.ISO8859-7@euro', ('el_GR@euro', 'ISO8859-7')), | ||||
|         ('el_GR@euro', ('el_GR@euro', 'ISO8859-7')), | ||||
|         ('ca_ES.iso885915@euro', ('ca_ES@euro', 'ISO8859-15')), | ||||
|         ('ca_ES.ISO8859-15@euro', ('ca_ES@euro', 'ISO8859-15')), | ||||
|         ('ca_ES@euro', ('ca_ES@euro', 'ISO8859-15')), | ||||
|         ('ca_ES.utf8@valencia', ('ca_ES@valencia', 'UTF-8')), | ||||
|         ('ca_ES.UTF-8@valencia', ('ca_ES@valencia', 'UTF-8')), | ||||
|         ('ca_ES@valencia', ('ca_ES@valencia', 'UTF-8')), | ||||
|         ('ks_IN.utf8@devanagari', ('ks_IN@devanagari', 'UTF-8')), | ||||
|         ('ks_IN.UTF-8@devanagari', ('ks_IN@devanagari', 'UTF-8')), | ||||
|         ('ks_IN@devanagari', ('ks_IN@devanagari', 'UTF-8')), | ||||
|         ('sd_IN.utf8@devanagari', ('sd_IN@devanagari', 'UTF-8')), | ||||
|         ('sd_IN.UTF-8@devanagari', ('sd_IN@devanagari', 'UTF-8')), | ||||
|         ('sd_IN@devanagari', ('sd_IN@devanagari', 'UTF-8')), | ||||
|         ('be_BY.utf8@latin', ('be_BY@latin', 'UTF-8')), | ||||
|         ('be_BY.UTF-8@latin', ('be_BY@latin', 'UTF-8')), | ||||
|         ('be_BY@latin', ('be_BY@latin', 'UTF-8')), | ||||
|         ('sr_RS.utf8@latin', ('sr_RS@latin', 'UTF-8')), | ||||
|         ('sr_RS.UTF-8@latin', ('sr_RS@latin', 'UTF-8')), | ||||
|         ('sr_RS@latin', ('sr_RS@latin', 'UTF-8')), | ||||
|         ('ug_CN.utf8@latin', ('ug_CN@latin', 'UTF-8')), | ||||
|         ('ug_CN.UTF-8@latin', ('ug_CN@latin', 'UTF-8')), | ||||
|         ('ug_CN@latin', ('ug_CN@latin', 'UTF-8')), | ||||
|         ('uz_UZ.utf8@cyrillic', ('uz_UZ@cyrillic', 'UTF-8')), | ||||
|         ('uz_UZ.UTF-8@cyrillic', ('uz_UZ@cyrillic', 'UTF-8')), | ||||
|         ('uz_UZ@cyrillic', ('uz_UZ@cyrillic', 'UTF-8')), | ||||
|     ]) | ||||
|     def test_getlocale_with_modifier(self, localename, localetuple): | ||||
|         try: | ||||
|             locale.setlocale(locale.LC_CTYPE, localename) | ||||
|         except locale.Error as exc: | ||||
|             self.skipTest(str(exc)) | ||||
|         loctuple = locale.getlocale(locale.LC_CTYPE) | ||||
|         self.assertEqual(loctuple, localetuple) | ||||
| 
 | ||||
|         locale.setlocale(locale.LC_CTYPE, loctuple) | ||||
|         self.assertEqual(locale.getlocale(locale.LC_CTYPE), localetuple) | ||||
| 
 | ||||
| 
 | ||||
| class TestMiscellaneous(unittest.TestCase): | ||||
|     def test_defaults_UTF8(self): | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Serhiy Storchaka
						Serhiy Storchaka