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

Side by Side Diff: Tools/Scripts/webkitpy/test/main.py

Issue 458643003: Remove serial test support from test-webkitpy. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 4 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 # Copyright (C) 2012 Google, Inc. 1 # Copyright (C) 2012 Google, Inc.
2 # Copyright (C) 2010 Chris Jerdonek (cjerdonek@webkit.org) 2 # Copyright (C) 2010 Chris Jerdonek (cjerdonek@webkit.org)
3 # 3 #
4 # Redistribution and use in source and binary forms, with or without 4 # Redistribution and use in source and binary forms, with or without
5 # modification, are permitted provided that the following conditions 5 # modification, are permitted provided that the following conditions
6 # are met: 6 # are met:
7 # 1. Redistributions of source code must retain the above copyright 7 # 1. Redistributions of source code must retain the above copyright
8 # notice, this list of conditions and the following disclaimer. 8 # notice, this list of conditions and the following disclaimer.
9 # 2. Redistributions in binary form must reproduce the above copyright 9 # 2. Redistributions in binary form must reproduce the above copyright
10 # notice, this list of conditions and the following disclaimer in the 10 # notice, this list of conditions and the following disclaimer in the
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
158 exit_code = self.executive.call(prefix_cmd + ['report', '--omit', 'w ebkitpy/thirdparty/*,/usr/*,/Library/*'], cwd=script_dir, env=env) 158 exit_code = self.executive.call(prefix_cmd + ['report', '--omit', 'w ebkitpy/thirdparty/*,/usr/*,/Library/*'], cwd=script_dir, env=env)
159 return (exit_code == 0) 159 return (exit_code == 0)
160 160
161 def _run_tests(self, names): 161 def _run_tests(self, names):
162 self.printer.write_update("Checking imports ...") 162 self.printer.write_update("Checking imports ...")
163 if not self._check_imports(names): 163 if not self._check_imports(names):
164 return False 164 return False
165 165
166 self.printer.write_update("Finding the individual test methods ...") 166 self.printer.write_update("Finding the individual test methods ...")
167 loader = _Loader() 167 loader = _Loader()
168 parallel_tests, serial_tests = self._test_names(loader, names) 168 parallel_tests = self._test_names(loader, names)
169 169
170 self.printer.write_update("Running the tests ...") 170 self.printer.write_update("Running the tests ...")
171 self.printer.num_tests = len(parallel_tests) + len(serial_tests) 171 self.printer.num_tests = len(parallel_tests)
172 start = time.time() 172 start = time.time()
173 test_runner = Runner(self.printer, loader, self.webkit_finder) 173 test_runner = Runner(self.printer, loader, self.webkit_finder)
174 test_runner.run(parallel_tests, self._options.child_processes) 174 test_runner.run(parallel_tests, self._options.child_processes)
175 test_runner.run(serial_tests, 1)
176 175
177 self.printer.print_result(time.time() - start) 176 self.printer.print_result(time.time() - start)
178 177
179 return not self.printer.num_errors and not self.printer.num_failures 178 return not self.printer.num_errors and not self.printer.num_failures
180 179
181 def _check_imports(self, names): 180 def _check_imports(self, names):
182 for name in names: 181 for name in names:
183 if self.finder.is_module(name): 182 if self.finder.is_module(name):
184 # if we failed to load a name and it looks like a module, 183 # if we failed to load a name and it looks like a module,
185 # try importing it directly, because loadTestsFromName() 184 # try importing it directly, because loadTestsFromName()
186 # produces lousy error messages for bad modules. 185 # produces lousy error messages for bad modules.
187 try: 186 try:
188 __import__(name) 187 __import__(name)
189 except ImportError: 188 except ImportError:
190 _log.fatal('Failed to import %s:' % name) 189 _log.fatal('Failed to import %s:' % name)
191 self._log_exception() 190 self._log_exception()
192 return False 191 return False
193 return True 192 return True
194 193
195 def _test_names(self, loader, names): 194 def _test_names(self, loader, names):
196 parallel_test_method_prefixes = ['test_'] 195 parallel_test_method_prefixes = ['test_']
197 serial_test_method_prefixes = ['serial_test_']
198 196
199 parallel_tests = [] 197 parallel_tests = []
200 loader.test_method_prefixes = parallel_test_method_prefixes 198 loader.test_method_prefixes = parallel_test_method_prefixes
201 for name in names: 199 for name in names:
202 parallel_tests.extend(self._all_test_names(loader.loadTestsFromName( name, None))) 200 parallel_tests.extend(self._all_test_names(loader.loadTestsFromName( name, None)))
203 201
204 serial_tests = [] 202 return parallel_tests
205 loader.test_method_prefixes = serial_test_method_prefixes
206 for name in names:
207 serial_tests.extend(self._all_test_names(loader.loadTestsFromName(na me, None)))
208
209 # loader.loadTestsFromName() will not verify that names begin with one o f the test_method_prefixes
210 # if the names were explicitly provided (e.g., MainTest.test_basic), so this means that any individual
211 # tests will be included in both parallel_tests and serial_tests, and we need to de-dup them.
212 serial_tests = list(set(serial_tests).difference(set(parallel_tests)))
213
214 return (parallel_tests, serial_tests)
215 203
216 def _all_test_names(self, suite): 204 def _all_test_names(self, suite):
217 names = [] 205 names = []
218 if hasattr(suite, '_tests'): 206 if hasattr(suite, '_tests'):
219 for t in suite._tests: 207 for t in suite._tests:
220 names.extend(self._all_test_names(t)) 208 names.extend(self._all_test_names(t))
221 else: 209 else:
222 names.append(unit_test_name(suite)) 210 names.append(unit_test_name(suite))
223 return names 211 return names
224 212
(...skipping 12 matching lines...) Expand all
237 if not hasattr(getattr(testCaseClass, attrname), '__call__'): 225 if not hasattr(getattr(testCaseClass, attrname), '__call__'):
238 return False 226 return False
239 return (any(attrname.startswith(prefix) for prefix in self.test_meth od_prefixes)) 227 return (any(attrname.startswith(prefix) for prefix in self.test_meth od_prefixes))
240 testFnNames = filter(isTestMethod, dir(testCaseClass)) 228 testFnNames = filter(isTestMethod, dir(testCaseClass))
241 testFnNames.sort() 229 testFnNames.sort()
242 return testFnNames 230 return testFnNames
243 231
244 232
245 if __name__ == '__main__': 233 if __name__ == '__main__':
246 sys.exit(main()) 234 sys.exit(main())
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698