Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitf5855f3

Browse files
committed
Fix up more tests to work with nose
1 parent19686c8 commitf5855f3

File tree

5 files changed

+102
-150
lines changed

5 files changed

+102
-150
lines changed

‎html5lib/tests/test_serializer.py

Lines changed: 44 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -83,28 +83,21 @@ def serialize_xhtml(input, options):
8383
options=dict([(str(k),v)fork,vinoptions.iteritems()])
8484
returnserializer.XHTMLSerializer(**options).render(JsonWalker(input),options.get("encoding",None))
8585

86+
defmake_test(input,expected,xhtml,options):
87+
result=serialize_html(input,options)
88+
iflen(expected)==1:
89+
assertexpected[0]==result,"Expected:\n%s\nActual:\n%s\nOptions\nxhtml:False\n%s"%(expected[0],result,str(options))
90+
elifresultnotinexpected:
91+
assertFalse,"Expected: %s, Received: %s"% (expected,result)
8692

87-
classTestCase(unittest.TestCase):
88-
defaddTest(cls,name,description,input,expected,xhtml,options):
89-
func=lambdaself: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+
ifnotxhtml:
94+
return
9395

94-
defmockTest(self,input,options,expected,xhtml):
95-
result=serialize_html(input,options)
96-
iflen(expected)==1:
97-
self.assertEquals(expected[0],result,"Expected:\n%s\nActual:\n%s\nOptions\nxhtml:False\n%s"%(expected[0],result,str(options)))
98-
elifresultnotinexpected:
99-
self.fail("Expected: %s, Received: %s"% (expected,result))
100-
101-
ifnotxhtml:return
102-
103-
result=serialize_xhtml(input,options)
104-
iflen(xhtml)==1:
105-
self.assertEquals(xhtml[0],result,"Expected:\n%s\nActual:\n%s\nOptions\nxhtml:True\n%s"%(xhtml[0],result,str(options)))
106-
elifresultnotinxhtml:
107-
self.fail("Expected: %s, Received: %s"% (xhtml,result))
96+
result=serialize_xhtml(input,options)
97+
iflen(xhtml)==1:
98+
assertxhtml[0]==result,"Expected:\n%s\nActual:\n%s\nOptions\nxhtml:True\n%s"%(xhtml[0],result,str(options))
99+
elifresultnotinxhtml:
100+
assertFalse,"Expected: %s, Received: %s"% (xhtml,result)
108101

109102

110103
classEncodingTestCase(unittest.TestCase):
@@ -150,55 +143,38 @@ def testComment(self):
150143
self.throwsWithLatin1([["Comment",u"\u0101"]])
151144

152145

153-
classLxmlTestCase(unittest.TestCase):
154-
defsetUp(self):
155-
self.parser=etree.XMLParser(resolve_entities=False)
156-
self.treewalker=html5lib.getTreeWalker("lxml")
157-
self.serializer=serializer.HTMLSerializer()
158-
159-
deftestEntityReplacement(self):
160-
doc="""<!DOCTYPE html SYSTEM "about:legacy-compat"><html>&beta;</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-
deftestEntityXML(self):
166-
doc="""<!DOCTYPE html SYSTEM "about:legacy-compat"><html>&gt;</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>&gt;</html>""",result)
170-
171-
deftestEntityNoResolve(self):
172-
doc="""<!DOCTYPE html SYSTEM "about:legacy-compat"><html>&beta;</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>&beta;</html>""",result)
177-
178-
defbuildBasicTestSuite():
146+
if"lxml"inoptionals_loaded:
147+
classLxmlTestCase(unittest.TestCase):
148+
defsetUp(self):
149+
self.parser=etree.XMLParser(resolve_entities=False)
150+
self.treewalker=html5lib.getTreeWalker("lxml")
151+
self.serializer=serializer.HTMLSerializer()
152+
153+
deftestEntityReplacement(self):
154+
doc="""<!DOCTYPE html SYSTEM "about:legacy-compat"><html>&beta;</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+
deftestEntityXML(self):
160+
doc="""<!DOCTYPE html SYSTEM "about:legacy-compat"><html>&gt;</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>&gt;</html>""",result)
164+
165+
deftestEntityNoResolve(self):
166+
doc="""<!DOCTYPE html SYSTEM "about:legacy-compat"><html>&beta;</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>&beta;</html>""",result)
171+
172+
deftest_serializer():
179173
forfilenameinhtml5lib_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
forindex,testinenumerate(tests['tests']):
183177
xhtml=test.get("xhtml",test["expected"])
184-
iftest_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-
returnunittest.TestLoader().loadTestsFromTestCase(TestCase)
189-
190-
defbuildTestSuite():
191-
allTests= [buildBasicTestSuite()]
192-
allTests.append(unittest.TestLoader().loadTestsFromTestCase(EncodingTestCase))
193-
if"lxml"inoptionals_loaded:
194-
allTests.append(unittest.TestLoader().loadTestsFromTestCase(LxmlTestCase))
195-
196-
returnunittest.TestSuite(allTests)
197-
198-
199-
defmain():
200-
buildTestSuite()
201-
unittest.main()
202-
203-
if__name__=="__main__":
204-
main()
178+
iftest_name=='optionaltags':
179+
xhtml=None
180+
yieldmake_test,test["input"],test["expected"],xhtml,test.get("options", {})

