def test_AS(self, space, api): word = space.wrap(u"spam") array = rffi.cast(rffi.CWCHARP, api.PyUnicode_AS_DATA(word)) array2 = api.PyUnicode_AS_UNICODE(word) array3 = api.PyUnicode_AsUnicode(word) for (i, char) in enumerate(space.unwrap(word)): assert array[i] == char assert array2[i] == char assert array3[i] == char self.raises(space, api, TypeError, api.PyUnicode_AsUnicode, space.wrap("spam")) utf_8 = rffi.str2charp("utf-8") encoded = api.PyUnicode_AsEncodedString(space.wrap(u"späm"), utf_8, None) assert space.unwrap(encoded) == "sp\xc3\xa4m" encoded_obj = api.PyUnicode_AsEncodedObject(space.wrap(u"späm"), utf_8, None) assert space.eq_w(encoded, encoded_obj) self.raises(space, api, TypeError, api.PyUnicode_AsEncodedString, space.newtuple([1, 2, 3]), None, None) self.raises(space, api, TypeError, api.PyUnicode_AsEncodedString, space.wrap(""), None, None) ascii = rffi.str2charp("ascii") replace = rffi.str2charp("replace") encoded = api.PyUnicode_AsEncodedString(space.wrap(u"späm"), ascii, replace) assert space.unwrap(encoded) == "sp?m" rffi.free_charp(utf_8) rffi.free_charp(replace) rffi.free_charp(ascii) buf = rffi.unicode2wcharp(u"12345") api.PyUnicode_AsWideChar(space.wrap(u"longword"), buf, 5) assert rffi.wcharp2unicode(buf) == "longw" api.PyUnicode_AsWideChar(space.wrap(u"a"), buf, 5) assert rffi.wcharp2unicode(buf) == "a" rffi.free_wcharp(buf)
def wcharp2unicode(space, address, maxlength=-1): if address == 0: return space.w_None wcharp_addr = rffi.cast(rffi.CWCHARP, address) if maxlength == -1: s = rffi.wcharp2unicode(wcharp_addr) else: s = rffi.wcharp2unicoden(wcharp_addr, maxlength) return space.wrap(s)
def test_AS(self, space, api): word = space.wrap(u'spam') array = rffi.cast(rffi.CWCHARP, api.PyUnicode_AS_DATA(word)) array2 = api.PyUnicode_AS_UNICODE(word) array3 = api.PyUnicode_AsUnicode(word) for (i, char) in enumerate(space.unwrap(word)): assert array[i] == char assert array2[i] == char assert array3[i] == char self.raises(space, api, TypeError, api.PyUnicode_AsUnicode, space.wrap('spam')) utf_8 = rffi.str2charp('utf-8') encoded = api.PyUnicode_AsEncodedString(space.wrap(u'späm'), utf_8, None) assert space.unwrap(encoded) == 'sp\xc3\xa4m' encoded_obj = api.PyUnicode_AsEncodedObject(space.wrap(u'späm'), utf_8, None) assert space.eq_w(encoded, encoded_obj) self.raises(space, api, TypeError, api.PyUnicode_AsEncodedString, space.newtuple([1, 2, 3]), None, None) self.raises(space, api, TypeError, api.PyUnicode_AsEncodedString, space.wrap(''), None, None) ascii = rffi.str2charp('ascii') replace = rffi.str2charp('replace') encoded = api.PyUnicode_AsEncodedString(space.wrap(u'späm'), ascii, replace) assert space.unwrap(encoded) == 'sp?m' rffi.free_charp(utf_8) rffi.free_charp(replace) rffi.free_charp(ascii) buf = rffi.unicode2wcharp(u"12345") api.PyUnicode_AsWideChar(space.wrap(u'longword'), buf, 5) assert rffi.wcharp2unicode(buf) == 'longw' api.PyUnicode_AsWideChar(space.wrap(u'a'), buf, 5) assert rffi.wcharp2unicode(buf) == 'a' rffi.free_wcharp(buf)