comparison genshi/tests/builder.py @ 902:09cc3627654c experimental-inline

Sync `experimental/inline` branch with [source:trunk@1126].
author cmlenz
date Fri, 23 Apr 2010 21:08:26 +0000
parents 1837f39efd6f
children
comparison
equal deleted inserted replaced
830:de82830f8816 902:09cc3627654c
10 # This software consists of voluntary contributions made by many 10 # This software consists of voluntary contributions made by many
11 # individuals. For the exact contribution history, see the revision 11 # individuals. For the exact contribution history, see the revision
12 # history and logs, available at http://genshi.edgewall.org/log/. 12 # history and logs, available at http://genshi.edgewall.org/log/.
13 13
14 import doctest 14 import doctest
15 from HTMLParser import HTMLParseError
16 import unittest 15 import unittest
17 16
18 from genshi.builder import Element, tag 17 from genshi.builder import Element, tag
19 from genshi.core import Attrs, Markup, Stream 18 from genshi.core import Attrs, Markup, Stream
20 from genshi.input import XML 19 from genshi.input import XML
22 21
23 class ElementFactoryTestCase(unittest.TestCase): 22 class ElementFactoryTestCase(unittest.TestCase):
24 23
25 def test_link(self): 24 def test_link(self):
26 link = tag.a(href='#', title='Foo', accesskey=None)('Bar') 25 link = tag.a(href='#', title='Foo', accesskey=None)('Bar')
27 bits = iter(link.generate()) 26 events = list(link.generate())
28 self.assertEqual((Stream.START, 27 self.assertEqual((Stream.START,
29 ('a', Attrs([('href', "#"), ('title', "Foo")])), 28 ('a', Attrs([('href', "#"), ('title', "Foo")])),
30 (None, -1, -1)), bits.next()) 29 (None, -1, -1)), events[0])
31 self.assertEqual((Stream.TEXT, u'Bar', (None, -1, -1)), bits.next()) 30 self.assertEqual((Stream.TEXT, 'Bar', (None, -1, -1)), events[1])
32 self.assertEqual((Stream.END, 'a', (None, -1, -1)), bits.next()) 31 self.assertEqual((Stream.END, 'a', (None, -1, -1)), events[2])
33 32
34 def test_nonstring_attributes(self): 33 def test_nonstring_attributes(self):
35 """ 34 """
36 Verify that if an attribute value is given as an int (or some other 35 Verify that if an attribute value is given as an int (or some other
37 non-string type), it is coverted to a string when the stream is 36 non-string type), it is coverted to a string when the stream is
38 generated. 37 generated.
39 """ 38 """
40 event = iter(tag.foo(id=3)).next() 39 events = list(tag.foo(id=3))
41 self.assertEqual((Stream.START, ('foo', Attrs([('id', '3')])), 40 self.assertEqual((Stream.START, ('foo', Attrs([('id', '3')])),
42 (None, -1, -1)), 41 (None, -1, -1)), events[0])
43 event)
44 42
45 def test_duplicate_attributes(self): 43 def test_duplicate_attributes(self):
46 link = tag.a(href='#1', href_='#2')('Bar') 44 link = tag.a(href='#1', href_='#2')('Bar')
47 bits = iter(link.generate()) 45 events = list(link.generate())
48 self.assertEqual((Stream.START, 46 self.assertEqual((Stream.START, ('a', Attrs([('href', "#1")])),
49 ('a', Attrs([('href', "#1")])), 47 (None, -1, -1)), events[0])
50 (None, -1, -1)), bits.next()) 48 self.assertEqual((Stream.TEXT, 'Bar', (None, -1, -1)), events[1])
51 self.assertEqual((Stream.TEXT, u'Bar', (None, -1, -1)), bits.next()) 49 self.assertEqual((Stream.END, 'a', (None, -1, -1)), events[2])
52 self.assertEqual((Stream.END, 'a', (None, -1, -1)), bits.next())
53 50
54 def test_stream_as_child(self): 51 def test_stream_as_child(self):
55 xml = list(tag.span(XML('<b>Foo</b>')).generate()) 52 events = list(tag.span(XML('<b>Foo</b>')).generate())
56 self.assertEqual(5, len(xml)) 53 self.assertEqual(5, len(events))
57 self.assertEqual((Stream.START, ('span', ())), xml[0][:2]) 54 self.assertEqual((Stream.START, ('span', ())), events[0][:2])
58 self.assertEqual((Stream.START, ('b', ())), xml[1][:2]) 55 self.assertEqual((Stream.START, ('b', ())), events[1][:2])
59 self.assertEqual((Stream.TEXT, 'Foo'), xml[2][:2]) 56 self.assertEqual((Stream.TEXT, 'Foo'), events[2][:2])
60 self.assertEqual((Stream.END, 'b'), xml[3][:2]) 57 self.assertEqual((Stream.END, 'b'), events[3][:2])
61 self.assertEqual((Stream.END, 'span'), xml[4][:2]) 58 self.assertEqual((Stream.END, 'span'), events[4][:2])
62 59
63 def test_markup_escape(self): 60 def test_markup_escape(self):
64 from genshi.core import Markup
65 m = Markup('See %s') % tag.a('genshi', 61 m = Markup('See %s') % tag.a('genshi',
66 href='http://genshi.edgwall.org') 62 href='http://genshi.edgwall.org')
67 self.assertEqual(m, Markup('See <a href="http://genshi.edgwall.org">' 63 self.assertEqual(m, Markup('See <a href="http://genshi.edgwall.org">'
68 'genshi</a>')) 64 'genshi</a>'))
65
69 66
70 def suite(): 67 def suite():
71 suite = unittest.TestSuite() 68 suite = unittest.TestSuite()
72 suite.addTest(doctest.DocTestSuite(Element.__module__)) 69 suite.addTest(doctest.DocTestSuite(Element.__module__))
73 suite.addTest(unittest.makeSuite(ElementFactoryTestCase, 'test')) 70 suite.addTest(unittest.makeSuite(ElementFactoryTestCase, 'test'))
74 return suite 71 return suite
75 72
73
76 if __name__ == '__main__': 74 if __name__ == '__main__':
77 unittest.main(defaultTest='suite') 75 unittest.main(defaultTest='suite')
Copyright (C) 2012-2017 Edgewall Software