mirror of
https://github.com/python/cpython.git
synced 2025-11-01 18:51:43 +00:00
gh-109162: libregrtest: fix Logger (#109246)
* Pass results, quiet and pgo to Logger constructor. * Move display_progress() method from Regrtest to Logger. * No longer pass Regrtest to RunWorkers, but logger and results.
This commit is contained in:
parent
1ec45378e9
commit
0b6b05391b
3 changed files with 38 additions and 30 deletions
|
|
@ -1,6 +1,7 @@
|
|||
import os
|
||||
import time
|
||||
|
||||
from test.libregrtest.results import TestResults
|
||||
from test.libregrtest.runtests import RunTests
|
||||
from test.libregrtest.utils import print_warning, MS_WINDOWS
|
||||
|
||||
|
|
@ -9,11 +10,14 @@ if MS_WINDOWS:
|
|||
|
||||
|
||||
class Logger:
|
||||
def __init__(self):
|
||||
def __init__(self, results: TestResults, quiet: bool, pgo: bool):
|
||||
self.start_time = time.perf_counter()
|
||||
self.test_count_text = ''
|
||||
self.test_count_width = 3
|
||||
self.win_load_tracker = None
|
||||
self._results: TestResults = results
|
||||
self._quiet: bool = quiet
|
||||
self._pgo: bool = pgo
|
||||
|
||||
def log(self, line: str = '') -> None:
|
||||
empty = not line
|
||||
|
|
@ -43,6 +47,18 @@ class Logger:
|
|||
return self.win_load_tracker.getloadavg()
|
||||
return None
|
||||
|
||||
def display_progress(self, test_index: int, text: str) -> None:
|
||||
if self._quiet:
|
||||
return
|
||||
results = self._results
|
||||
|
||||
# "[ 51/405/1] test_tcl passed"
|
||||
line = f"{test_index:{self.test_count_width}}{self.test_count_text}"
|
||||
fails = len(results.bad) + len(results.env_changed)
|
||||
if fails and not self._pgo:
|
||||
line = f"{line}/{fails}"
|
||||
self.log(f"[{line}] {text}")
|
||||
|
||||
def set_tests(self, runtests: RunTests) -> None:
|
||||
if runtests.forever:
|
||||
self.test_count_text = ''
|
||||
|
|
|
|||
|
|
@ -50,7 +50,18 @@ class Regrtest:
|
|||
on the command line.
|
||||
"""
|
||||
def __init__(self, ns: Namespace):
|
||||
self.logger = Logger()
|
||||
# Log verbosity
|
||||
self.verbose: bool = ns.verbose
|
||||
self.quiet: bool = ns.quiet
|
||||
self.pgo: bool = ns.pgo
|
||||
self.pgo_extended: bool = ns.pgo_extended
|
||||
|
||||
# Test results
|
||||
self.results: TestResults = TestResults()
|
||||
self.first_state: str | None = None
|
||||
|
||||
# Logger
|
||||
self.logger = Logger(self.results, self.quiet, self.pgo)
|
||||
|
||||
# Actions
|
||||
self.want_header: bool = ns.header
|
||||
|
|
@ -92,12 +103,8 @@ class Regrtest:
|
|||
self.forever: bool = ns.forever
|
||||
self.randomize: bool = ns.randomize
|
||||
self.random_seed: int | None = ns.random_seed
|
||||
self.pgo: bool = ns.pgo
|
||||
self.pgo_extended: bool = ns.pgo_extended
|
||||
self.output_on_failure: bool = ns.verbose3
|
||||
self.timeout: float | None = ns.timeout
|
||||
self.verbose: bool = ns.verbose
|
||||
self.quiet: bool = ns.quiet
|
||||
if ns.huntrleaks:
|
||||
warmups, runs, filename = ns.huntrleaks
|
||||
filename = os.path.abspath(filename)
|
||||
|
|
@ -119,18 +126,11 @@ class Regrtest:
|
|||
self.selected: TestList = []
|
||||
self.first_runtests: RunTests | None = None
|
||||
|
||||
# test results
|
||||
self.results: TestResults = TestResults()
|
||||
|
||||
self.first_state: str | None = None
|
||||
|
||||
# used by --slowest
|
||||
self.print_slowest: bool = ns.print_slow
|
||||
|
||||
# used to display the progress bar "[ 3/100]"
|
||||
self.start_time = time.perf_counter()
|
||||
self.test_count_text = ''
|
||||
self.test_count_width = 1
|
||||
|
||||
# used by --single
|
||||
self.single_test_run: bool = ns.single
|
||||
|
|
@ -140,17 +140,6 @@ class Regrtest:
|
|||
def log(self, line=''):
|
||||
self.logger.log(line)
|
||||
|
||||
def display_progress(self, test_index, text):
|
||||
if self.quiet:
|
||||
return
|
||||
|
||||
# "[ 51/405/1] test_tcl passed"
|
||||
line = f"{test_index:{self.test_count_width}}{self.test_count_text}"
|
||||
fails = len(self.results.bad) + len(self.results.env_changed)
|
||||
if fails and not self.pgo:
|
||||
line = f"{line}/{fails}"
|
||||
self.log(f"[{line}] {text}")
|
||||
|
||||
def find_tests(self):
|
||||
if self.single_test_run:
|
||||
self.next_single_filename = os.path.join(self.tmp_dir, 'pynexttest')
|
||||
|
|
@ -344,7 +333,7 @@ class Regrtest:
|
|||
text = test_name
|
||||
if previous_test:
|
||||
text = '%s -- %s' % (text, previous_test)
|
||||
self.display_progress(test_index, text)
|
||||
self.logger.display_progress(test_index, text)
|
||||
|
||||
result = self.run_test(test_name, runtests, tracer)
|
||||
|
||||
|
|
@ -416,7 +405,7 @@ class Regrtest:
|
|||
|
||||
def _run_tests_mp(self, runtests: RunTests, num_workers: int) -> None:
|
||||
from test.libregrtest.runtest_mp import RunWorkers
|
||||
RunWorkers(self, runtests, num_workers).run()
|
||||
RunWorkers(num_workers, runtests, self.logger, self.results).run()
|
||||
|
||||
def finalize_tests(self, tracer):
|
||||
if self.next_single_filename:
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ from typing import Literal, TextIO
|
|||
from test import support
|
||||
from test.support import os_helper
|
||||
|
||||
from test.libregrtest.logger import Logger
|
||||
from test.libregrtest.main import Regrtest
|
||||
from test.libregrtest.result import TestResult, State
|
||||
from test.libregrtest.results import TestResults
|
||||
|
|
@ -360,12 +361,14 @@ def get_running(workers: list[WorkerThread]) -> list[str]:
|
|||
|
||||
|
||||
class RunWorkers:
|
||||
def __init__(self, regrtest: Regrtest, runtests: RunTests, num_workers: int) -> None:
|
||||
self.results: TestResults = regrtest.results
|
||||
self.log = regrtest.logger.log
|
||||
self.display_progress = regrtest.display_progress
|
||||
def __init__(self, num_workers: int, runtests: RunTests,
|
||||
logger: Logger, results: TestResult) -> None:
|
||||
self.num_workers = num_workers
|
||||
self.runtests = runtests
|
||||
self.log = logger.log
|
||||
self.display_progress = logger.display_progress
|
||||
self.results: TestResults = results
|
||||
|
||||
self.output: queue.Queue[QueueOutput] = queue.Queue()
|
||||
tests_iter = runtests.iter_tests()
|
||||
self.pending = MultiprocessIterator(tests_iter)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue