Skip to content

Commit

Permalink
Backport of:
Browse files Browse the repository at this point in the history
------------------------------------------------------------------------
r26444 | srichter | 2004-07-13 11:01:30 -0400 (Tue, 13 Jul 2004) | 5 
lines

While I was working on functional tests, I found the scenario when this
path is chosen, which is when you get the source (for editing for
example) and macro expansion is turned on. It is perfectly fine to pass
an empty dict at this point, since the template itself is not evaluated.

------------------------------------------------------------------------
------------------------------------------------------------------------
r26445 | srichter | 2004-07-13 11:01:55 -0400 (Tue, 13 Jul 2004) | 2 
lines

Converted XXX to TODO.

------------------------------------------------------------------------
  • Loading branch information
strichter committed Aug 12, 2004
1 parent f0f263c commit ecff051
Show file tree
Hide file tree
Showing 2 changed files with 129 additions and 2 deletions.
5 changes: 3 additions & 2 deletions pagetemplate.py
Expand Up @@ -158,8 +158,9 @@ def read(self):
if not self.expand:
return self._text
try:
# XXX not clear how this ever gets called, but the
# first arg to pt_render() needs to change if it ever does.
# This gets called, if macro expansion is turned on.
# Note that an empty dictionary is fine for the context at
# this point, since we are not evaluating the template.
return self.pt_render({}, source=1)
except:
return ('%s\n Macro expansion failed\n %s\n-->\n%s' %
Expand Down
126 changes: 126 additions & 0 deletions tests/test_ptfile.py
@@ -0,0 +1,126 @@
"""Tests of PageTemplateFile."""

import os
import tempfile
import unittest

from zope.pagetemplate.pagetemplatefile import PageTemplateFile


class TypeSniffingTestCase(unittest.TestCase):

TEMPFILENAME = tempfile.mktemp()

def tearDown(self):
if os.path.exists(self.TEMPFILENAME):
os.unlink(self.TEMPFILENAME)

def check_content_type(self, text, expected_type):
f = open(self.TEMPFILENAME, "wb")
f.write(text)
f.close()
pt = PageTemplateFile(self.TEMPFILENAME)
pt.read()
self.assertEqual(pt.content_type, expected_type)

def test_sniffer_xml_ascii(self):
self.check_content_type(
"<?xml version='1.0' encoding='ascii'?><doc/>",
"text/xml")
self.check_content_type(
"<?xml\tversion='1.0' encoding='ascii'?><doc/>",
"text/xml")

def test_sniffer_xml_utf8(self):
# w/out byte order mark
self.check_content_type(
"<?xml version='1.0' encoding='utf-8'?><doc/>",
"text/xml")
self.check_content_type(
"<?xml\tversion='1.0' encoding='utf-8'?><doc/>",
"text/xml")
# with byte order mark
self.check_content_type(
"\xef\xbb\xbf<?xml version='1.0' encoding='utf-8'?><doc/>",
"text/xml")
self.check_content_type(
"\xef\xbb\xbf<?xml\tversion='1.0' encoding='utf-8'?><doc/>",
"text/xml")

def test_sniffer_xml_utf16_be(self):
# w/out byte order mark
self.check_content_type(
"\0<\0?\0x\0m\0l\0 \0v\0e\0r\0s\0i\0o\0n\0=\0'\01\0.\0000\0'"
"\0 \0e\0n\0c\0o\0d\0i\0n\0g\0=\0'\0u\0t\0f\0-\08\0'\0?\0>"
"\0<\0d\0o\0c\0/\0>",
"text/xml")
self.check_content_type(
"\0<\0?\0x\0m\0l\0\t\0v\0e\0r\0s\0i\0o\0n\0=\0'\01\0.\0000\0'"
"\0 \0e\0n\0c\0o\0d\0i\0n\0g\0=\0'\0u\0t\0f\0-\08\0'\0?\0>"
"\0<\0d\0o\0c\0/\0>",
"text/xml")
# with byte order mark
self.check_content_type(
"\xfe\xff"
"\0<\0?\0x\0m\0l\0 \0v\0e\0r\0s\0i\0o\0n\0=\0'\01\0.\0000\0'"
"\0 \0e\0n\0c\0o\0d\0i\0n\0g\0=\0'\0u\0t\0f\0-\08\0'\0?\0>"
"\0<\0d\0o\0c\0/\0>",
"text/xml")
self.check_content_type(
"\xfe\xff"
"\0<\0?\0x\0m\0l\0\t\0v\0e\0r\0s\0i\0o\0n\0=\0'\01\0.\0000\0'"
"\0 \0e\0n\0c\0o\0d\0i\0n\0g\0=\0'\0u\0t\0f\0-\08\0'\0?\0>"
"\0<\0d\0o\0c\0/\0>",
"text/xml")

def test_sniffer_xml_utf16_le(self):
# w/out byte order mark
self.check_content_type(
"<\0?\0x\0m\0l\0 \0v\0e\0r\0s\0i\0o\0n\0=\0'\01\0.\0000\0'\0"
" \0e\0n\0c\0o\0d\0i\0n\0g\0=\0'\0u\0t\0f\0-\08\0'\0?\0>\0"
"<\0d\0o\0c\0/\0>\n",
"text/xml")
self.check_content_type(
"<\0?\0x\0m\0l\0\t\0v\0e\0r\0s\0i\0o\0n\0=\0'\01\0.\0000\0'\0"
" \0e\0n\0c\0o\0d\0i\0n\0g\0=\0'\0u\0t\0f\0-\08\0'\0?\0>\0"
"<\0d\0o\0c\0/\0>\0",
"text/xml")
# with byte order mark
self.check_content_type(
"\xff\xfe"
"<\0?\0x\0m\0l\0 \0v\0e\0r\0s\0i\0o\0n\0=\0'\01\0.\0000\0'\0"
" \0e\0n\0c\0o\0d\0i\0n\0g\0=\0'\0u\0t\0f\0-\08\0'\0?\0>\0"
"<\0d\0o\0c\0/\0>\0",
"text/xml")
self.check_content_type(
"\xff\xfe"
"<\0?\0x\0m\0l\0\t\0v\0e\0r\0s\0i\0o\0n\0=\0'\01\0.\0000\0'\0"
" \0e\0n\0c\0o\0d\0i\0n\0g\0=\0'\0u\0t\0f\0-\08\0'\0?\0>\0"
"<\0d\0o\0c\0/\0>\0",
"text/xml")

HTML_PUBLIC_ID = "-//W3C//DTD HTML 4.01 Transitional//EN"
HTML_SYSTEM_ID = "http://www.w3.org/TR/html4/loose.dtd"

def test_sniffer_html_ascii(self):
self.check_content_type(
"<!DOCTYPE html [ SYSTEM '%s' ]><html></html>"
% self.HTML_SYSTEM_ID,
"text/html")
self.check_content_type(
"<html><head><title>sample document</title></head></html>",
"text/html")

# TODO: This reflects a case that simply isn't handled by the
# sniffer; there are many, but it gets it right more often than
# before.
def donttest_sniffer_xml_simple(self):
self.check_content_type("<doc><element/></doc>",
"text/xml")


def test_suite():
return unittest.makeSuite(TypeSniffingTestCase)

if __name__ == "__main__":
unittest.main(defaultTest="test_suite")

0 comments on commit ecff051

Please sign in to comment.