@@ -83,28 +83,21 @@ def serialize_xhtml(input, options):
8383 options = dict ([(str (k ),v ) for k ,v in options .iteritems ()])
8484 return 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):
150143 self .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 ():
179173 for filename in html5lib_test_files ('serializer' , '*.test' ):
180- test_name = os .path .basename (filename ).replace ('.test' ,'' )
181174 tests = json .load (file (filename ))
175+ test_name = os .path .basename (filename ).replace ('.test' ,'' )
182176 for index , test in enumerate (tests ['tests' ]):
183177 xhtml = 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" , {})
0 commit comments