mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 07:31:38 +00:00 
			
		
		
		
	Workaround issue #8611 in test_undecodable_code() of test_sys
Write test.support.workaroundIssue8611() function so it will be easier to remove this workaround from all tests.
This commit is contained in:
		
							parent
							
								
									1b6372a1d1
								
							
						
					
					
						commit
						c44abb127b
					
				
					 3 changed files with 36 additions and 31 deletions
				
			
		| 
						 | 
				
			
			@ -496,11 +496,16 @@ def __hash__(self):
 | 
			
		|||
        self.assertRaises(TypeError, sys.intern, S("abc"))
 | 
			
		||||
 | 
			
		||||
    def test_undecodable_code(self):
 | 
			
		||||
        non_decodable = b"\xff"
 | 
			
		||||
        # Raise SkipTest() if sys.executable is not encodable to ascii
 | 
			
		||||
        test.support.workaroundIssue8611()
 | 
			
		||||
 | 
			
		||||
        undecodable = b"\xff"
 | 
			
		||||
        env = os.environ.copy()
 | 
			
		||||
        env['LANG'] = 'C'
 | 
			
		||||
        code = b'import locale; '
 | 
			
		||||
        code += b'print(ascii("' + non_decodable + b'"), locale.getpreferredencoding())'
 | 
			
		||||
        code = (
 | 
			
		||||
            b'import locale; '
 | 
			
		||||
            b'print(ascii("' + undecodable + b'"), '
 | 
			
		||||
                b'locale.getpreferredencoding())')
 | 
			
		||||
        p = subprocess.Popen(
 | 
			
		||||
            [sys.executable, "-c", code],
 | 
			
		||||
            stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
 | 
			
		||||
| 
						 | 
				
			
			@ -587,28 +592,23 @@ def get_fsencoding(env):
 | 
			
		|||
                env=env)
 | 
			
		||||
            return output.rstrip().decode('ascii')
 | 
			
		||||
 | 
			
		||||
        # Raise SkipTest() if sys.executable is not encodable to ascii
 | 
			
		||||
        test.support.workaroundIssue8611()
 | 
			
		||||
 | 
			
		||||
        # Even in C locale
 | 
			
		||||
        env = os.environ.copy()
 | 
			
		||||
        env['LANG'] = 'C'
 | 
			
		||||
        try:
 | 
			
		||||
            sys.executable.encode('ascii')
 | 
			
		||||
        except UnicodeEncodeError:
 | 
			
		||||
            # Python doesn't start with ASCII locale if its path is not ASCII,
 | 
			
		||||
            # see issue #8611
 | 
			
		||||
            del env['PYTHONFSENCODING']
 | 
			
		||||
        except KeyError:
 | 
			
		||||
            pass
 | 
			
		||||
        else:
 | 
			
		||||
            # Even in C locale
 | 
			
		||||
        self.check_fsencoding(get_fsencoding(env), 'ascii')
 | 
			
		||||
 | 
			
		||||
        # Filesystem encoding is hardcoded on Windows and Mac OS X
 | 
			
		||||
        for encoding in ('ascii', 'cp850', 'iso8859-1', 'utf-8'):
 | 
			
		||||
            env = os.environ.copy()
 | 
			
		||||
            env['LANG'] = 'C'
 | 
			
		||||
            try:
 | 
			
		||||
                del env['PYTHONFSENCODING']
 | 
			
		||||
            except KeyError:
 | 
			
		||||
                pass
 | 
			
		||||
            self.check_fsencoding(get_fsencoding(env), 'ascii')
 | 
			
		||||
 | 
			
		||||
            # Filesystem encoding is hardcoded on Windows and Mac OS X
 | 
			
		||||
            for encoding in ('ascii', 'cp850', 'iso8859-1', 'utf-8'):
 | 
			
		||||
                env = os.environ.copy()
 | 
			
		||||
                env['PYTHONFSENCODING'] = encoding
 | 
			
		||||
                self.check_fsencoding(get_fsencoding(env), encoding)
 | 
			
		||||
 | 
			
		||||
            env['PYTHONFSENCODING'] = encoding
 | 
			
		||||
            self.check_fsencoding(get_fsencoding(env), encoding)
 | 
			
		||||
 | 
			
		||||
    def test_setfilesystemencoding(self):
 | 
			
		||||
        old = sys.getfilesystemencoding()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue