diff options
| author | Igor Kalat | 2013-06-26 22:12:02 +0200 | 
|---|---|---|
| committer | Igor Kalat | 2013-06-26 22:12:02 +0200 | 
| commit | c8b0e6c40f6bcf447aa539ff98b9985aa53032ce (patch) | |
| tree | 68568ce75703347d503e39d525baf0e2c800c6c9 | |
| parent | 2bf5f6305030d5ebbd5a8a0fd5c31586c08a558d (diff) | |
| download | django-rest-framework-c8b0e6c40f6bcf447aa539ff98b9985aa53032ce.tar.bz2 | |
Refactored get_view_description, moved appropriate tests to test_description.py
| -rw-r--r-- | rest_framework/tests/test_description.py | 13 | ||||
| -rw-r--r-- | rest_framework/tests/test_utils.py | 36 | ||||
| -rw-r--r-- | rest_framework/tests/views.py | 25 | ||||
| -rw-r--r-- | rest_framework/utils/formatting.py | 9 | 
4 files changed, 34 insertions, 49 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/test_utils.py b/rest_framework/tests/test_utils.py deleted file mode 100644 index da508dbb..00000000 --- a/rest_framework/tests/test_utils.py +++ /dev/null @@ -1,36 +0,0 @@ -# -*- coding: utf-8 -*- - -from django.test import TestCase -from rest_framework.utils import formatting -import sys - - -class FormattingUnitTests(TestCase): -    def setUp(self): -        # test strings snatched from http://www.columbia.edu/~fdc/utf8/, -        # http://winrus.com/utf8-jap.htm and memory -        self.utf8_test_string = ( -            'zażółć gęślą jaźń' -            'Sîne klâwen durh die wolken sint geslagen' -            'Τη γλώσσα μου έδωσαν ελληνική' -            'யாமறிந்த மொழிகளிலே தமிழ்மொழி' -            'На берегу пустынных волн' -            ' てすと' -            'アイウエオカキクケコサシスセソタチツテ' -        ) -        self.non_utf8_test_string = ('The quick brown fox jumps over the lazy ' -                                     'dog') - -    def test_for_ascii_support_in_remove_leading_indent(self): -        if sys.version_info < (3, 0): -            # only Python 2.x is affected, so we skip the test entirely -            # if on Python 3.x -            self.assertEqual(formatting._remove_leading_indent( -                self.non_utf8_test_string), self.non_utf8_test_string) - -    def test_for_utf8_support_in_remove_leading_indent(self): -        if sys.version_info < (3, 0): -            # only Python 2.x is affected, so we skip the test entirely -            # if on Python 3.x -            self.assertEqual(formatting._remove_leading_indent( -                self.utf8_test_string), self.utf8_test_string.decode('utf-8')) 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 a2a5609c..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 @@ -24,11 +24,6 @@ def _remove_leading_indent(content):      Remove leading indent from a block of text.      Used when generating descriptions from docstrings.      """ -    try: -        content = content.decode('utf-8') -    except (AttributeError, UnicodeEncodeError): -        pass  # the string should keep the default 'ascii' encoding in -              # Python 2.x or stay a unicode string in Python 3.x      whitespace_counts = [len(line) - len(line.lstrip(' '))                           for line in content.splitlines()[1:] if line.lstrip()] @@ -68,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 | 
