def test_manual(self): try: sys.path = [self.tdir]+sys.path pdf = ProjDirFactory(self.tdir, use_observer=False) expected = ['mydrv.MyDrv', 'mydrv.MyDrv2', 'mycomp.MyComp'] types = pdf.get_available_types() typenames = [n for n, mdata in types] self.assertEqual(set(typenames), set(expected)) # now try creating a MyDrv mydrv = pdf.create('mydrv.MyDrv') self.assertTrue(isinstance(mydrv, Driver)) # now create a new file fpath = os.path.join(self.tdir, 'mycomp2.py') with open(fpath, 'w') as f: f.write(""" from openmdao.main.api import Component class MyComp2(Component): pass """) added_set = set() changed_set = set() deleted_set = set() pdf.on_modified(fpath, added_set, changed_set, deleted_set) # manual notification types = pdf.get_available_types() typenames = [n for n, mdata in types] self.assertEqual(set(typenames), set(expected + ['mycomp2.MyComp2'])) self.assertEqual(set(['mycomp2.MyComp2']), added_set) self.assertEqual(set(), changed_set) self.assertEqual(set(), deleted_set) # now test removal os.remove(fpath) deleted_set = set() pdf.on_deleted(fpath, deleted_set) # manual notification types = pdf.get_available_types() typenames = [n for n, mdata in types] self.assertEqual(set(typenames), set(expected)) self.assertEqual(set(['mycomp2.MyComp2']), deleted_set) # now try modifying an existing file time.sleep(2) # Windows timestamp granularity is one second. fpath = os.path.join(self.tdir, 'mydrv.py') with open(fpath, 'w') as f: f.write(""" from openmdao.main.api import Component class MyDrv(Component): #old MyDrv was a Driver, new one is just a Component pass class Foo(Component): pass """) added_set = set() changed_set = set() deleted_set = set() pdf.on_modified(fpath, added_set, changed_set, deleted_set) # manual notification expected = ['mydrv.MyDrv', 'mydrv.Foo', 'mycomp.MyComp'] types = pdf.get_available_types() typenames = [n for n, mdata in types] self.assertEqual(set(typenames), set(expected)) self.assertEqual(set(['mydrv.Foo']), added_set) self.assertEqual(set(['mydrv.MyDrv']), changed_set) self.assertEqual(set(['mydrv.MyDrv2']), deleted_set) finally: sys.path = sys.path[1:]