devtools/testlib.py
changeset 3418 7b49fa7e942d
parent 3230 1d25e928c299
child 3454 ad1cddc06997
equal deleted inserted replaced
3412:368c68ffb99e 3418:7b49fa7e942d
   389         return sorted((a.id, a.__class__)
   389         return sorted((a.id, a.__class__)
   390                       for a in self.vreg['views'].possible_views(req, rset=rset))
   390                       for a in self.vreg['views'].possible_views(req, rset=rset))
   391 
   391 
   392     def pactions(self, req, rset,
   392     def pactions(self, req, rset,
   393                  skipcategories=('addrelated', 'siteactions', 'useractions')):
   393                  skipcategories=('addrelated', 'siteactions', 'useractions')):
   394         return [(a.id, a.__class__)
   394         return [(a.__regid__, a.__class__)
   395                 for a in self.vreg['actions'].poss_visible_objects(req, rset=rset)
   395                 for a in self.vreg['actions'].poss_visible_objects(req, rset=rset)
   396                 if a.category not in skipcategories]
   396                 if a.category not in skipcategories]
   397 
   397 
   398     def pactions_by_cats(self, req, rset, categories=('addrelated',)):
   398     def pactions_by_cats(self, req, rset, categories=('addrelated',)):
   399         return [(a.id, a.__class__)
   399         return [(a.__regid__, a.__class__)
   400                 for a in self.vreg['actions'].poss_visible_objects(req, rset=rset)
   400                 for a in self.vreg['actions'].poss_visible_objects(req, rset=rset)
   401                 if a.category in categories]
   401                 if a.category in categories]
   402 
   402 
   403     def pactionsdict(self, req, rset,
   403     def pactionsdict(self, req, rset,
   404                      skipcategories=('addrelated', 'siteactions', 'useractions')):
   404                      skipcategories=('addrelated', 'siteactions', 'useractions')):
   466     def list_startup_views(self):
   466     def list_startup_views(self):
   467         """returns the list of startup views"""
   467         """returns the list of startup views"""
   468         req = self.request()
   468         req = self.request()
   469         for view in self.vreg['views'].possible_views(req, None):
   469         for view in self.vreg['views'].possible_views(req, None):
   470             if view.category == 'startupview':
   470             if view.category == 'startupview':
   471                 yield view.id
   471                 yield view.__regid__
   472             else:
   472             else:
   473                 not_selected(self.vreg, view)
   473                 not_selected(self.vreg, view)
   474 
   474 
   475     # web ui testing utilities #################################################
   475     # web ui testing utilities #################################################
   476 
   476 
   603         except:
   603         except:
   604             # hijack exception: generative tests stop when the exception
   604             # hijack exception: generative tests stop when the exception
   605             # is not an AssertionError
   605             # is not an AssertionError
   606             klass, exc, tcbk = sys.exc_info()
   606             klass, exc, tcbk = sys.exc_info()
   607             try:
   607             try:
   608                 msg = '[%s in %s] %s' % (klass, view.id, exc)
   608                 msg = '[%s in %s] %s' % (klass, view.__regid__, exc)
   609             except:
   609             except:
   610                 msg = '[%s in %s] undisplayable exception' % (klass, view.id)
   610                 msg = '[%s in %s] undisplayable exception' % (klass, view.__regid__)
   611             if output is not None:
   611             if output is not None:
   612                 position = getattr(exc, "position", (0,))[0]
   612                 position = getattr(exc, "position", (0,))[0]
   613                 if position:
   613                 if position:
   614                     # define filter
   614                     # define filter
   615                     output = output.splitlines()
   615                     output = output.splitlines()
   626 
   626 
   627     @nocoverage
   627     @nocoverage
   628     def _check_html(self, output, view, template='main-template'):
   628     def _check_html(self, output, view, template='main-template'):
   629         """raises an exception if the HTML is invalid"""
   629         """raises an exception if the HTML is invalid"""
   630         try:
   630         try:
   631             validatorclass = self.vid_validators[view.id]
   631             validatorclass = self.vid_validators[view.__regid__]
   632         except KeyError:
   632         except KeyError:
   633             if template is None:
   633             if template is None:
   634                 default_validator = htmlparser.HTMLValidator
   634                 default_validator = htmlparser.HTMLValidator
   635             else:
   635             else:
   636                 default_validator = htmlparser.DTDValidator
   636                 default_validator = htmlparser.DTDValidator
   792         for k, v in propdefs.items():
   792         for k, v in propdefs.items():
   793             if k.endswith('visible') and not v['default']:
   793             if k.endswith('visible') and not v['default']:
   794                 propdefs[k]['default'] = True
   794                 propdefs[k]['default'] = True
   795         for view in self.list_views_for(rset):
   795         for view in self.list_views_for(rset):
   796             backup_rset = rset._prepare_copy(rset.rows, rset.description)
   796             backup_rset = rset._prepare_copy(rset.rows, rset.description)
   797             yield InnerTest(self._testname(rset, view.id, 'view'),
   797             yield InnerTest(self._testname(rset, view.__regid__, 'view'),
   798                             self.view, view.id, rset,
   798                             self.view, view.__regid__, rset,
   799                             rset.req.reset_headers(), 'main-template')
   799                             rset.req.reset_headers(), 'main-template')
   800             # We have to do this because some views modify the
   800             # We have to do this because some views modify the
   801             # resultset's syntax tree
   801             # resultset's syntax tree
   802             rset = backup_rset
   802             rset = backup_rset
   803         for action in self.list_actions_for(rset):
   803         for action in self.list_actions_for(rset):
   804             yield InnerTest(self._testname(rset, action.id, 'action'), self._test_action, action)
   804             yield InnerTest(self._testname(rset, action.__regid__, 'action'), self._test_action, action)
   805         for box in self.list_boxes_for(rset):
   805         for box in self.list_boxes_for(rset):
   806             yield InnerTest(self._testname(rset, box.id, 'box'), box.render)
   806             yield InnerTest(self._testname(rset, box.__regid__, 'box'), box.render)
   807 
   807 
   808     @staticmethod
   808     @staticmethod
   809     def _testname(rset, objid, objtype):
   809     def _testname(rset, objid, objtype):
   810         return '%s_%s_%s' % ('_'.join(rset.column_types(0)), objid, objtype)
   810         return '%s_%s_%s' % ('_'.join(rset.column_types(0)), objid, objtype)
   811 
   811