Changeset: 5b0125d10b81 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=5b0125d10b81
Modified Files:
sql/test/mapi/Tests/utf8test.SQL.py
sql/test/mapi/Tests/utf8test.stable.out
testing/process.py
Branch: default
Log Message:
Ported test to Python3, keeping compatibility with Python2.
The problem is, we can't have non-UTF-8 data in test output since
Mfilter will barf.
diffs (194 lines):
diff --git a/sql/test/mapi/Tests/utf8test.SQL.py
b/sql/test/mapi/Tests/utf8test.SQL.py
--- a/sql/test/mapi/Tests/utf8test.SQL.py
+++ b/sql/test/mapi/Tests/utf8test.SQL.py
@@ -4,20 +4,67 @@ try:
except ImportError:
import process
-def client(args):
+def client(args, universal_newlines = True):
clt = process.client('sql', args = args,
- stdout = process.PIPE, stderr = process.PIPE)
- out, err = clt.communicate()
- sys.stdout.write(out)
- sys.stderr.write(err)
+ stdout = process.PIPE, stderr = process.PIPE,
+ universal_newlines = universal_newlines)
+ return clt.communicate()
-client(['-s', 'create table utf8test (s varchar(50))'])
-client(['-s', "insert into utf8test values ('value without special
characters')"])
-client(['-s', "insert into utf8test values ('funny characters:
\303\240\303\241\303\242\303\243\303\244\303\245')"])
-client(['-fraw', '-s', 'select * from utf8test'])
-client(['-fsql', '-s', 'select * from utf8test'])
-client(['-fraw', '-Eiso-8859-1', '-s', 'select * from utf8test'])
-client(['-fsql', '-Eiso-8859-1', '-s', 'select * from utf8test'])
-client(['-fraw', '-Eus-ascii', '-s', 'select * from utf8test'])
-client(['-fsql', '-Eus-ascii', '-s', 'select * from utf8test'])
-client(['-s', 'drop table utf8test'])
+funny = u'\u00e0\u00e1\u00e2\u00e3\u00e4\u00e5'
+if sys.version_info[0] == 2:
+ funny = funny.encode('utf-8')
+
+out, err = client(['-s', 'create table utf8test (s varchar(50))'])
+sys.stdout.write(out)
+sys.stderr.write(err)
+out, err = client(['-s', "insert into utf8test values ('value without special
characters')"])
+sys.stdout.write(out)
+sys.stderr.write(err)
+out, err = client(['-s', "insert into utf8test values ('funny characters:
%s')" % funny])
+sys.stdout.write(out)
+sys.stderr.write(err)
+out, err = client(['-fraw', '-s', 'select * from utf8test'])
+sys.stdout.write(out)
+sys.stderr.write(err)
+out, err = client(['-fsql', '-s', 'select * from utf8test'])
+sys.stdout.write(out)
+sys.stderr.write(err)
+out, err = client(['-fraw', '-Eiso-8859-1', '-s', 'select * from utf8test'],
+ universal_newlines = False)
+out = out.decode('iso-8859-1')
+err = err.decode('iso-8859-1')
+if sys.version_info[0] == 2:
+ out = out.encode('utf-8')
+ err = err.encode('utf-8')
+sys.stdout.write(out)
+sys.stderr.write(err)
+out, err = client(['-fsql', '-Eiso-8859-1', '-s', 'select * from utf8test'],
+ universal_newlines = False)
+out = out.decode('iso-8859-1')
+err = err.decode('iso-8859-1')
+if sys.version_info[0] == 2:
+ out = out.encode('utf-8')
+ err = err.encode('utf-8')
+sys.stdout.write(out)
+sys.stderr.write(err)
+out, err = client(['-fraw', '-Eus-ascii', '-s', 'select * from utf8test'],
+ universal_newlines = False)
+out = out.decode('us-ascii')
+err = err.decode('us-ascii')
+if sys.version_info[0] == 2:
+ out = out.encode('utf-8')
+ err = err.encode('utf-8')
+sys.stdout.write(out)
+sys.stderr.write(err)
+out, err = client(['-fsql', '-Eus-ascii', '-s', 'select * from utf8test'],
+ universal_newlines = False)
+out = out.decode('us-ascii')
+err = err.decode('us-ascii')
+if sys.version_info[0] == 2:
+ out = out.encode('utf-8')
+ err = err.encode('utf-8')
+sys.stdout.write(out)
+sys.stderr.write(err)
+out, err = client(['-s', 'drop table utf8test'])
+sys.stdout.write(out)
+sys.stderr.write(err)
diff --git a/sql/test/mapi/Tests/utf8test.stable.out
b/sql/test/mapi/Tests/utf8test.stable.out
--- a/sql/test/mapi/Tests/utf8test.stable.out
+++ b/sql/test/mapi/Tests/utf8test.stable.out
@@ -68,13 +68,13 @@ 2 tuples
% varchar # type
% 32 # length
[ "value without special characters" ]
-[ "funny characters: àáâãäå" ]
+[ "funny characters: à áâãäå" ]
select * from utf8test
+----------------------------------+
| s |
+==================================+
| value without special characters |
-| funny characters: àáâãäå |
+| funny characters: à áâãäå |
+----------------------------------+
2 tuples
% sys.utf8test # table_name
diff --git a/testing/process.py b/testing/process.py
--- a/testing/process.py
+++ b/testing/process.py
@@ -71,6 +71,7 @@ class _BufferedPipe:
self._pipe = fd
self._queue = queue.Queue()
self._eof = False
+ self._empty = ''
if waitfor is not None:
self._wfq = queue.Queue()
else:
@@ -88,12 +89,17 @@ class _BufferedPipe:
s = 0
w = 0
skipqueue = []
+ first = True
while True:
if skipqueue:
c = skipqueue[0]
del skipqueue[0]
else:
c = fh.read(1)
+ if first:
+ if type(c) is type(b''):
+ self._empty = b''
+ first = False
if skip and c:
if c == skip[s]:
s += 1
@@ -158,7 +164,7 @@ class _BufferedPipe:
def read(self, size = -1):
if self._eof:
- return ''
+ return self._empty
if size < 0:
self.close()
ret = []
@@ -178,7 +184,7 @@ class _BufferedPipe:
if not c:
self._eof = True
break # EOF
- return ''.join(ret)
+ return self._empty.join(ret)
def readline(self, size = -1):
ret = []
@@ -187,9 +193,9 @@ class _BufferedPipe:
ret.append(c)
if size > 0:
size -= 1
- if c == '\n' or c == '':
+ if c == '\n' or c == self._empty:
break
- return ''.join(ret)
+ return self._empty.join(ret)
class Popen(subprocess.Popen):
def __init__(self, *args, **kwargs):
@@ -230,7 +236,7 @@ def client(lang, args = [], stdin = None
port = os.getenv('MAPIPORT'), dbname = os.getenv('TSTDB'), host =
None,
user = 'monetdb', passwd = 'monetdb', log = False,
interactive = None, echo = None,
- input = None, communicate = False):
+ input = None, communicate = False, universal_newlines = True):
'''Start a client process.'''
if lang == 'mal':
cmd = _mal_client[:]
@@ -269,9 +275,9 @@ def client(lang, args = [], stdin = None
fd, fnam = tempfile.mkstemp(text = True)
_dotmonetdbfile.append(fnam)
if user is not None:
- os.write(fd, 'user=%s\n' % user)
+ os.write(fd, ('user=%s\n' % user).encode('utf-8'))
if passwd is not None:
- os.write(fd, 'password=%s\n' % passwd)
+ os.write(fd, ('password=%s\n' % passwd).encode('utf-8'))
os.close(fd)
env['DOTMONETDBFILE'] = fnam
if host is not None:
@@ -313,7 +319,7 @@ def client(lang, args = [], stdin = None
stderr = stderr,
shell = False,
env = env,
- universal_newlines = True)
+ universal_newlines = universal_newlines)
p.dotmonetdbfile = fnam
if stdout == PIPE:
p.stdout = _BufferedPipe(p.stdout)
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list