mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 07:31:38 +00:00 
			
		
		
		
	Moved the test codec definition to a new module and updated the test and
codec to test all charmap codec features. As side-effect of moving the test codec into a new module, the encodings package codec import mechanism is checked as well.
This commit is contained in:
		
							parent
							
								
									0d9f9dcf67
								
							
						
					
					
						commit
						ef34274d3b
					
				
					 3 changed files with 97 additions and 54 deletions
				
			
		| 
						 | 
					@ -1 +1,16 @@
 | 
				
			||||||
test_charmapcodec
 | 
					test_charmapcodec
 | 
				
			||||||
 | 
					u'abc' == u'abc': OK
 | 
				
			||||||
 | 
					u'abcdef' == u'abcdef': OK
 | 
				
			||||||
 | 
					u'defabc' == u'defabc': OK
 | 
				
			||||||
 | 
					u'dabcf' == u'dabcf': OK
 | 
				
			||||||
 | 
					u'dabcfabc' == u'dabcfabc': OK
 | 
				
			||||||
 | 
					'abc' == 'abc': OK
 | 
				
			||||||
 | 
					'abcdef' == 'abcdef': OK
 | 
				
			||||||
 | 
					'defabc' == 'defabc': OK
 | 
				
			||||||
 | 
					'dabcf' == 'dabcf': OK
 | 
				
			||||||
 | 
					'dabcfabc' == 'dabcfabc': OK
 | 
				
			||||||
 | 
					u'def' == u'def': OK
 | 
				
			||||||
 | 
					u'def' == u'def': OK
 | 
				
			||||||
 | 
					u'df' == u'df': OK
 | 
				
			||||||
 | 
					u'df' == u'df': OK
 | 
				
			||||||
 | 
					\001 maps to undefined: OK
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,65 +1,44 @@
 | 
				
			||||||
""" Python Character Mapping Codec test
 | 
					""" Python character mapping codec test
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This uses the test codec in testcodec.py and thus also tests the
 | 
				
			||||||
 | 
					encodings package lookup scheme.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Written by Marc-Andre Lemburg (mal@lemburg.com).
 | 
					Written by Marc-Andre Lemburg (mal@lemburg.com).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(c) Copyright 2000 Guido van Rossum.
 | 
					(c) Copyright 2000 Guido van Rossum.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"""#"
 | 
					"""#"
 | 
				
			||||||
import codecs
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### Codec APIs
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class Codec(codecs.Codec):
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def encode(self,input,errors='strict'):
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        return codecs.charmap_encode(input,errors,encoding_map)
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
    def decode(self,input,errors='strict'):
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        return codecs.charmap_decode(input,errors,decoding_map)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class StreamWriter(Codec,codecs.StreamWriter):
 | 
					 | 
				
			||||||
    pass
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
class StreamReader(Codec,codecs.StreamReader):
 | 
					 | 
				
			||||||
    pass
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### encodings module API
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def getregentry():
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return (Codec().encode,Codec().decode,StreamReader,StreamWriter)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### Decoding Map
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
decoding_map = codecs.make_identity_dict(range(256))
 | 
					 | 
				
			||||||
decoding_map.update({
 | 
					 | 
				
			||||||
        0x0078: u"abc",
 | 
					 | 
				
			||||||
        "abc": 0x0078,
 | 
					 | 
				
			||||||
})
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### Encoding Map
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
encoding_map = {}
 | 
					 | 
				
			||||||
for k,v in decoding_map.items():
 | 
					 | 
				
			||||||
    encoding_map[v] = k
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### Tests
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
def check(a, b):
 | 
					def check(a, b):
 | 
				
			||||||
    if a != b:
 | 
					    if a != b:
 | 
				
			||||||
        print '*** check failed: %s != %s' % (repr(a), repr(b))
 | 
					        print '*** check failed: %s != %s' % (repr(a), repr(b))
 | 
				
			||||||
    
 | 
					    else:
 | 
				
			||||||
check(unicode('abc', 'mycp'), u'abc')
 | 
					        print '%s == %s: OK' % (repr(a), repr(b))
 | 
				
			||||||
check(unicode('xdef', 'mycp'), u'abcdef')
 | 
					 | 
				
			||||||
