tests/tools/test_application.py
changeset 1819 27976d1606a4
parent 1818 925ea35edc2c
child 1822 1d7bf584eb7f
equal deleted inserted replaced
1818:925ea35edc2c 1819:27976d1606a4
    31 import traceback
    31 import traceback
    32 import ddt
    32 import ddt
    33 
    33 
    34 import conftest
    34 import conftest
    35 import Beremiz
    35 import Beremiz
       
    36 import PLCOpenEditor
    36 
    37 
    37 
    38 
    38 class UserApplicationTest(unittest.TestCase):
    39 class UserApplicationTest(unittest.TestCase):
    39     def InstallExceptionHandler(self):
    40     def InstallExceptionHandler(self):
    40         def handle_exception(e_type, e_value, e_traceback):
    41         def handle_exception(e_type, e_value, e_traceback):
   108     def OpenAllProjectElements(self):
   109     def OpenAllProjectElements(self):
   109         """Open editor for every object in the project tree"""
   110         """Open editor for every object in the project tree"""
   110         self.app.frame.ProjectTree.ExpandAll()
   111         self.app.frame.ProjectTree.ExpandAll()
   111         self.ProcessEvents()
   112         self.ProcessEvents()
   112         item = self.app.frame.ProjectTree.GetRootItem()
   113         item = self.app.frame.ProjectTree.GetRootItem()
       
   114         skip = self.GetSkippedProjectTreeItems()
       
   115         tree_id = self.app.frame.ProjectTree.GetId()
   113         while item is not None:
   116         while item is not None:
   114             self.app.frame.ProjectTree.SelectItem(item, True)
   117             self.app.frame.ProjectTree.SelectItem(item, True)
   115             self.ProcessEvents()
   118             self.ProcessEvents()
   116             id = self.app.frame.ProjectTree.GetId()
   119             if item not in skip:
   117             event = wx.lib.agw.customtreectrl.TreeEvent(
   120                 event = wx.lib.agw.customtreectrl.TreeEvent(
   118                 wx.lib.agw.customtreectrl.wxEVT_TREE_ITEM_ACTIVATED,
   121                     wx.lib.agw.customtreectrl.wxEVT_TREE_ITEM_ACTIVATED,
   119                 id, item)
   122                     tree_id, item)
   120             self.app.frame.OnProjectTreeItemActivated(event)
   123                 self.app.frame.OnProjectTreeItemActivated(event)
   121             self.ProcessEvents()
   124             self.ProcessEvents()
   122             item = self.app.frame.ProjectTree.GetNextVisible(item)
   125             item = self.app.frame.ProjectTree.GetNextVisible(item)
   123 
   126 
   124     def CheckTestProject(self, project):
   127     def CheckTestProject(self, project):
   125         sys.argv = ["", project]
   128         sys.argv = ["", project]
   175         project = self.GetProjectPath(name)
   178         project = self.GetProjectPath(name)
   176         print "Testing example " + name
   179         print "Testing example " + name
   177         self.CheckTestProject(project)
   180         self.CheckTestProject(project)
   178 
   181 
   179 
   182 
       
   183 class PLCOpenEditorApplicationTest(BeremizApplicationTest):
       
   184     """Test PLCOpenEditor as whole application"""
       
   185 
       
   186     def StartApp(self):
       
   187         self.app = PLCOpenEditor.PLCOpenEditorApp()
       
   188         # disable default exception handler in application
       
   189         self.app.InstallExceptionHandler = lambda: None
       
   190         self.InstallExceptionHandler()
       
   191         self.app.Show()
       
   192         self.ProcessEvents()
       
   193         self.app.frame.ShowFullScreen(True)
       
   194         self.ProcessEvents()
       
   195 
       
   196     def FinishApp(self):
       
   197         wx.CallAfter(self.app.frame.Close)
       
   198         self.app.MainLoop()
       
   199         time.sleep(1)
       
   200         self.app = None
       
   201 
       
   202     def GetSkippedProjectTreeItems(self):
       
   203         """
       
   204         Returns the list of skipped items in the project tree.
       
   205 
       
   206         Root item opens dialog window for project settings.
       
   207         To avoid code that handles closing dialog windows just skip this item.
       
   208         """
       
   209         return [self.app.frame.ProjectTree.GetRootItem()]
       
   210 
       
   211     def GetUserActions(self):
       
   212         return []
       
   213 
       
   214     def GetProjectPath(self, project):
       
   215         """Open PLC program in every Beremiz test project"""
       
   216         project_dir = BeremizApplicationTest.GetProjectPath(self, project)
       
   217         return os.path.join(project_dir, "plc.xml")
       
   218 
       
   219 
   180 if __name__ == '__main__':
   220 if __name__ == '__main__':
   181     unittest.main()
   221     unittest.main()