123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- # Copyright (c) Twisted Matrix Laboratories.
- # See LICENSE for details.
- """
- Tests for L{twisted.web._stan} portion of the L{twisted.web.template}
- implementation.
- """
- from __future__ import absolute_import, division
- from twisted.web.template import Comment, CDATA, CharRef, Tag
- from twisted.trial.unittest import TestCase
- from twisted.python.compat import _PY3
- def proto(*a, **kw):
- """
- Produce a new tag for testing.
- """
- return Tag('hello')(*a, **kw)
- class TagTests(TestCase):
- """
- Tests for L{Tag}.
- """
- def test_fillSlots(self):
- """
- L{Tag.fillSlots} returns self.
- """
- tag = proto()
- self.assertIdentical(tag, tag.fillSlots(test='test'))
- def test_cloneShallow(self):
- """
- L{Tag.clone} copies all attributes and children of a tag, including its
- render attribute. If the shallow flag is C{False}, that's where it
- stops.
- """
- innerList = ["inner list"]
- tag = proto("How are you", innerList,
- hello="world", render="aSampleMethod")
- tag.fillSlots(foo='bar')
- tag.filename = "foo/bar"
- tag.lineNumber = 6
- tag.columnNumber = 12
- clone = tag.clone(deep=False)
- self.assertEqual(clone.attributes['hello'], 'world')
- self.assertNotIdentical(clone.attributes, tag.attributes)
- self.assertEqual(clone.children, ["How are you", innerList])
- self.assertNotIdentical(clone.children, tag.children)
- self.assertIdentical(clone.children[1], innerList)
- self.assertEqual(tag.slotData, clone.slotData)
- self.assertNotIdentical(tag.slotData, clone.slotData)
- self.assertEqual(clone.filename, "foo/bar")
- self.assertEqual(clone.lineNumber, 6)
- self.assertEqual(clone.columnNumber, 12)
- self.assertEqual(clone.render, "aSampleMethod")
- def test_cloneDeep(self):
- """
- L{Tag.clone} copies all attributes and children of a tag, including its
- render attribute. In its normal operating mode (where the deep flag is
- C{True}, as is the default), it will clone all sub-lists and sub-tags.
- """
- innerTag = proto("inner")
- innerList = ["inner list"]
- tag = proto("How are you", innerTag, innerList,
- hello="world", render="aSampleMethod")
- tag.fillSlots(foo='bar')
- tag.filename = "foo/bar"
- tag.lineNumber = 6
- tag.columnNumber = 12
- clone = tag.clone()
- self.assertEqual(clone.attributes['hello'], 'world')
- self.assertNotIdentical(clone.attributes, tag.attributes)
- self.assertNotIdentical(clone.children, tag.children)
- # sanity check
- self.assertIdentical(tag.children[1], innerTag)
- # clone should have sub-clone
- self.assertNotIdentical(clone.children[1], innerTag)
- # sanity check
- self.assertIdentical(tag.children[2], innerList)
- # clone should have sub-clone
- self.assertNotIdentical(clone.children[2], innerList)
- self.assertEqual(tag.slotData, clone.slotData)
- self.assertNotIdentical(tag.slotData, clone.slotData)
- self.assertEqual(clone.filename, "foo/bar")
- self.assertEqual(clone.lineNumber, 6)
- self.assertEqual(clone.columnNumber, 12)
- self.assertEqual(clone.render, "aSampleMethod")
- def test_clear(self):
- """
- L{Tag.clear} removes all children from a tag, but leaves its attributes
- in place.
- """
- tag = proto("these are", "children", "cool", andSoIs='this-attribute')
- tag.clear()
- self.assertEqual(tag.children, [])
- self.assertEqual(tag.attributes, {'andSoIs': 'this-attribute'})
- def test_suffix(self):
- """
- L{Tag.__call__} accepts Python keywords with a suffixed underscore as
- the DOM attribute of that literal suffix.
- """
- proto = Tag('div')
- tag = proto()
- tag(class_='a')
- self.assertEqual(tag.attributes, {'class': 'a'})
- def test_commentReprPy2(self):
- """
- L{Comment.__repr__} returns a value which makes it easy to see what's
- in the comment.
- """
- self.assertEqual(repr(Comment(u"hello there")),
- "Comment(u'hello there')")
- def test_cdataReprPy2(self):
- """
- L{CDATA.__repr__} returns a value which makes it easy to see what's in
- the comment.
- """
- self.assertEqual(repr(CDATA(u"test data")),
- "CDATA(u'test data')")
- def test_commentReprPy3(self):
- """
- L{Comment.__repr__} returns a value which makes it easy to see what's
- in the comment.
- """
- self.assertEqual(repr(Comment(u"hello there")),
- "Comment('hello there')")
- def test_cdataReprPy3(self):
- """
- L{CDATA.__repr__} returns a value which makes it easy to see what's in
- the comment.
- """
- self.assertEqual(repr(CDATA(u"test data")),
- "CDATA('test data')")
- if not _PY3:
- test_commentReprPy3.skip = "Only relevant on Python 3."
- test_cdataReprPy3.skip = "Only relevant on Python 3."
- else:
- test_commentReprPy2.skip = "Only relevant on Python 2."
- test_cdataReprPy2.skip = "Only relevant on Python 2."
- def test_charrefRepr(self):
- """
- L{CharRef.__repr__} returns a value which makes it easy to see what
- character is referred to.
- """
- snowman = ord(u"\N{SNOWMAN}")
- self.assertEqual(repr(CharRef(snowman)), "CharRef(9731)")
|