import os, sys
if __name__ == '__main__':
execfile(os.path.join(sys.path[0], 'framework.py'))
from unittest import TestCase, TestSuite, main, makeSuite
from Products.CMFPlone.tests import PloneTestCase
from os.path import join, abspath, dirname
#try:
# import Zope # Sigh, make product initialization happen
# HAS_ZOPE = 1
# Zope.startup()
#except ImportError:
# HAS_ZOPE = 0
#except AttributeError: # Zope > 2.6
# pass
from Products.PortalTransforms.tests.test_transforms import *
from Products.PortalTransforms.tests.utils import normalize_html
PREFIX = abspath(dirname(__file__))
def input_file_path(file):
return join(PREFIX, 'input', file)
def output_file_path(file):
return join(PREFIX, 'output', file)
tests =(
('Products.kupu.plone.html2captioned', "minimal.in", "minimal.out", normalize_html, 0),
('Products.kupu.plone.html2captioned', "simple.in", "simple.out", normalize_html, 0),
('Products.kupu.plone.html2captioned', "baduid.in", "baduid.out", normalize_html, 0),
('Products.kupu.plone.html2captioned', "notquoted.in", "notquoted.out", normalize_html, 0),
('Products.kupu.plone.html2captioned', "notcaptioned.in", "notcaptioned.out", normalize_html, 0),
('Products.kupu.plone.html2captioned', "linked.in", "linked.out", normalize_html, 0),
)
class MockImage:
def __init__(self, uid, description):
self.uid, self.description = uid, description
def Description(self):
return self.description
def absolute_url(self):
return '[url for %s]' % self.uid
class MockCatalogTool:
def lookupObject(self, uid):
dummydata = {
'104ede98d4c7c8eaeaa3b984f7395979': 'Test image caption'
}
if uid not in dummydata:
return None
return MockImage(uid, dummydata[uid])
class MockArchetypeTool:
reference_catalog = MockCatalogTool()
class MockPortal:
# Mock portal class: just enough to let me think I can lookup a
# Description for an image from its UID.
archetype_tool = MockArchetypeTool()
class TransformTest(TestCase):
portal = MockPortal()
def do_convert(self, filename=None):
if filename is None and exists(self.output + '.nofilename'):
output = self.output + '.nofilename'
else:
output = self.output
input = open(self.input)
orig = input.read()
input.close()
data = datastream(self.transform.name())
res_data = self.transform.convert(orig, data, filename=filename, context=self.portal)
self.assert_(idatastream.isImplementedBy(res_data))
got = res_data.getData()
try:
output = open(output)
except IOError:
import sys
print >>sys.stderr, 'No output file found.'
print >>sys.stderr, 'File %s created, check it !' % self.output
output = open(output, 'w')
output.write(got)
output.close()
self.assert_(0)
expected = output.read()
if self.normalize is not None:
expected = self.normalize(expected)
got = self.normalize(got)
output.close()
self.assertEquals(got, expected,
'[%s]\n\n!=\n\n[%s]\n\nIN %s(%s)' % (
got, expected, self.transform.name(), self.input))
self.assertEquals(self.subobjects, len(res_data.getSubObjects()),
'%s\n\n!=\n\n%s\n\nIN %s(%s)' % (
self.subobjects, len(res_data.getSubObjects()), self.transform.name(), self.input))
def testSame(self):
self.do_convert(filename=self.input)
def testSameNoFilename(self):
self.do_convert()
def __repr__(self):
return self.transform.name()
TR_NAMES = None
def make_tests(test_descr):
"""generate tests classes from test info
return the list of generated test classes
"""
tests = []
for _transform, tr_input, tr_output, _normalize, _subobjects in test_descr:
# load transform if necessary
if type(_transform) is type(''):
try:
_transform = load(_transform).register()
except:
import traceback
traceback.print_exc()
continue
#
if TR_NAMES is not None and not _transform.name() in TR_NAMES:
print 'skip test for', _transform.name()
continue
class TransformTestSubclass(TransformTest):
input = input_file_path(tr_input)
output = output_file_path(tr_output)
transform = _transform
normalize = lambda x, y: _normalize(y)
subobjects = _subobjects
tests.append(TransformTestSubclass)
return tests
def test_suite():
t = [ (_transform,
input_file_path(tr_input),
output_file_path(tr_output),
_normalize,
_subobjects)
for _transform, tr_input, tr_output, _normalize, _subobjects in tests ]
return TestSuite([makeSuite(test) for test in make_tests(t)])
if __name__=='__main__':
main(defaultTest='test_suite')
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>