Annotation of kupuMPIWG/plone/tests/test_html2captioned.py, revision 1.1.1.1
1.1 dwinter 1: import os, sys
2: if __name__ == '__main__':
3: execfile(os.path.join(sys.path[0], 'framework.py'))
4:
5: from unittest import TestCase, TestSuite, main, makeSuite
6: from Products.CMFPlone.tests import PloneTestCase
7: from os.path import join, abspath, dirname
8:
9: #try:
10: # import Zope # Sigh, make product initialization happen
11: # HAS_ZOPE = 1
12: # Zope.startup()
13: #except ImportError:
14: # HAS_ZOPE = 0
15: #except AttributeError: # Zope > 2.6
16: # pass
17:
18: from Products.PortalTransforms.tests.test_transforms import *
19: from Products.PortalTransforms.tests.utils import normalize_html
20:
21: PREFIX = abspath(dirname(__file__))
22:
23: def input_file_path(file):
24: return join(PREFIX, 'input', file)
25:
26: def output_file_path(file):
27: return join(PREFIX, 'output', file)
28:
29: tests =(
30: ('Products.kupu.plone.html2captioned', "minimal.in", "minimal.out", normalize_html, 0),
31: ('Products.kupu.plone.html2captioned', "simple.in", "simple.out", normalize_html, 0),
32: ('Products.kupu.plone.html2captioned', "baduid.in", "baduid.out", normalize_html, 0),
33: ('Products.kupu.plone.html2captioned', "notquoted.in", "notquoted.out", normalize_html, 0),
34: ('Products.kupu.plone.html2captioned', "notcaptioned.in", "notcaptioned.out", normalize_html, 0),
35: ('Products.kupu.plone.html2captioned', "linked.in", "linked.out", normalize_html, 0),
36: )
37:
38: class MockImage:
39: def __init__(self, uid, description):
40: self.uid, self.description = uid, description
41: def Description(self):
42: return self.description
43: def absolute_url(self):
44: return '[url for %s]' % self.uid
45:
46: class MockCatalogTool:
47: def lookupObject(self, uid):
48: dummydata = {
49: '104ede98d4c7c8eaeaa3b984f7395979': 'Test image caption'
50: }
51: if uid not in dummydata:
52: return None
53: return MockImage(uid, dummydata[uid])
54:
55: class MockArchetypeTool:
56: reference_catalog = MockCatalogTool()
57:
58: class MockPortal:
59: # Mock portal class: just enough to let me think I can lookup a
60: # Description for an image from its UID.
61: archetype_tool = MockArchetypeTool()
62:
63: class TransformTest(TestCase):
64: portal = MockPortal()
65:
66: def do_convert(self, filename=None):
67: if filename is None and exists(self.output + '.nofilename'):
68: output = self.output + '.nofilename'
69: else:
70: output = self.output
71: input = open(self.input)
72: orig = input.read()
73: input.close()
74: data = datastream(self.transform.name())
75: res_data = self.transform.convert(orig, data, filename=filename, context=self.portal)
76: self.assert_(idatastream.isImplementedBy(res_data))
77: got = res_data.getData()
78: try:
79: output = open(output)
80: except IOError:
81: import sys
82: print >>sys.stderr, 'No output file found.'
83: print >>sys.stderr, 'File %s created, check it !' % self.output
84: output = open(output, 'w')
85: output.write(got)
86: output.close()
87: self.assert_(0)
88: expected = output.read()
89: if self.normalize is not None:
90: expected = self.normalize(expected)
91: got = self.normalize(got)
92: output.close()
93:
94: self.assertEquals(got, expected,
95: '[%s]\n\n!=\n\n[%s]\n\nIN %s(%s)' % (
96: got, expected, self.transform.name(), self.input))
97: self.assertEquals(self.subobjects, len(res_data.getSubObjects()),
98: '%s\n\n!=\n\n%s\n\nIN %s(%s)' % (
99: self.subobjects, len(res_data.getSubObjects()), self.transform.name(), self.input))
100:
101: def testSame(self):
102: self.do_convert(filename=self.input)
103:
104: def testSameNoFilename(self):
105: self.do_convert()
106:
107: def __repr__(self):
108: return self.transform.name()
109:
110: TR_NAMES = None
111:
112: def make_tests(test_descr):
113: """generate tests classes from test info
114:
115: return the list of generated test classes
116: """
117: tests = []
118: for _transform, tr_input, tr_output, _normalize, _subobjects in test_descr:
119: # load transform if necessary
120: if type(_transform) is type(''):
121: try:
122: _transform = load(_transform).register()
123: except:
124: import traceback
125: traceback.print_exc()
126: continue
127: #
128: if TR_NAMES is not None and not _transform.name() in TR_NAMES:
129: print 'skip test for', _transform.name()
130: continue
131:
132: class TransformTestSubclass(TransformTest):
133: input = input_file_path(tr_input)
134: output = output_file_path(tr_output)
135: transform = _transform
136: normalize = lambda x, y: _normalize(y)
137: subobjects = _subobjects
138:
139: tests.append(TransformTestSubclass)
140:
141: return tests
142:
143: def test_suite():
144: t = [ (_transform,
145: input_file_path(tr_input),
146: output_file_path(tr_output),
147: _normalize,
148: _subobjects)
149: for _transform, tr_input, tr_output, _normalize, _subobjects in tests ]
150:
151: return TestSuite([makeSuite(test) for test in make_tests(t)])
152:
153: if __name__=='__main__':
154: main(defaultTest='test_suite')
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>