xref: /petsc/src/binding/petsc4py/test/test_stdout.py (revision 552edb6364df478b294b3111f33a8f37ca096b20)
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