blob: ad93077be90d52deb9034358f554046c6e7974e3 [file] [log] [blame]
# Copyright 2017 the V8 project authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
from ..local import statusfile
from ..outproc import base as outproc_base
from ..testproc.result import Result
# Only check the exit code of the predictable_wrapper in
# verify-predictable mode. Negative tests are not supported as they
# usually also don't print allocation hashes. There are two versions of
# negative tests: one specified by the test, the other specified through
# the status file (e.g. known bugs).
def get_outproc(test):
output_proc = test.output_proc
if output_proc.negative or statusfile.FAIL in test.expected_outcomes:
# TODO(majeski): Skip these tests instead of having special outproc.
return NeverUnexpectedOutputOutProc(output_proc)
return OutProc(output_proc)
class OutProc(outproc_base.BaseOutProc):
"""Output processor wrapper for predictable mode. It has custom process and
has_unexpected_output implementation, but for all other methods it simply
calls wrapped output processor.
"""
def __init__(self, _outproc):
super(OutProc, self).__init__()
self._outproc = _outproc
def process(self, output):
return Result(self.has_unexpected_output(output), output)
def has_unexpected_output(self, output):
return output.exit_code != 0
def get_outcome(self, output):
return self._outproc.get_outcome(output)
@property
def negative(self):
return self._outproc.negative
@property
def expected_outcomes(self):
return self._outproc.expected_outcomes
class NeverUnexpectedOutputOutProc(OutProc):
"""Output processor wrapper for tests that we will return False for
has_unexpected_output in the predictable mode.
"""
def has_unexpected_output(self, output):
return False