summaryrefslogtreecommitdiff
path: root/tests/regressiontests/admin_widgets
diff options
context:
space:
mode:
authorBrian Rosner <brosner@gmail.com>2008-07-18 23:54:34 +0000
committerBrian Rosner <brosner@gmail.com>2008-07-18 23:54:34 +0000
commita19ed8aea395e8e07164ff7d85bd7dff2f24edca (patch)
treeec5fd01c30abc5fa22c1f02159bf68cfe89313cc /tests/regressiontests/admin_widgets
parentdc375fb0f3b7fbae740e8cfcd791b8bccb8a4e66 (diff)
Merged the newforms-admin branch into trunk.
This is a backward incompatible change. The admin contrib app has been refactored. The newforms module has several improvements including FormSets and Media definitions. git-svn-id: http://code.djangoproject.com/svn/django/trunk@7967 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'tests/regressiontests/admin_widgets')
-rw-r--r--tests/regressiontests/admin_widgets/__init__.py0
-rw-r--r--tests/regressiontests/admin_widgets/models.py85
2 files changed, 85 insertions, 0 deletions
diff --git a/tests/regressiontests/admin_widgets/__init__.py b/tests/regressiontests/admin_widgets/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/tests/regressiontests/admin_widgets/__init__.py
diff --git a/tests/regressiontests/admin_widgets/models.py b/tests/regressiontests/admin_widgets/models.py
new file mode 100644
index 0000000000..584d973c83
--- /dev/null
+++ b/tests/regressiontests/admin_widgets/models.py
@@ -0,0 +1,85 @@
+
+from django.conf import settings
+from django.db import models
+
+class Member(models.Model):
+ name = models.CharField(max_length=100)
+
+ def __unicode__(self):
+ return self.name
+
+class Band(models.Model):
+ name = models.CharField(max_length=100)
+ members = models.ManyToManyField(Member)
+
+ def __unicode__(self):
+ return self.name
+
+class Album(models.Model):
+ band = models.ForeignKey(Band)
+ name = models.CharField(max_length=100)
+
+ def __unicode__(self):
+ return self.name
+
+__test__ = {'WIDGETS_TESTS': """
+>>> from datetime import datetime
+>>> from django.utils.html import escape, conditional_escape
+>>> from django.contrib.admin.widgets import FilteredSelectMultiple, AdminSplitDateTime
+>>> from django.contrib.admin.widgets import AdminFileWidget, ForeignKeyRawIdWidget, ManyToManyRawIdWidget
+>>> from django.contrib.admin.widgets import RelatedFieldWidgetWrapper
+
+Calling conditional_escape on the output of widget.render will simulate what
+happens in the template. This is easier than setting up a template and context
+for each test.
+
+Make sure that the Admin widgets render properly, that is, without their extra
+HTML escaped.
+
+>>> w = FilteredSelectMultiple('test', False)
+>>> print conditional_escape(w.render('test', 'test'))
+<select multiple="multiple" name="test">
+</select><script type="text/javascript">addEvent(window, "load", function(e) {SelectFilter.init("id_test", "test", 0, "%(ADMIN_MEDIA_PREFIX)s"); });</script>
+<BLANKLINE>
+
+>>> w = AdminSplitDateTime()
+>>> print conditional_escape(w.render('test', datetime(2007, 12, 1, 9, 30)))
+<p class="datetime">Date: <input value="2007-12-01" type="text" class="vDateField" name="test_0" size="10" /><br />Time: <input value="09:30:00" type="text" class="vTimeField" name="test_1" size="8" /></p>
+
+>>> w = AdminFileWidget()
+>>> print conditional_escape(w.render('test', 'test'))
+Currently: <a target="_blank" href="%(MEDIA_URL)stest">test</a> <br />Change: <input type="file" name="test" />
+
+>>> band = Band.objects.create(pk=1, name='Linkin Park')
+>>> album = band.album_set.create(name='Hybrid Theory')
+
+>>> rel = Album._meta.get_field('band').rel
+>>> w = ForeignKeyRawIdWidget(rel)
+>>> print conditional_escape(w.render('test', band.pk, attrs={}))
+<input type="text" name="test" value="1" class="vForeignKeyRawIdAdminField" /><a href="../../../admin_widgets/band/" class="related-lookup" id="lookup_id_test" onclick="return showRelatedObjectLookupPopup(this);"> <img src="%(ADMIN_MEDIA_PREFIX)simg/admin/selector-search.gif" width="16" height="16" alt="Lookup" /></a>&nbsp;<strong>Linkin Park</strong>
+
+>>> m1 = Member.objects.create(pk=1, name='Chester')
+>>> m2 = Member.objects.create(pk=2, name='Mike')
+>>> band.members.add(m1, m2)
+
+>>> rel = Band._meta.get_field('members').rel
+>>> w = ManyToManyRawIdWidget(rel)
+>>> print conditional_escape(w.render('test', [m1.pk, m2.pk], attrs={}))
+<input type="text" name="test" value="1,2" class="vManyToManyRawIdAdminField" /><a href="../../../admin_widgets/member/" class="related-lookup" id="lookup_id_test" onclick="return showRelatedObjectLookupPopup(this);"> <img src="%(ADMIN_MEDIA_PREFIX)simg/admin/selector-search.gif" width="16" height="16" alt="Lookup" /></a>
+>>> w._has_changed(None, None)
+False
+>>> w._has_changed([], None)
+False
+>>> w._has_changed(None, [u'1'])
+True
+>>> w._has_changed([1, 2], [u'1', u'2'])
+False
+>>> w._has_changed([1, 2], [u'1'])
+True
+>>> w._has_changed([1, 2], [u'1', u'3'])
+True
+
+""" % {
+ 'ADMIN_MEDIA_PREFIX': settings.ADMIN_MEDIA_PREFIX,
+ 'MEDIA_URL': settings.MEDIA_URL,
+}}