diff options
| author | Christopher Babiak <famousfilm@hotmail.com> | 2013-09-26 08:28:26 -0700 |
|---|---|---|
| committer | Julien Phalip <jphalip@gmail.com> | 2013-09-28 17:25:32 -0700 |
| commit | a834bc84d8c76d4a7016ac4db4f631a8bcaa3d0b (patch) | |
| tree | 03da95880324c1ba026807e87cdc38db905da08e /tests | |
| parent | 5866a49369cc6a4280b25a9d1834ceababf61d88 (diff) | |
Fixed #20931 -- Fixed select widgets nested choice rendering
ChoiceFieldRenderer was not rendering nested choices. Added recursion
to ChoiceFieldRenderer to take nested choices and render them as
<ul>'s.
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/forms_tests/tests/test_widgets.py | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/tests/forms_tests/tests/test_widgets.py b/tests/forms_tests/tests/test_widgets.py index 033bc7a035..2d667791e8 100644 --- a/tests/forms_tests/tests/test_widgets.py +++ b/tests/forms_tests/tests/test_widgets.py @@ -697,6 +697,37 @@ beatle J R Ringo False""") <li><label for="bar_3"><input type="radio" id="bar_3" value="R" name="beatle" /> Ringo</label></li> </ul>""") + def test_nested_choices(self): + # Choices can be nested for radio buttons: + w = RadioSelect() + w.choices=(('unknown', 'Unknown'), ('Audio', (('vinyl', 'Vinyl'), ('cd', 'CD'))), ('Video', (('vhs', 'VHS'), ('dvd', 'DVD')))) + self.assertHTMLEqual(w.render('nestchoice', 'dvd', attrs={'id':'media'}), """<ul id="media"> +<li><label for="media_0"><input id="media_0" name="nestchoice" type="radio" value="unknown" /> Unknown</label></li> +<li>Audio<ul id="media_1"> +<li><label for="media_1_0"><input id="media_1_0" name="nestchoice" type="radio" value="vinyl" /> Vinyl</label></li> +<li><label for="media_1_1"><input id="media_1_1" name="nestchoice" type="radio" value="cd" /> CD</label></li> +</ul></li> +<li>Video<ul id="media_2"> +<li><label for="media_2_0"><input id="media_2_0" name="nestchoice" type="radio" value="vhs" /> VHS</label></li> +<li><label for="media_2_1"><input checked="checked" id="media_2_1" name="nestchoice" type="radio" value="dvd" /> DVD</label></li> +</ul></li> +</ul>""") + + # Choices can be nested for checkboxes: + w = CheckboxSelectMultiple() + w.choices=(('unknown', 'Unknown'), ('Audio', (('vinyl', 'Vinyl'), ('cd', 'CD'))), ('Video', (('vhs', 'VHS'), ('dvd', 'DVD')))) + self.assertHTMLEqual(w.render('nestchoice', ('vinyl', 'dvd'), attrs={'id':'media'}), """<ul id="media"> +<li><label for="media_0"><input id="media_0" name="nestchoice" type="checkbox" value="unknown" /> Unknown</label></li> +<li>Audio<ul id="media_1"> +<li><label for="media_1_0"><input checked="checked" id="media_1_0" name="nestchoice" type="checkbox" value="vinyl" /> Vinyl</label></li> +<li><label for="media_1_1"><input id="media_1_1" name="nestchoice" type="checkbox" value="cd" /> CD</label></li> +</ul></li> +<li>Video<ul id="media_2"> +<li><label for="media_2_0"><input id="media_2_0" name="nestchoice" type="checkbox" value="vhs" /> VHS</label></li> +<li><label for="media_2_1"><input checked="checked" id="media_2_1" name="nestchoice" type="checkbox" value="dvd" /> DVD</label></li> +</ul></li> +</ul>""") + def test_checkboxselectmultiple(self): w = CheckboxSelectMultiple() self.assertHTMLEqual(w.render('beatles', ['J'], choices=(('J', 'John'), ('P', 'Paul'), ('G', 'George'), ('R', 'Ringo'))), """<ul> |
