class BasicTemplateTests(unittest.TestCase): def setUp(self): self.t = PageTemplate() def test_if_in_var(self): # DTML test 1: if, in, and var: pass # for unittest """ %(comment)[ blah %(comment)] <html><head><title>Test of documentation templates</title></head> <body> %(if args)[ <dl><dt>The arguments to this test program were:<p> <dd> <ul> %(in args)[ <li>Argument number %(num)d was %(arg)s %(in args)] </ul></dl><p> %(if args)] %(else args)[ No arguments were given.<p> %(else args)] And thats da trooth. </body></html> """ tal = util.read_input('dtml1.html') self.t.write(tal) aa = util.argv(('one', 'two', 'three', 'cha', 'cha', 'cha')) o = self.t(content=aa) expect = util.read_output('dtml1a.html') util.check_xml(expect, o) aa = util.argv(()) o = self.t(content=aa) expect = util.read_output('dtml1b.html') util.check_xml(expect, o) def test_batches_and_formatting(self): # DTML test 3: batches and formatting: pass # for unittest """ <html><head><title>Test of documentation templates</title></head> <body> <!--#if args--> The arguments were: <!--#in args size=size end=end--> <!--#if previous-sequence--> (<!--#var previous-sequence-start-arg-->- <!--#var previous-sequence-end-arg-->) <!--#/if previous-sequence--> <!--#if sequence-start--> <dl> <!--#/if sequence-start--> <dt><!--#var sequence-arg-->.</dt> <dd>Argument <!--#var num fmt=d--> was <!--#var arg--></dd> <!--#if next-sequence--> (<!--#var next-sequence-start-arg-->- <!--#var next-sequence-end-arg-->) <!--#/if next-sequence--> <!--#/in args--> </dl> <!--#else args--> No arguments were given.<p> <!--#/if args--> And I\'m 100% sure! </body></html> """ tal = util.read_input('dtml3.html') self.t.write(tal) aa = util.argv(('one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten', 'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen', 'twenty', )) from zope.pagetemplate.tests import batch o = self.t(content=aa, batch=batch.batch(aa.args, 5)) expect = util.read_output('dtml3.html') util.check_xml(expect, o) def test_on_error_in_slot_filler(self): # The `here` isn't defined, so the macro definition is # expected to catch the error that gets raised. text = '''\ <div metal:define-macro="foo"> <div tal:on-error="string:eek"> <div metal:define-slot="slot" /> cool </div> </div> <div metal:use-macro="template/macros/foo"> <div metal:fill-slot="slot"> <p tal:content="here/xxx" /> </div> </div> ''' self.t.write(text) self.t() def test_on_error_in_slot_default(self): # The `here` isn't defined, so the macro definition is # expected to catch the error that gets raised. text = '''\ <div metal:define-macro="foo"> <div tal:on-error="string:eek"> <div metal:define-slot="slot"> <div tal:content="here/xxx" /> </div> </div> </div> <div metal:use-macro="template/macros/foo"> </div> ''' self.t.write(text) self.t() def test_unicode_html(self): text = u'<p>\xe4\xf6\xfc\xdf</p>' # test with HTML parser self.t.pt_edit(text, 'text/html') self.assertEquals(self.t().strip(), text) # test with XML parser self.t.pt_edit(text, 'text/xml') self.assertEquals(self.t().strip(), text)
def reportObjekte(self, reportcontext, typ, sort_on, sort_order, filter={}, reportname='Standard', test=False, **templatevars): """ @param reportcontext: context mit dem der Report erzeugt werden soll. @param typ: Entityname fuer die Datenbankabfrage zur Bestimmung des Reportumfangs. @param sort_on: DB-Sortierattribut @param sort_order: DB-Sortierreihenfolge @param filter: Moegliche Filterwerte fuer die Abfrage. @param reportname: Name des registrierten Reports @param test: Attribut zu Testzwecken mit einem echten View-Template """ log('reportObjekte') reportReg = _reportConfigReg.get(typ, []) reportConfig = None #print 'filter ', filter REQUEST = self._getRequest() # print reportReg # print reportname for ec in reportReg: if ec[0] == reportname: reportConfig = ec[1] # print reportConfig if reportConfig: # print 'reportConfig gefunden' reportTemplateName = reportConfig.get('reportTemplateName') if reportTemplateName: # print 'TemplateName gefunden' objekte = [] objsel = REQUEST.get('objsel', []) if objsel: for pks in objsel: pkvals = self.getPKDict(typ, eval(pks)) objekte.append(self.objektdatensatz(typ, **pkvals)) #ansonsten else: objekte = self.objekteSuchen(typ, filter, sort_on=sort_on, sort_order=sort_order) # print len(objekte) if not templatevars: templatevars = {'objekte':objekte, 'reportcontext':reportcontext} else: templatevars['objekte'] = objekte templatevars['reportcontext'] = reportcontext template_obj = None if reportcontext.getField(reportTemplateName): template_obj = PageTemplate() content = reportcontext.getField(reportTemplateName).getRaw(reportcontext)#.read() # print content template_obj.pt_edit(content,'text/html') else: if test: return templatevars['objekte'] template_obj = getattr(reportcontext, reportTemplateName) # print template_obj # return template_obj(**templatevars) return safe_unicode(template_obj(**templatevars))