Lines Matching refs:self

68     def __init__(self):
70 self.ns = None
73 self.tests = []
74 self.selected = []
77 self.good = []
78 self.bad = []
79 self.skipped = []
80 self.resource_denieds = []
81 self.environment_changed = []
82 self.run_no_tests = []
83 self.need_rerun = []
84 self.rerun = []
85 self.first_result = None
86 self.interrupted = False
89 self.test_times = []
92 self.tracer = None
95 self.start_time = time.monotonic()
96 self.test_count = ''
97 self.test_count_width = 1
100 self.next_single_test = None
101 self.next_single_filename = None
104 self.testsuite_xml = None
107 self.win_load_tracker = None
108 self.tmp_dir = None
109 self.worker_test_name = None
111 def get_executed(self):
112 return (set(self.good) | set(self.bad) | set(self.skipped)
113 | set(self.resource_denieds) | set(self.environment_changed)
114 | set(self.run_no_tests))
116 def accumulate_result(self, result, rerun=False):
120 self.test_times.append((result.duration_sec, test_name))
123 self.good.append(test_name)
125 self.skipped.append(test_name)
126 self.resource_denieds.append(test_name)
128 self.skipped.append(test_name)
130 self.environment_changed.append(test_name)
133 self.bad.append(test_name)
134 self.need_rerun.append(result)
136 self.run_no_tests.append(test_name)
138 self.interrupted = True
143 self.bad.remove(test_name)
150 self.testsuite_xml.append(ET.fromstring(e))
155 def log(self, line=''):
159 load_avg = self.getloadavg()
164 test_time = time.monotonic() - self.start_time
176 def display_progress(self, test_index, text):
177 if self.ns.quiet:
181 line = f"{test_index:{self.test_count_width}}{self.test_count}"
182 fails = len(self.bad) + len(self.environment_changed)
183 if fails and not self.ns.pgo:
185 self.log(f"[{line}] {text}")
187 def parse_args(self, kwargs):
191 support.junit_xml_list = self.testsuite_xml = []
198 self.worker_test_name = test_name
215 self.ns = ns
217 def find_tests(self, tests):
218 self.tests = tests
220 if self.ns.single:
221 self.next_single_filename = os.path.join(self.tmp_dir, 'pynexttest')
223 with open(self.next_single_filename, 'r') as fp:
225 self.tests = [next_test]
229 if self.ns.fromfile:
230 self.tests = []
234 with open(os.path.join(os_helper.SAVEDCWD, self.ns.fromfile)) as fp:
240 self.tests.append(match.group())
242 removepy(self.tests)
244 if self.ns.pgo:
246 setup_pgo_tests(self.ns)
250 if self.ns.exclude:
251 for arg in self.ns.args:
255 self.ns.args = []
259 if self.ns.testdir:
260 alltests = findtests(self.ns.testdir, list(), set())
262 alltests = findtests(self.ns.testdir, stdtests, nottests)
264 if not self.ns.fromfile:
265 self.selected = self.tests or self.ns.args or alltests
267 self.selected = self.tests
268 if self.ns.single:
269 self.selected = self.selected[:1]
271 pos = alltests.index(self.selected[0])
272 self.next_single_test = alltests[pos + 1]
277 if self.ns.start:
279 del self.selected[:self.selected.index(self.ns.start)]
282 % self.ns.start, file=sys.stderr)
284 if self.ns.randomize:
285 if self.ns.random_seed is None:
286 self.ns.random_seed = random.randrange(10000000)
287 random.seed(self.ns.random_seed)
288 random.shuffle(self.selected)
290 def list_tests(self):
291 for name in self.selected:
294 def _list_cases(self, suite):
299 self._list_cases(test)
304 def list_cases(self):
306 support.set_match_tests(self.ns.match_tests, self.ns.ignore_tests)
308 for test_name in self.selected:
309 abstest = get_abs_module(self.ns, test_name)
312 self._list_cases(suite)
314 self.skipped.append(test_name)
316 if self.skipped:
318 print(count(len(self.skipped), "test"), "skipped:", file=sys.stderr)
319 printlist(self.skipped, file=sys.stderr)
321 def rerun_failed_tests(self):
322 self.log()
324 if self.ns.python:
326 self.log(
332 self.ns.verbose = True
333 self.ns.failfast = False
334 self.ns.verbose3 = False
336 self.first_result = self.get_tests_result()
338 self.log("Re-running failed tests in verbose mode")
339 rerun_list = list(self.need_rerun)
340 self.need_rerun.clear()
343 self.rerun.append(test_name)
348 self.normalize_test_name(test_full_name, is_error=True)
351 self.normalize_test_name(test_full_name)
353 self.ns.verbose = True
354 orig_match_tests = self.ns.match_tests
356 if self.ns.match_tests is None:
357 self.ns.match_tests = []
358 self.ns.match_tests.extend(error_names)
359 self.ns.match_tests.extend(failure_names)
360 matching = "matching: " + ", ".join(self.ns.match_tests)
361 self.log(f"Re-running {test_name} in verbose mode ({matching})")
363 self.log(f"Re-running {test_name} in verbose mode")
364 result = runtest(self.ns, test_name)
365 self.ns.match_tests = orig_match_tests
367 self.accumulate_result(result, rerun=True)
372 if self.bad:
373 print(count(len(self.bad), 'test'), "failed again:")
374 printlist(self.bad)
376 self.display_result()
378 def normalize_test_name(self, test_full_name, *, is_error=False):
393 def display_result(self):
395 if self.ns.pgo:
399 print("== Tests result: %s ==" % self.get_tests_result())
401 if self.interrupted:
404 omitted = set(self.selected) - self.get_executed()
410 if self.good and not self.ns.quiet:
412 if (not self.bad
413 and not self.skipped
414 and not self.interrupted
415 and len(self.good) > 1):
417 print(count(len(self.good), "test"), "OK.")
419 if self.ns.print_slow:
420 self.test_times.sort(reverse=True)
423 for test_time, test in self.test_times[:10]:
426 if self.bad:
428 print(count(len(self.bad), "test"), "failed:")
429 printlist(self.bad)
431 if self.environment_changed:
434 count(len(self.environment_changed), "test")))
435 printlist(self.environment_changed)
437 if self.skipped and not self.ns.quiet:
439 print(count(len(self.skipped), "test"), "skipped:")
440 printlist(self.skipped)
442 if self.rerun:
444 print("%s:" % count(len(self.rerun), "re-run test"))
445 printlist(self.rerun)
447 if self.run_no_tests:
449 print(count(len(self.run_no_tests), "test"), "run no tests:")
450 printlist(self.run_no_tests)
452 def run_tests_sequential(self):
453 if self.ns.trace:
455 self.tracer = trace.Trace(trace=False, count=True)
460 if self.ns.timeout:
461 msg += " (timeout: %s)" % format_duration(self.ns.timeout)
462 self.log(msg)
465 for test_index, test_name in enumerate(self.tests, 1):
471 self.display_progress(test_index, text)
473 if self.tracer:
476 cmd = ('result = runtest(self.ns, test_name); '
477 'self.accumulate_result(result)')
479 self.tracer.runctx(cmd, globals=globals(), locals=ns)
482 result = runtest(self.ns, test_name)
483 self.accumulate_result(result)
501 if self.ns.failfast and is_failed(result, self.ns):
507 def _test_forever(self, tests):
511 if self.bad:
513 if self.ns.fail_env_changed and self.environment_changed:
516 def display_header(self):
528 def get_tests_result(self):
530 if self.bad:
532 elif self.ns.fail_env_changed and self.environment_changed:
534 elif not any((self.good, self.bad, self.skipped, self.interrupted,
535 self.environment_changed)):
538 if self.interrupted:
545 if self.first_result:
546 result = '%s then %s' % (self.first_result, result)
549 def run_tests(self):
551 if (self.ns.header
552 or not(self.ns.pgo or self.ns.quiet or self.ns.single
553 or self.tests or self.ns.args)):
554 self.display_header()
556 if self.ns.huntrleaks:
557 warmup, repetitions, _ = self.ns.huntrleaks
563 if self.ns.randomize:
564 print("Using random seed", self.ns.random_seed)
566 if self.ns.forever:
567 self.tests = self._test_forever(list(self.selected))
568 self.test_count = ''
569 self.test_count_width = 3
571 self.tests = iter(self.selected)
572 self.test_count = '/{}'.format(len(self.selected))
573 self.test_count_width = len(self.test_count) - 1
575 if self.ns.use_mp:
579 if sys.platform == 'win32' and self.worker_test_name is None:
583 self.win_load_tracker = WindowsLoadTracker()
590 run_tests_multiprocess(self)
592 if self.win_load_tracker is not None:
593 self.win_load_tracker.close()
594 self.win_load_tracker = None
596 self.run_tests_sequential()
598 def finalize(self):
599 if self.next_single_filename:
600 if self.next_single_test:
601 with open(self.next_single_filename, 'w') as fp:
602 fp.write(self.next_single_test + '\n')
604 os.unlink(self.next_single_filename)
606 if self.tracer:
607 r = self.tracer.results()
609 coverdir=self.ns.coverdir)
612 duration = time.monotonic() - self.start_time
614 print("Tests result: %s" % self.get_tests_result())
616 if self.ns.runleaks:
619 def save_xml_result(self):
620 if not self.ns.xmlpath and not self.testsuite_xml:
628 for suite in self.testsuite_xml:
639 xmlpath = os.path.join(os_helper.SAVEDCWD, self.ns.xmlpath)
644 def fix_umask(self):
654 def set_temp_dir(self):
655 if self.ns.tempdir:
656 self.tmp_dir = self.ns.tempdir
658 if not self.tmp_dir:
663 self.tmp_dir = sysconfig.get_config_var('abs_builddir')
664 if self.tmp_dir is None:
669 self.tmp_dir = sysconfig.get_config_var('srcdir')
670 self.tmp_dir = os.path.join(self.tmp_dir, 'build')
672 self.tmp_dir = tempfile.gettempdir()
674 self.tmp_dir = os.path.abspath(self.tmp_dir)
676 def create_temp_dir(self):
677 os.makedirs(self.tmp_dir, exist_ok=True)
688 if self.worker_test_name is not None:
693 test_cwd = os.path.join(self.tmp_dir, test_cwd)
696 def cleanup(self):
699 path = os.path.join(glob.escape(self.tmp_dir), 'test_python_*')
700 print("Cleanup %s directory" % self.tmp_dir)
709 def main(self, tests=None, **kwargs):
710 self.parse_args(kwargs)
712 self.set_temp_dir()
714 self.fix_umask()
716 if self.ns.cleanup:
717 self.cleanup()
720 test_cwd = self.create_temp_dir()
731 self.ns.tempdir = test_cwd
733 self._main(tests, kwargs)
742 def getloadavg(self):
743 if self.win_load_tracker is not None:
744 return self.win_load_tracker.getloadavg()
751 def _main(self, tests, kwargs):
752 if self.worker_test_name is not None:
754 run_tests_worker(self.ns, self.worker_test_name)
756 if self.ns.wait:
759 support.PGO = self.ns.pgo
760 support.PGO_EXTENDED = self.ns.pgo_extended
762 setup_tests(self.ns)
764 self.find_tests(tests)
766 if self.ns.list_tests:
767 self.list_tests()
770 if self.ns.list_cases:
771 self.list_cases()
774 self.run_tests()
775 self.display_result()
777 if self.ns.verbose2 and self.bad:
778 self.rerun_failed_tests()
780 self.finalize()
782 self.save_xml_result()
784 if self.bad:
786 if self.interrupted:
788 if self.ns.fail_env_changed and self.environment_changed: