@@ -69,14 +69,14 @@ def parseTestcase(testString):
69
69
raise
70
70
innerHTML = False
71
71
input = []
72
- output = []
72
+ expected = []
73
73
errors = []
74
74
currentList = input
75
75
for line in testString :
76
76
if line and not (line .startswith ("#errors" ) or
77
77
line .startswith ("#document" ) or line .startswith ("#data" ) or
78
78
line .startswith ("#document-fragment" )):
79
- if currentList is output :
79
+ if currentList is expected :
80
80
if line .startswith ("|" ):
81
81
currentList .append (line [2 :])
82
82
else :
@@ -91,8 +91,8 @@ def parseTestcase(testString):
91
91
if not innerHTML :
92
92
sys .stderr .write (testString )
93
93
assert innerHTML
94
- currentList = output
95
- return innerHTML , "\n " .join (input ), "\n " .join (output ), errors
94
+ currentList = expected
95
+ return innerHTML , "\n " .join (input ), "\n " .join (expected ), errors
96
96
97
97
def convertTreeDump (treedump ):
98
98
"""convert the output of str(document) to the format used in the testcases"""
@@ -105,20 +105,28 @@ def convertTreeDump(treedump):
105
105
rv .append (line )
106
106
return "\n " .join (rv )
107
107
108
+ import re
109
+ attrlist = re .compile (r"^(\s+)\w+=.*(\n\1\w+=.*)+" ,re .M )
110
+ def sortattrs (x ):
111
+ lines = x .group (0 ).split ("\n " )
112
+ lines .sort ()
113
+ return "\n " .join (lines )
114
+
108
115
class TestCase (unittest .TestCase ):
109
- def runParserTest (self , innerHTML , input , output , errors , treeClass ):
116
+ def runParserTest (self , innerHTML , input , expected , errors , treeClass ):
110
117
#XXX - move this out into the setup function
111
118
#concatenate all consecutive character tokens into a single token
112
119
p = html5parser .HTMLParser (tree = treeClass )
113
120
if innerHTML :
114
121
document = p .parseFragment (StringIO .StringIO (input ), innerHTML )
115
122
else :
116
123
document = p .parse (StringIO .StringIO (input ))
117
- errorMsg = "\n " .join (["\n \n Expected:" , output , "\n Recieved:" ,
118
- convertTreeDump (p .tree .testSerializer (document ))])
119
- self .assertEquals (output ,
120
- convertTreeDump (p .tree .testSerializer (document )),
121
- errorMsg )
124
+ output = convertTreeDump (p .tree .testSerializer (document ))
125
+ output = attrlist .sub (sortattrs , output )
126
+ expected = attrlist .sub (sortattrs , expected )
127
+ errorMsg = "\n " .join (["\n \n Expected:" , expected ,
128
+ "\n Recieved:" , output ])
129
+ self .assertEquals (expected , output , errorMsg )
122
130
errStr = ["Line: %i Col: %i %s" % (line , col , message ) for
123
131
((line ,col ), message ) in p .errors ]
124
132
errorMsg2 = "\n " .join (["\n \n Input errors:\n " + "\n " .join (errors ),
@@ -135,16 +143,16 @@ def test_parser():
135
143
if test == "" :
136
144
continue
137
145
test = "#data\n " + test
138
- innerHTML , input , output , errors = parseTestcase (test )
139
- yield TestCase .runParserTest , innerHTML , input , output , errors , name , cls
146
+ innerHTML , input , expected , errors = parseTestcase (test )
147
+ yield TestCase .runParserTest , innerHTML , input , expected , errors , name , cls
140
148
141
149
def buildTestSuite ():
142
150
tests = 0
143
- for func , innerHTML , input , output , errors , treeName , treeCls in test_parser ():
151
+ for func , innerHTML , input , expected , errors , treeName , treeCls in test_parser ():
144
152
tests += 1
145
153
testName = 'test%d' % tests
146
- testFunc = lambda self , method = func , innerHTML = innerHTML , input = input , output = output , \
147
- errors = errors , treeCls = treeCls : method (self , innerHTML , input , output , errors , treeCls )
154
+ testFunc = lambda self , method = func , innerHTML = innerHTML , input = input , expected = expected , \
155
+ errors = errors , treeCls = treeCls : method (self , innerHTML , input , expected , errors , treeCls )
148
156
testFunc .__doc__ = 'Parser %s Tree %s Input: %s' % (testName , treeName , input )
149
157
instanceMethod = new .instancemethod (testFunc , None , TestCase )
150
158
setattr (TestCase , testName , instanceMethod )
0 commit comments