‎html5lib/tests/test_tokenizer.py

Lines changed: 29 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -138,33 +138,32 @@ def decode(inp):
138138
token[2][decode(key)]=decode(value)
139139
returntest
140140

141-
classTestCase(unittest.TestCase):
142-
defrunTokenizerTest(self,test):
143-
#XXX - move this out into the setup function
144-
#concatenate all consecutive character tokens into a single token
145-
if'doubleEscaped'intest:
146-
test=unescape_test(test)
147-
148-
expected=concatenateCharacterTokens(test['output'])
149-
if'lastStartTag'notintest:
150-
test['lastStartTag']=None
151-
outBuffer=cStringIO.StringIO()
152-
stdout=sys.stdout
153-
sys.stdout=outBuffer
154-
parser=TokenizerTestParser(test['initialState'],
155-
test['lastStartTag'])
156-
tokens=parser.parse(test['input'])
157-
tokens=concatenateCharacterTokens(tokens)
158-
received=normalizeTokens(tokens)
159-
errorMsg=u"\n".join(["\n\nInitial state:",
160-
test['initialState'] ,
161-
"\nInput:",unicode(test['input']),
162-
"\nExpected:",unicode(expected),
163-
"\nreceived:",unicode(tokens)])
164-
errorMsg=errorMsg.encode("utf-8")
165-
ignoreErrorOrder=test.get('ignoreErrorOrder',False)
166-
self.assertEquals(tokensMatch(expected,received,ignoreErrorOrder),
167-
True,errorMsg)
141+
142+
defrunTokenizerTest(test):
143+
#XXX - move this out into the setup function
144+
#concatenate all consecutive character tokens into a single token
145+
if'doubleEscaped'intest:
146+
test=unescape_test(test)
147+
148+
expected=concatenateCharacterTokens(test['output'])
149+
if'lastStartTag'notintest:
150+
test['lastStartTag']=None
151+
outBuffer=cStringIO.StringIO()
152+
stdout=sys.stdout
153+
sys.stdout=outBuffer
154+
parser=TokenizerTestParser(test['initialState'],
155+
test['lastStartTag'])
156+
tokens=parser.parse(test['input'])
157+
tokens=concatenateCharacterTokens(tokens)
158+
received=normalizeTokens(tokens)
159+
errorMsg=u"\n".join(["\n\nInitial state:",
160+
test['initialState'] ,
161+
"\nInput:",unicode(test['input']),
162+
"\nExpected:",unicode(expected),
163+
"\nreceived:",unicode(tokens)])
164+
errorMsg=errorMsg.encode("utf-8")
165+
ignoreErrorOrder=test.get('ignoreErrorOrder',False)
166+
asserttokensMatch(expected,received,ignoreErrorOrder),errorMsg
168167

169168

170169
def_doCapitalize(match):
@@ -178,7 +177,7 @@ def capitalize(s):
178177
returns
179178

180179

181-
defbuildTestSuite():
180+
deftest_tokenizer():
182181
forfilenameinhtml5lib_test_files('tokenizer','*.test'):
183182
tests=json.load(file(filename))
184183
testName=os.path.basename(filename).replace(".test","")
@@ -190,16 +189,5 @@ def buildTestSuite():
190189
test["initialStates"]= ["Data state"]
191190
forinitialStateintest["initialStates"]:
192191
test["initialState"]=capitalize(initialState)
193-
deftestFunc(self,test=test):
194-
self.runTokenizerTest(test)
195-
testFunc.__doc__="\t".join([testName,
196-
test['description']])
197-
setattr(TestCase,'test_%s_%d_%s'% (testName,index,test["initialState"]),testFunc)
198-
returnunittest.TestLoader().loadTestsFromTestCase(TestCase)
199-
200-
defmain():
201-
buildTestSuite()
202-
unittest.main()
203-
204-
if__name__=="__main__":
205-
main()
192+
yieldrunTokenizerTest,test
193+

‎html5lib/tests/test_treewalkers.py

Lines changed: 25 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -242,30 +242,6 @@ def sortattrs(x):
242242
lines.sort()
243243
return"\n".join(lines)
244244

