From 15bdc85117785d583b9ae71d256929a431478f4c Mon Sep 17 00:00:00 2001
From: Baptiste Mispelon <bmispelon@gmail.com>
Date: Fri, 27 Sep 2013 17:00:42 +0200
Subject: [PATCH] [1.6.x] Fix #21185: Added tests for unescape_entities.

Also fixed a py3 incompatibility.
Thanks to brutasse for the report.

Backport of 3754f4ad410640382f9fe25073da03009cdc2ea3 from master.
---
 django/utils/text.py           |  4 ++--
 tests/utils_tests/test_text.py | 13 +++++++++++++
 2 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/django/utils/text.py b/django/utils/text.py
index 6329b36df8..92eda53b17 100644
--- a/django/utils/text.py
+++ b/django/utils/text.py
@@ -365,12 +365,12 @@ def _replace_entity(match):
                 c = int(text[1:], 16)
             else:
                 c = int(text)
-            return unichr(c)
+            return six.unichr(c)
         except ValueError:
             return match.group(0)
     else:
         try:
-            return unichr(html_entities.name2codepoint[text])
+            return six.unichr(html_entities.name2codepoint[text])
         except (ValueError, KeyError):
             return match.group(0)
 
diff --git a/tests/utils_tests/test_text.py b/tests/utils_tests/test_text.py
index c9dde6b1b3..dd72d26e06 100644
--- a/tests/utils_tests/test_text.py
+++ b/tests/utils_tests/test_text.py
@@ -106,3 +106,16 @@ class TestUtilsText(SimpleTestCase):
         )
         for value, output in items:
             self.assertEqual(text.slugify(value), output)
+
+    def test_unescape_entities(self):
+        items = [
+            ('', ''),
+            ('foo', 'foo'),
+            ('&amp;', '&'),
+            ('&#x26;', '&'),
+            ('&#38;', '&'),
+            ('foo &amp; bar', 'foo & bar'),
+            ('foo & bar', 'foo & bar'),
+        ]
+        for value, output in items:
+            self.assertEqual(text.unescape_entities(value), output)