From 72ad7afb2f8bce35cb374ba638a42e1823350b00 Mon Sep 17 00:00:00 2001 From: Julien Muchembled <jm@nexedi.com> Date: Tue, 30 Jun 2009 09:59:01 +0000 Subject: [PATCH] TestXHTML: Handle general error/warning reported by validator (ie. when there is no line/column). git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@27834 20353a03-c40f-0410-a6d1-a30d3c3de9de --- product/ERP5/tests/testXHTML.py | 61 ++++++++++++++++----------------- 1 file changed, 30 insertions(+), 31 deletions(-) diff --git a/product/ERP5/tests/testXHTML.py b/product/ERP5/tests/testXHTML.py index 96ecee99ec..67766be079 100644 --- a/product/ERP5/tests/testXHTML.py +++ b/product/ERP5/tests/testXHTML.py @@ -187,20 +187,21 @@ class W3Validator(object): parses the validation results, returns a list of tuples: line_number, col_number, error description """ - error_list=[] - warning_list=[] + result_list_list = [] xml_doc = minidom.parseString(result) - for error in xml_doc.getElementsByTagName('m:error'): - error_line = error.getElementsByTagName('m:line')[0].firstChild.nodeValue - error_col = error.getElementsByTagName('m:col')[0].firstChild.nodeValue - error_message = error.getElementsByTagName('m:message')[0].firstChild.nodeValue - error_list.append((error_line,error_col,error_message)) - for warning in xml_doc.getElementsByTagName('m:warning'): - warning_line = warning.getElementsByTagName('m:line')[0].firstChild.nodeValue - warning_col = warning.getElementsByTagName('m:col')[0].firstChild.nodeValue - warning_message = warning.getElementsByTagName('m:message')[0].firstChild.nodeValue - warning_list.append((warning_line, warning_col, warning_message)) - return error_list, warning_list + for severity in 'm:error', 'm:warning': + result_list = [] + for error in xml_doc.getElementsByTagName(severity): + result = [] + for name in 'm:line', 'm:col', 'm:message': + element_list = error.getElementsByTagName(name) + if element_list: + result.append(element_list[0].firstChild.nodeValue) + else: + result.append(None) + result_list.append(tuple(result)) + result_list_list.append(result_list) + return result_list_list def getErrorAndWarningList(self, page_source): ''' @@ -270,29 +271,27 @@ def validate_xhtml(validator, source, view_name, bt_name): validator object, and there is some warning on the page, the function return False, even if there is no error. ''' - # display some information when test faild to facilitate debugging - message = [] - message.append('Using %s validator to parse the view "%s" (from %s bt) with warning %sdisplayed :' %\ - (validator.name, view_name, bt_name, - validator.show_warnings and ' ' or 'NOT ')) + message = ['Using %s validator to parse the view "%s" (from %s bt)' + ' with warning%sdisplayed :' + % (validator.name, view_name, bt_name, + validator.show_warnings and ' ' or 'NOT ')] - error_list, warning_list = validator.getErrorAndWarningList(source) + result_list_list = validator.getErrorAndWarningList(source) - if error_list: - # build error message - for error in error_list: - message.append('Error: line %s column %s : %s' % error) + severity_list = ['Error'] + if validator.show_warnings: + severity_list.append('Warning') - if warning_list and validator.show_warnings: - # build error message - for warning in warning_list: - message.append('Warning: line %s column %s : %s' % warning) + for i, severity in enumerate(severity_list): + for line, column, msg in result_list_list[i]: + if line is None and column is None: + message.append('%s: %s' % (severity, msg)) + else: + message.append('%s: line %s column %s : %s' % + (severity, line, column, msg)) - message = '\n'.join(message) - if validator.show_warnings: - return ((not (len(error_list) or len(warning_list))), message) - return ((not len(error_list)), message) + return len(message) == 1, '\n'.join(message) def makeTestMethod(validator, module_id, portal_type, view_name, bt_name): -- 2.30.9