| OLD | NEW |
| 1 # Copyright 2008 the V8 project authors. All rights reserved. | 1 # Copyright 2008 the V8 project authors. All rights reserved. |
| 2 # Redistribution and use in source and binary forms, with or without | 2 # Redistribution and use in source and binary forms, with or without |
| 3 # modification, are permitted provided that the following conditions are | 3 # modification, are permitted provided that the following conditions are |
| 4 # met: | 4 # met: |
| 5 # | 5 # |
| 6 # * Redistributions of source code must retain the above copyright | 6 # * Redistributions of source code must retain the above copyright |
| 7 # notice, this list of conditions and the following disclaimer. | 7 # notice, this list of conditions and the following disclaimer. |
| 8 # * Redistributions in binary form must reproduce the above | 8 # * Redistributions in binary form must reproduce the above |
| 9 # copyright notice, this list of conditions and the following | 9 # copyright notice, this list of conditions and the following |
| 10 # disclaimer in the documentation and/or other materials provided | 10 # disclaimer in the documentation and/or other materials provided |
| (...skipping 15 matching lines...) Expand all Loading... |
| 26 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 26 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 27 | 27 |
| 28 import test | 28 import test |
| 29 import os | 29 import os |
| 30 from os.path import join, dirname, exists | 30 from os.path import join, dirname, exists |
| 31 import re | 31 import re |
| 32 import tempfile | 32 import tempfile |
| 33 | 33 |
| 34 FLAGS_PATTERN = re.compile(r"//\s+Flags:(.*)") | 34 FLAGS_PATTERN = re.compile(r"//\s+Flags:(.*)") |
| 35 FILES_PATTERN = re.compile(r"//\s+Files:(.*)") | 35 FILES_PATTERN = re.compile(r"//\s+Files:(.*)") |
| 36 SELF_SCRIPT_PATTERN = re.compile(r"//\s+Env: TEST_FILE_NAME") | 36 ENV_VARS_PATTERN = re.compile(r"//\s+Env:(.*)") |
| 37 SELF_SCRIPT_PATTERN = re.compile("TEST_FILE_NAME") |
| 38 LOG_FILE_PATTERN = re.compile("LOG_FILE_NAME") |
| 37 | 39 |
| 38 | 40 |
| 39 class MjsunitTestCase(test.TestCase): | 41 class MjsunitTestCase(test.TestCase): |
| 40 | 42 |
| 41 def __init__(self, path, file, mode, context, config, isolates): | 43 def __init__(self, path, file, mode, context, config, isolates): |
| 42 super(MjsunitTestCase, self).__init__(context, path, mode) | 44 super(MjsunitTestCase, self).__init__(context, path, mode) |
| 43 self.file = file | 45 self.file = file |
| 44 self.config = config | 46 self.config = config |
| 45 self.self_script = False | 47 self.self_script = False |
| 48 self.log_file = False |
| 46 self.isolates = isolates | 49 self.isolates = isolates |
| 47 | 50 |
| 48 def GetLabel(self): | 51 def GetLabel(self): |
| 49 return "%s %s" % (self.mode, self.GetName()) | 52 return "%s %s" % (self.mode, self.GetName()) |
| 50 | 53 |
| 51 def GetName(self): | 54 def GetName(self): |
| 52 return self.path[-1] + ["", "-isolates"][self.isolates] | 55 return self.path[-1] + ["", "-isolates"][self.isolates] |
| 53 | 56 |
| 54 def TestsIsolates(self): | 57 def TestsIsolates(self): |
| 55 return self.isolates | 58 return self.isolates |
| 56 | 59 |
| 57 def GetVmCommand(self, source): | 60 def GetVmCommand(self, source): |
| 58 result = self.config.context.GetVmCommand(self, self.mode) | 61 result = self.config.context.GetVmCommand(self, self.mode) |
| 59 flags_match = FLAGS_PATTERN.search(source) | 62 flags_match = FLAGS_PATTERN.search(source) |
| 60 if flags_match: | 63 if flags_match: |
| 61 result += flags_match.group(1).strip().split() | 64 result += flags_match.group(1).strip().split() |
| 62 return result | 65 return result |
| 63 | 66 |
| 67 def GetEnvArguments(self, source): |
| 68 result = [] |
| 69 env_vars_match = ENV_VARS_PATTERN.search(source) |
| 70 if env_vars_match: |
| 71 env_vars = env_vars_match.group(1) |
| 72 provide_test_file_name = SELF_SCRIPT_PATTERN.search(env_vars) |
| 73 provide_log_file_name = LOG_FILE_PATTERN.search(env_vars) |
| 74 else: |
| 75 return result |
| 76 if provide_test_file_name or provide_log_file_name: |
| 77 self_script_file = self.CreateSelfScript( |
| 78 provide_test_file_name, provide_log_file_name) |
| 79 if self.log_file: |
| 80 result.append("--logfile=" + self.log_file) |
| 81 result.append(self_script_file) |
| 82 return result |
| 83 |
| 64 def GetVmArguments(self, source): | 84 def GetVmArguments(self, source): |
| 65 result = [] | 85 result = [] |
| 66 additional_files = [] | 86 additional_files = [] |
| 67 files_match = FILES_PATTERN.search(source); | 87 files_match = FILES_PATTERN.search(source); |
| 68 # Accept several lines of 'Files:' | 88 # Accept several lines of 'Files:' |
| 69 while True: | 89 while True: |
| 70 if files_match: | 90 if files_match: |
| 71 additional_files += files_match.group(1).strip().split() | 91 additional_files += files_match.group(1).strip().split() |
| 72 files_match = FILES_PATTERN.search(source, files_match.end()) | 92 files_match = FILES_PATTERN.search(source, files_match.end()) |
| 73 else: | 93 else: |
| 74 break | 94 break |
| 75 for a_file in additional_files: | 95 for a_file in additional_files: |
| 76 result.append(join(dirname(self.config.root), '..', a_file)) | 96 result.append(join(dirname(self.config.root), '..', a_file)) |
| 77 framework = join(dirname(self.config.root), 'mjsunit', 'mjsunit.js') | 97 framework = join(dirname(self.config.root), 'mjsunit', 'mjsunit.js') |
| 78 if SELF_SCRIPT_PATTERN.search(source): | |
| 79 result.append(self.CreateSelfScript()) | |
| 80 result += [framework, self.file] | 98 result += [framework, self.file] |
| 81 return result | 99 return result |
| 82 | 100 |
| 83 def GetCommand(self): | 101 def GetCommand(self): |
| 84 source = open(self.file).read() | 102 source = open(self.file).read() |
| 85 result = self.GetVmCommand(source) | 103 result = self.GetVmCommand(source) |
| 104 result += self.GetEnvArguments(source) |
| 86 result += self.GetVmArguments(source) | 105 result += self.GetVmArguments(source) |
| 87 if self.isolates: | 106 if self.isolates: |
| 88 result.append("--isolate") | 107 result.append("--isolate") |
| 89 result += self.GetVmArguments(source) | 108 result += self.GetVmArguments(source) |
| 90 return result | 109 return result |
| 91 | 110 |
| 92 def GetSource(self): | 111 def GetSource(self): |
| 93 return open(self.file).read() | 112 return open(self.file).read() |
| 94 | 113 |
| 95 def CreateSelfScript(self): | 114 def CreateSelfScript(self, provide_test_file_name, provide_log_file_name): |
| 96 (fd_self_script, self_script) = tempfile.mkstemp(suffix=".js") | 115 (fd_self_script, self_script) = tempfile.mkstemp(suffix=".js") |
| 116 if provide_log_file_name: |
| 117 (fd_log_file, log_file) = tempfile.mkstemp(suffix=".log") |
| 118 os.close(fd_log_file) |
| 119 self.log_file = log_file |
| 97 def MakeJsConst(name, value): | 120 def MakeJsConst(name, value): |
| 98 return "var %(name)s=\'%(value)s\';\n" % \ | 121 return "var %(name)s=\'%(value)s\';\n" % \ |
| 99 {'name': name, \ | 122 {'name': name, \ |
| 100 'value': value.replace('\\', '\\\\').replace('\'', '\\\'') } | 123 'value': value.replace('\\', '\\\\').replace('\'', '\\\'') } |
| 101 try: | 124 try: |
| 102 os.write(fd_self_script, MakeJsConst('TEST_FILE_NAME', self.file)) | 125 if provide_test_file_name: |
| 126 os.write(fd_self_script, MakeJsConst('TEST_FILE_NAME', self.file)) |
| 127 if provide_log_file_name: |
| 128 os.write(fd_self_script, MakeJsConst('LOG_FILE_NAME', log_file)) |
| 103 except IOError, e: | 129 except IOError, e: |
| 104 test.PrintError("write() " + str(e)) | 130 test.PrintError("write() " + str(e)) |
| 105 os.close(fd_self_script) | 131 os.close(fd_self_script) |
| 106 self.self_script = self_script | 132 self.self_script = self_script |
| 107 return self_script | 133 return self_script |
| 108 | 134 |
| 109 def AfterRun(self, result): | 135 def AfterRun(self, result): |
| 110 if self.self_script and (not result or (not result.HasPreciousOutput())): | 136 if not result or (not result.HasPreciousOutput()): |
| 111 test.CheckedUnlink(self.self_script) | 137 if self.self_script: |
| 138 test.CheckedUnlink(self.self_script) |
| 139 if self.log_file: |
| 140 test.CheckedUnlink(self.log_file) |
| 112 | 141 |
| 113 class MjsunitTestConfiguration(test.TestConfiguration): | 142 class MjsunitTestConfiguration(test.TestConfiguration): |
| 114 | 143 |
| 115 def __init__(self, context, root): | 144 def __init__(self, context, root): |
| 116 super(MjsunitTestConfiguration, self).__init__(context, root) | 145 super(MjsunitTestConfiguration, self).__init__(context, root) |
| 117 | 146 |
| 118 def Ls(self, path): | 147 def Ls(self, path): |
| 119 def SelectTest(name): | 148 def SelectTest(name): |
| 120 return name.endswith('.js') and name != 'mjsunit.js' | 149 return name.endswith('.js') and name != 'mjsunit.js' |
| 121 return [f[:-3] for f in os.listdir(path) if SelectTest(f)] | 150 return [f[:-3] for f in os.listdir(path) if SelectTest(f)] |
| (...skipping 27 matching lines...) Expand all Loading... |
| 149 | 178 |
| 150 def GetTestStatus(self, sections, defs): | 179 def GetTestStatus(self, sections, defs): |
| 151 status_file = join(self.root, 'mjsunit.status') | 180 status_file = join(self.root, 'mjsunit.status') |
| 152 if exists(status_file): | 181 if exists(status_file): |
| 153 test.ReadConfigurationInto(status_file, sections, defs) | 182 test.ReadConfigurationInto(status_file, sections, defs) |
| 154 | 183 |
| 155 | 184 |
| 156 | 185 |
| 157 def GetConfiguration(context, root): | 186 def GetConfiguration(context, root): |
| 158 return MjsunitTestConfiguration(context, root) | 187 return MjsunitTestConfiguration(context, root) |
| OLD | NEW |