diff --git a/django/core/checks/urls.py b/django/core/checks/urls.py index a0d5b4a825..d2aac61739 100644 --- a/django/core/checks/urls.py +++ b/django/core/checks/urls.py @@ -12,7 +12,7 @@ def check_url_config(app_configs, **kwargs): def check_resolver(resolver): """ - Recursively check the resolver + Recursively check the resolver. """ from django.core.urlresolvers import RegexURLPattern, RegexURLResolver warnings = [] @@ -31,7 +31,7 @@ def check_resolver(resolver): def describe_pattern(pattern): """ - Formats the URL pattern for display in warning messages + Format the URL pattern for display in warning messages. """ description = "'{}'".format(pattern.regex.pattern) if getattr(pattern, 'name', False): @@ -41,7 +41,7 @@ def describe_pattern(pattern): def check_include_trailing_dollar(pattern): """ - Checks that include is not used with a regex ending with a dollar. + Check that include is not used with a regex ending with a dollar. """ regex_pattern = pattern.regex.pattern if regex_pattern.endswith('$') and not regex_pattern.endswith('\$'): @@ -58,7 +58,7 @@ def check_include_trailing_dollar(pattern): def check_pattern_startswith_slash(pattern): """ - Checks that the pattern does not begin with a forward slash + Check that the pattern does not begin with a forward slash. """ regex_pattern = pattern.regex.pattern if regex_pattern.startswith('/') or regex_pattern.startswith('^/'): @@ -74,7 +74,7 @@ def check_pattern_startswith_slash(pattern): def check_pattern_name(pattern): """ - Checks that the pattern name does not contain a colon + Check that the pattern name does not contain a colon. """ if pattern.name is not None and ":" in pattern.name: warning = Warning( diff --git a/tests/check_framework/test_urls.py b/tests/check_framework/test_urls.py index 2a05146e77..19f2d2990e 100644 --- a/tests/check_framework/test_urls.py +++ b/tests/check_framework/test_urls.py @@ -4,12 +4,12 @@ from django.test.utils import override_settings class CheckUrlsTest(SimpleTestCase): - @override_settings(ROOT_URLCONF='check_framework.urls_no_warnings') - def test_include_no_warnings(self): + @override_settings(ROOT_URLCONF='check_framework.urls.no_warnings') + def test_no_warnings(self): result = check_url_config(None) self.assertEqual(result, []) - @override_settings(ROOT_URLCONF='check_framework.urls_include') + @override_settings(ROOT_URLCONF='check_framework.urls.include_with_dollar') def test_include_with_dollar(self): result = check_url_config(None) self.assertEqual(len(result), 1) @@ -18,8 +18,8 @@ class CheckUrlsTest(SimpleTestCase): expected_msg = "Your URL pattern '^include-with-dollar$' uses include with a regex ending with a '$'." self.assertIn(expected_msg, warning.msg) - @override_settings(ROOT_URLCONF='check_framework.urls_slash') - def test_url_beginning_with_slash(self): + @override_settings(ROOT_URLCONF='check_framework.urls.beginning_with_slash') + def test_beginning_with_slash(self): result = check_url_config(None) self.assertEqual(len(result), 1) warning = result[0] @@ -27,8 +27,8 @@ class CheckUrlsTest(SimpleTestCase): expected_msg = "Your URL pattern '/starting-with-slash/$' has a regex beginning with a '/'" self.assertIn(expected_msg, warning.msg) - @override_settings(ROOT_URLCONF='check_framework.urls_name') - def test_url_pattern_name_with_colon(self): + @override_settings(ROOT_URLCONF='check_framework.urls.name_with_colon') + def test_name_with_colon(self): result = check_url_config(None) self.assertEqual(len(result), 1) warning = result[0] diff --git a/tests/check_framework/urls/__init__.py b/tests/check_framework/urls/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/check_framework/urls/beginning_with_slash.py b/tests/check_framework/urls/beginning_with_slash.py new file mode 100644 index 0000000000..859f0987d6 --- /dev/null +++ b/tests/check_framework/urls/beginning_with_slash.py @@ -0,0 +1,7 @@ +from django.conf.urls import include, url + +urlpatterns = [ + url('^', include([ + url(r'/starting-with-slash/$', lambda x: x), + ])), +] diff --git a/tests/check_framework/urls_include.py b/tests/check_framework/urls/include_with_dollar.py similarity index 100% rename from tests/check_framework/urls_include.py rename to tests/check_framework/urls/include_with_dollar.py diff --git a/tests/check_framework/urls/name_with_colon.py b/tests/check_framework/urls/name_with_colon.py new file mode 100644 index 0000000000..e761035ee1 --- /dev/null +++ b/tests/check_framework/urls/name_with_colon.py @@ -0,0 +1,7 @@ +from django.conf.urls import include, url + +urlpatterns = [ + url('^', include([ + url(r'^$', lambda x: x, name='name_with:colon'), + ])), +] diff --git a/tests/check_framework/urls/no_warnings.py b/tests/check_framework/urls/no_warnings.py new file mode 100644 index 0000000000..773ad27ef1 --- /dev/null +++ b/tests/check_framework/urls/no_warnings.py @@ -0,0 +1,9 @@ +from django.conf.urls import include, url + +urlpatterns = [ + url(r'^foo/', lambda x: x, name='foo'), + # This dollar is ok as it is escaped + url(r'^\$', include([ + url(r'^bar/$', lambda x: x, name='bar'), + ])), +] diff --git a/tests/check_framework/urls_name.py b/tests/check_framework/urls_name.py deleted file mode 100644 index 9662532851..0000000000 --- a/tests/check_framework/urls_name.py +++ /dev/null @@ -1,13 +0,0 @@ -from django.conf.urls import include, url -from django.http import HttpResponse - - -def view(request): - return HttpResponse('') - - -urlpatterns = [ - url('^', include([ - url(r'^$', view, name='name_with:colon'), - ])), -] diff --git a/tests/check_framework/urls_no_warnings.py b/tests/check_framework/urls_no_warnings.py deleted file mode 100644 index 657306f1ef..0000000000 --- a/tests/check_framework/urls_no_warnings.py +++ /dev/null @@ -1,15 +0,0 @@ -from django.conf.urls import include, url -from django.http import HttpResponse - - -def view(request): - return HttpResponse('') - - -urlpatterns = [ - url(r'^foo/', view, name='foo'), - # This dollar is ok as it is escaped - url(r'^\$', include([ - url(r'^bar/$', view, name='bar'), - ])), -] diff --git a/tests/check_framework/urls_slash.py b/tests/check_framework/urls_slash.py deleted file mode 100644 index 474f6293d5..0000000000 --- a/tests/check_framework/urls_slash.py +++ /dev/null @@ -1,13 +0,0 @@ -from django.conf.urls import include, url -from django.http import HttpResponse - - -def view(request): - return HttpResponse('') - - -urlpatterns = [ - url('^', include([ - url(r'/starting-with-slash/$', view), - ])), -]