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

Reply via email to