Minor changes in the test system; XmlUnmarshaller can unmarshall XML content from a string, file handler of file path; any Appy object now has a method 'getField(name)' that returns a given field (=Appy type); bugfix while counting number of tests found in a gen-application.

This commit is contained in:
Gaetan Delannay 2011-02-17 18:13:42 +01:00
parent 2c6392aa92
commit a8366379dd
5 changed files with 23 additions and 8 deletions

View file

@ -182,7 +182,8 @@ class Generator:
for name, elem in moduleOrClass.__dict__.iteritems(): for name, elem in moduleOrClass.__dict__.iteritems():
if type(elem) in (staticmethod, classmethod): if type(elem) in (staticmethod, classmethod):
elem = elem.__get__(name) elem = elem.__get__(name)
if hasattr(elem, '__doc__') and elem.__doc__ and \ if callable(elem) and (type(elem) != types.ClassType) and \
hasattr(elem, '__doc__') and elem.__doc__ and \
(elem.__doc__.find('>>>') != -1): (elem.__doc__.find('>>>') != -1):
res = True res = True
self.totalNumberOfTests += 1 self.totalNumberOfTests += 1

View file

@ -5,7 +5,7 @@ import os, os.path, sys
class TestMixin: class TestMixin:
'''This class is mixed in with any PloneTestCase.''' '''This class is mixed in with any PloneTestCase.'''
def createUser(self, userId, roles): def createUser(self, userId, roles):
'''Creates a user p_name p_with some p_roles.''' '''Creates a user with id p_userId with some p_roles.'''
pms = self.portal.portal_membership pms = self.portal.portal_membership
pms.addMember(userId, 'password', [], []) pms.addMember(userId, 'password', [], [])
self.setRoles(roles, name=userId) self.setRoles(roles, name=userId)
@ -16,7 +16,7 @@ class TestMixin:
self.login(userId) self.login(userId)
def getNonEmptySubModules(self, moduleName): def getNonEmptySubModules(self, moduleName):
'''Returns the list fo sub-modules of p_app that are non-empty.''' '''Returns the list of sub-modules of p_app that are non-empty.'''
res = [] res = []
try: try:
exec 'import %s' % moduleName exec 'import %s' % moduleName

View file

@ -9,7 +9,9 @@ from appy.gen.plone25.mixins.TestMixin import TestMixin, beforeTest, afterTest
# Initialize Zope & Plone test systems ----------------------------------------- # Initialize Zope & Plone test systems -----------------------------------------
ZopeTestCase.installProduct('<!applicationName!>') ZopeTestCase.installProduct('<!applicationName!>')
PloneTestCase.setupPloneSite(products=['<!applicationName!>']) ZopeTestCase.installProduct('PloneLanguageTool')
PloneTestCase.setupPloneSite(products=['<!applicationName!>',
'PloneLanguageTool'])
class Test(PloneTestCase.PloneTestCase, TestMixin): class Test(PloneTestCase.PloneTestCase, TestMixin):
'''Base test class for <!applicationName!> test cases.''' '''Base test class for <!applicationName!> test cases.'''

View file

@ -94,6 +94,8 @@ class AbstractWrapper:
def get_fields(self): return self.o.getAllAppyTypes() def get_fields(self): return self.o.getAllAppyTypes()
fields = property(get_fields) fields = property(get_fields)
def getField(self, name): return self.o.getAppyType(name)
def link(self, fieldName, obj): def link(self, fieldName, obj):
'''This method links p_obj (which can be a list of objects) to this one '''This method links p_obj (which can be a list of objects) to this one
through reference field p_fieldName.''' through reference field p_fieldName.'''

View file

@ -167,8 +167,15 @@ class XmlParser(ContentHandler, ErrorHandler):
# Put a question mark instead of raising an exception. # Put a question mark instead of raising an exception.
self.characters('?') self.characters('?')
def parse(self, xmlContent, source='string'): def parse(self, xml, source='string'):
'''Parses the XML file or string p_xmlContent.''' '''Parses a XML stream.
* If p_source is "string", p_xml must be a string containing
valid XML content.
* If p_source is "file": p_xml can be:
- a string containing the path to the XML file on disk;
- a file instance opened for reading. Note that in this case, this
method will close it.
'''
try: try:
from cStringIO import StringIO from cStringIO import StringIO
except ImportError: except ImportError:
@ -178,10 +185,13 @@ class XmlParser(ContentHandler, ErrorHandler):
self.parser.setFeature(feature_external_ges, False) self.parser.setFeature(feature_external_ges, False)
inputSource = InputSource() inputSource = InputSource()
if source == 'string': if source == 'string':
inputSource.setByteStream(StringIO(xmlContent)) inputSource.setByteStream(StringIO(xml))
else: else:
inputSource.setByteStream(xmlContent) if not isinstance(xml, file):
xml = file(xml)
inputSource.setByteStream(xml)
self.parser.parse(inputSource) self.parser.parse(inputSource)
if isinstance(xml, file): xml.close()
return self.res return self.res
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------