PK 4cGa]! ]! ! linaro_django_pagination/tests.py# 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) >>> 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] # 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 # 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(31), 2) >>> paginate({'paginator': p, 'page_obj': p.page(2)}, 2, 2)['pages'] [1, 2, 3, 4, 5, None, 15, 16] >>> 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] # 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)}, 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 >>> class HttpRequest(DjangoHttpRequest): ... page = lambda self, suffix: 1 >>> t.render(Context({'var': range(21), 'request': HttpRequest()})) u'\\n...\\n...