X-Git-Url: https://git.mdrn.pl/django-pagination.git/blobdiff_plain/a2f73cc5b313b42591c904232050fb1b346bcae4..59500533db29f189154369ce87f0027f2d0cd84c:/linaro_django_pagination/tests.py diff --git a/linaro_django_pagination/tests.py b/linaro_django_pagination/tests.py index d31c4ed..90468d5 100644 --- a/linaro_django_pagination/tests.py +++ b/linaro_django_pagination/tests.py @@ -1,41 +1,169 @@ +# Copyright (c) 2008, Eric Florenzano +# Copyright (c) 2010, 2011 Linaro Limited +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following +# disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the author nor the names of other +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + """ >>> from django.core.paginator import Paginator >>> from linaro_django_pagination.templatetags.pagination_tags import paginate >>> from django.template import Template, Context >>> p = Paginator(range(15), 2) ->>> paginate({'paginator': p, 'page_obj': p.page(1)})['pages'] +>>> pg = paginate({'paginator': p, 'page_obj': p.page(1)}) +>>> pg['pages'] +[1, 2, 3, 4, 5, 6, 7, 8] +>>> pg['records']['first'] +1 +>>> pg['records']['last'] +2 + +>>> p = Paginator(range(15), 2) +>>> pg = paginate({'paginator': p, 'page_obj': p.page(8)}) +>>> pg['pages'] [1, 2, 3, 4, 5, 6, 7, 8] +>>> pg['records']['first'] +15 +>>> pg['records']['last'] +15 >>> p = Paginator(range(17), 2) >>> paginate({'paginator': p, 'page_obj': p.page(1)})['pages'] [1, 2, 3, 4, 5, 6, 7, 8, 9] ->>> p = Paginator(range(19), 2) ->>> paginate({'paginator': p, 'page_obj': p.page(1)})['pages'] -[1, 2, 3, 4, None, 7, 8, 9, 10] ->>> p = Paginator(range(21), 2) ->>> paginate({'paginator': p, 'page_obj': p.page(1)})['pages'] -[1, 2, 3, 4, None, 8, 9, 10, 11] +# on start +# moving the window from 1 ... to end +# window size = 2, margin = 2 +# [1] 2 3 4 5 ... 15, 16 +# 1 [2] 3 4 5 ... 15, 16 +# 1 2 [3] 4 5 ... 15, 16 +# 1 2 3 [4] 5 6 ... 15, 16 +# 1 2 3 4 [5] 6 7 ... 15, 16 +# 1 2 3 4 5 [6] 7 8 ... 15, 16 +# 1 2 ... 5 6 [7] 8 9 ... 15, 16 -# Testing orphans ->>> p = Paginator(range(5), 2, 1) ->>> paginate({'paginator': p, 'page_obj': p.page(1)})['pages'] -[1, 2] +# window = 2 -> show 5 pages +>>> p = Paginator(range(31), 2) +>>> paginate({'paginator': p, 'page_obj': p.page(1)}, 2, 2)['pages'] +[1, 2, 3, 4, 5, None, 15, 16] ->>> p = Paginator(range(21), 2, 1) ->>> paginate({'paginator': p, 'page_obj': p.page(1)})['pages'] -[1, 2, 3, 4, None, 7, 8, 9, 10] +>>> p = Paginator(range(31), 2) +>>> paginate({'paginator': p, 'page_obj': p.page(2)}, 2, 2)['pages'] +[1, 2, 3, 4, 5, None, 15, 16] ->>> p = Paginator(range(21), 2, 1) +>>> p = Paginator(range(31), 2) +>>> paginate({'paginator': p, 'page_obj': p.page(3)}, 2, 2)['pages'] +[1, 2, 3, 4, 5, None, 15, 16] + +>>> p = Paginator(range(31), 2) +>>> paginate({'paginator': p, 'page_obj': p.page(4)}, 2, 2)['pages'] +[1, 2, 3, 4, 5, 6, None, 15, 16] + +>>> p = Paginator(range(31), 2) +>>> paginate({'paginator': p, 'page_obj': p.page(5)}, 2, 2)['pages'] +[1, 2, 3, 4, 5, 6, 7, None, 15, 16] + +# in the middle +>>> p = Paginator(range(31), 2) +>>> paginate({'paginator': p, 'page_obj': p.page(7)}, 2, 2)['pages'] +[1, 2, None, 5, 6, 7, 8, 9, None, 15, 16] + +# on end +>>> p = Paginator(range(31), 2) +>>> paginate({'paginator': p, 'page_obj': p.page(16)}, 2, 2)['pages'] +[1, 2, None, 12, 13, 14, 15, 16] + +>>> p = Paginator(range(31), 2) +>>> paginate({'paginator': p, 'page_obj': p.page(13)}, 2, 2)['pages'] +[1, 2, None, 11, 12, 13, 14, 15, 16] + + +>>> p = Paginator(range(0), 2) >>> paginate({'paginator': p, 'page_obj': p.page(1)})['pages'] -[1, 2, 3, 4, None, 7, 8, 9, 10] +[1] + + + +# no margin +>>> p = Paginator(range(31), 2) +>>> paginate({'paginator': p, 'page_obj': p.page(3)}, 2, 0)['pages'] +[1, 2, 3, 4, 5, None] + +>>> p = Paginator(range(31), 2) +>>> paginate({'paginator': p, 'page_obj': p.page(5)}, 2, 0)['pages'] +[None, 3, 4, 5, 6, 7, None] + +>>> p = Paginator(range(31), 2) +>>> paginate({'paginator': p, 'page_obj': p.page(16)}, 2, 0)['pages'] +[None, 12, 13, 14, 15, 16] + + +# special +# zero window, zero margin +>>> p = Paginator(range(31), 2) +>>> paginate({'paginator': p, 'page_obj': p.page(1)}, 0, 0)['pages'] +[1, None] + +>>> p = Paginator(range(31), 2) +>>> paginate({'paginator': p, 'page_obj': p.page(2)}, 0, 0)['pages'] +[None, 2, None] + +>>> p = Paginator(range(31), 2) +>>> paginate({'paginator': p, 'page_obj': p.page(3)}, 0, 0)['pages'] +[None, 3, None] + +>>> p = Paginator(range(31), 2) +>>> paginate({'paginator': p, 'page_obj': p.page(10)}, 0, 0)['pages'] +[None, 10, None] + +>>> p = Paginator(range(31), 2) +>>> paginate({'paginator': p, 'page_obj': p.page(14)}, 0, 0)['pages'] +[None, 14, None] + +>>> p = Paginator(range(31), 2) +>>> paginate({'paginator': p, 'page_obj': p.page(15)}, 0, 0)['pages'] +[None, 15, None] + +>>> p = Paginator(range(31), 2) +>>> paginate({'paginator': p, 'page_obj': p.page(16)}, 0, 0)['pages'] +[None, 16] + +>>> p = Paginator(range(31), 2) +>>> paginate({'paginator': p, 'page_obj': p.page(5)}, 0, 1)['pages'] +[1, None, 5, None, 16] >>> p = Paginator(range(21), 2, 1) ->>> paginate({'paginator': p, 'page_obj': p.page(1)})['pages'] +>>> paginate({'paginator': p, 'page_obj': p.page(1)}, 0, 4)['pages'] [1, 2, 3, 4, None, 7, 8, 9, 10] +# Testing template rendering + >>> t = Template("{% load pagination_tags %}{% autopaginate var 2 %}{% paginate %}") >>> from django.http import HttpRequest as DjangoHttpRequest @@ -43,24 +171,24 @@ ... page = lambda self, suffix: 1 >>> t.render(Context({'var': range(21), 'request': HttpRequest()})) -u'\\n\\n