1557 """Run the 'program'. 1559 'program' -- The path to the program to run. 1561 'arguments' -- A list of the arguments to the program. This 1562 list must contain a first argument corresponding to 'argv[0]'. 1564 'context' -- A 'Context' giving run-time parameters to the 1567 'result' -- A 'Result' object. The outcome will be 1568 'Result.PASS' when this method is called. The 'result' may be 1569 modified by this method to indicate outcomes other than 1570 'Result.PASS' or to add annotations. 1572 @attention: This method has been copied from command.ExecTestBase 1573 (QMTest 2.3.0) and modified to keep stdout and stderr 1574 for tests that have been terminated by a signal. 1575 (Fundamental for debugging in the Application Area) 1579 environment = self.MakeEnvironment(context)
1581 if "slc6" in environment.get(
'CMTCONFIG',
''):
1582 environment[
'TERM'] =
'dumb' 1595 exit_status = e.Run(arguments, environment, path = program)
1597 if e.stack_trace_file
and os.path.exists(e.stack_trace_file):
1598 stack_trace = open(e.stack_trace_file).
read()
1599 os.remove(e.stack_trace_file)
1603 result[
"ExecTest.stack_trace"] = result.Quote(stack_trace)
1606 if (sys.platform ==
"win32" or os.WIFEXITED(exit_status)
1612 if self.exit_code
is None:
1614 elif sys.platform ==
"win32":
1615 exit_code = exit_status
1617 exit_code = os.WEXITSTATUS(exit_status)
1622 result[
"ExecTest.exit_code"] = str(exit_code)
1623 result[
"ExecTest.stdout"] = result.Quote(stdout)
1624 result[
"ExecTest.stderr"] = result.Quote(stderr)
1626 if exit_code != self.exit_code:
1627 causes.append(
"exit_code")
1628 result[
"ExecTest.expected_exit_code"] \
1629 = str(self.exit_code)
1634 result.Fail(
"Unexpected %s." % string.join(causes,
", "))
1635 elif os.WIFSIGNALED(exit_status):
1638 signal_number = str(os.WTERMSIG(exit_status))
1640 result.Fail(
"Program terminated by signal.")
1644 result.Fail(
"Exceeded time limit (%ds), terminated." % timeout)
1645 result[
"ExecTest.signal_number"] = signal_number
1646 result[
"ExecTest.stdout"] = result.Quote(e.stdout)
1647 result[
"ExecTest.stderr"] = result.Quote(e.stderr)
1649 result[
"ExecTest.expected_signal_number"] = str(self.
signal)
1650 elif os.WIFSTOPPED(exit_status):
1653 signal_number = str(os.WSTOPSIG(exit_status))
1655 result.Fail(
"Program stopped by signal.")
1659 result.Fail(
"Exceeded time limit (%ds), stopped." % timeout)
1660 result[
"ExecTest.signal_number"] = signal_number
1661 result[
"ExecTest.stdout"] = result.Quote(e.stdout)
1662 result[
"ExecTest.stderr"] = result.Quote(e.stderr)
1666 result.Fail(
"Program did not terminate normally.")
1672 result[
"ExecTest.stdout"] = result[
"ExecTest.stdout"].replace(esc,repr_esc)
def read(f, regex='.*', skipevents=0)
def RunProgram(self, program, arguments, context, result)
def ValidateOutput(self, stdout, stderr, result)