@@ -83,28 +83,21 @@ def serialize_xhtml(input, options):
8383options = dict ([(str (k ),v )for k ,v in options .iteritems ()])
8484return serializer .XHTMLSerializer (** options ).render (JsonWalker (input ),options .get ("encoding" ,None ))
8585
86+ def make_test (input ,expected ,xhtml ,options ):
87+ result = serialize_html (input ,options )
88+ if len (expected )== 1 :
89+ assert expected [0 ]== result ,"Expected:\n %s\n Actual:\n %s\n Options\n xhtml:False\n %s" % (expected [0 ],result ,str (options ))
90+ elif result not in expected :
91+ assert False ,"Expected: %s, Received: %s" % (expected ,result )
8692
87- class TestCase (unittest .TestCase ):
88- def addTest (cls ,name ,description ,input ,expected ,xhtml ,options ):
89- func = lambda self :self .mockTest (input ,options ,expected ,xhtml )
90- func .__doc__ = "\t " .join ([name ,description ,str (input ),str (options )])
91- setattr (cls ,name ,func )
92- addTest = classmethod (addTest )
93+ if not xhtml :
94+ return
9395
94- def mockTest (self ,input ,options ,expected ,xhtml ):
95- result = serialize_html (input ,options )
96- if len (expected )== 1 :
97- self .assertEquals (expected [0 ],result ,"Expected:\n %s\n Actual:\n %s\n Options\n xhtml:False\n %s" % (expected [0 ],result ,str (options )))
98- elif result not in expected :
99- self .fail ("Expected: %s, Received: %s" % (expected ,result ))
100-
101- if not xhtml :return
102-
103- result = serialize_xhtml (input ,options )
104- if len (xhtml )== 1 :
105- self .assertEquals (xhtml [0 ],result ,"Expected:\n %s\n Actual:\n %s\n Options\n xhtml:True\n %s" % (xhtml [0 ],result ,str (options )))
106- elif result not in xhtml :
107- self .fail ("Expected: %s, Received: %s" % (xhtml ,result ))
96+ result = serialize_xhtml (input ,options )
97+ if len (xhtml )== 1 :
98+ assert xhtml [0 ]== result ,"Expected:\n %s\n Actual:\n %s\n Options\n xhtml:True\n %s" % (xhtml [0 ],result ,str (options ))
99+ elif result not in xhtml :
100+ assert False ,"Expected: %s, Received: %s" % (xhtml ,result )
108101
109102
110103class EncodingTestCase (unittest .TestCase ):
@@ -150,55 +143,38 @@ def testComment(self):
150143self .throwsWithLatin1 ([["Comment" ,u"\u0101 " ]])
151144
152145
153- class LxmlTestCase (unittest .TestCase ):
154- def setUp (self ):
155- self .parser = etree .XMLParser (resolve_entities = False )
156- self .treewalker = html5lib .getTreeWalker ("lxml" )
157- self .serializer = serializer .HTMLSerializer ()
158-
159- def testEntityReplacement (self ):
160- doc = """<!DOCTYPE html SYSTEM "about:legacy-compat"><html>β</html>"""
161- tree = etree .fromstring (doc ,parser = self .parser ).getroottree ()
162- result = serializer .serialize (tree ,tree = "lxml" ,omit_optional_tags = False )
163- self .assertEquals (u"""<!DOCTYPE html SYSTEM "about:legacy-compat"><html>\u03B2 </html>""" ,result )
164-
165- def testEntityXML (self ):
166- doc = """<!DOCTYPE html SYSTEM "about:legacy-compat"><html>></html>"""
167- tree = etree .fromstring (doc ,parser = self .parser ).getroottree ()
168- result = serializer .serialize (tree ,tree = "lxml" ,omit_optional_tags = False )
169- self .assertEquals (u"""<!DOCTYPE html SYSTEM "about:legacy-compat"><html>></html>""" ,result )
170-
171- def testEntityNoResolve (self ):
172- doc = """<!DOCTYPE html SYSTEM "about:legacy-compat"><html>β</html>"""
173- tree = etree .fromstring (doc ,parser = self .parser ).getroottree ()
174- result = serializer .serialize (tree ,tree = "lxml" ,omit_optional_tags = False ,
175- resolve_entities = False )
176- self .assertEquals (u"""<!DOCTYPE html SYSTEM "about:legacy-compat"><html>β</html>""" ,result )
177-
178- def buildBasicTestSuite ():
146+ if "lxml" in optionals_loaded :
147+ class LxmlTestCase (unittest .TestCase ):
148+ def setUp (self ):
149+ self .parser = etree .XMLParser (resolve_entities = False )
150+ self .treewalker = html5lib .getTreeWalker ("lxml" )
151+ self .serializer = serializer .HTMLSerializer ()
152+
153+ def testEntityReplacement (self ):
154+ doc = """<!DOCTYPE html SYSTEM "about:legacy-compat"><html>β</html>"""
155+ tree = etree .fromstring (doc ,parser = self .parser ).getroottree ()
156+ result = serializer .serialize (tree ,tree = "lxml" ,omit_optional_tags = False )
157+ self .assertEquals (u"""<!DOCTYPE html SYSTEM "about:legacy-compat"><html>\u03B2 </html>""" ,result )
158+
159+ def testEntityXML (self ):
160+ doc = """<!DOCTYPE html SYSTEM "about:legacy-compat"><html>></html>"""
161+ tree = etree .fromstring (doc ,parser = self .parser ).getroottree ()
162+ result = serializer .serialize (tree ,tree = "lxml" ,omit_optional_tags = False )
163+ self .assertEquals (u"""<!DOCTYPE html SYSTEM "about:legacy-compat"><html>></html>""" ,result )
164+
165+ def testEntityNoResolve (self ):
166+ doc = """<!DOCTYPE html SYSTEM "about:legacy-compat"><html>β</html>"""
167+ tree = etree .fromstring (doc ,parser = self .parser ).getroottree ()
168+ result = serializer .serialize (tree ,tree = "lxml" ,omit_optional_tags = False ,
169+ resolve_entities = False )
170+ self .assertEquals (u"""<!DOCTYPE html SYSTEM "about:legacy-compat"><html>β</html>""" ,result )
171+
172+ def test_serializer ():
179173for filename in html5lib_test_files ('serializer' ,'*.test' ):
180- test_name = os .path .basename (filename ).replace ('.test' ,'' )
181174tests = json .load (file (filename ))
175+ test_name = os .path .basename (filename ).replace ('.test' ,'' )
182176for index ,test in enumerate (tests ['tests' ]):
183177xhtml = test .get ("xhtml" ,test ["expected" ])
184- if test_name == 'optionaltags' :xhtml = None
185- TestCase .addTest ('test_%s_%d' % (test_name ,index + 1 ),
186- test ["description" ],test ["input" ],test ["expected" ],xhtml ,
187- test .get ("options" , {}))
188- return unittest .TestLoader ().loadTestsFromTestCase (TestCase )
189-
190- def buildTestSuite ():
191- allTests = [buildBasicTestSuite ()]
192- allTests .append (unittest .TestLoader ().loadTestsFromTestCase (EncodingTestCase ))
193- if "lxml" in optionals_loaded :
194- allTests .append (unittest .TestLoader ().loadTestsFromTestCase (LxmlTestCase ))
195-
196- return unittest .TestSuite (allTests )
197-
198-
199- def main ():
200- buildTestSuite ()
201- unittest .main ()
202-
203- if __name__ == "__main__" :
204- main ()
178+ if test_name == 'optionaltags' :
179+ xhtml = None
180+ yield make_test ,test ["input" ],test ["expected" ],xhtml ,test .get ("options" , {})