xref: /petsc/src/binding/petsc4py/test/test_stdout.py (revision d5b43468fb8780a8feea140ccd6fa3e6a50411cc)
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.],dtype=PETSc.ScalarType)
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 process
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