|
| 1 | +from typing import List, Tuple |
| 2 | + |
| 3 | +from django.conf.urls.i18n import urlpatterns as i18n_urlpatterns |
| 4 | +from django.contrib import admin |
| 5 | +from django.contrib.auth.views import LoginView |
| 6 | +from django.contrib.flatpages import urls as flatpages_urls |
| 7 | +from django.contrib.staticfiles.urls import staticfiles_urlpatterns |
| 8 | +from django.http import HttpResponse |
| 9 | +from django.urls import URLPattern, URLResolver, _AnyURL, include, path, re_path |
| 10 | +from django.utils.translation import gettext_lazy as _ |
| 11 | +from typing_extensions import assert_type |
| 12 | + |
| 13 | +# Test 'path' accepts mix of pattern and resolver object |
| 14 | +include1: Tuple[List[_AnyURL], None, None] = ([], None, None) |
| 15 | +assert_type(path("test/", include1), URLResolver) |
| 16 | + |
| 17 | +# Test 'path' accepts pattern resolver union subset |
| 18 | +include2: Tuple[List[URLPattern], None, None] = ([], None, None) |
| 19 | +assert_type(path("test/", include2), URLResolver) |
| 20 | + |
| 21 | +# Test 'path' |
| 22 | +assert_type(path("admin/", admin.site.urls), URLResolver) |
| 23 | +assert_type(path(_("admin/"), admin.site.urls, name="admin"), URLResolver) |
| 24 | +assert_type(path("login/", LoginView.as_view(), name="login1"), URLPattern) |
| 25 | +assert_type(path(_("login/"), LoginView.as_view(), name="login2"), URLPattern) |
| 26 | + |
| 27 | + |
| 28 | +def v1() -> HttpResponse: ... |
| 29 | +async def v2() -> HttpResponse: ... |
| 30 | + |
| 31 | + |
| 32 | +assert_type(path("v1/", v1), URLPattern) |
| 33 | +assert_type(path("v2/", v2), URLPattern) |
| 34 | +assert_type(re_path("^v1/", v1), URLPattern) |
| 35 | +assert_type(re_path("^v2/", v2), URLPattern) |
| 36 | + |
| 37 | +# Test 'include' |
| 38 | +patterns1: List[_AnyURL] = [] |
| 39 | +assert_type(re_path(_("^foo/"), include(patterns1)), URLResolver) |
| 40 | +assert_type(re_path("^foo/", include(patterns1, namespace="foo")), URLResolver) |
| 41 | +assert_type(re_path("^foo/", include((patterns1, "foo"), namespace="foo")), URLResolver) |
| 42 | +assert_type(re_path("^foo/", include(patterns1, "foo")), URLResolver) |
| 43 | +assert_type(path("flat/", include(flatpages_urls)), URLResolver) |
| 44 | +assert_type(path("flat/", include((flatpages_urls, "static"))), URLResolver) |
| 45 | +assert_type(path("i18n/", include(i18n_urlpatterns)), URLResolver) |
| 46 | +assert_type(path("i18n/", include((i18n_urlpatterns, "i18n"))), URLResolver) |
| 47 | +assert_type(path("admindocs/", include("django.contrib.admindocs.urls")), URLResolver) |
| 48 | +assert_type(path("admindocs/", include(("django.contrib.admindocs.urls", "i18n"))), URLResolver) |
| 49 | +assert_type(path("", include(staticfiles_urlpatterns(prefix="static/"))), URLResolver) |
0 commit comments