check(unicode('defx', 'mycp'), u'defabc')
 | 
					 | 
				
			||||||
check(unicode('dxf', 'mycp'), u'dabcf')
 | 
					 | 
				
			||||||
check(unicode('dxfx', 'mycp'), u'dabcfabc')
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
check(u'abc'.encode('mycp'), 'abc')
 | 
					# test codec's full path name (see test/testcodec.py)
 | 
				
			||||||
check(u'xdef'.encode('mycp'), 'abcdef')
 | 
					codecname = 'testcodec'
 | 
				
			||||||
check(u'defx'.encode('mycp'), 'defabc')
 | 
					    
 | 
				
			||||||
check(u'dxf'.encode('mycp'), 'dabcf')
 | 
					check(unicode('abc', codecname), u'abc')
 | 
				
			||||||
check(u'dxfx'.encode('mycp'), 'dabcfabc')
 | 
					check(unicode('xdef', codecname), u'abcdef')
 | 
				
			||||||
 | 
					check(unicode('defx', codecname), u'defabc')
 | 
				
			||||||
 | 
					check(unicode('dxf', codecname), u'dabcf')
 | 
				
			||||||
 | 
					check(unicode('dxfx', codecname), u'dabcfabc')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					check(u'abc'.encode(codecname), 'abc')
 | 
				
			||||||
 | 
					check(u'xdef'.encode(codecname), 'abcdef')
 | 
				
			||||||
 | 
					check(u'defx'.encode(codecname), 'defabc')
 | 
				
			||||||
 | 
					check(u'dxf'.encode(codecname), 'dabcf')
 | 
				
			||||||
 | 
					check(u'dxfx'.encode(codecname), 'dabcfabc')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					check(unicode('ydef', codecname), u'def')
 | 
				
			||||||
 | 
					check(unicode('defy', codecname), u'def')
 | 
				
			||||||
 | 
					check(unicode('dyf', codecname), u'df')
 | 
				
			||||||
 | 
					check(unicode('dyfy', codecname), u'df')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					try:
 | 
				
			||||||
 | 
					    unicode('abc\001', codecname)
 | 
				
			||||||
 | 
					except UnicodeError:
 | 
				
			||||||
 | 
					    print '\\001 maps to undefined: OK'
 | 
				
			||||||
 | 
					else:
 | 
				
			||||||
 | 
					    print '*** check failed: \\001 does not map to undefined'
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										49
									
								
								Lib/test/testcodec.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								Lib/test/testcodec.py
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,49 @@
 | 
				
			||||||
 | 
					""" Test Codecs (used by test_charmapcodec)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Written by Marc-Andre Lemburg (mal@lemburg.com).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(c) Copyright 2000 Guido van Rossum.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"""#"
 | 
				
			||||||
 | 
					import codecs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Codec APIs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Codec(codecs.Codec):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def encode(self,input,errors='strict'):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return codecs.charmap_encode(input,errors,encoding_map)
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					    def decode(self,input,errors='strict'):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return codecs.charmap_decode(input,errors,decoding_map)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class StreamWriter(Codec,codecs.StreamWriter):
 | 
				
			||||||
 | 
					    pass
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					class StreamReader(Codec,codecs.StreamReader):
 | 
				
			||||||
 | 
					    pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### encodings module API
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def getregentry():
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return (Codec().encode,Codec().decode,StreamReader,StreamWriter)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Decoding Map
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					decoding_map = codecs.make_identity_dict(range(256))
 | 
				
			||||||
 | 
					decoding_map.update({
 | 
				
			||||||
 | 
					        0x78: u"abc", # 1-n decoding mapping
 | 
				
			||||||
 | 
					        "abc": 0x0078,# 1-n encoding mapping
 | 
				
			||||||
 | 
					        0x01: None,   # decoding mapping to <undefined>
 | 
				
			||||||
 | 
					        0x79: u"",    # decoding mapping to <remove character>
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Encoding Map
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					encoding_map = {}
 | 
				
			||||||
 | 
					for k,v in decoding_map.items():
 | 
				
			||||||
 | 
					    encoding_map[v] = k
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue