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:
parent
2c6392aa92
commit
a8366379dd
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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.'''
|
||||||
|
|
|
@ -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.'''
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
|
|
Loading…
Reference in a new issue