Commit ef34274d authored by Marc-André Lemburg's avatar Marc-André Lemburg

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.
parent 0d9f9dcf
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
""" 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:
print '%s == %s: OK' % (repr(a), repr(b))
# test codec's full path name (see test/testcodec.py)
codecname = 'testcodec'
check(unicode('abc', codecname), u'abc')
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'
check(unicode('abc', 'mycp'), u'abc')
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')
check(u'xdef'.encode('mycp'), 'abcdef')
check(u'defx'.encode('mycp'), 'defabc')
check(u'dxf'.encode('mycp'), 'dabcf')
check(u'dxfx'.encode('mycp'), 'dabcfabc')
""" 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
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment