From 70a3be27a509a1b5ea7372bee93d83c5019427ff Mon Sep 17 00:00:00 2001 From: Justus Winter Date: Tue, 13 Sep 2016 10:44:14 +0200 Subject: python: Handle slight differences between Python 2 and 3. * lang/python/helpers.c (pyDataWriteCb): Handle Python integers being returned on Python 2. (pyDataSeekCb): Likewise. * lang/python/pyme/core.py (Data.__init__): Fix testing for string argument. (Data.new_from_filepart): Likewise. * lang/python/pyme/util.py (is_a_string): New function. * lang/python/tests/t-encrypt-large.py (read_cb): Force evaluation of generator. * lang/python/tests/t-idiomatic.py: Partly skip test on Python 2. * lang/python/tests/t-verify.py (check_result): Here, the difference between 2 and 3 really matters. We cannot change the char * conversion in Python 2 without breaking all existing applications, and using bytestrings in Python 3 would be very inconvenient. Signed-off-by: Justus Winter --- lang/python/tests/t-encrypt-large.py | 2 +- lang/python/tests/t-idiomatic.py | 31 ++++++++++++++++++------------- lang/python/tests/t-verify.py | 8 ++++++-- 3 files changed, 25 insertions(+), 16 deletions(-) (limited to 'lang/python/tests') diff --git a/lang/python/tests/t-encrypt-large.py b/lang/python/tests/t-encrypt-large.py index 69aed483..29f9de21 100755 --- a/lang/python/tests/t-encrypt-large.py +++ b/lang/python/tests/t-encrypt-large.py @@ -37,7 +37,7 @@ def read_cb(amount): ntoread -= chunk assert ntoread >= 0 assert chunk >= 0 - return bytes(random.randrange(256) for i in range(chunk)) + return bytes(bytearray(random.randrange(256) for i in range(chunk))) nwritten = 0 def write_cb(data): diff --git a/lang/python/tests/t-idiomatic.py b/lang/python/tests/t-idiomatic.py index 1989c922..726bbb93 100755 --- a/lang/python/tests/t-idiomatic.py +++ b/lang/python/tests/t-idiomatic.py @@ -17,6 +17,7 @@ # You should have received a copy of the GNU Lesser General Public # License along with this program; if not, see . +import sys import io import os import tempfile @@ -60,17 +61,21 @@ with tempfile.TemporaryFile() as source, \ sign_and_verify(source, signed, sink) -# XXX: Python's io.BytesIo.truncate does not work as advertised. -# http://bugs.python.org/issue27261 -bio = io.BytesIO() -bio.truncate(1) -if len(bio.getvalue()) != 1: - # This version of Python is affected, preallocate buffer. - preallocate = 128*b'\x00' -else: - preallocate = b'' +if sys.version_info[0] == 3: + # Python2's io.BytesIO does not implement the buffer interface, + # hence we cannot use it as sink. -# Demonstrate automatic wrapping of objects implementing the buffer -# interface, and the use of data objects with the 'with' statement. -with io.BytesIO(preallocate) as signed, pyme.Data() as sink: - sign_and_verify(b"Hallo Leute\n", signed, sink) + # XXX: Python's io.BytesIo.truncate does not work as advertised. + # http://bugs.python.org/issue27261 + bio = io.BytesIO() + bio.truncate(1) + if len(bio.getvalue()) != 1: + # This version of Python is affected, preallocate buffer. + preallocate = 128*b'\x00' + else: + preallocate = b'' + + # Demonstrate automatic wrapping of objects implementing the buffer + # interface, and the use of data objects with the 'with' statement. + with io.BytesIO(preallocate) as signed, pyme.Data() as sink: + sign_and_verify(b"Hallo Leute\n", signed, sink) diff --git a/lang/python/tests/t-verify.py b/lang/python/tests/t-verify.py index b88bd07c..ed5a91a2 100755 --- a/lang/python/tests/t-verify.py +++ b/lang/python/tests/t-verify.py @@ -17,6 +17,7 @@ # You should have received a copy of the GNU Lesser General Public # License along with this program; if not, see . +import sys import os import pyme from pyme import core, constants, errors @@ -67,8 +68,11 @@ def check_result(result, summary, validity, fpr, status, notation): if notation: expected_notations = { - "bar": b"\xc3\xb6\xc3\xa4\xc3\xbc\xc3\x9f".decode() + - " das waren Umlaute und jetzt ein prozent%-Zeichen", + "bar": (b"\xc3\xb6\xc3\xa4\xc3\xbc\xc3\x9f" + + b" das waren Umlaute und jetzt ein prozent%-Zeichen" + if sys.version_info[0] < 3 else + b"\xc3\xb6\xc3\xa4\xc3\xbc\xc3\x9f".decode() + + " das waren Umlaute und jetzt ein prozent%-Zeichen"), "foobar.1": "this is a notation data with 2 lines", None: "http://www.gu.org/policy/", } -- cgit v1.2.3