1# Copyright 2012 the V8 project authors. All rights reserved. 2# Redistribution and use in source and binary forms, with or without 3# modification, are permitted provided that the following conditions are 4# met: 5# 6# * Redistributions of source code must retain the above copyright 7# notice, this list of conditions and the following disclaimer. 8# * Redistributions in binary form must reproduce the above 9# copyright notice, this list of conditions and the following 10# disclaimer in the documentation and/or other materials provided 11# with the distribution. 12# * Neither the name of Google Inc. nor the names of its 13# contributors may be used to endorse or promote products derived 14# from this software without specific prior written permission. 15# 16# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 17# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 18# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 19# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 20# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 21# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 22# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 28 29import signal 30import copy 31 32from ..local import utils 33 34 35class Output(object): 36 37 def __init__(self, exit_code, timed_out, stdout, stderr, pid, duration): 38 self.exit_code = exit_code 39 self.timed_out = timed_out 40 self.stdout = stdout 41 self.stderr = stderr 42 self.pid = pid 43 self.duration = duration 44 45 def without_text(self): 46 """Returns copy of the output without stdout and stderr.""" 47 other = copy.copy(self) 48 other.stdout = None 49 other.stderr = None 50 return other 51 52 def HasCrashed(self): 53 if utils.IsWindows(): 54 return 0x80000000 & self.exit_code and not (0x3FFFFF00 & self.exit_code) 55 else: 56 # Timed out tests will have exit_code -signal.SIGTERM. 57 if self.timed_out: 58 return False 59 return (self.exit_code < 0 and 60 self.exit_code != -signal.SIGABRT) 61 62 def HasTimedOut(self): 63 return self.timed_out 64