diff options
| author | Bas Peschier <basp@fabrique.nl> | 2015-03-19 08:56:38 +0100 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2015-03-23 08:43:01 -0400 |
| commit | 23a5d64f40b0f4a3fbfef7427ca793cb1df1034e (patch) | |
| tree | 7f8dbf123a76b42bdcfed7454bf0d6765a440088 /tests/urlpatterns_reverse | |
| parent | f2e4d39a71929df3e61b6468d37dcb8e6d4f13b9 (diff) | |
Fixed #13525 -- Added tests and docs for nested parameters in URL patterns.
When reversing, only outer parameters are used if captured parameters are
nested. Added tests to check the edge cases and documentation for the
behavior with an example to avoid it.
Diffstat (limited to 'tests/urlpatterns_reverse')
| -rw-r--r-- | tests/urlpatterns_reverse/tests.py | 17 | ||||
| -rw-r--r-- | tests/urlpatterns_reverse/urls.py | 6 |
2 files changed, 23 insertions, 0 deletions
diff --git a/tests/urlpatterns_reverse/tests.py b/tests/urlpatterns_reverse/tests.py index 4e2fcd3a31..eca5bc1e64 100644 --- a/tests/urlpatterns_reverse/tests.py +++ b/tests/urlpatterns_reverse/tests.py @@ -97,6 +97,12 @@ test_data = ( ('people_backref', '/people/nate-nate/', [], {'name': 'nate'}), ('optional', '/optional/fred/', [], {'name': 'fred'}), ('optional', '/optional/fred/', ['fred'], {}), + ('named_optional', '/optional/1/', [1], {}), + ('named_optional', '/optional/1/', [], {'arg1': 1}), + ('named_optional', '/optional/1/2/', [1, 2], {}), + ('named_optional', '/optional/1/2/', [], {'arg1': 1, 'arg2': 2}), + ('named_optional_terminated', '/optional/1/2/', [1, 2], {}), + ('named_optional_terminated', '/optional/1/2/', [], {'arg1': 1, 'arg2': 2}), ('hardcoded', '/hardcoded/', [], {}), ('hardcoded2', '/hardcoded/doc.pdf', [], {}), ('people3', '/people/il/adrian/', [], {'state': 'il', 'name': 'adrian'}), @@ -145,6 +151,17 @@ test_data = ( ('part2', '/prefix/xx/part2/one/', [], {'value': 'one', 'prefix': 'xx'}), ('part2', '/prefix/xx/part2/', [], {'prefix': 'xx'}), + # Tests for nested groups. Nested capturing groups will only work if you + # *only* supply the correct outer group. + ('nested-noncapture', '/nested/noncapture/opt', [], {'p': 'opt'}), + ('nested-capture', '/nested/capture/opt/', ['opt/'], {}), + ('nested-capture', NoReverseMatch, [], {'p': 'opt'}), + ('nested-mixedcapture', '/nested/capture/mixed/opt', ['opt'], {}), + ('nested-mixedcapture', NoReverseMatch, [], {'p': 'opt'}), + ('nested-namedcapture', '/nested/capture/named/opt/', [], {'outer': 'opt/'}), + ('nested-namedcapture', NoReverseMatch, [], {'outer': 'opt/', 'inner': 'opt'}), + ('nested-namedcapture', NoReverseMatch, [], {'inner': 'opt'}), + # Regression for #9038 # These views are resolved by method name. Each method is deployed twice - # once with an explicit argument, and once using the default value on diff --git a/tests/urlpatterns_reverse/urls.py b/tests/urlpatterns_reverse/urls.py index 9b5a5f29fa..d6b692d220 100644 --- a/tests/urlpatterns_reverse/urls.py +++ b/tests/urlpatterns_reverse/urls.py @@ -32,6 +32,12 @@ with warnings.catch_warnings(): url(r'^people/(?:name/(\w+)/)?', empty_view, name="people2a"), url(r'^people/(?P<name>\w+)-(?P=name)/$', empty_view, name="people_backref"), url(r'^optional/(?P<name>.*)/(?:.+/)?', empty_view, name="optional"), + url(r'^optional/(?P<arg1>\d+)/(?:(?P<arg2>\d+)/)?', absolute_kwargs_view, name="named_optional"), + url(r'^optional/(?P<arg1>\d+)/(?:(?P<arg2>\d+)/)?$', absolute_kwargs_view, name="named_optional_terminated"), + url(r'^nested/noncapture/(?:(?P<p>\w+))$', empty_view, name='nested-noncapture'), + url(r'^nested/capture/((\w+)/)?$', empty_view, name='nested-capture'), + url(r'^nested/capture/mixed/((?P<p>\w+))$', empty_view, name='nested-mixedcapture'), + url(r'^nested/capture/named/(?P<outer>(?P<inner>\w+)/)?$', empty_view, name='nested-namedcapture'), url(r'^hardcoded/$', empty_view, name="hardcoded"), url(r'^hardcoded/doc\.pdf$', empty_view, name="hardcoded2"), url(r'^people/(?P<state>\w\w)/(?P<name>\w+)/$', empty_view, name="people3"), |
