122d6dc08SStefano Zampini# -------------------------------------------------------------------- 222d6dc08SStefano Zampini 322d6dc08SStefano Zampinifrom petsc4py import PETSc 422d6dc08SStefano Zampiniimport unittest 522d6dc08SStefano Zampini 622d6dc08SStefano Zampini# -------------------------------------------------------------------- 722d6dc08SStefano Zampini 822d6dc08SStefano Zampini 922d6dc08SStefano Zampiniclass EmptyViewer: 10*27380327SStefano Zampini def __init__(self): 11*27380327SStefano Zampini self.log = {} 12*27380327SStefano Zampini 13*27380327SStefano Zampini def _log(self, method, *args): 14*27380327SStefano Zampini self.log.setdefault(method, 0) 15*27380327SStefano Zampini self.log[method] += 1 16*27380327SStefano Zampini 1722d6dc08SStefano Zampini def setUp(self, viewer): 18*27380327SStefano Zampini self._log('setUp') 1922d6dc08SStefano Zampini 2022d6dc08SStefano Zampini def view(self, viewer, outviewer): 21*27380327SStefano Zampini self._log('view') 2222d6dc08SStefano Zampini 23*27380327SStefano Zampini def setFromOptions(self, viewer): 24*27380327SStefano Zampini self._log('setFromOptions') 2522d6dc08SStefano Zampini 2622d6dc08SStefano Zampini def flush(self, viewer): 27*27380327SStefano Zampini self._log('flush') 2822d6dc08SStefano Zampini 2922d6dc08SStefano Zampini 3022d6dc08SStefano Zampiniclass PythonViewer(EmptyViewer): 3122d6dc08SStefano Zampini obj_viewed = [] 3222d6dc08SStefano Zampini 3322d6dc08SStefano Zampini def viewObject(self, viewer, pobj): 3422d6dc08SStefano Zampini self.obj_viewed.append(pobj.klass) 3522d6dc08SStefano Zampini 3622d6dc08SStefano Zampini 3722d6dc08SStefano Zampini# -------------------------------------------------------------------- 3822d6dc08SStefano Zampini 3922d6dc08SStefano Zampini 4022d6dc08SStefano Zampiniclass BaseTestViewPYTHON: 4122d6dc08SStefano Zampini ContextClass = None 4222d6dc08SStefano Zampini ContextName = None 4322d6dc08SStefano Zampini 4422d6dc08SStefano Zampini def setUp(self): 45*27380327SStefano Zampini self.viewer = PETSc.Viewer() 46*27380327SStefano Zampini self.viewer.create(PETSc.COMM_SELF) 47*27380327SStefano Zampini self.viewer.setType(PETSc.Viewer.Type.PYTHON) 4822d6dc08SStefano Zampini if self.ContextClass is not None: 4922d6dc08SStefano Zampini ctx = self.ContextClass() 5022d6dc08SStefano Zampini self.viewer.setPythonContext(ctx) 51*27380327SStefano Zampini self.viewer.setFromOptions() 52*27380327SStefano Zampini self.viewer.setUp() 5322d6dc08SStefano Zampini elif self.ContextName is not None: 5422d6dc08SStefano Zampini self.viewer.setPythonType(self.ContextName) 55*27380327SStefano Zampini self.viewer.setFromOptions() 56*27380327SStefano Zampini self.viewer.setUp() 57*27380327SStefano Zampini ctx = self.viewer.getPythonContext() 58*27380327SStefano Zampini if ctx is not None: 59*27380327SStefano Zampini self.assertTrue(ctx.log['setFromOptions'] == 1) 60*27380327SStefano Zampini self.assertTrue(ctx.log['setUp'] == 1) 6122d6dc08SStefano Zampini 6222d6dc08SStefano Zampini def tearDown(self): 6322d6dc08SStefano Zampini self.viewer.destroy() 6422d6dc08SStefano Zampini PETSc.garbage_cleanup() 6522d6dc08SStefano Zampini 6622d6dc08SStefano Zampini def testGetType(self): 6722d6dc08SStefano Zampini ctx = self.viewer.getPythonContext() 6822d6dc08SStefano Zampini pytype = None 6922d6dc08SStefano Zampini if ctx is not None: 7022d6dc08SStefano Zampini pytype = f'{ctx.__module__}.{type(ctx).__name__}' 7122d6dc08SStefano Zampini self.assertTrue(self.viewer.getPythonType() == pytype) 7222d6dc08SStefano Zampini 7322d6dc08SStefano Zampini def testViewObject(self): 7422d6dc08SStefano Zampini v = PETSc.Vec().create(PETSc.COMM_SELF) 7522d6dc08SStefano Zampini self.viewer.viewObjectPython(v) 7622d6dc08SStefano Zampini v.destroy() 7722d6dc08SStefano Zampini v = PETSc.KSP().create(PETSc.COMM_SELF) 7822d6dc08SStefano Zampini self.viewer.viewObjectPython(v) 7922d6dc08SStefano Zampini v.destroy() 8022d6dc08SStefano Zampini v = PETSc.DM().create(PETSc.COMM_SELF) 8122d6dc08SStefano Zampini v.setFromOptions() 8222d6dc08SStefano Zampini self.viewer.viewObjectPython(v) 8322d6dc08SStefano Zampini v.destroy() 8422d6dc08SStefano Zampini ctx = self.viewer.getPythonContext() 8522d6dc08SStefano Zampini if ctx is not None and hasattr(ctx, 'obj_viewed'): 8622d6dc08SStefano Zampini ov = ctx.obj_viewed 8722d6dc08SStefano Zampini self.assertTrue(len(ov) == 3) 8822d6dc08SStefano Zampini self.assertTrue(ov[0] == 'Vec') 8922d6dc08SStefano Zampini self.assertTrue(ov[1] == 'KSP') 9022d6dc08SStefano Zampini self.assertTrue(ov[2] == 'DM') 9122d6dc08SStefano Zampini 9222d6dc08SStefano Zampini # def testView(self): 9322d6dc08SStefano Zampini # self.viewer.view() 9422d6dc08SStefano Zampini 9522d6dc08SStefano Zampini 9622d6dc08SStefano Zampiniclass TestNone(BaseTestViewPYTHON, unittest.TestCase): 9722d6dc08SStefano Zampini ContextClass = None 9822d6dc08SStefano Zampini 9922d6dc08SStefano Zampini 10022d6dc08SStefano Zampiniclass TestEmptyViewer(BaseTestViewPYTHON, unittest.TestCase): 10122d6dc08SStefano Zampini ContextClass = EmptyViewer 10222d6dc08SStefano Zampini 10322d6dc08SStefano Zampini 10422d6dc08SStefano Zampiniclass TestPythonView(BaseTestViewPYTHON, unittest.TestCase): 10522d6dc08SStefano Zampini ContextClass = PythonViewer 10622d6dc08SStefano Zampini 10722d6dc08SStefano Zampini 10822d6dc08SStefano Zampini# -------------------------------------------------------------------- 10922d6dc08SStefano Zampini 11022d6dc08SStefano Zampiniif __name__ == '__main__': 11122d6dc08SStefano Zampini unittest.main() 112