Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(727)

Unified Diff: test/lib/TestCmd.py

Issue 1454433002: Python 3 compatibility Base URL: https://chromium.googlesource.com/external/gyp.git@master
Patch Set: Rebase with master (4ec6c4e3a94bd04a6da2858163d40b2429b8aad1) Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: test/lib/TestCmd.py
diff --git a/test/lib/TestCmd.py b/test/lib/TestCmd.py
index 71403614b9bf091e0f052d152980bb308bb77189..3a4ed5e670f57fbcac0c7e52caef78434b54eb0f 100644
--- a/test/lib/TestCmd.py
+++ b/test/lib/TestCmd.py
@@ -214,6 +214,8 @@ version.
# 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__ = "TestCmd.py 0.37.D001 2010/01/11 16:55:50 knight"
__version__ = "0.37"
@@ -224,13 +226,14 @@ import os.path
import re
import shutil
import stat
-import string
import sys
import tempfile
import time
import traceback
-import types
-import UserList
+try:
+ from UserList import UserList
+except ImportError:
+ from collections import UserList
__all__ = [
'diff_re',
@@ -250,23 +253,26 @@ except ImportError:
__all__.append('simple_diff')
def is_List(e):
- return type(e) is types.ListType \
- or isinstance(e, UserList.UserList)
+ return type(e) is list \
+ or isinstance(e, UserList)
try:
from UserString import UserString
except ImportError:
- class UserString:
- pass
+ try:
+ from collections import UserString
+ except ImportError:
+ class UserString:
+ pass
-if hasattr(types, 'UnicodeType'):
- def is_String(e):
- return type(e) is types.StringType \
- or type(e) is types.UnicodeType \
- or isinstance(e, UserString)
-else:
- def is_String(e):
- return type(e) is types.StringType or isinstance(e, UserString)
+try:
+ basestring = basestring
+except NameError:
+ basestring = str
+
+def is_String(e):
+ return isinstance(e, basestring) \
+ or isinstance(e, UserString)
tempfile.template = 'testcmd.'
if os.name in ('posix', 'nt'):
@@ -282,11 +288,10 @@ _chain_to_exitfunc = None
def _clean():
global _Cleanup
- cleanlist = filter(None, _Cleanup)
+ for test in reversed(_Cleanup):
+ if test:
+ test.cleanup()
del _Cleanup[:]
- cleanlist.reverse()
- for test in cleanlist:
- test.cleanup()
if _chain_to_exitfunc:
_chain_to_exitfunc()
@@ -307,17 +312,10 @@ try:
except NameError:
def zip(*lists):
result = []
- for i in xrange(min(map(len, lists))):
+ for i in range(min(map(len, lists))):
result.append(tuple(map(lambda l, i=i: l[i], lists)))
return result
-class Collector:
- def __init__(self, top):
- self.entries = [top]
- def __call__(self, arg, dirname, names):
- pathjoin = lambda n, d=dirname: os.path.join(d, n)
- self.entries.extend(map(pathjoin, names))
-
def _caller(tblist, skip):
string = ""
arr = []
@@ -410,9 +408,9 @@ def match_exact(lines = None, matches = None):
"""
"""
if not is_List(lines):
- lines = string.split(lines, "\n")
+ lines = lines.split("\n")
if not is_List(matches):
- matches = string.split(matches, "\n")
+ matches = matches.split("\n")
if len(lines) != len(matches):
return
for i in range(len(lines)):
@@ -424,18 +422,18 @@ def match_re(lines = None, res = None):
"""
"""
if not is_List(lines):
- lines = string.split(lines, "\n")
+ lines = lines.split("\n")
if not is_List(res):
- res = string.split(res, "\n")
+ res = res.split("\n")
if len(lines) != len(res):
return
for i in range(len(lines)):
s = "^" + res[i] + "$"
try:
expr = re.compile(s)
- except re.error, e:
+ except re.error as e:
msg = "Regular expression error in %s: %s"
- raise re.error, msg % (repr(s), e[0])
+ raise re.error(msg % (repr(s), e[0]))
if not expr.search(lines[i]):
return
return 1
@@ -444,15 +442,15 @@ def match_re_dotall(lines = None, res = None):
"""
"""
if not type(lines) is type(""):
- lines = string.join(lines, "\n")
+ lines = "\n".join(lines)
if not type(res) is type(""):
- res = string.join(res, "\n")
+ res = "\n".join(res)
s = "^" + res + "$"
try:
expr = re.compile(s, re.DOTALL)
- except re.error, e:
+ except re.error as e:
msg = "Regular expression error in %s: %s"
- raise re.error, msg % (repr(s), e[0])
+ raise re.error(msg % (repr(s), e[0]))
if expr.match(lines):
return 1
@@ -506,9 +504,9 @@ def diff_re(a, b, fromfile='', tofile='',
s = "^" + aline + "$"
try:
expr = re.compile(s)
- except re.error, e:
+ except re.error as e:
msg = "Regular expression error in %s: %s"
- raise re.error, msg % (repr(s), e[0])
+ raise re.error(msg % (repr(s), e[0]))
if not expr.search(bline):
result.append("%sc%s" % (i+1, i+1))
result.append('< ' + repr(a[i]))
@@ -533,13 +531,13 @@ if sys.platform == 'win32':
if path is None:
path = os.environ['PATH']
if is_String(path):
- path = string.split(path, os.pathsep)
+ path = path.split(os.pathsep)
if pathext is None:
pathext = os.environ['PATHEXT']
if is_String(pathext):
- pathext = string.split(pathext, os.pathsep)
+ pathext = pathext.split(os.pathsep)
for ext in pathext:
- if string.lower(ext) == string.lower(file[-len(ext):]):
+ if ext.lower() == file[-len(ext):].lower():
pathext = ['']
break
for dir in path:
@@ -556,7 +554,7 @@ else:
if path is None:
path = os.environ['PATH']
if is_String(path):
- path = string.split(path, os.pathsep)
+ path = path.split(os.pathsep)
for dir in path:
f = os.path.join(dir, file)
if os.path.isfile(f):
@@ -564,7 +562,7 @@ else:
st = os.stat(f)
except OSError:
continue
- if stat.S_IMODE(st[stat.ST_MODE]) & 0111:
+ if stat.S_IMODE(st[stat.ST_MODE]) & 0o111:
return f
return None
@@ -584,13 +582,12 @@ except ImportError:
subprocess.PIPE = 'PIPE'
subprocess.STDOUT = 'STDOUT'
- subprocess.mswindows = (sys.platform == 'win32')
try:
import popen2
popen2.Popen3
except AttributeError:
- class Popen3:
+ class Popen3(object):
universal_newlines = 1
def __init__(self, command, **kw):
if sys.platform == 'win32' and command[0] == '"':
@@ -652,14 +649,14 @@ except ImportError:
universal_newlines = 1
def __init__(self, command, **kw):
if kw.get('stderr') == 'STDOUT':
- apply(popen2.Popen4.__init__, (self, command, 1))
+ popen2.Popen4.__init__(self, command, 1)
else:
- apply(popen2.Popen3.__init__, (self, command, 1))
+ popen2.Popen3.__init__(self, command, 1)
self.stdin = self.tochild
self.stdout = self.fromchild
self.stderr = self.childerr
def wait(self, *args, **kw):
- resultcode = apply(popen2.Popen3.wait, (self,)+args, kw)
+ resultcode = popen2.Popen3.wait(self, *args, **kw)
if os.WIFEXITED(resultcode):
return os.WEXITSTATUS(resultcode)
elif os.WIFSIGNALED(resultcode):
@@ -677,7 +674,7 @@ except ImportError:
PIPE = subprocess.PIPE
-if subprocess.mswindows:
+if sys.platform == 'win32':
from win32file import ReadFile, WriteFile
from win32pipe import PeekNamedPipe
import msvcrt
@@ -712,7 +709,7 @@ class Popen(subprocess.Popen):
getattr(self, which).close()
setattr(self, which, None)
- if subprocess.mswindows:
+ if sys.platform == 'win32':
def send(self, input):
if not self.stdin:
return None
@@ -722,7 +719,7 @@ class Popen(subprocess.Popen):
(errCode, written) = WriteFile(x, input)
except ValueError:
return self._close('stdin')
- except (subprocess.pywintypes.error, Exception), why:
+ except (subprocess.pywintypes.error, Exception) as why:
if why[0] in (109, errno.ESHUTDOWN):
return self._close('stdin')
raise
@@ -743,7 +740,7 @@ class Popen(subprocess.Popen):
(errCode, read) = ReadFile(x, nAvail, None)
except ValueError:
return self._close(which)
- except (subprocess.pywintypes.error, Exception), why:
+ except (subprocess.pywintypes.error, Exception) as why:
if why[0] in (109, errno.ESHUTDOWN):
return self._close(which)
raise
@@ -762,7 +759,7 @@ class Popen(subprocess.Popen):
try:
written = os.write(self.stdin.fileno(), input)
- except OSError, why:
+ except OSError as why:
if why[0] == errno.EPIPE: #broken pipe
return self._close('stdin')
raise
@@ -831,14 +828,6 @@ def send_all(p, data):
-try:
- object
-except NameError:
- class object:
- pass
-
-
-
class TestCmd(object):
"""Class TestCmd
"""
@@ -882,7 +871,7 @@ class TestCmd(object):
#self.diff_function = difflib.unified_diff
self._dirlist = []
self._preserve = {'pass_test': 0, 'fail_test': 0, 'no_result': 0}
- if os.environ.has_key('PRESERVE') and not os.environ['PRESERVE'] is '':
+ if 'PRESERVE' in os.environ and os.environ['PRESERVE'] is not '':
self._preserve['pass_test'] = os.environ['PRESERVE']
self._preserve['fail_test'] = os.environ['PRESERVE']
self._preserve['no_result'] = os.environ['PRESERVE']
@@ -927,9 +916,9 @@ class TestCmd(object):
slash = '\\'
special = '"$'
- arg = string.replace(arg, slash, slash+slash)
+ arg = arg.replace(slash, slash+slash)
for c in special:
- arg = string.replace(arg, c, slash+c)
+ arg = arg.replace(c, slash+c)
if re_space.search(arg):
arg = '"' + arg + '"'
@@ -947,7 +936,7 @@ class TestCmd(object):
def canonicalize(self, path):
if is_List(path):
- path = apply(os.path.join, tuple(path))
+ path = os.path.join(*path)
if not os.path.isabs(path):
path = os.path.join(self.workdir, path)
return path
@@ -981,7 +970,7 @@ class TestCmd(object):
condition = self.condition
if self._preserve[condition]:
for dir in self._dirlist:
- print "Preserved directory", dir
+ print("Preserved directory", dir)
else:
list = self._dirlist[:]
list.reverse()
@@ -1015,7 +1004,7 @@ class TestCmd(object):
cmd = list(interpreter) + cmd
if arguments:
if type(arguments) == type(''):
- arguments = string.split(arguments)
+ arguments = arguments.split()
cmd.extend(arguments)
return cmd
@@ -1028,17 +1017,17 @@ class TestCmd(object):
difflib
except NameError:
def diff(self, a, b, name, *args, **kw):
- print self.banner('Expected %s' % name)
- print a
- print self.banner('Actual %s' % name)
- print b
+ print(self.banner('Expected %s' % name))
+ print(a)
+ print(self.banner('Actual %s' % name))
+ print(b)
else:
def diff(self, a, b, name, *args, **kw):
- print self.banner(name)
+ print(self.banner(name))
args = (a.splitlines(), b.splitlines()) + args
- lines = apply(self.diff_function, args, kw)
+ lines = self.diff_function(*args, **kw)
for l in lines:
- print l
+ print(l)
def fail_test(self, condition = 1, function = None, skip = 0):
"""Cause the test to fail.
@@ -1115,18 +1104,18 @@ class TestCmd(object):
program = os.path.join(self._cwd, program)
self.program = program
- def read(self, file, mode = 'rb'):
+ def read(self, file, mode = 'r'):
"""Reads and returns the contents of the specified file name.
The file name may be a list, in which case the elements are
concatenated with the os.path.join() method. The file is
assumed to be under the temporary working directory unless it
is an absolute path name. The I/O mode for the file may
be specified; it must begin with an 'r'. The default is
- 'rb' (binary read).
+ 'r' (string read).
"""
file = self.canonicalize(file)
if mode[0] != 'r':
- raise ValueError, "mode must begin with 'r'"
+ raise ValueError("mode must begin with 'r'")
with open(file, mode) as f:
result = f.read()
return result
@@ -1154,7 +1143,7 @@ class TestCmd(object):
prepended unless it is enclosed in a [list].
"""
cmd = self.command_args(program, interpreter, arguments)
- cmd_string = string.join(map(self.escape, cmd), ' ')
+ cmd_string = ' '.join(map(self.escape, cmd))
if self.verbose:
sys.stderr.write(cmd_string + "\n")
if universal_newlines is None:
@@ -1319,7 +1308,7 @@ class TestCmd(object):
if sub is None:
continue
if is_List(sub):
- sub = apply(os.path.join, tuple(sub))
+ sub = os.path.join(*sub)
new = os.path.join(self.workdir, sub)
try:
os.mkdir(new)
@@ -1367,7 +1356,7 @@ class TestCmd(object):
# letters is pretty much random on win32:
drive,rest = os.path.splitdrive(path)
if drive:
- path = string.upper(drive) + rest
+ path = drive.upper() + rest
#
self._dirlist.append(path)
@@ -1409,7 +1398,7 @@ class TestCmd(object):
"""Find an executable file.
"""
if is_List(file):
- file = apply(os.path.join, tuple(file))
+ file = os.path.join(*file)
if not os.path.isabs(file):
file = where_is(file, path, pathext)
return file
@@ -1431,7 +1420,7 @@ class TestCmd(object):
the temporary working directory name with the specified
arguments using the os.path.join() method.
"""
- return apply(os.path.join, (self.workdir,) + tuple(args))
+ return os.path.join(self.workdir, *args)
def readable(self, top, read=1):
"""Make the specified directory tree readable (read == 1)
@@ -1462,29 +1451,29 @@ class TestCmd(object):
# It's a directory and we're trying to turn on read
# permission, so it's also pretty easy, just chmod the
# directory and then chmod every entry on our walk down the
- # tree. Because os.path.walk() is top-down, we'll enable
+ # tree. Because os.walk() is top-down, we'll enable
# read permission on any directories that have it disabled
- # before os.path.walk() tries to list their contents.
+ # before os.walk() tries to list their contents.
do_chmod(top)
- def chmod_entries(arg, dirname, names, do_chmod=do_chmod):
- for n in names:
+ for dirname, dirnames, filenames in os.walk(top):
+ for n in dirnames:
+ do_chmod(os.path.join(dirname, n))
+ for n in filenames:
do_chmod(os.path.join(dirname, n))
-
- os.path.walk(top, chmod_entries, None)
else:
# It's a directory and we're trying to turn off read
# permission, which means we have to chmod the directoreis
# in the tree bottom-up, lest disabling read permission from
# the top down get in the way of being able to get at lower
- # parts of the tree. But os.path.walk() visits things top
- # down, so we just use an object to collect a list of all
- # of the entries in the tree, reverse the list, and then
- # chmod the reversed (bottom-up) list.
- col = Collector(top)
- os.path.walk(top, col, None)
- col.entries.reverse()
- for d in col.entries: do_chmod(d)
+ # parts of the tree.
+ for dirname, dirnames, filenames in os.walk(top, topdown=False):
+ for n in dirnames:
+ do_chmod(os.path.join(dirname, n))
+ for n in filenames:
+ do_chmod(os.path.join(dirname, n))
+
+ do_chmod(top)
def writable(self, top, write=1):
"""Make the specified directory tree writable (write == 1)
@@ -1508,19 +1497,22 @@ class TestCmd(object):
def do_chmod(fname):
try: st = os.stat(fname)
except OSError: pass
- else: os.chmod(fname, stat.S_IMODE(st[stat.ST_MODE]|0200))
+ else: os.chmod(fname, stat.S_IMODE(st[stat.ST_MODE]|0o200))
else:
def do_chmod(fname):
try: st = os.stat(fname)
except OSError: pass
- else: os.chmod(fname, stat.S_IMODE(st[stat.ST_MODE]&~0200))
+ else: os.chmod(fname, stat.S_IMODE(st[stat.ST_MODE]&~0o200))
if os.path.isfile(top):
do_chmod(top)
else:
- col = Collector(top)
- os.path.walk(top, col, None)
- for d in col.entries: do_chmod(d)
+ do_chmod(top)
+ for dirname, dirnames, filenames in os.walk(top):
+ for n in dirnames:
+ do_chmod(os.path.join(dirname, n))
+ for n in filenames:
+ do_chmod(os.path.join(dirname, n))
def executable(self, top, execute=1):
"""Make the specified directory tree executable (execute == 1)
@@ -1551,42 +1543,42 @@ class TestCmd(object):
# It's a directory and we're trying to turn on execute
# permission, so it's also pretty easy, just chmod the
# directory and then chmod every entry on our walk down the
- # tree. Because os.path.walk() is top-down, we'll enable
+ # tree. Because os.walk() is top-down, we'll enable
# execute permission on any directories that have it disabled
- # before os.path.walk() tries to list their contents.
+ # before os.walk() tries to list their contents.
do_chmod(top)
- def chmod_entries(arg, dirname, names, do_chmod=do_chmod):
- for n in names:
+ for dirname, dirnames, filenames in os.walk(top):
+ for n in dirnames:
+ do_chmod(os.path.join(dirname, n))
+ for n in filenames:
do_chmod(os.path.join(dirname, n))
-
- os.path.walk(top, chmod_entries, None)
else:
# It's a directory and we're trying to turn off execute
# permission, which means we have to chmod the directories
# in the tree bottom-up, lest disabling execute permission from
# the top down get in the way of being able to get at lower
- # parts of the tree. But os.path.walk() visits things top
- # down, so we just use an object to collect a list of all
- # of the entries in the tree, reverse the list, and then
- # chmod the reversed (bottom-up) list.
- col = Collector(top)
- os.path.walk(top, col, None)
- col.entries.reverse()
- for d in col.entries: do_chmod(d)
-
- def write(self, file, content, mode = 'wb'):
+ # parts of the tree.
+ for dirname, dirnames, filenames in os.walk(top, topdown=False):
+ for n in dirnames:
+ do_chmod(os.path.join(dirname, n))
+ for n in filenames:
+ do_chmod(os.path.join(dirname, n))
+
+ do_chmod(top)
+
+ def write(self, file, content, mode = 'w'):
"""Writes the specified content text (second argument) to the
specified file name (first argument). The file name may be
a list, in which case the elements are concatenated with the
os.path.join() method. The file is created under the temporary
working directory. Any subdirectories in the path must already
exist. The I/O mode for the file may be specified; it must
- begin with a 'w'. The default is 'wb' (binary write).
+ begin with a 'w'. The default is 'w' (string write).
"""
file = self.canonicalize(file)
if mode[0] != 'w':
- raise ValueError, "mode must begin with 'w'"
+ raise ValueError("mode must begin with 'w'")
with open(file, mode) as f:
f.write(content)

Powered by Google App Engine
This is Rietveld 408576698