Made the reg-exp lookup tests more robust. they now pass for all database
backends and are not dependent on locale sorting order. git-svn-id: http://code.djangoproject.com/svn/django/trunk@5579 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
acf0ff02e7
commit
3a892122f2
|
@ -5,6 +5,7 @@ This demonstrates features of the database API.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
from django.conf import settings
|
||||||
|
|
||||||
class Article(models.Model):
|
class Article(models.Model):
|
||||||
headline = models.CharField(maxlength=100)
|
headline = models.CharField(maxlength=100)
|
||||||
|
@ -263,14 +264,14 @@ TypeError: Cannot resolve keyword 'headline__starts' into field. Choices are: id
|
||||||
>>> a3.save()
|
>>> a3.save()
|
||||||
>>> a4 = Article(pub_date=now, headline='fooo')
|
>>> a4 = Article(pub_date=now, headline='fooo')
|
||||||
>>> a4.save()
|
>>> a4.save()
|
||||||
>>> a5 = Article(pub_date=now, headline='Foo')
|
>>> a5 = Article(pub_date=now, headline='hey-Foo')
|
||||||
>>> a5.save()
|
>>> a5.save()
|
||||||
|
|
||||||
# zero-or-more
|
# zero-or-more
|
||||||
>>> Article.objects.filter(headline__regex=r'fo*')
|
>>> Article.objects.filter(headline__regex=r'fo*')
|
||||||
[<Article: f>, <Article: fo>, <Article: foo>, <Article: fooo>]
|
[<Article: f>, <Article: fo>, <Article: foo>, <Article: fooo>]
|
||||||
>>> Article.objects.filter(headline__iregex=r'fo*')
|
>>> Article.objects.filter(headline__iregex=r'fo*')
|
||||||
[<Article: Foo>, <Article: f>, <Article: fo>, <Article: foo>, <Article: fooo>]
|
[<Article: f>, <Article: fo>, <Article: foo>, <Article: fooo>, <Article: hey-Foo>]
|
||||||
|
|
||||||
# one-or-more
|
# one-or-more
|
||||||
>>> Article.objects.filter(headline__regex=r'fo+')
|
>>> Article.objects.filter(headline__regex=r'fo+')
|
||||||
|
@ -283,39 +284,39 @@ TypeError: Cannot resolve keyword 'headline__starts' into field. Choices are: id
|
||||||
# and some more:
|
# and some more:
|
||||||
>>> a6 = Article(pub_date=now, headline='bar')
|
>>> a6 = Article(pub_date=now, headline='bar')
|
||||||
>>> a6.save()
|
>>> a6.save()
|
||||||
>>> a7 = Article(pub_date=now, headline='Bar')
|
>>> a7 = Article(pub_date=now, headline='AbBa')
|
||||||
>>> a7.save()
|
>>> a7.save()
|
||||||
>>> a8 = Article(pub_date=now, headline='baz')
|
>>> a8 = Article(pub_date=now, headline='baz')
|
||||||
>>> a8.save()
|
>>> a8.save()
|
||||||
>>> a9 = Article(pub_date=now, headline='baZ')
|
>>> a9 = Article(pub_date=now, headline='baxZ')
|
||||||
>>> a9.save()
|
>>> a9.save()
|
||||||
|
|
||||||
# leading anchor
|
# leading anchor
|
||||||
>>> Article.objects.filter(headline__regex=r'^b')
|
>>> Article.objects.filter(headline__regex=r'^b')
|
||||||
[<Article: baZ>, <Article: bar>, <Article: baz>]
|
[<Article: bar>, <Article: baxZ>, <Article: baz>]
|
||||||
>>> Article.objects.filter(headline__iregex=r'^b')
|
>>> Article.objects.filter(headline__iregex=r'^a')
|
||||||
[<Article: Bar>, <Article: baZ>, <Article: bar>, <Article: baz>]
|
[<Article: AbBa>]
|
||||||
|
|
||||||
# trailing anchor
|
# trailing anchor
|
||||||
>>> Article.objects.filter(headline__regex=r'z$')
|
>>> Article.objects.filter(headline__regex=r'z$')
|
||||||
[<Article: baz>]
|
[<Article: baz>]
|
||||||
>>> Article.objects.filter(headline__iregex=r'z$')
|
>>> Article.objects.filter(headline__iregex=r'z$')
|
||||||
[<Article: baZ>, <Article: baz>]
|
[<Article: baxZ>, <Article: baz>]
|
||||||
|
|
||||||
# character sets
|
# character sets
|
||||||
>>> Article.objects.filter(headline__regex=r'ba[rz]')
|
>>> Article.objects.filter(headline__regex=r'ba[rz]')
|
||||||
[<Article: bar>, <Article: baz>]
|
[<Article: bar>, <Article: baz>]
|
||||||
>>> Article.objects.filter(headline__regex=r'ba[RZ]')
|
>>> Article.objects.filter(headline__regex=r'ba.[RxZ]')
|
||||||
[<Article: baZ>]
|
[<Article: baxZ>]
|
||||||
>>> Article.objects.filter(headline__iregex=r'ba[RZ]')
|
>>> Article.objects.filter(headline__iregex=r'ba[RxZ]')
|
||||||
[<Article: Bar>, <Article: baZ>, <Article: bar>, <Article: baz>]
|
[<Article: bar>, <Article: baxZ>, <Article: baz>]
|
||||||
|
|
||||||
# and yet more:
|
# and yet more:
|
||||||
>>> a10 = Article(pub_date=now, headline='foobar')
|
>>> a10 = Article(pub_date=now, headline='foobar')
|
||||||
>>> a10.save()
|
>>> a10.save()
|
||||||
>>> a11 = Article(pub_date=now, headline='foobaz')
|
>>> a11 = Article(pub_date=now, headline='foobaz')
|
||||||
>>> a11.save()
|
>>> a11.save()
|
||||||
>>> a12 = Article(pub_date=now, headline='FooBarBaz')
|
>>> a12 = Article(pub_date=now, headline='ooF')
|
||||||
>>> a12.save()
|
>>> a12.save()
|
||||||
>>> a13 = Article(pub_date=now, headline='foobarbaz')
|
>>> a13 = Article(pub_date=now, headline='foobarbaz')
|
||||||
>>> a13.save()
|
>>> a13.save()
|
||||||
|
@ -323,26 +324,28 @@ TypeError: Cannot resolve keyword 'headline__starts' into field. Choices are: id
|
||||||
>>> a14.save()
|
>>> a14.save()
|
||||||
>>> a15 = Article(pub_date=now, headline='barfoobaz')
|
>>> a15 = Article(pub_date=now, headline='barfoobaz')
|
||||||
>>> a15.save()
|
>>> a15.save()
|
||||||
>>> a16 = Article(pub_date=now, headline='BAZBARFOO')
|
>>> a16 = Article(pub_date=now, headline='bazbaRFOO')
|
||||||
>>> a16.save()
|
>>> a16.save()
|
||||||
|
|
||||||
# alternation
|
# alternation
|
||||||
>>> Article.objects.filter(headline__regex=r'foo(bar|baz)')
|
>>> Article.objects.filter(headline__regex=r'oo(f|b)')
|
||||||
[<Article: barfoobaz>, <Article: foobar>, <Article: foobarbaz>, <Article: foobaz>]
|
[<Article: barfoobaz>, <Article: foobar>, <Article: foobarbaz>, <Article: foobaz>]
|
||||||
>>> Article.objects.filter(headline__iregex=r'foo(bar|baz)')
|
>>> Article.objects.filter(headline__iregex=r'oo(f|b)')
|
||||||
[<Article: FooBarBaz>, <Article: barfoobaz>, <Article: foobar>, <Article: foobarbaz>, <Article: foobaz>]
|
[<Article: barfoobaz>, <Article: foobar>, <Article: foobarbaz>, <Article: foobaz>, <Article: ooF>]
|
||||||
>>> Article.objects.filter(headline__regex=r'^foo(bar|baz)')
|
>>> Article.objects.filter(headline__regex=r'^foo(f|b)')
|
||||||
[<Article: foobar>, <Article: foobarbaz>, <Article: foobaz>]
|
[<Article: foobar>, <Article: foobarbaz>, <Article: foobaz>]
|
||||||
|
|
||||||
# greedy matching
|
# greedy matching
|
||||||
>>> Article.objects.filter(headline__regex=r'f.*z')
|
>>> Article.objects.filter(headline__regex=r'b.*az')
|
||||||
[<Article: barfoobaz>, <Article: foobarbaz>, <Article: foobaz>, <Article: zoocarfaz>]
|
[<Article: barfoobaz>, <Article: baz>, <Article: bazbaRFOO>, <Article: foobarbaz>, <Article: foobaz>]
|
||||||
>>> Article.objects.filter(headline__iregex=r'f.*z')
|
>>> Article.objects.filter(headline__iregex=r'b.*ar')
|
||||||
[<Article: FooBarBaz>, <Article: barfoobaz>, <Article: foobarbaz>, <Article: foobaz>, <Article: zoocarfaz>]
|
[<Article: bar>, <Article: barfoobaz>, <Article: bazbaRFOO>, <Article: foobar>, <Article: foobarbaz>]
|
||||||
|
"""}
|
||||||
|
|
||||||
|
|
||||||
|
if settings.DATABASE_ENGINE not in ('mysql', 'mysql_old'):
|
||||||
|
__test__['API_TESTS'] += r"""
|
||||||
# grouping and backreferences
|
# grouping and backreferences
|
||||||
>>> Article.objects.filter(headline__regex=r'b(.).*b\1')
|
>>> Article.objects.filter(headline__regex=r'b(.).*b\1')
|
||||||
[<Article: barfoobaz>, <Article: foobarbaz>]
|
[<Article: barfoobaz>, <Article: bazbaRFOO>, <Article: foobarbaz>]
|
||||||
>>> Article.objects.filter(headline__iregex=r'b(.).*b\1')
|
"""
|
||||||
[<Article: BAZBARFOO>, <Article: FooBarBaz>, <Article: barfoobaz>, <Article: foobarbaz>]
|
|
||||||
"""}
|
|
||||||
|
|
Loading…
Reference in New Issue