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