summaryrefslogtreecommitdiff
path: root/src/zope/pagetemplate/tests/test_ptfile.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/zope/pagetemplate/tests/test_ptfile.py')
-rw-r--r--src/zope/pagetemplate/tests/test_ptfile.py98
1 files changed, 66 insertions, 32 deletions
diff --git a/src/zope/pagetemplate/tests/test_ptfile.py b/src/zope/pagetemplate/tests/test_ptfile.py
index d6ecbcd..e5cc2e9 100644
--- a/src/zope/pagetemplate/tests/test_ptfile.py
+++ b/src/zope/pagetemplate/tests/test_ptfile.py
@@ -20,23 +20,19 @@ import unittest
import six
from zope.pagetemplate.pagetemplatefile import PageTemplateFile
+class AbstractPTCase(object):
-class TypeSniffingTestCase(unittest.TestCase):
-
- TEMPFILENAME = tempfile.mktemp()
-
- def tearDown(self):
- if os.path.exists(self.TEMPFILENAME):
- os.unlink(self.TEMPFILENAME)
-
- def get_pt(self, text):
- f = open(self.TEMPFILENAME, "wb")
- f.write(text)
- f.close()
- pt = PageTemplateFile(self.TEMPFILENAME)
+ def get_pt(self, text=b'<html />'):
+ with tempfile.NamedTemporaryFile(mode='wb', delete=False) as f:
+ f.write(text)
+ self.addCleanup(os.unlink, f.name)
+ pt = PageTemplateFile(f.name)
pt.read()
return pt
+class TypeSniffingTestCase(AbstractPTCase,
+ unittest.TestCase):
+
def check_content_type(self, text, expected_type):
pt = self.get_pt(text)
self.assertEqual(pt.content_type, expected_type)
@@ -123,17 +119,18 @@ class TypeSniffingTestCase(unittest.TestCase):
def test_sniffer_html_ascii(self):
self.check_content_type(
("<!DOCTYPE html [ SYSTEM '%s' ]><html></html>"
- % self.HTML_SYSTEM_ID).encode("utf-8"),
+ % self.HTML_SYSTEM_ID).encode("utf-8"),
"text/html")
self.check_content_type(
b"<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>",
+ @unittest.expectedFailure
+ def test_sniffer_xml_simple(self):
+ # 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. This case actually returns text/html
+ self.check_content_type(b"<doc><element/></doc>",
"text/xml")
def test_html_default_encoding(self):
@@ -145,9 +142,9 @@ class TypeSniffingTestCase(unittest.TestCase):
rendered = pt()
self.assertTrue(isinstance(rendered, six.text_type))
self.assertEqual(rendered.strip(),
- six.u("<html><head><title>"
- "\u0422\u0435\u0441\u0442"
- "</title></head></html>"))
+ (u"<html><head><title>"
+ u"\u0422\u0435\u0441\u0442"
+ u"</title></head></html>"))
def test_html_encoding_by_meta(self):
pt = self.get_pt(
@@ -160,9 +157,9 @@ class TypeSniffingTestCase(unittest.TestCase):
rendered = pt()
self.assertTrue(isinstance(rendered, six.text_type))
self.assertEqual(rendered.strip(),
- six.u("<html><head><title>"
- "\u0422\u0435\u0441\u0442"
- "</title></head></html>"))
+ (u"<html><head><title>"
+ u"\u0422\u0435\u0441\u0442"
+ u"</title></head></html>"))
def test_xhtml(self):
pt = self.get_pt(
@@ -175,14 +172,51 @@ class TypeSniffingTestCase(unittest.TestCase):
rendered = pt()
self.assertTrue(isinstance(rendered, six.text_type))
self.assertEqual(rendered.strip(),
- six.u("<html><head><title>"
- "\u0422\u0435\u0441\u0442"
- "</title></head></html>"))
+ (u"<html><head><title>"
+ u"\u0422\u0435\u0441\u0442"
+ u"</title></head></html>"))
+
+
+class TestPageTemplateFile(AbstractPTCase,
+ unittest.TestCase):
+
+ def test_no_such_file(self):
+ with self.assertRaises(ValueError):
+ PageTemplateFile('this file does not exist')
+
+ def test_prefix_str(self):
+ pt = PageTemplateFile(os.path.basename(__file__),
+ _prefix=os.path.dirname(__file__))
+ self.assertEqual(pt.filename, __file__)
+
+
+ def test_cook_no_debug(self):
+ pt = self.get_pt()
+ pt._v_debug = False
+ pt._cook_check()
+ self.assertTrue(pt._v_last_read)
+ lr = pt._v_last_read
+ pt._cook_check()
+ self.assertEqual(lr, pt._v_last_read)
+
+
+ def test_cook_mtime_fails(self):
+ pt = self.get_pt()
+ getmtime = os.path.getmtime
+ def bad(_path):
+ raise OSError()
+ os.path.getmtime = bad
+ try:
+ pt._cook_check()
+ finally:
+ os.path.getmtime = getmtime
+ self.assertEqual(0, pt._v_last_read)
-def test_suite():
- return unittest.makeSuite(TypeSniffingTestCase)
+ def test_pickle_not_allowed(self):
+ import pickle
+ pt = self.get_pt()
-if __name__ == "__main__":
- unittest.main(defaultTest="test_suite")
+ with self.assertRaises(TypeError):
+ pickle.dumps(pt)