Blob Blame History Raw
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',