| 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 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 43 | 43 |
| 44 def ListTests(self, context): | 44 def ListTests(self, context): |
| 45 tests = [] | 45 tests = [] |
| 46 for dirname, dirs, files in os.walk(self.root): | 46 for dirname, dirs, files in os.walk(self.root): |
| 47 for dotted in [x for x in dirs if x.startswith('.')]: | 47 for dotted in [x for x in dirs if x.startswith('.')]: |
| 48 dirs.remove(dotted) | 48 dirs.remove(dotted) |
| 49 dirs.sort() | 49 dirs.sort() |
| 50 files.sort() | 50 files.sort() |
| 51 for filename in files: | 51 for filename in files: |
| 52 if filename.endswith(".js"): | 52 if filename.endswith(".js"): |
| 53 testname = join(dirname[len(self.root) + 1:], filename[:-3]) | 53 testname = os.path.join(dirname[len(self.root) + 1:], filename[:-3]) |
| 54 test = testcase.TestCase(self, testname) | 54 test = testcase.TestCase(self, testname) |
| 55 tests.append(test) | 55 tests.append(test) |
| 56 return tests | 56 return tests |
| 57 | 57 |
| 58 def GetFlagsForTestCase(self, testcase, context): | 58 def GetFlagsForTestCase(self, testcase, context): |
| 59 source = self.GetSourceForTest(testcase) | 59 source = self.GetSourceForTest(testcase) |
| 60 result = [] | 60 result = [] |
| 61 flags_match = re.findall(FLAGS_PATTERN, source) | 61 flags_match = re.findall(FLAGS_PATTERN, source) |
| 62 for match in flags_match: | 62 for match in flags_match: |
| 63 result += match.strip().split() | 63 result += match.strip().split() |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 102 if not re.match(pattern, actual): | 102 if not re.match(pattern, actual): |
| 103 return True | 103 return True |
| 104 return False | 104 return False |
| 105 | 105 |
| 106 def StripOutputForTransmit(self, testcase): | 106 def StripOutputForTransmit(self, testcase): |
| 107 pass | 107 pass |
| 108 | 108 |
| 109 | 109 |
| 110 def GetSuite(name, root): | 110 def GetSuite(name, root): |
| 111 return MessageTestSuite(name, root) | 111 return MessageTestSuite(name, root) |
| 112 | |
| 113 | |
| 114 # Deprecated definitions below. | |
| 115 # TODO(jkummerow): Remove when SCons is no longer supported. | |
| 116 | |
| 117 | |
| 118 import test | |
| 119 from os.path import join, exists, basename, isdir | |
| 120 | |
| 121 class MessageTestCase(test.TestCase): | |
| 122 | |
| 123 def __init__(self, path, file, expected, mode, context, config): | |
| 124 super(MessageTestCase, self).__init__(context, path, mode) | |
| 125 self.file = file | |
| 126 self.expected = expected | |
| 127 self.config = config | |
| 128 | |
| 129 def IgnoreLine(self, str): | |
| 130 """Ignore empty lines, valgrind output and Android output.""" | |
| 131 if not str: return True | |
| 132 return (str.startswith('==') or str.startswith('**') or | |
| 133 str.startswith('ANDROID')) | |
| 134 | |
| 135 def IsFailureOutput(self, output): | |
| 136 f = file(self.expected) | |
| 137 # Skip initial '#' comment and spaces | |
| 138 for line in f: | |
| 139 if (not line.startswith('#')) and (not line.strip()): | |
| 140 break | |
| 141 # Convert output lines to regexps that we can match | |
| 142 env = { 'basename': basename(self.file) } | |
| 143 patterns = [ ] | |
| 144 for line in f: | |
| 145 if not line.strip(): | |
| 146 continue | |
| 147 pattern = re.escape(line.rstrip() % env) | |
| 148 pattern = pattern.replace('\\*', '.*') | |
| 149 pattern = '^%s$' % pattern | |
| 150 patterns.append(pattern) | |
| 151 # Compare actual output with the expected | |
| 152 raw_lines = output.stdout.splitlines() | |
| 153 outlines = [ s for s in raw_lines if not self.IgnoreLine(s) ] | |
| 154 if len(outlines) != len(patterns): | |
| 155 return True | |
| 156 for i in xrange(len(patterns)): | |
| 157 if not re.match(patterns[i], outlines[i]): | |
| 158 return True | |
| 159 return False | |
| 160 | |
| 161 def GetLabel(self): | |
| 162 return "%s %s" % (self.mode, self.GetName()) | |
| 163 | |
| 164 def GetName(self): | |
| 165 return self.path[-1] | |
| 166 | |
| 167 def GetCommand(self): | |
| 168 result = self.config.context.GetVmCommand(self, self.mode) | |
| 169 source = open(self.file).read() | |
| 170 flags_match = re.findall(FLAGS_PATTERN, source) | |
| 171 for match in flags_match: | |
| 172 result += match.strip().split() | |
| 173 result.append(self.file) | |
| 174 return result | |
| 175 | |
| 176 def GetSource(self): | |
| 177 return (open(self.file).read() | |
| 178 + "\n--- expected output ---\n" | |
| 179 + open(self.expected).read()) | |
| 180 | |
| 181 | |
| 182 class MessageTestConfiguration(test.TestConfiguration): | |
| 183 | |
| 184 def __init__(self, context, root): | |
| 185 super(MessageTestConfiguration, self).__init__(context, root) | |
| 186 | |
| 187 def Ls(self, path): | |
| 188 if isdir(path): | |
| 189 return [f[:-3] for f in os.listdir(path) if f.endswith('.js')] | |
| 190 else: | |
| 191 return [] | |
| 192 | |
| 193 def ListTests(self, current_path, path, mode, variant_flags): | |
| 194 mjsunit = [current_path + [t] for t in self.Ls(self.root)] | |
| 195 regress = [current_path + ['regress', t] for t in self.Ls(join(self.root, 'r
egress'))] | |
| 196 bugs = [current_path + ['bugs', t] for t in self.Ls(join(self.root, 'bugs'))
] | |
| 197 mjsunit.sort() | |
| 198 regress.sort() | |
| 199 bugs.sort() | |
| 200 all_tests = mjsunit + regress + bugs | |
| 201 result = [] | |
| 202 for test in all_tests: | |
| 203 if self.Contains(path, test): | |
| 204 file_prefix = join(self.root, reduce(join, test[1:], "")) | |
| 205 file_path = file_prefix + ".js" | |
| 206 output_path = file_prefix + ".out" | |
| 207 if not exists(output_path): | |
| 208 print "Could not find %s" % output_path | |
| 209 continue | |
| 210 result.append(MessageTestCase(test, file_path, output_path, mode, | |
| 211 self.context, self)) | |
| 212 return result | |
| 213 | |
| 214 def GetBuildRequirements(self): | |
| 215 return ['d8'] | |
| 216 | |
| 217 def GetTestStatus(self, sections, defs): | |
| 218 status_file = join(self.root, 'message.status') | |
| 219 if exists(status_file): | |
| 220 test.ReadConfigurationInto(status_file, sections, defs) | |
| 221 | |
| 222 | |
| 223 def GetConfiguration(context, root): | |
| 224 return MessageTestConfiguration(context, root) | |
| OLD | NEW |