|
| 1 | +import sys |
1 | 2 | import os
|
2 | 3 | import unittest
|
3 | 4 | from support import simplejson, html5lib_test_files
|
4 | 5 |
|
5 | 6 | from html5lib.tokenizer import HTMLTokenizer
|
6 | 7 | from html5lib import constants
|
7 | 8 |
|
| 9 | +import cStringIO |
| 10 | + |
8 | 11 | class TokenizerTestParser(object):
|
9 | 12 | def __init__(self, contentModelFlag, lastStartTag=None):
|
10 | 13 | self.tokenizer = HTMLTokenizer
|
@@ -104,19 +107,29 @@ def runTokenizerTest(self, test):
|
104 | 107 | output = concatenateCharacterTokens(test['output'])
|
105 | 108 | if 'lastStartTag' not in test:
|
106 | 109 | test['lastStartTag'] = None
|
| 110 | + outBuffer = cStringIO.StringIO() |
| 111 | + stdout = sys.stdout |
| 112 | + sys.stdout = outBuffer |
107 | 113 | parser = TokenizerTestParser(test['contentModelFlag'],
|
108 | 114 | test['lastStartTag'])
|
109 | 115 | tokens = parser.parse(test['input'])
|
110 | 116 | tokens = concatenateCharacterTokens(tokens)
|
| 117 | + tokens = normalizeTokens(tokens) |
111 | 118 | errorMsg = "\n".join(["\n\nContent Model Flag:",
|
112 | 119 | test['contentModelFlag'] ,
|
113 |
| - "\nInput:", str(test['input']), |
114 |
| - "\nExpected:", str(output), |
115 |
| - "\nreceived:", str(tokens)]) |
116 |
| - tokens = normalizeTokens(tokens) |
| 120 | + "\nInput:", test['input'], |
| 121 | + "\nExpected:", unicode(output), |
| 122 | + "\nreceived:", unicode(tokens)]) |
117 | 123 | ignoreErrorOrder = test.get('ignoreErrorOrder', False)
|
118 |
| - self.assertEquals(tokensMatch(tokens, output, ignoreErrorOrder), True, |
119 |
| - errorMsg) |
| 124 | + sys.stdout = stdout |
| 125 | + try: |
| 126 | + self.assertEquals(tokensMatch(tokens, output, ignoreErrorOrder), True, |
| 127 | + errorMsg) |
| 128 | + except AssertionError: |
| 129 | + outBuffer.seek(0) |
| 130 | + print outBuffer.read() |
| 131 | + print errorMsg |
| 132 | + raise |
120 | 133 |
|
121 | 134 | def buildTestSuite():
|
122 | 135 | for filename in html5lib_test_files('tokenizer', '*.test'):
|
|
0 commit comments