Skip to content

Commit 0b6b053

Browse files
authored
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.
1 parent 1ec4537 commit 0b6b053

File tree

3 files changed

+38
-30
lines changed

3 files changed

+38
-30
lines changed

Lib/test/libregrtest/logger.py

+17-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import os
22
import time
33

4+
from test.libregrtest.results import TestResults
45
from test.libregrtest.runtests import RunTests
56
from test.libregrtest.utils import print_warning, MS_WINDOWS
67

@@ -9,11 +10,14 @@
910

1011

1112
class Logger:
12-
def __init__(self):
13+
def __init__(self, results: TestResults, quiet: bool, pgo: bool):
1314
self.start_time = time.perf_counter()
1415
self.test_count_text = ''
1516
self.test_count_width = 3
1617
self.win_load_tracker = None
18+
self._results: TestResults = results
19+
self._quiet: bool = quiet
20+
self._pgo: bool = pgo
1721

1822
def log(self, line: str = '') -> None:
1923
empty = not line
@@ -43,6 +47,18 @@ def get_load_avg(self) -> float | None:
4347
return self.win_load_tracker.getloadavg()
4448
return None
4549

50+
def display_progress(self, test_index: int, text: str) -> None:
51+
if self._quiet:
52+
return
53+
results = self._results
54+
55+
# "[ 51/405/1] test_tcl passed"
56+
line = f"{test_index:{self.test_count_width}}{self.test_count_text}"
57+
fails = len(results.bad) + len(results.env_changed)
58+
if fails and not self._pgo:
59+
line = f"{line}/{fails}"
60+
self.log(f"[{line}] {text}")
61+
4662
def set_tests(self, runtests: RunTests) -> None:
4763
if runtests.forever:
4864
self.test_count_text = ''

Lib/test/libregrtest/main.py

+14-25
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,18 @@ class Regrtest:
5050
on the command line.
5151
"""
5252
def __init__(self, ns: Namespace):
53-
self.logger = Logger()
53+
# Log verbosity
54+
self.verbose: bool = ns.verbose
55+
self.quiet: bool = ns.quiet
56+
self.pgo: bool = ns.pgo
57+
self.pgo_extended: bool = ns.pgo_extended
58+
59+
# Test results
60+
self.results: TestResults = TestResults()
61+
self.first_state: str | None = None
62+
63+
# Logger
64+
self.logger = Logger(self.results, self.quiet, self.pgo)
5465

5566
# Actions
5667
self.want_header: bool = ns.header
@@ -92,12 +103,8 @@ def __init__(self, ns: Namespace):
92103
self.forever: bool = ns.forever
93104
self.randomize: bool = ns.randomize
94105
self.random_seed: int | None = ns.random_seed
95-
self.pgo: bool = ns.pgo
96-
self.pgo_extended: bool = ns.pgo_extended
97106
self.output_on_failure: bool = ns.verbose3
98107
self.timeout: float | None = ns.timeout
99-
self.verbose: bool = ns.verbose
100-
self.quiet: bool = ns.quiet
101108
if ns.huntrleaks:
102109
warmups, runs, filename = ns.huntrleaks
103110
filename = os.path.abspath(filename)
@@ -119,18 +126,11 @@ def __init__(self, ns: Namespace):
119126
self.selected: TestList = []
120127
self.first_runtests: RunTests | None = None
121128

122-
# test results
123-
self.results: TestResults = TestResults()
124-
125-
self.first_state: str | None = None
126-
127129
# used by --slowest
128130
self.print_slowest: bool = ns.print_slow
129131

130132
# used to display the progress bar "[ 3/100]"
131133
self.start_time = time.perf_counter()
132-
self.test_count_text = ''
133-
self.test_count_width = 1
134134

135135
# used by --single
136136
self.single_test_run: bool = ns.single
@@ -140,17 +140,6 @@ def __init__(self, ns: Namespace):
140140
def log(self, line=''):
141141
self.logger.log(line)
142142

143-
def display_progress(self, test_index, text):
144-
if self.quiet:
145-
return
146-
147-
# "[ 51/405/1] test_tcl passed"
148-
line = f"{test_index:{self.test_count_width}}{self.test_count_text}"
149-
fails = len(self.results.bad) + len(self.results.env_changed)
150-
if fails and not self.pgo:
151-
line = f"{line}/{fails}"
152-
self.log(f"[{line}] {text}")
153-
154143
def find_tests(self):
155144
if self.single_test_run:
156145
self.next_single_filename = os.path.join(self.tmp_dir, 'pynexttest')
@@ -344,7 +333,7 @@ def run_tests_sequentially(self, runtests):
344333
text = test_name
345334
if previous_test:
346335
text = '%s -- %s' % (text, previous_test)
347-
self.display_progress(test_index, text)
336+
self.logger.display_progress(test_index, text)
348337

349338
result = self.run_test(test_name, runtests, tracer)
350339

@@ -416,7 +405,7 @@ def get_state(self):
416405

417406
def _run_tests_mp(self, runtests: RunTests, num_workers: int) -> None:
418407
from test.libregrtest.runtest_mp import RunWorkers
419-
RunWorkers(self, runtests, num_workers).run()
408+
RunWorkers(num_workers, runtests, self.logger, self.results).run()
420409

421410
def finalize_tests(self, tracer):
422411
if self.next_single_filename:

Lib/test/libregrtest/runtest_mp.py

+7-4
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
from test import support
1515
from test.support import os_helper
1616

17+
from test.libregrtest.logger import Logger
1718
from test.libregrtest.main import Regrtest
1819
from test.libregrtest.result import TestResult, State
1920
from test.libregrtest.results import TestResults
@@ -360,12 +361,14 @@ def get_running(workers: list[WorkerThread]) -> list[str]:
360361

361362

362363
class RunWorkers:
363-
def __init__(self, regrtest: Regrtest, runtests: RunTests, num_workers: int) -> None:
364-
self.results: TestResults = regrtest.results
365-
self.log = regrtest.logger.log
366-
self.display_progress = regrtest.display_progress
364+
def __init__(self, num_workers: int, runtests: RunTests,
365+
logger: Logger, results: TestResult) -> None:
367366
self.num_workers = num_workers
368367
self.runtests = runtests
368+
self.log = logger.log
369+
self.display_progress = logger.display_progress
370+
self.results: TestResults = results
371+
369372
self.output: queue.Queue[QueueOutput] = queue.Queue()
370373
tests_iter = runtests.iter_tests()
371374
self.pending = MultiprocessIterator(tests_iter)

0 commit comments

Comments
 (0)