Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
------------------------------------------------------------------------ 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
Showing
2 changed files
with
129 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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") |