1import unittest 2 3# -------------------------------------------------------------------- 4 5 6class TestStdout(unittest.TestCase): 7 def testStdoutRedirect(self): 8 from io import StringIO 9 import sys 10 prevstdout = sys.stdout 11 prevstderr = sys.stderr 12 sys.stdout = StringIO() 13 sys.stderr = StringIO() 14 15 import numpy as np 16 from petsc4py import PETSc 17 18 if not (__name__ == '__main__'): 19 PETSc._push_python_vfprintf() 20 21 a = np.array([0.,0.,0.]) 22 a_vec = PETSc.Vec().createWithArray(a,comm=PETSc.COMM_SELF) 23 a_vec.view() 24 v = PETSc.Viewer.STDERR(PETSc.COMM_SELF) 25 v.printfASCII("Error message") 26 27 newstdout = sys.stdout 28 newstderr = sys.stderr 29 sys.stdout = prevstdout 30 sys.stderr = prevstderr 31 32 output = newstdout.getvalue() 33 error = newstderr.getvalue() 34 if not (__name__ == '__main__'): 35 PETSc._pop_python_vfprintf() 36 stdoutshouldbe = \ 37"""Vec Object: 1 MPI processes 38 type: seq 390. 400. 410. 42""" 43 stderrshouldbe = "Error message" 44 if PETSc._stdout_is_stderr(): 45 stdoutshouldbe = stdoutshouldbe + stderrshouldbe 46 stderrshouldbe = "" 47 self.assertEqual(output,stdoutshouldbe) 48 self.assertEqual(error,stderrshouldbe) 49 50 51 52# -------------------------------------------------------------------- 53 54if __name__ == '__main__': 55 unittest.main() 56 57# -------------------------------------------------------------------- 58