| OLD | NEW |
| 1 # Copyright 2012 the V8 project authors. All rights reserved. | 1 # Copyright 2012 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 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 122 fullpath = os.path.join(dirname, filename) | 122 fullpath = os.path.join(dirname, filename) |
| 123 relpath = fullpath[len(self.testroot) + 1 : -3] | 123 relpath = fullpath[len(self.testroot) + 1 : -3] |
| 124 testname = relpath.replace(os.path.sep, "/") | 124 testname = relpath.replace(os.path.sep, "/") |
| 125 case = testcase.TestCase(self, testname) | 125 case = testcase.TestCase(self, testname) |
| 126 tests.append(case) | 126 tests.append(case) |
| 127 return tests | 127 return tests |
| 128 | 128 |
| 129 def GetFlagsForTestCase(self, testcase, context): | 129 def GetFlagsForTestCase(self, testcase, context): |
| 130 return (testcase.flags + context.mode_flags + self.harness + | 130 return (testcase.flags + context.mode_flags + self.harness + |
| 131 self.GetIncludesForTest(testcase) + ["--harmony"] + | 131 self.GetIncludesForTest(testcase) + ["--harmony"] + |
| 132 [os.path.join(self.testroot, testcase.path + ".js")]) | 132 [os.path.join(self.testroot, testcase.path + ".js")] + |
| 133 (["--throws"] if "negative" in self.GetTestRecord(testcase) else [])
) |
| 133 | 134 |
| 134 def _VariantGeneratorFactory(self): | 135 def _VariantGeneratorFactory(self): |
| 135 return Test262VariantGenerator | 136 return Test262VariantGenerator |
| 136 | 137 |
| 137 def LoadParseTestRecord(self): | 138 def LoadParseTestRecord(self): |
| 138 if not self.ParseTestRecord: | 139 if not self.ParseTestRecord: |
| 139 root = os.path.join(self.root, *TEST_262_TOOLS_PATH) | 140 root = os.path.join(self.root, *TEST_262_TOOLS_PATH) |
| 140 f = None | 141 f = None |
| 141 try: | 142 try: |
| 142 (f, pathname, description) = imp.find_module("parseTestRecord", [root]) | 143 (f, pathname, description) = imp.find_module("parseTestRecord", [root]) |
| 143 module = imp.load_module("parseTestRecord", f, pathname, description) | 144 module = imp.load_module("parseTestRecord", f, pathname, description) |
| 144 self.ParseTestRecord = module.parseTestRecord | 145 self.ParseTestRecord = module.parseTestRecord |
| 145 except: | 146 except: |
| 146 raise ImportError("Cannot load parseTestRecord; you may need to " | 147 raise ImportError("Cannot load parseTestRecord; you may need to " |
| 147 "--download-data for test262") | 148 "gclient sync for test262") |
| 148 finally: | 149 finally: |
| 149 if f: | 150 if f: |
| 150 f.close() | 151 f.close() |
| 151 return self.ParseTestRecord | 152 return self.ParseTestRecord |
| 152 | 153 |
| 153 def GetTestRecord(self, testcase): | 154 def GetTestRecord(self, testcase): |
| 154 if not hasattr(testcase, "test_record"): | 155 if not hasattr(testcase, "test_record"): |
| 155 ParseTestRecord = self.LoadParseTestRecord() | 156 ParseTestRecord = self.LoadParseTestRecord() |
| 156 testcase.test_record = ParseTestRecord(self.GetSourceForTest(testcase), | 157 testcase.test_record = ParseTestRecord(self.GetSourceForTest(testcase), |
| 157 testcase.path) | 158 testcase.path) |
| 158 return testcase.test_record | 159 return testcase.test_record |
| 159 | 160 |
| 160 def GetIncludesForTest(self, testcase): | 161 def GetIncludesForTest(self, testcase): |
| 161 test_record = self.GetTestRecord(testcase) | 162 test_record = self.GetTestRecord(testcase) |
| 162 if "includes" in test_record: | 163 if "includes" in test_record: |
| 163 includes = [os.path.join(self.harnesspath, f) | 164 includes = [os.path.join(self.harnesspath, f) |
| 164 for f in test_record["includes"]] | 165 for f in test_record["includes"]] |
| 165 else: | 166 else: |
| 166 includes = [] | 167 includes = [] |
| 167 return includes | 168 return includes |
| 168 | 169 |
| 169 def GetSourceForTest(self, testcase): | 170 def GetSourceForTest(self, testcase): |
| 170 filename = os.path.join(self.testroot, testcase.path + ".js") | 171 filename = os.path.join(self.testroot, testcase.path + ".js") |
| 171 with open(filename) as f: | 172 with open(filename) as f: |
| 172 return f.read() | 173 return f.read() |
| 173 | 174 |
| 174 def IsNegativeTest(self, testcase): | 175 def _ParseException(self, str): |
| 176 for line in str.split("\n")[::-1]: |
| 177 if line and not line[0].isspace() and ":" in line: |
| 178 return line.split(":")[0] |
| 179 |
| 180 |
| 181 def IsFailureOutput(self, testcase): |
| 182 output = testcase.output |
| 175 test_record = self.GetTestRecord(testcase) | 183 test_record = self.GetTestRecord(testcase) |
| 176 return "negative" in test_record | |
| 177 | |
| 178 def IsFailureOutput(self, output, testpath): | |
| 179 if output.exit_code != 0: | 184 if output.exit_code != 0: |
| 180 return True | 185 return True |
| 186 if "negative" in test_record: |
| 187 if self._ParseException(output.stdout) != test_record["negative"]: |
| 188 return True |
| 181 return "FAILED!" in output.stdout | 189 return "FAILED!" in output.stdout |
| 182 | 190 |
| 183 def HasUnexpectedOutput(self, testcase): | 191 def HasUnexpectedOutput(self, testcase): |
| 184 outcome = self.GetOutcome(testcase) | 192 outcome = self.GetOutcome(testcase) |
| 185 if (statusfile.FAIL_SLOPPY in testcase.outcomes and | 193 if (statusfile.FAIL_SLOPPY in testcase.outcomes and |
| 186 "--use-strict" not in testcase.flags): | 194 "--use-strict" not in testcase.flags): |
| 187 return outcome != statusfile.FAIL | 195 return outcome != statusfile.FAIL |
| 188 return not outcome in (testcase.outcomes or [statusfile.PASS]) | 196 return not outcome in (testcase.outcomes or [statusfile.PASS]) |
| 189 | 197 |
| 190 def DownloadData(self): | 198 def DownloadData(self): |
| (...skipping 15 matching lines...) Expand all Loading... |
| 206 # data folder. | 214 # data folder. |
| 207 if os.path.exists(ARCHIVE) and not os.path.exists(DATA): | 215 if os.path.exists(ARCHIVE) and not os.path.exists(DATA): |
| 208 print "Extracting archive..." | 216 print "Extracting archive..." |
| 209 tar = tarfile.open(ARCHIVE) | 217 tar = tarfile.open(ARCHIVE) |
| 210 tar.extractall(path=os.path.dirname(ARCHIVE)) | 218 tar.extractall(path=os.path.dirname(ARCHIVE)) |
| 211 tar.close() | 219 tar.close() |
| 212 | 220 |
| 213 | 221 |
| 214 def GetSuite(name, root): | 222 def GetSuite(name, root): |
| 215 return Test262TestSuite(name, root) | 223 return Test262TestSuite(name, root) |
| OLD | NEW |