From 84170eeb9963c935dbffbc8e743981670286a120 Mon Sep 17 00:00:00 2001 From: "sgjesse@chromium.org" Date: Fri, 31 Oct 2008 13:12:35 +0000 Subject: [PATCH] Change the test status file parser to fail if the line contains unparsed tokens. Refactor the platform.system() tests and use macos when running on Mac. Review URL: http://codereview.chromium.org/8763 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@672 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- SConstruct | 23 ++--------------------- test/cctest/testcfg.py | 4 ++-- tools/test.py | 17 ++++++++++------- tools/utils.py | 25 +++++++++++++++++++++++++ 4 files changed, 39 insertions(+), 30 deletions(-) diff --git a/SConstruct b/SConstruct index 6e5bc7a0a..c1a6ec296 100644 --- a/SConstruct +++ b/SConstruct @@ -238,25 +238,6 @@ def Abort(message): sys.exit(1) -def GuessOS(): - id = platform.system() - if id == 'Linux': - return 'linux' - elif id == 'Darwin': - return 'macos' - elif id == 'Windows': - return 'win32' - else: - return None - - -def GuessWordsize(): - if '64' in platform.machine(): - return '64' - else: - return '32' - - def GuessToolchain(os): tools = Environment()['TOOLS'] if 'gcc' in tools: @@ -267,10 +248,10 @@ def GuessToolchain(os): return None -OS_GUESS = GuessOS() +OS_GUESS = utils.GuessOS() TOOLCHAIN_GUESS = GuessToolchain(OS_GUESS) ARCH_GUESS = utils.GuessArchitecture() -WORDSIZE_GUESS = GuessWordsize() +WORDSIZE_GUESS = utils.GuessWordsize() SIMPLE_OPTIONS = { diff --git a/test/cctest/testcfg.py b/test/cctest/testcfg.py index 08226aaeb..72f7d746a 100644 --- a/test/cctest/testcfg.py +++ b/test/cctest/testcfg.py @@ -29,7 +29,7 @@ import test import os from os.path import join, dirname, exists import platform - +import utils DEBUG_FLAGS = ['--enable-slow-asserts', '--debug-code', '--verify-heap'] @@ -65,7 +65,7 @@ class CcTestConfiguration(test.TestConfiguration): def ListTests(self, current_path, path, mode): executable = join('obj', 'test', mode, 'cctest') - if (platform.system() == 'Windows'): + if utils.IsWindows(): executable += '.exe' output = test.Execute([executable, '--list'], self.context) if output.exit_code != 0: diff --git a/tools/test.py b/tools/test.py index 10411a193..e193e272d 100755 --- a/tools/test.py +++ b/tools/test.py @@ -370,7 +370,7 @@ class TestOutput(object): return not outcome in self.test.outcomes def HasCrashed(self): - if platform.system() == 'Windows': + if utils.IsWindows(): return 0x80000000 & self.output.exit_code and not (0x3FFFFF00 & self.output.exit_code) else: # Timed out tests will have exit_code -signal.SIGTERM. @@ -388,7 +388,7 @@ class TestOutput(object): def KillProcessWithID(pid): - if platform.system() == 'Windows': + if utils.IsWindows(): os.popen('taskkill /T /F /PID %d' % pid) else: os.kill(pid, signal.SIGTERM) @@ -414,17 +414,17 @@ def RunProcess(context, timeout, args, **rest): if context.verbose: print "#", " ".join(args) popen_args = args prev_error_mode = SEM_INVALID_VALUE; - if platform.system() == 'Windows': + if utils.IsWindows(): popen_args = '"' + subprocess.list2cmdline(args) + '"' if context.suppress_dialogs: # Try to change the error mode to avoid dialogs on fatal errors. Win32SetErrorMode(SEM_NOGPFAULTERRORBOX) process = subprocess.Popen( - shell = (platform.system() == 'Windows'), + shell = utils.IsWindows(), args = popen_args, **rest ) - if platform.system() == 'Windows' and context.suppress_dialogs and prev_error_mode != SEM_INVALID_VALUE: + if utils.IsWindows() and context.suppress_dialogs and prev_error_mode != SEM_INVALID_VALUE: Win32SetErrorMode(prev_error_mode) # Compute the end time - if the process crosses this limit we # consider it timed out. @@ -600,7 +600,7 @@ class Context(object): def GetVm(self, mode): name = self.vm_root + PREFIX[mode] - if platform.system() == 'Windows': + if utils.IsWindows(): return name + '.exe' else: return name @@ -920,6 +920,9 @@ def ParseCondition(expr): if not ast: print "Malformed expression: '%s'" % expr return None + if scan.HasMore(): + print "Malformed expression: '%s'" % expr + return None return ast @@ -1238,7 +1241,7 @@ def Main(): for mode in options.mode: env = { 'mode': mode, - 'system': platform.system().lower(), + 'system': utils.GuessOS(), 'arch': options.arch } test_list = root.ListTests([], path, context, mode) diff --git a/tools/utils.py b/tools/utils.py index e10bb7be8..fa402c3f3 100644 --- a/tools/utils.py +++ b/tools/utils.py @@ -43,6 +43,20 @@ def ReadLinesFrom(name): return list +def GuessOS(): + id = platform.system() + if id == 'Linux': + return 'linux' + elif id == 'Darwin': + return 'macos' + elif id == 'Windows' or id == 'Microsoft': + # On Windows Vista platform.system() can return 'Microsoft' with some + # versions of Python, see http://bugs.python.org/issue1082 + return 'win32' + else: + return None + + def GuessArchitecture(): id = platform.machine() if id.startswith('arm'): @@ -51,3 +65,14 @@ def GuessArchitecture(): return 'ia32' else: return None + + +def GuessWordsize(): + if '64' in platform.machine(): + return '64' + else: + return '32' + + +def IsWindows(): + return GuessOS() == 'win32' -- 2.34.1