Mercurial > genshi > genshi-test
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') |