Revert of [test] Refactoring - Use subject/observer pattern for progress indicators. (patchset #3 id:40001 of https://codereview.chromium.org/1171943002/)
Reason for revert: might break stuff Original issue's description: > [test] Refactoring - Use subject/observer pattern for progress indicators. > > This should prevent bugs caused by missing super calls in > overridden methods. The assumption is that methods of > different indicators are independent. > > Committed: https://crrev.com/fbe973ff1722a6158a5b2babce9c1a32d26a1d3b > Cr-Commit-Position: refs/heads/master@{#28866} TBR=jkummerow@chromium.org,tandrii@chromium.org NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true Review URL: https://codereview.chromium.org/1163373005 Cr-Commit-Position: refs/heads/master@{#28869}
This commit is contained in:
parent
fe97cfccf3
commit
2a3962d9d2
@ -610,14 +610,14 @@ def Execute(arch, mode, args, options, suites, workspace):
|
||||
|
||||
# Run the tests, either locally or distributed on the network.
|
||||
start_time = time.time()
|
||||
progress_indicator = progress.IndicatorNotifier()
|
||||
progress_indicator.Register(progress.PROGRESS_INDICATORS[options.progress]())
|
||||
progress_indicator = progress.PROGRESS_INDICATORS[options.progress]()
|
||||
if options.junitout:
|
||||
progress_indicator.Register(progress.JUnitTestProgressIndicator(
|
||||
options.junitout, options.junittestsuite))
|
||||
progress_indicator = progress.JUnitTestProgressIndicator(
|
||||
progress_indicator, options.junitout, options.junittestsuite)
|
||||
if options.json_test_results:
|
||||
progress_indicator.Register(progress.JsonTestProgressIndicator(
|
||||
options.json_test_results, arch, MODES[mode]["execution_mode"]))
|
||||
progress_indicator = progress.JsonTestProgressIndicator(
|
||||
progress_indicator, options.json_test_results, arch,
|
||||
MODES[mode]["execution_mode"])
|
||||
|
||||
run_networked = not options.no_network
|
||||
if not run_networked:
|
||||
|
@ -82,7 +82,7 @@ class Runner(object):
|
||||
t.id = self.total
|
||||
self.total += 1
|
||||
self.indicator = progress_indicator
|
||||
progress_indicator.SetRunner(self)
|
||||
progress_indicator.runner = self
|
||||
self.context = context
|
||||
self.succeeded = 0
|
||||
self.remaining = self.total
|
||||
|
@ -26,7 +26,6 @@
|
||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
|
||||
from functools import wraps
|
||||
import json
|
||||
import os
|
||||
import sys
|
||||
@ -55,9 +54,6 @@ class ProgressIndicator(object):
|
||||
def __init__(self):
|
||||
self.runner = None
|
||||
|
||||
def SetRunner(self, runner):
|
||||
self.runner = runner
|
||||
|
||||
def Starting(self):
|
||||
pass
|
||||
|
||||
@ -84,30 +80,6 @@ class ProgressIndicator(object):
|
||||
}
|
||||
|
||||
|
||||
class IndicatorNotifier(object):
|
||||
"""Holds a list of progress indicators and notifies them all on events."""
|
||||
def __init__(self):
|
||||
self.indicators = []
|
||||
|
||||
def Register(self, indicator):
|
||||
self.indicators.append(indicator)
|
||||
|
||||
|
||||
# Forge all generic event-dispatching methods in IndicatorNotifier, which are
|
||||
# part of the ProgressIndicator interface.
|
||||
for func_name in ProgressIndicator.__dict__:
|
||||
func = getattr(ProgressIndicator, func_name)
|
||||
if callable(func) and not func.__name__.startswith('_'):
|
||||
def wrap_functor(f):
|
||||
@wraps(f)
|
||||
def functor(self, *args, **kwargs):
|
||||
"""Generic event dispatcher."""
|
||||
for indicator in self.indicators:
|
||||
getattr(indicator, f.__name__)(*args, **kwargs)
|
||||
return functor
|
||||
setattr(IndicatorNotifier, func_name, wrap_functor(func))
|
||||
|
||||
|
||||
class SimpleProgressIndicator(ProgressIndicator):
|
||||
"""Abstract base class for {Verbose,Dots}ProgressIndicator"""
|
||||
|
||||
@ -279,19 +251,29 @@ class MonochromeProgressIndicator(CompactProgressIndicator):
|
||||
|
||||
class JUnitTestProgressIndicator(ProgressIndicator):
|
||||
|
||||
def __init__(self, junitout, junittestsuite):
|
||||
def __init__(self, progress_indicator, junitout, junittestsuite):
|
||||
self.progress_indicator = progress_indicator
|
||||
self.outputter = junit_output.JUnitTestOutput(junittestsuite)
|
||||
if junitout:
|
||||
self.outfile = open(junitout, "w")
|
||||
else:
|
||||
self.outfile = sys.stdout
|
||||
|
||||
def Starting(self):
|
||||
self.progress_indicator.runner = self.runner
|
||||
self.progress_indicator.Starting()
|
||||
|
||||
def Done(self):
|
||||
self.progress_indicator.Done()
|
||||
self.outputter.FinishAndWrite(self.outfile)
|
||||
if self.outfile != sys.stdout:
|
||||
self.outfile.close()
|
||||
|
||||
def AboutToRun(self, test):
|
||||
self.progress_indicator.AboutToRun(test)
|
||||
|
||||
def HasRun(self, test, has_unexpected_output):
|
||||
self.progress_indicator.HasRun(test, has_unexpected_output)
|
||||
fail_text = ""
|
||||
if has_unexpected_output:
|
||||
stdout = test.output.stdout.strip()
|
||||
@ -310,17 +292,25 @@ class JUnitTestProgressIndicator(ProgressIndicator):
|
||||
test.duration,
|
||||
fail_text)
|
||||
|
||||
def Heartbeat(self):
|
||||
self.progress_indicator.Heartbeat()
|
||||
|
||||
class JsonTestProgressIndicator(ProgressIndicator):
|
||||
|
||||
def __init__(self, json_test_results, arch, mode):
|
||||
def __init__(self, progress_indicator, json_test_results, arch, mode):
|
||||
self.progress_indicator = progress_indicator
|
||||
self.json_test_results = json_test_results
|
||||
self.arch = arch
|
||||
self.mode = mode
|
||||
self.results = []
|
||||
self.tests = []
|
||||
|
||||
def Starting(self):
|
||||
self.progress_indicator.runner = self.runner
|
||||
self.progress_indicator.Starting()
|
||||
|
||||
def Done(self):
|
||||
self.progress_indicator.Done()
|
||||
complete_results = []
|
||||
if os.path.exists(self.json_test_results):
|
||||
with open(self.json_test_results, "r") as f:
|
||||
@ -350,7 +340,11 @@ class JsonTestProgressIndicator(ProgressIndicator):
|
||||
with open(self.json_test_results, "w") as f:
|
||||
f.write(json.dumps(complete_results))
|
||||
|
||||
def AboutToRun(self, test):
|
||||
self.progress_indicator.AboutToRun(test)
|
||||
|
||||
def HasRun(self, test, has_unexpected_output):
|
||||
self.progress_indicator.HasRun(test, has_unexpected_output)
|
||||
# Buffer all tests for sorting the durations in the end.
|
||||
self.tests.append(test)
|
||||
if not has_unexpected_output:
|
||||
@ -372,6 +366,9 @@ class JsonTestProgressIndicator(ProgressIndicator):
|
||||
"duration": test.duration,
|
||||
})
|
||||
|
||||
def Heartbeat(self):
|
||||
self.progress_indicator.Heartbeat()
|
||||
|
||||
|
||||
PROGRESS_INDICATORS = {
|
||||
'verbose': VerboseProgressIndicator,
|
||||
|
Loading…
Reference in New Issue
Block a user