diff options
| -rw-r--r-- | rest_framework/tests/test_description.py | 13 | ||||
| -rw-r--r-- | rest_framework/tests/views.py | 25 | ||||
| -rw-r--r-- | rest_framework/utils/formatting.py | 4 | 
3 files changed, 34 insertions, 8 deletions
diff --git a/rest_framework/tests/test_description.py b/rest_framework/tests/test_description.py index 52c1a34c..bc86e106 100644 --- a/rest_framework/tests/test_description.py +++ b/rest_framework/tests/test_description.py @@ -3,8 +3,10 @@  from __future__ import unicode_literals  from django.test import TestCase  from rest_framework.views import APIView -from rest_framework.compat import apply_markdown +from rest_framework.compat import apply_markdown, smart_text  from rest_framework.utils.formatting import get_view_name, get_view_description +from rest_framework.tests.views import ( +    ViewWithNonASCIICharactersInDocstring, UTF8_TEST_DOCSTRING)  # We check that docstrings get nicely un-indented.  DESCRIPTION = """an example docstring @@ -83,11 +85,10 @@ class TestViewNamesAndDescriptions(TestCase):          Unicode in docstrings should be respected.          """ -        class MockView(APIView): -            """Проверка""" -            pass - -        self.assertEqual(get_view_description(MockView), "Проверка") +        self.assertEqual( +            get_view_description(ViewWithNonASCIICharactersInDocstring), +            smart_text(UTF8_TEST_DOCSTRING) +        )      def test_view_description_can_be_empty(self):          """ diff --git a/rest_framework/tests/views.py b/rest_framework/tests/views.py new file mode 100644 index 00000000..fc00cc0b --- /dev/null +++ b/rest_framework/tests/views.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- + +from rest_framework.views import APIView + + +# test strings snatched from http://www.columbia.edu/~fdc/utf8/, +# http://winrus.com/utf8-jap.htm and memory +UTF8_TEST_DOCSTRING = ( +    'zażółć gęślą jaźń' +    'Sîne klâwen durh die wolken sint geslagen' +    'Τη γλώσσα μου έδωσαν ελληνική' +    'யாமறிந்த மொழிகளிலே தமிழ்மொழி' +    'На берегу пустынных волн' +    'てすと' +    'アイウエオカキクケコサシスセソタチツテ' +) + + +# Apparently there is an issue where docstrings of imported view classes +# do not retain their encoding information even if a module has a proper +# encoding declaration at the top of its source file. Therefore for tests +# to catch unicode related errors, a mock view has to be declared in a separate +# module. +class ViewWithNonASCIICharactersInDocstring(APIView): +    __doc__ = UTF8_TEST_DOCSTRING diff --git a/rest_framework/utils/formatting.py b/rest_framework/utils/formatting.py index ebadb3a6..4bec8387 100644 --- a/rest_framework/utils/formatting.py +++ b/rest_framework/utils/formatting.py @@ -5,7 +5,7 @@ from __future__ import unicode_literals  from django.utils.html import escape  from django.utils.safestring import mark_safe -from rest_framework.compat import apply_markdown +from rest_framework.compat import apply_markdown, smart_text  import re @@ -63,7 +63,7 @@ def get_view_description(cls, html=False):      Return a description for an `APIView` class or `@api_view` function.      """      description = cls.__doc__ or '' -    description = _remove_leading_indent(description) +    description = _remove_leading_indent(smart_text(description))      if html:          return markup_description(description)      return description  | 