245-
classTestCase(unittest.TestCase):
246-
defrunTest(self,innerHTML,input,expected,errors,treeClass):
247-
try:
248-
p=html5parser.HTMLParser(tree=treeClass["builder"])
249-
ifinnerHTML:
250-
document=p.parseFragment(StringIO.StringIO(input),innerHTML)
251-
else:
252-
document=p.parse(StringIO.StringIO(input))
253-
exceptconstants.DataLossWarning:
254-
#Ignore testcases we know we don't pass
255-
return
256-
257-
document=treeClass.get("adapter",lambdax:x)(document)
258-
try:
259-
output=convertTokens(treeClass["walker"](document))
260-
output=attrlist.sub(sortattrs,output)
261-
expected=attrlist.sub(sortattrs,convertExpected(expected))
262-
self.assertEquals(expected,output,"\n".join([
263-
"","Input:",input,
264-
"","Expected:",expected,
265-
"","Received:",output
266-
]))
267-
exceptNotImplementedError:
268-
pass# Amnesty for those that confess...
269245

270246
classTokenTestCase(unittest.TestCase):
271247
deftest_all_tokens(self):
@@ -290,8 +266,31 @@ def test_all_tokens(self):
290266
forexpectedToken,outputTokeninzip(expected,output):
291267
self.assertEquals(expectedToken,outputToken)
292268

269+
defrun_test(innerHTML,input,expected,errors,treeClass):
270+
try:
271+
p=html5parser.HTMLParser(tree=treeClass["builder"])
272+
ifinnerHTML:
273+
document=p.parseFragment(StringIO.StringIO(input),innerHTML)
274+
else:
275+
document=p.parse(StringIO.StringIO(input))
276+
exceptconstants.DataLossWarning:
277+
#Ignore testcases we know we don't pass
278+
return
279+
280+
document=treeClass.get("adapter",lambdax:x)(document)
281+
try:
282+
output=convertTokens(treeClass["walker"](document))
283+
output=attrlist.sub(sortattrs,output)
284+
expected=attrlist.sub(sortattrs,convertExpected(expected))
285+
assertexpected==output,"\n".join([
286+
"","Input:",input,
287+
"","Expected:",expected,
288+
"","Received:",output
289+
])
290+
exceptNotImplementedError:
291+
pass# Amnesty for those that confess...
293292

294-
defbuildTestSuite():
293+
deftest_treewalker():
295294
sys.stdout.write('Testing tree walkers '+" ".join(treeTypes.keys())+"\n")
296295

297296
fortreeName,treeClsintreeTypes.iteritems():
@@ -307,17 +306,6 @@ def buildTestSuite():
307306
"document-fragment",
308307
"document")]
309308
errors=errors.split("\n")
310-
deftestFunc(self,innerHTML=innerHTML,input=input,
311-
expected=expected,errors=errors,treeCls=treeCls):
312-
self.runTest(innerHTML,input,expected,errors,treeCls)
313-
setattr(TestCase,"test_%s_%d_%s"% (testName,index+1,treeName),
314-
testFunc)
315-
316-
returnunittest.TestLoader().loadTestsFromTestCase(TestCase)
309+
yieldrun_test,innerHTML,input,expected,errors,treeCls
317310

318-
defmain():
319-
buildTestSuite()
320-
unittest.main()
321311

322-
if__name__=="__main__":
323-
main()

‎html5lib/treewalkers/etree.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,10 +61,11 @@ def getNodeDetails(self, node):
6161
return (_base.DOCTYPE,node.text,
6262
node.get("publicId"),node.get("systemId"))
6363

64-
eliftype(node.tag)==type(ElementTree.Comment):
64+
elifnode.tag==ElementTree.Comment:
6565
return_base.COMMENT,node.text
6666

6767
else:
68+
asserttype(node.tag)in (str,unicode),type(node.tag)
6869
#This is assumed to be an ordinary element
6970
match=tag_regexp.match(node.tag)
7071
ifmatch:

‎setup.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
]
2222

2323
setup(name='html5lib',
24-
version='0.95-dev',
24+
version='0.95',
2525
url='http://code.google.com/p/html5lib/',
2626
license="MIT License",
2727
description='HTML parser based on the WHAT-WG Web Applications 1.0'
@@ -34,6 +34,5 @@
3434
fornameinos.listdir(os.path.join('html5lib'))
3535
ifos.path.isdir(os.path.join('html5lib',name))and
3636
notname.startswith('.')],
37-
test_suite="html5lib.tests.buildTestSuite",
38-
tests_require= ['simplejson']
37+
test_suite="html5lib.tests.buildTestSuite"
3938
)

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp