1# -------------------------------------------------------------------- 2 3if __name__ == '__main__': 4 import sys 5 import petsc4py 6 7 petsc4py.init(sys.argv + ['-log_view']) 8 9# -------------------------------------------------------------------- 10 11from petsc4py import PETSc 12import unittest 13 14# -------------------------------------------------------------------- 15 16 17class TestLog(unittest.TestCase): 18 def setUp(self): 19 # PETSc.Log.begin() 20 # register stages 21 self.stage1 = PETSc.Log.Stage('Stage 1') 22 self.stage2 = PETSc.Log.Stage('Stage 2') 23 # register classes 24 self.klassA = PETSc.Log.Class('Class A') 25 self.klassB = PETSc.Log.Class('Class B') 26 # register events 27 self.event1 = PETSc.Log.Event('Event 1') # no class 28 self.event2 = PETSc.Log.Event('Event 2') # no class 29 self.eventA = PETSc.Log.Event('Event A', self.klassA) 30 self.eventB = PETSc.Log.Event('Event B', self.klassB) 31 32 def testGetName(self): 33 self.assertEqual(self.klassA.name, 'Class A') 34 self.assertEqual(self.klassB.name, 'Class B') 35 self.assertEqual(self.event1.name, 'Event 1') 36 self.assertEqual(self.event2.name, 'Event 2') 37 self.assertEqual(self.eventA.name, 'Event A') 38 self.assertEqual(self.eventB.name, 'Event B') 39 self.assertEqual(self.stage1.name, 'Stage 1') 40 self.assertEqual(self.stage2.name, 'Stage 2') 41 42 def testLogBeginEnd(self): 43 # ----- 44 self._run_events() # in main stage 45 self._run_stages() # in user stages 46 # ----- 47 for event in self._get_events(): 48 event.deactivate() 49 event.setActive(False) 50 event.active = False 51 self._run_events() # should not be logged 52 for event in self._get_events(): 53 event.activate() 54 event.setActive(True) 55 event.active = True 56 # ----- 57 for klass in self._get_classes(): 58 klass.deactivate() 59 klass.setActive(False) 60 klass.active = False 61 self._run_events() # A and B should not be logged 62 for klass in self._get_classes(): 63 klass.activate() 64 klass.setActive(True) 65 klass.active = True 66 # ----- 67 for stage in self._get_stages(): 68 active = stage.getActive() 69 self.assertTrue(active) 70 self.assertTrue(stage.active) 71 stage.setActive(False) 72 active = stage.getActive() 73 self.assertFalse(active) 74 self.assertFalse(stage.active) 75 self._run_stages() # should not be logged 76 for stage in self._get_stages(): 77 stage.setActive(True) 78 stage.active = True 79 active = stage.getActive() 80 self.assertTrue(active) 81 self.assertTrue(stage.active) 82 # ----- 83 self._run_events() 84 self._run_stages() 85 86 def _run_stages(self): 87 for stage in self._get_stages(): 88 self._run_events(stage) 89 90 def _get_stages(self): 91 return (self.stage1, self.stage2) 92 93 def _get_classes(self): 94 return (self.klassA, self.klassB) 95 96 def _get_events(self): 97 return (self.event1, self.event2, self.eventA, self.eventB) 98 99 def _run_events(self, stage=None): 100 if stage is not None: 101 stage.push() 102 self._events_begin() 103 self._events_end() 104 if stage is not None: 105 stage.pop() 106 107 def _events_begin(self): 108 for event in self._get_events(): 109 event.begin() 110 111 def _events_end(self): 112 for event in reversed(self._get_events()): 113 event.end() 114 115 116# -------------------------------------------------------------------- 117 118if __name__ == '__main__': 119 unittest.main() 120