mirror of
https://github.com/django/django.git
synced 2025-10-25 06:36:07 +00:00
newforms-admin: Merged from trunk up to [7766].
git-svn-id: http://code.djangoproject.com/svn/django/branches/newforms-admin@7770 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
@@ -125,4 +125,12 @@ Init from sequence of tuples
|
||||
>>> d = FileDict({'other-key': 'once upon a time...'})
|
||||
>>> repr(d)
|
||||
"{'other-key': 'once upon a time...'}"
|
||||
|
||||
### DictWrapper #############################################################
|
||||
|
||||
>>> f = lambda x: "*%s" % x
|
||||
>>> d = DictWrapper({'a': 'a'}, f, 'xx_')
|
||||
>>> "Normal: %(a)s. Modified: %(xx_a)s" % d
|
||||
'Normal: a. Modified: *a'
|
||||
|
||||
"""
|
||||
|
||||
@@ -150,7 +150,7 @@ u'fran%C3%A7ois%20%26%20jill'
|
||||
u'<a href="http://short.com/" rel="nofollow">http://short.com/</a>'
|
||||
|
||||
>>> urlizetrunc(u'http://www.google.co.uk/search?hl=en&q=some+long+url&btnG=Search&meta=', 20)
|
||||
u'<a href="http://www.google.co.uk/search?hl=en&q=some+long+url&btnG=Search&meta=" rel="nofollow">http://www.google....</a>'
|
||||
u'<a href="http://www.google.co.uk/search?hl=en&q=some+long+url&btnG=Search&meta=" rel="nofollow">http://www.google...</a>'
|
||||
|
||||
>>> urlizetrunc('http://www.google.co.uk/search?hl=en&q=some+long+url&btnG=Search&meta=', 20)
|
||||
u'<a href="http://www.google.co.uk/search?hl=en&q=some+long+url&btnG=Search&meta=" rel="nofollow">http://www.google...</a>'
|
||||
@@ -174,10 +174,10 @@ u'<a href="http://google.com" rel="nofollow">http://google.com</a>'
|
||||
u'<a href="http://google.com/" rel="nofollow">http://google.com/</a>'
|
||||
|
||||
>>> urlize('www.google.com')
|
||||
u'<a href="http://www.google.com" rel="nofollow">http://www.google.com</a>'
|
||||
u'<a href="http://www.google.com" rel="nofollow">www.google.com</a>'
|
||||
|
||||
>>> urlize('djangoproject.org')
|
||||
u'<a href="http://djangoproject.org" rel="nofollow">http://djangoproject.org</a>'
|
||||
u'<a href="http://djangoproject.org" rel="nofollow">djangoproject.org</a>'
|
||||
|
||||
>>> urlize('info@djangoproject.org')
|
||||
u'<a href="mailto:info@djangoproject.org">info@djangoproject.org</a>'
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
Regression tests for Model inheritance behaviour.
|
||||
"""
|
||||
|
||||
import datetime
|
||||
|
||||
from django.db import models
|
||||
|
||||
class Place(models.Model):
|
||||
@@ -10,7 +12,7 @@ class Place(models.Model):
|
||||
|
||||
class Meta:
|
||||
ordering = ('name',)
|
||||
|
||||
|
||||
def __unicode__(self):
|
||||
return u"%s the place" % self.name
|
||||
|
||||
@@ -35,11 +37,17 @@ class ParkingLot(Place):
|
||||
def __unicode__(self):
|
||||
return u"%s the parking lot" % self.name
|
||||
|
||||
class Parent(models.Model):
|
||||
created = models.DateTimeField(default=datetime.datetime.now)
|
||||
|
||||
class Child(Parent):
|
||||
name = models.CharField(max_length=10)
|
||||
|
||||
__test__ = {'API_TESTS':"""
|
||||
# Regression for #7350, #7202
|
||||
# Check that when you create a Parent object with a specific reference to an existent
|
||||
# child instance, saving the Parent doesn't duplicate the child.
|
||||
# This behaviour is only activated during a raw save - it is mostly relevant to
|
||||
# Check that when you create a Parent object with a specific reference to an
|
||||
# existent child instance, saving the Parent doesn't duplicate the child. This
|
||||
# behaviour is only activated during a raw save - it is mostly relevant to
|
||||
# deserialization, but any sort of CORBA style 'narrow()' API would require a
|
||||
# similar approach.
|
||||
|
||||
@@ -117,4 +125,10 @@ __test__ = {'API_TESTS':"""
|
||||
>>> [sorted(d.items()) for d in dicts]
|
||||
[[('name', u"Guido's All New House of Pasta"), ('serves_gnocchi', False), ('serves_hot_dogs', False)]]
|
||||
|
||||
# Regressions tests for #7105: dates() queries should be able to use fields
|
||||
# from the parent model as easily as the child.
|
||||
>>> obj = Child.objects.create(name='child', created=datetime.datetime(2008, 6, 26, 17, 0, 0))
|
||||
>>> Child.objects.dates('created', 'month')
|
||||
[datetime.datetime(2008, 6, 1, 0, 0)]
|
||||
|
||||
"""}
|
||||
|
||||
@@ -45,6 +45,7 @@ class Author(models.Model):
|
||||
class Item(models.Model):
|
||||
name = models.CharField(max_length=10)
|
||||
created = models.DateTimeField()
|
||||
modified = models.DateTimeField(blank=True, null=True)
|
||||
tags = models.ManyToManyField(Tag, blank=True, null=True)
|
||||
creator = models.ForeignKey(Author)
|
||||
note = models.ForeignKey(Note)
|
||||
@@ -57,7 +58,7 @@ class Item(models.Model):
|
||||
|
||||
class Report(models.Model):
|
||||
name = models.CharField(max_length=10)
|
||||
creator = models.ForeignKey(Author, to_field='num')
|
||||
creator = models.ForeignKey(Author, to_field='num', null=True)
|
||||
|
||||
def __unicode__(self):
|
||||
return self.name
|
||||
@@ -89,6 +90,15 @@ class Number(models.Model):
|
||||
def __unicode__(self):
|
||||
return unicode(self.num)
|
||||
|
||||
# Symmetrical m2m field with a normal field using the reverse accesor name
|
||||
# ("valid").
|
||||
class Valid(models.Model):
|
||||
valid = models.CharField(max_length=10)
|
||||
parent = models.ManyToManyField('self')
|
||||
|
||||
class Meta:
|
||||
ordering = ['valid']
|
||||
|
||||
# Some funky cross-linked models for testing a couple of infinite recursion
|
||||
# cases.
|
||||
class X(models.Model):
|
||||
@@ -121,12 +131,12 @@ class LoopZ(models.Model):
|
||||
class CustomManager(models.Manager):
|
||||
def get_query_set(self):
|
||||
qs = super(CustomManager, self).get_query_set()
|
||||
return qs.filter(is_public=True, tag__name='t1')
|
||||
return qs.filter(public=True, tag__name='t1')
|
||||
|
||||
class ManagedModel(models.Model):
|
||||
data = models.CharField(max_length=10)
|
||||
tag = models.ForeignKey(Tag)
|
||||
is_public = models.BooleanField(default=True)
|
||||
public = models.BooleanField(default=True)
|
||||
|
||||
objects = CustomManager()
|
||||
normal_manager = models.Manager()
|
||||
@@ -134,6 +144,24 @@ class ManagedModel(models.Model):
|
||||
def __unicode__(self):
|
||||
return self.data
|
||||
|
||||
# An inter-related setup with multiple paths from Child to Detail.
|
||||
class Detail(models.Model):
|
||||
data = models.CharField(max_length=10)
|
||||
|
||||
class MemberManager(models.Manager):
|
||||
def get_query_set(self):
|
||||
return super(MemberManager, self).get_query_set().select_related("details")
|
||||
|
||||
class Member(models.Model):
|
||||
name = models.CharField(max_length=10)
|
||||
details = models.OneToOneField(Detail, primary_key=True)
|
||||
|
||||
objects = MemberManager()
|
||||
|
||||
class Child(models.Model):
|
||||
person = models.OneToOneField(Member, primary_key=True)
|
||||
parent = models.ForeignKey(Member, related_name="children")
|
||||
|
||||
|
||||
__test__ = {'API_TESTS':"""
|
||||
>>> t1 = Tag(name='t1')
|
||||
@@ -174,7 +202,7 @@ by 'info'. Helps detect some problems later.
|
||||
>>> time2 = datetime.datetime(2007, 12, 19, 21, 0, 0)
|
||||
>>> time3 = datetime.datetime(2007, 12, 20, 22, 25, 0)
|
||||
>>> time4 = datetime.datetime(2007, 12, 20, 21, 0, 0)
|
||||
>>> i1 = Item(name='one', created=time1, creator=a1, note=n3)
|
||||
>>> i1 = Item(name='one', created=time1, modified=time1, creator=a1, note=n3)
|
||||
>>> i1.save()
|
||||
>>> i1.tags = [t1, t2]
|
||||
>>> i2 = Item(name='two', created=time2, creator=a2, note=n2)
|
||||
@@ -190,6 +218,8 @@ by 'info'. Helps detect some problems later.
|
||||
>>> r1.save()
|
||||
>>> r2 = Report(name='r2', creator=a3)
|
||||
>>> r2.save()
|
||||
>>> r3 = Report(name='r3')
|
||||
>>> r3.save()
|
||||
|
||||
Ordering by 'rank' gives us rank2, rank1, rank3. Ordering by the Meta.ordering
|
||||
will be rank3, rank2, rank1.
|
||||
@@ -478,7 +508,7 @@ FieldError: Infinite loop caused by ordering.
|
||||
# Ordering by a many-valued attribute (e.g. a many-to-many or reverse
|
||||
# ForeignKey) is legal, but the results might not make sense. That isn't
|
||||
# Django's problem. Garbage in, garbage out.
|
||||
>>> Item.objects.all().order_by('tags', 'id')
|
||||
>>> Item.objects.filter(tags__isnull=False).order_by('tags', 'id')
|
||||
[<Item: one>, <Item: two>, <Item: one>, <Item: two>, <Item: four>]
|
||||
|
||||
# If we replace the default ordering, Django adjusts the required tables
|
||||
@@ -627,6 +657,10 @@ Bug #7087 -- dates with extra select columns
|
||||
>>> Item.objects.dates('created', 'day').extra(select={'a': 1})
|
||||
[datetime.datetime(2007, 12, 19, 0, 0), datetime.datetime(2007, 12, 20, 0, 0)]
|
||||
|
||||
Bug #7155 -- nullable dates
|
||||
>>> Item.objects.dates('modified', 'day')
|
||||
[datetime.datetime(2007, 12, 19, 0, 0)]
|
||||
|
||||
Test that parallel iterators work.
|
||||
|
||||
>>> qs = Tag.objects.all()
|
||||
@@ -705,8 +739,57 @@ More twisted cases, involving nested negations.
|
||||
Bug #7095
|
||||
Updates that are filtered on the model being updated are somewhat tricky to get
|
||||
in MySQL. This exercises that case.
|
||||
>>> mm = ManagedModel.objects.create(data='mm1', tag=t1, is_public=True)
|
||||
>>> mm = ManagedModel.objects.create(data='mm1', tag=t1, public=True)
|
||||
>>> ManagedModel.objects.update(data='mm')
|
||||
|
||||
A values() or values_list() query across joined models must use outer joins
|
||||
appropriately.
|
||||
>>> Report.objects.values_list("creator__extra__info", flat=True).order_by("name")
|
||||
[u'e1', u'e2', None]
|
||||
|
||||
Similarly for select_related(), joins beyond an initial nullable join must
|
||||
use outer joins so that all results are included.
|
||||
>>> Report.objects.select_related("creator", "creator__extra").order_by("name")
|
||||
[<Report: r1>, <Report: r2>, <Report: r3>]
|
||||
|
||||
When there are multiple paths to a table from another table, we have to be
|
||||
careful not to accidentally reuse an inappropriate join when using
|
||||
select_related(). We used to return the parent's Detail record here by mistake.
|
||||
|
||||
>>> d1 = Detail.objects.create(data="d1")
|
||||
>>> d2 = Detail.objects.create(data="d2")
|
||||
>>> m1 = Member.objects.create(name="m1", details=d1)
|
||||
>>> m2 = Member.objects.create(name="m2", details=d2)
|
||||
>>> c1 = Child.objects.create(person=m2, parent=m1)
|
||||
>>> obj = m1.children.select_related("person__details")[0]
|
||||
>>> obj.person.details.data
|
||||
u'd2'
|
||||
|
||||
Bug #7076 -- excluding shouldn't eliminate NULL entries.
|
||||
>>> Item.objects.exclude(modified=time1).order_by('name')
|
||||
[<Item: four>, <Item: three>, <Item: two>]
|
||||
>>> Tag.objects.exclude(parent__name=t1.name)
|
||||
[<Tag: t1>, <Tag: t4>, <Tag: t5>]
|
||||
|
||||
Bug #7181 -- ordering by related tables should accomodate nullable fields (this
|
||||
test is a little tricky, since NULL ordering is database dependent. Instead, we
|
||||
just count the number of results).
|
||||
>>> len(Tag.objects.order_by('parent__name'))
|
||||
5
|
||||
|
||||
Bug #7107 -- this shouldn't create an infinite loop.
|
||||
>>> Valid.objects.all()
|
||||
[]
|
||||
|
||||
Empty querysets can be merged with others.
|
||||
>>> Note.objects.none() | Note.objects.all()
|
||||
[<Note: n1>, <Note: n2>, <Note: n3>]
|
||||
>>> Note.objects.all() | Note.objects.none()
|
||||
[<Note: n1>, <Note: n2>, <Note: n3>]
|
||||
>>> Note.objects.none() & Note.objects.all()
|
||||
[]
|
||||
>>> Note.objects.all() & Note.objects.none()
|
||||
[]
|
||||
|
||||
"""}
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
Test cases for the template loaders
|
||||
|
||||
Note: This test requires setuptools!
|
||||
"""
|
||||
|
||||
from django.conf import settings
|
||||
@@ -17,7 +18,7 @@ import StringIO
|
||||
from django.template import TemplateDoesNotExist
|
||||
from django.template.loaders.eggs import load_template_source as lts_egg
|
||||
|
||||
#Mock classes and objects for pkg_resources functions
|
||||
# Mock classes and objects for pkg_resources functions.
|
||||
class MockProvider(pkg_resources.NullProvider):
|
||||
def __init__(self, module):
|
||||
pkg_resources.NullProvider.__init__(self, module)
|
||||
@@ -35,25 +36,25 @@ class MockProvider(pkg_resources.NullProvider):
|
||||
def _get(self, path):
|
||||
return self.module._resources[path].read()
|
||||
|
||||
class MockLoader(object): pass
|
||||
class MockLoader(object):
|
||||
pass
|
||||
|
||||
def create_egg(name, resources):
|
||||
"""
|
||||
Creates a mock egg with a list of resources
|
||||
|
||||
name: The name of the module
|
||||
resources: A dictionary of resources. Keys are the names and values the the data.
|
||||
Creates a mock egg with a list of resources.
|
||||
|
||||
name: The name of the module.
|
||||
resources: A dictionary of resources. Keys are the names and values the the data.
|
||||
"""
|
||||
egg = imp.new_module(name)
|
||||
egg.__loader__ = MockLoader()
|
||||
egg._resources = resources
|
||||
sys.modules[name] = egg
|
||||
|
||||
|
||||
class EggLoader(unittest.TestCase):
|
||||
def setUp(self):
|
||||
pkg_resources._provider_factories[MockLoader] = MockProvider
|
||||
|
||||
|
||||
self.empty_egg = create_egg("egg_empty", {})
|
||||
self.egg_1 = create_egg("egg_1", {
|
||||
'templates/y.html' : StringIO.StringIO("y"),
|
||||
@@ -61,7 +62,7 @@ class EggLoader(unittest.TestCase):
|
||||
})
|
||||
self._old_installed_apps = settings.INSTALLED_APPS
|
||||
settings.INSTALLED_APPS = []
|
||||
|
||||
|
||||
def tearDown(self):
|
||||
settings.INSTALLED_APPS = self._old_installed_apps
|
||||
|
||||
@@ -74,19 +75,18 @@ class EggLoader(unittest.TestCase):
|
||||
"Template loading fails if the template is not in the egg"
|
||||
settings.INSTALLED_APPS = ['egg_1']
|
||||
self.assertRaises(TemplateDoesNotExist, lts_egg, "not-existing.html")
|
||||
|
||||
|
||||
def test_existing(self):
|
||||
"A template can be loaded from an egg"
|
||||
settings.INSTALLED_APPS = ['egg_1']
|
||||
contents, template_name = lts_egg("y.html")
|
||||
self.assertEqual(contents, "y")
|
||||
self.assertEqual(template_name, "egg:egg_1:templates/y.html")
|
||||
|
||||
|
||||
def test_not_installed(self):
|
||||
"Loading an existent template from an egg not included in INSTALLED_APPS should fail"
|
||||
settings.INSTALLED_APPS = []
|
||||
self.assertRaises(TemplateDoesNotExist, lts_egg, "y.html")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
@@ -20,7 +20,10 @@ from django.utils.tzinfo import LocalTimezone
|
||||
from unicode import unicode_tests
|
||||
from context import context_tests
|
||||
|
||||
from loaders import *
|
||||
try:
|
||||
from loaders import *
|
||||
except ImportError:
|
||||
pass # If setuptools isn't installed, that's fine. Just move on.
|
||||
|
||||
import filters
|
||||
|
||||
@@ -132,8 +135,7 @@ class Templates(unittest.TestCase):
|
||||
|
||||
# Quickly check that we aren't accidentally using a name in both
|
||||
# template and filter tests.
|
||||
overlapping_names = [name for name in filter_tests if name in
|
||||
template_tests]
|
||||
overlapping_names = [name for name in filter_tests if name in template_tests]
|
||||
assert not overlapping_names, 'Duplicate test name(s): %s' % ', '.join(overlapping_names)
|
||||
|
||||
template_tests.update(filter_tests)
|
||||
@@ -156,7 +158,7 @@ class Templates(unittest.TestCase):
|
||||
# Turn TEMPLATE_DEBUG off, because tests assume that.
|
||||
old_td, settings.TEMPLATE_DEBUG = settings.TEMPLATE_DEBUG, False
|
||||
|
||||
# Set TEMPLATE_STRING_IF_INVALID to a known string
|
||||
# Set TEMPLATE_STRING_IF_INVALID to a known string.
|
||||
old_invalid = settings.TEMPLATE_STRING_IF_INVALID
|
||||
expected_invalid_str = 'INVALID'
|
||||
|
||||
@@ -539,13 +541,14 @@ class Templates(unittest.TestCase):
|
||||
'if-tag-error05': ("{% if not foo or %}yes{% else %}no{% endif %}", {'foo': True}, template.TemplateSyntaxError),
|
||||
|
||||
### IFCHANGED TAG #########################################################
|
||||
'ifchanged01': ('{% for n in num %}{% ifchanged %}{{ n }}{% endifchanged %}{% endfor %}', { 'num': (1,2,3) }, '123'),
|
||||
'ifchanged02': ('{% for n in num %}{% ifchanged %}{{ n }}{% endifchanged %}{% endfor %}', { 'num': (1,1,3) }, '13'),
|
||||
'ifchanged03': ('{% for n in num %}{% ifchanged %}{{ n }}{% endifchanged %}{% endfor %}', { 'num': (1,1,1) }, '1'),
|
||||
'ifchanged04': ('{% for n in num %}{% ifchanged %}{{ n }}{% endifchanged %}{% for x in numx %}{% ifchanged %}{{ x }}{% endifchanged %}{% endfor %}{% endfor %}', { 'num': (1, 2, 3), 'numx': (2, 2, 2)}, '122232'),
|
||||
'ifchanged05': ('{% for n in num %}{% ifchanged %}{{ n }}{% endifchanged %}{% for x in numx %}{% ifchanged %}{{ x }}{% endifchanged %}{% endfor %}{% endfor %}', { 'num': (1, 1, 1), 'numx': (1, 2, 3)}, '1123123123'),
|
||||
'ifchanged06': ('{% for n in num %}{% ifchanged %}{{ n }}{% endifchanged %}{% for x in numx %}{% ifchanged %}{{ x }}{% endifchanged %}{% endfor %}{% endfor %}', { 'num': (1, 1, 1), 'numx': (2, 2, 2)}, '1222'),
|
||||
'ifchanged07': ('{% for n in num %}{% ifchanged %}{{ n }}{% endifchanged %}{% for x in numx %}{% ifchanged %}{{ x }}{% endifchanged %}{% for y in numy %}{% ifchanged %}{{ y }}{% endifchanged %}{% endfor %}{% endfor %}{% endfor %}', { 'num': (1, 1, 1), 'numx': (2, 2, 2), 'numy': (3, 3, 3)}, '1233323332333'),
|
||||
'ifchanged01': ('{% for n in num %}{% ifchanged %}{{ n }}{% endifchanged %}{% endfor %}', {'num': (1,2,3)}, '123'),
|
||||
'ifchanged02': ('{% for n in num %}{% ifchanged %}{{ n }}{% endifchanged %}{% endfor %}', {'num': (1,1,3)}, '13'),
|
||||
'ifchanged03': ('{% for n in num %}{% ifchanged %}{{ n }}{% endifchanged %}{% endfor %}', {'num': (1,1,1)}, '1'),
|
||||
'ifchanged04': ('{% for n in num %}{% ifchanged %}{{ n }}{% endifchanged %}{% for x in numx %}{% ifchanged %}{{ x }}{% endifchanged %}{% endfor %}{% endfor %}', {'num': (1, 2, 3), 'numx': (2, 2, 2)}, '122232'),
|
||||
'ifchanged05': ('{% for n in num %}{% ifchanged %}{{ n }}{% endifchanged %}{% for x in numx %}{% ifchanged %}{{ x }}{% endifchanged %}{% endfor %}{% endfor %}', {'num': (1, 1, 1), 'numx': (1, 2, 3)}, '1123123123'),
|
||||
'ifchanged06': ('{% for n in num %}{% ifchanged %}{{ n }}{% endifchanged %}{% for x in numx %}{% ifchanged %}{{ x }}{% endifchanged %}{% endfor %}{% endfor %}', {'num': (1, 1, 1), 'numx': (2, 2, 2)}, '1222'),
|
||||
'ifchanged07': ('{% for n in num %}{% ifchanged %}{{ n }}{% endifchanged %}{% for x in numx %}{% ifchanged %}{{ x }}{% endifchanged %}{% for y in numy %}{% ifchanged %}{{ y }}{% endifchanged %}{% endfor %}{% endfor %}{% endfor %}', {'num': (1, 1, 1), 'numx': (2, 2, 2), 'numy': (3, 3, 3)}, '1233323332333'),
|
||||
'ifchanged08': ('{% for data in datalist %}{% for c,d in data %}{% if c %}{% ifchanged %}{{ d }}{% endifchanged %}{% endif %}{% endfor %}{% endfor %}', {'datalist': [[(1, 'a'), (1, 'a'), (0, 'b'), (1, 'c')], [(0, 'a'), (1, 'c'), (1, 'd'), (1, 'd'), (0, 'e')]]}, 'accd'),
|
||||
|
||||
# Test one parameter given to ifchanged.
|
||||
'ifchanged-param01': ('{% for n in num %}{% ifchanged n %}..{% endifchanged %}{{ n }}{% endfor %}', { 'num': (1,2,3) }, '..1..2..3'),
|
||||
@@ -860,40 +863,46 @@ class Templates(unittest.TestCase):
|
||||
|
||||
### NOW TAG ########################################################
|
||||
# Simple case
|
||||
'now01' : ('{% now "j n Y"%}', {}, str(datetime.now().day) + ' ' + str(datetime.now().month) + ' ' + str(datetime.now().year)),
|
||||
'now01': ('{% now "j n Y"%}', {}, str(datetime.now().day) + ' ' + str(datetime.now().month) + ' ' + str(datetime.now().year)),
|
||||
|
||||
# Check parsing of escaped and special characters
|
||||
'now02' : ('{% now "j "n" Y"%}', {}, template.TemplateSyntaxError),
|
||||
# 'now03' : ('{% now "j \"n\" Y"%}', {}, str(datetime.now().day) + '"' + str(datetime.now().month) + '"' + str(datetime.now().year)),
|
||||
# 'now04' : ('{% now "j \nn\n Y"%}', {}, str(datetime.now().day) + '\n' + str(datetime.now().month) + '\n' + str(datetime.now().year))
|
||||
'now02': ('{% now "j "n" Y"%}', {}, template.TemplateSyntaxError),
|
||||
# 'now03': ('{% now "j \"n\" Y"%}', {}, str(datetime.now().day) + '"' + str(datetime.now().month) + '"' + str(datetime.now().year)),
|
||||
# 'now04': ('{% now "j \nn\n Y"%}', {}, str(datetime.now().day) + '\n' + str(datetime.now().month) + '\n' + str(datetime.now().year))
|
||||
|
||||
### URL TAG ########################################################
|
||||
# Successes
|
||||
'url01' : ('{% url regressiontests.templates.views.client client.id %}', {'client': {'id': 1}}, '/url_tag/client/1/'),
|
||||
'url02' : ('{% url regressiontests.templates.views.client_action client.id, action="update" %}', {'client': {'id': 1}}, '/url_tag/client/1/update/'),
|
||||
'url03' : ('{% url regressiontests.templates.views.index %}', {}, '/url_tag/'),
|
||||
'url04' : ('{% url named.client client.id %}', {'client': {'id': 1}}, '/url_tag/named-client/1/'),
|
||||
'url05' : (u'{% url метка_оператора v %}', {'v': u'Ω'},
|
||||
'/url_tag/%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4/%CE%A9/'),
|
||||
'url01': ('{% url regressiontests.templates.views.client client.id %}', {'client': {'id': 1}}, '/url_tag/client/1/'),
|
||||
'url02': ('{% url regressiontests.templates.views.client_action client.id, action="update" %}', {'client': {'id': 1}}, '/url_tag/client/1/update/'),
|
||||
'url03': ('{% url regressiontests.templates.views.index %}', {}, '/url_tag/'),
|
||||
'url04': ('{% url named.client client.id %}', {'client': {'id': 1}}, '/url_tag/named-client/1/'),
|
||||
'url05': (u'{% url метка_оператора v %}', {'v': u'Ω'}, '/url_tag/%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4/%CE%A9/'),
|
||||
|
||||
# Failures
|
||||
'url-fail01' : ('{% url %}', {}, template.TemplateSyntaxError),
|
||||
'url-fail02' : ('{% url no_such_view %}', {}, ''),
|
||||
'url-fail03' : ('{% url regressiontests.templates.views.client no_such_param="value" %}', {}, ''),
|
||||
'url-fail01': ('{% url %}', {}, template.TemplateSyntaxError),
|
||||
'url-fail02': ('{% url no_such_view %}', {}, ''),
|
||||
'url-fail03': ('{% url regressiontests.templates.views.client no_such_param="value" %}', {}, ''),
|
||||
|
||||
### CACHE TAG ######################################################
|
||||
'cache01' : ('{% load cache %}{% cache -1 test %}cache01{% endcache %}', {}, 'cache01'),
|
||||
'cache02' : ('{% load cache %}{% cache -1 test %}cache02{% endcache %}', {}, 'cache02'),
|
||||
'cache03' : ('{% load cache %}{% cache 2 test %}cache03{% endcache %}', {}, 'cache03'),
|
||||
'cache04' : ('{% load cache %}{% cache 2 test %}cache04{% endcache %}', {}, 'cache03'),
|
||||
'cache05' : ('{% load cache %}{% cache 2 test foo %}cache05{% endcache %}', {'foo': 1}, 'cache05'),
|
||||
'cache06' : ('{% load cache %}{% cache 2 test foo %}cache06{% endcache %}', {'foo': 2}, 'cache06'),
|
||||
'cache07' : ('{% load cache %}{% cache 2 test foo %}cache06{% endcache %}', {'foo': 1}, 'cache05'),
|
||||
'cache01': ('{% load cache %}{% cache -1 test %}cache01{% endcache %}', {}, 'cache01'),
|
||||
'cache02': ('{% load cache %}{% cache -1 test %}cache02{% endcache %}', {}, 'cache02'),
|
||||
'cache03': ('{% load cache %}{% cache 2 test %}cache03{% endcache %}', {}, 'cache03'),
|
||||
'cache04': ('{% load cache %}{% cache 2 test %}cache04{% endcache %}', {}, 'cache03'),
|
||||
'cache05': ('{% load cache %}{% cache 2 test foo %}cache05{% endcache %}', {'foo': 1}, 'cache05'),
|
||||
'cache06': ('{% load cache %}{% cache 2 test foo %}cache06{% endcache %}', {'foo': 2}, 'cache06'),
|
||||
'cache07': ('{% load cache %}{% cache 2 test foo %}cache07{% endcache %}', {'foo': 1}, 'cache05'),
|
||||
|
||||
# Raise exception if we dont have at least 2 args, first one integer.
|
||||
'cache08' : ('{% load cache %}{% cache %}{% endcache %}', {}, template.TemplateSyntaxError),
|
||||
'cache09' : ('{% load cache %}{% cache 1 %}{% endcache %}', {}, template.TemplateSyntaxError),
|
||||
'cache10' : ('{% load cache %}{% cache foo bar %}{% endcache %}', {}, template.TemplateSyntaxError),
|
||||
# Allow first argument to be a variable.
|
||||
'cache08': ('{% load cache %}{% cache time test foo %}cache08{% endcache %}', {'foo': 2, 'time': 2}, 'cache06'),
|
||||
'cache09': ('{% load cache %}{% cache time test foo %}cache09{% endcache %}', {'foo': 3, 'time': -1}, 'cache09'),
|
||||
'cache10': ('{% load cache %}{% cache time test foo %}cache10{% endcache %}', {'foo': 3, 'time': -1}, 'cache10'),
|
||||
|
||||
# Raise exception if we don't have at least 2 args, first one integer.
|
||||
'cache11': ('{% load cache %}{% cache %}{% endcache %}', {}, template.TemplateSyntaxError),
|
||||
'cache12': ('{% load cache %}{% cache 1 %}{% endcache %}', {}, template.TemplateSyntaxError),
|
||||
'cache13': ('{% load cache %}{% cache foo bar %}{% endcache %}', {}, template.TemplateSyntaxError),
|
||||
'cache14': ('{% load cache %}{% cache foo bar %}{% endcache %}', {'foo': 'fail'}, template.TemplateSyntaxError),
|
||||
'cache15': ('{% load cache %}{% cache foo bar %}{% endcache %}', {'foo': []}, template.TemplateSyntaxError),
|
||||
|
||||
### AUTOESCAPE TAG ##############################################
|
||||
'autoescape-tag01': ("{% autoescape off %}hello{% endautoescape %}", {}, "hello"),
|
||||
|
||||
Reference in New Issue
Block a user