| Index: test/lib/TestCommon.py
|
| diff --git a/test/lib/TestCommon.py b/test/lib/TestCommon.py
|
| index 2f526a6e3d729e82b9ca6915137b9da56244f9f2..a888a4813c05c2c979bfb2b0357e456d3e01687a 100644
|
| --- a/test/lib/TestCommon.py
|
| +++ b/test/lib/TestCommon.py
|
| @@ -88,6 +88,8 @@ The TestCommon module also provides the following variables
|
| # AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
|
| # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
|
|
|
| +from __future__ import print_function
|
| +
|
| __author__ = "Steven Knight <knight at baldmt dot com>"
|
| __revision__ = "TestCommon.py 0.37.D001 2010/01/11 16:55:50 knight"
|
| __version__ = "0.37"
|
| @@ -96,10 +98,11 @@ import copy
|
| import os
|
| import os.path
|
| import stat
|
| -import string
|
| import sys
|
| -import types
|
| -import UserList
|
| +try:
|
| + from UserList import UserList
|
| +except ImportError:
|
| + from collections import UserList
|
|
|
| from TestCmd import *
|
| from TestCmd import __all__
|
| @@ -138,7 +141,7 @@ elif sys.platform == 'cygwin':
|
| dll_suffix = '.dll'
|
| module_prefix = ''
|
| module_suffix = '.dll'
|
| -elif string.find(sys.platform, 'irix') != -1:
|
| +elif sys.platform.find('irix') != -1:
|
| exe_suffix = ''
|
| obj_suffix = '.o'
|
| shobj_suffix = '.o'
|
| @@ -149,7 +152,7 @@ elif string.find(sys.platform, 'irix') != -1:
|
| dll_suffix = '.so'
|
| module_prefix = 'lib'
|
| module_prefix = '.so'
|
| -elif string.find(sys.platform, 'darwin') != -1:
|
| +elif sys.platform.find('darwin') != -1:
|
| exe_suffix = ''
|
| obj_suffix = '.o'
|
| shobj_suffix = '.os'
|
| @@ -160,7 +163,7 @@ elif string.find(sys.platform, 'darwin') != -1:
|
| dll_suffix = '.dylib'
|
| module_prefix = ''
|
| module_suffix = '.so'
|
| -elif string.find(sys.platform, 'sunos') != -1:
|
| +elif sys.platform.find('sunos') != -1:
|
| exe_suffix = ''
|
| obj_suffix = '.o'
|
| shobj_suffix = '.os'
|
| @@ -184,8 +187,8 @@ else:
|
| module_suffix = '.so'
|
|
|
| def is_List(e):
|
| - return type(e) is types.ListType \
|
| - or isinstance(e, UserList.UserList)
|
| + return type(e) is list \
|
| + or isinstance(e, UserList)
|
|
|
| def is_writable(f):
|
| mode = os.stat(f)[stat.ST_MODE]
|
| @@ -227,7 +230,7 @@ class TestCommon(TestCmd):
|
| calling the base class initialization, and then changing directory
|
| to the workdir.
|
| """
|
| - apply(TestCmd.__init__, [self], kw)
|
| + TestCmd.__init__(self, **kw)
|
| os.chdir(self.workdir)
|
|
|
| def must_be_writable(self, *files):
|
| @@ -237,26 +240,26 @@ class TestCommon(TestCmd):
|
| them. Exits FAILED if any of the files does not exist or is
|
| not writable.
|
| """
|
| - files = map(lambda x: is_List(x) and apply(os.path.join, x) or x, files)
|
| + files = map((lambda x: os.path.join(*x) if is_List(x) else x), files)
|
| existing, missing = separate_files(files)
|
| - unwritable = filter(lambda x, iw=is_writable: not iw(x), existing)
|
| + unwritable = [x for x in existing if not is_writable(x)]
|
| if missing:
|
| - print "Missing files: `%s'" % string.join(missing, "', `")
|
| + print("Missing files: `%s'" % "', `".join(missing))
|
| if unwritable:
|
| - print "Unwritable files: `%s'" % string.join(unwritable, "', `")
|
| + print("Unwritable files: `%s'" % "', `".join(unwritable))
|
| self.fail_test(missing + unwritable)
|
|
|
| - def must_contain(self, file, required, mode = 'rb'):
|
| + def must_contain(self, file, required, mode = 'r'):
|
| """Ensures that the specified file contains the required text.
|
| """
|
| file_contents = self.read(file, mode)
|
| - contains = (string.find(file_contents, required) != -1)
|
| + contains = (file_contents.find(required) != -1)
|
| if not contains:
|
| - print "File `%s' does not contain required string." % file
|
| - print self.banner('Required string ')
|
| - print required
|
| - print self.banner('%s contents ' % file)
|
| - print file_contents
|
| + print("File `%s' does not contain required string." % file)
|
| + print(self.banner('Required string '))
|
| + print(required)
|
| + print(self.banner('%s contents ' % file))
|
| + print(file_contents)
|
| self.fail_test(not contains)
|
|
|
| def must_contain_all_lines(self, output, lines, title=None, find=None):
|
| @@ -271,7 +274,7 @@ class TestCommon(TestCmd):
|
| for lines in the output.
|
| """
|
| if find is None:
|
| - find = lambda o, l: string.find(o, l) != -1
|
| + find = lambda o, l: o.find(l) != -1
|
| missing = []
|
| for line in lines:
|
| if not find(output, line):
|
| @@ -299,7 +302,7 @@ class TestCommon(TestCmd):
|
| for lines in the output.
|
| """
|
| if find is None:
|
| - find = lambda o, l: string.find(o, l) != -1
|
| + find = lambda o, l: o.find(l) != -1
|
| for line in lines:
|
| if find(output, line):
|
| return
|
| @@ -323,13 +326,13 @@ class TestCommon(TestCmd):
|
| pathname will be constructed by concatenating them. Exits FAILED
|
| if any of the files does not exist.
|
| """
|
| - files = map(lambda x: is_List(x) and apply(os.path.join, x) or x, files)
|
| - missing = filter(lambda x: not os.path.exists(x), files)
|
| + files = map((lambda x: os.path.join(*x) if is_List(x) else x), files)
|
| + missing = [f for f in files if not os.path.exists(f)]
|
| if missing:
|
| - print "Missing files: `%s'" % string.join(missing, "', `")
|
| + print("Missing files: `%s'" % "', `".join(missing))
|
| self.fail_test(missing)
|
|
|
| - def must_match(self, file, expect, mode = 'rb'):
|
| + def must_match(self, file, expect, mode = 'r'):
|
| """Matches the contents of the specified file (first argument)
|
| against the expected contents (second argument). The expected
|
| contents are a list of lines or a string which will be split
|
| @@ -341,21 +344,21 @@ class TestCommon(TestCmd):
|
| except KeyboardInterrupt:
|
| raise
|
| except:
|
| - print "Unexpected contents of `%s'" % file
|
| + print("Unexpected contents of `%s'" % file)
|
| self.diff(expect, file_contents, 'contents ')
|
| raise
|
|
|
| - def must_not_contain(self, file, banned, mode = 'rb'):
|
| + def must_not_contain(self, file, banned, mode = 'r'):
|
| """Ensures that the specified file doesn't contain the banned text.
|
| """
|
| file_contents = self.read(file, mode)
|
| - contains = (string.find(file_contents, banned) != -1)
|
| + contains = (file_contents.find(banned) != -1)
|
| if contains:
|
| - print "File `%s' contains banned string." % file
|
| - print self.banner('Banned string ')
|
| - print banned
|
| - print self.banner('%s contents ' % file)
|
| - print file_contents
|
| + print("File `%s' contains banned string." % file)
|
| + print(self.banner('Banned string '))
|
| + print(banned)
|
| + print(self.banner('%s contents ' % file))
|
| + print(file_contents)
|
| self.fail_test(contains)
|
|
|
| def must_not_contain_any_line(self, output, lines, title=None, find=None):
|
| @@ -370,7 +373,7 @@ class TestCommon(TestCmd):
|
| for lines in the output.
|
| """
|
| if find is None:
|
| - find = lambda o, l: string.find(o, l) != -1
|
| + find = lambda o, l: o.find(l) != -1
|
| unexpected = []
|
| for line in lines:
|
| if find(output, line):
|
| @@ -395,10 +398,10 @@ class TestCommon(TestCmd):
|
| which case the pathname will be constructed by concatenating them.
|
| Exits FAILED if any of the files exists.
|
| """
|
| - files = map(lambda x: is_List(x) and apply(os.path.join, x) or x, files)
|
| - existing = filter(os.path.exists, files)
|
| + files = map((lambda x: os.path.join(*x) if is_List(x) else x), files)
|
| + existing = [f for f in files if os.path.exists(f)]
|
| if existing:
|
| - print "Unexpected files exist: `%s'" % string.join(existing, "', `")
|
| + print("Unexpected files exist: `%s'" % "', `".join(existing))
|
| self.fail_test(existing)
|
|
|
| def must_not_be_writable(self, *files):
|
| @@ -408,13 +411,13 @@ class TestCommon(TestCmd):
|
| them. Exits FAILED if any of the files does not exist or is
|
| writable.
|
| """
|
| - files = map(lambda x: is_List(x) and apply(os.path.join, x) or x, files)
|
| + files = map((lambda x: os.path.join(*x) if is_List(x) else x), files)
|
| existing, missing = separate_files(files)
|
| - writable = filter(is_writable, existing)
|
| + writable = [x for x in existing if is_writable(x)]
|
| if missing:
|
| - print "Missing files: `%s'" % string.join(missing, "', `")
|
| + print("Missing files: `%s'" % "', `".join(missing))
|
| if writable:
|
| - print "Writable files: `%s'" % string.join(writable, "', `")
|
| + print("Writable files: `%s'" % "', `".join(writable))
|
| self.fail_test(missing + writable)
|
|
|
| def _complete(self, actual_stdout, expected_stdout,
|
| @@ -427,21 +430,21 @@ class TestCommon(TestCmd):
|
| expect = ''
|
| if status != 0:
|
| expect = " (expected %s)" % str(status)
|
| - print "%s returned %s%s" % (self.program, str(_status(self)), expect)
|
| - print self.banner('STDOUT ')
|
| - print actual_stdout
|
| - print self.banner('STDERR ')
|
| - print actual_stderr
|
| + print("%s returned %s%s" % (self.program, str(_status(self)), expect))
|
| + print(self.banner('STDOUT '))
|
| + print(actual_stdout)
|
| + print(self.banner('STDERR '))
|
| + print(actual_stderr)
|
| self.fail_test()
|
| if not expected_stdout is None and not match(actual_stdout, expected_stdout):
|
| self.diff(expected_stdout, actual_stdout, 'STDOUT ')
|
| if actual_stderr:
|
| - print self.banner('STDERR ')
|
| - print actual_stderr
|
| + print(self.banner('STDERR '))
|
| + print(actual_stderr)
|
| self.fail_test()
|
| if not expected_stderr is None and not match(actual_stderr, expected_stderr):
|
| - print self.banner('STDOUT ')
|
| - print actual_stdout
|
| + print(self.banner('STDOUT '))
|
| + print(actual_stdout)
|
| self.diff(expected_stderr, actual_stderr, 'STDERR ')
|
| self.fail_test()
|
|
|
| @@ -463,20 +466,19 @@ class TestCommon(TestCmd):
|
| arguments = options + " " + arguments
|
|
|
| try:
|
| - return apply(TestCmd.start,
|
| - (self, program, interpreter, arguments, universal_newlines),
|
| - kw)
|
| + return TestCmd.start(self, program, interpreter, arguments,
|
| + universal_newlines, **kw)
|
| except KeyboardInterrupt:
|
| raise
|
| - except Exception, e:
|
| - print self.banner('STDOUT ')
|
| + except Exception as e:
|
| + print(self.banner('STDOUT '))
|
| try:
|
| - print self.stdout()
|
| + print(self.stdout())
|
| except IndexError:
|
| pass
|
| - print self.banner('STDERR ')
|
| + print(self.banner('STDERR '))
|
| try:
|
| - print self.stderr()
|
| + print(self.stderr())
|
| except IndexError:
|
| pass
|
| cmd_args = self.command_args(program, interpreter, arguments)
|
| @@ -501,7 +503,7 @@ class TestCommon(TestCmd):
|
| command. A value of None means don't
|
| test exit status.
|
| """
|
| - apply(TestCmd.finish, (self, popen,), kw)
|
| + TestCmd.finish(self, popen, **kw)
|
| match = kw.get('match', self.match)
|
| self._complete(self.stdout(), stdout,
|
| self.stderr(), stderr, status, match)
|
| @@ -539,7 +541,7 @@ class TestCommon(TestCmd):
|
| arguments = options + " " + arguments
|
| kw['arguments'] = arguments
|
| match = kw.pop('match', self.match)
|
| - apply(TestCmd.run, [self], kw)
|
| + TestCmd.run(self, **kw)
|
| self._complete(self.stdout(), stdout,
|
| self.stderr(), stderr, status, match)
|
|
|
|
|