19e2fe138SToby Isaacimport unittest 29e2fe138SToby Isaac 39e2fe138SToby Isaac# -------------------------------------------------------------------- 49e2fe138SToby Isaac 59e2fe138SToby Isaac 69e2fe138SToby Isaacclass TestStdout(unittest.TestCase): 79e2fe138SToby Isaac def testStdoutRedirect(self): 89e2fe138SToby Isaac from io import StringIO 99e2fe138SToby Isaac import sys 10*6f336411SStefano Zampini 119e2fe138SToby Isaac prevstdout = sys.stdout 129e2fe138SToby Isaac prevstderr = sys.stderr 139e2fe138SToby Isaac sys.stdout = StringIO() 149e2fe138SToby Isaac sys.stderr = StringIO() 159e2fe138SToby Isaac 169e2fe138SToby Isaac import numpy as np 179e2fe138SToby Isaac from petsc4py import PETSc 189e2fe138SToby Isaac 199e2fe138SToby Isaac if not (__name__ == '__main__'): 209e2fe138SToby Isaac PETSc._push_python_vfprintf() 219e2fe138SToby Isaac 22*6f336411SStefano Zampini a = np.array([0.0, 0.0, 0.0], dtype=PETSc.ScalarType) 239e2fe138SToby Isaac a_vec = PETSc.Vec().createWithArray(a, comm=PETSc.COMM_SELF) 249e2fe138SToby Isaac a_vec.view() 259e2fe138SToby Isaac v = PETSc.Viewer.STDERR(PETSc.COMM_SELF) 26*6f336411SStefano Zampini v.printfASCII('Error message') 279e2fe138SToby Isaac 289e2fe138SToby Isaac newstdout = sys.stdout 299e2fe138SToby Isaac newstderr = sys.stderr 309e2fe138SToby Isaac sys.stdout = prevstdout 319e2fe138SToby Isaac sys.stderr = prevstderr 329e2fe138SToby Isaac 339e2fe138SToby Isaac output = newstdout.getvalue() 349e2fe138SToby Isaac error = newstderr.getvalue() 359e2fe138SToby Isaac if not (__name__ == '__main__'): 369e2fe138SToby Isaac PETSc._pop_python_vfprintf() 37*6f336411SStefano Zampini stdoutshouldbe = """Vec Object: 1 MPI process 389e2fe138SToby Isaac type: seq 399e2fe138SToby Isaac0. 409e2fe138SToby Isaac0. 419e2fe138SToby Isaac0. 429e2fe138SToby Isaac""" 43*6f336411SStefano Zampini stderrshouldbe = 'Error message' 449e2fe138SToby Isaac if PETSc._stdout_is_stderr(): 459e2fe138SToby Isaac stdoutshouldbe = stdoutshouldbe + stderrshouldbe 46*6f336411SStefano Zampini stderrshouldbe = '' 479e2fe138SToby Isaac self.assertEqual(output, stdoutshouldbe) 489e2fe138SToby Isaac self.assertEqual(error, stderrshouldbe) 499e2fe138SToby Isaac 509e2fe138SToby Isaac 519e2fe138SToby Isaac# -------------------------------------------------------------------- 529e2fe138SToby Isaac 539e2fe138SToby Isaacif __name__ == '__main__': 549e2fe138SToby Isaac unittest.main() 559e2fe138SToby Isaac 569e2fe138SToby Isaac# -------------------------------------------------------------------- 57