From f5ffd5e581af27999c475cb3f74d69981cc758c0 Mon Sep 17 00:00:00 2001
From: Vadim Rutkovsky <vrutkovs@redhat.com>
Date: Thu, 20 Feb 2014 12:06:25 +0100
Subject: [PATCH] html formatter: strip incorrect chars from error message
---
behave/formatter/html.py | 20 ++++++++++++--------
1 file changed, 12 insertions(+), 8 deletions(-)
--- a/behave/formatter/html.py
+++ b/behave/formatter/html.py
@@ -4,6 +4,14 @@ import base64
import os.path
from behave.compat.collections import Counter
+def _valid_XML_char_ordinal(i):
+ return ( # conditions ordered by presumed frequency
+ 0x20 <= i <= 0xD7FF
+ or i in (0x9, 0xA, 0xD)
+ or 0xE000 <= i <= 0xFFFD
+ or 0x10000 <= i <= 0x10FFFF
+ )
+
class HTMLFormatter(Formatter):
name = 'html'
@@ -200,7 +208,10 @@ class HTMLFormatter(Formatter):
embed = ET.SubElement(step, 'pre',
{'id': "embed_%s" % self.embed_id,
'style': 'display: none; white-space: pre-wrap;'})
- embed.text = result.error_message
+ cleaned_error_message = ''.join(
+ c for c in result.error_message if _valid_XML_char_ordinal(ord(c))
+ )
+ embed.text = cleaned_error_message
embed.tail = u' '
if result.status == 'failed':
@@ -242,15 +253,8 @@ class HTMLFormatter(Formatter):
if 'text/' in mime_type:
link.text = u'Data'
- def valid_XML_char_ordinal(i):
- return ( # conditions ordered by presumed frequency
- 0x20 <= i <= 0xD7FF
- or i in (0x9, 0xA, 0xD)
- or 0xE000 <= i <= 0xFFFD
- or 0x10000 <= i <= 0x10FFFF
- )
cleaned_data = ''.join(
- c for c in data if valid_XML_char_ordinal(ord(c))
+ c for c in data if _valid_XML_char_ordinal(ord(c))
)
embed = ET.SubElement(span, 'pre',