<s> from __future__ import absolute_import , unicode_literals <EOL> from datetime import datetime <EOL> from django . core . paginator import ( Paginator , EmptyPage , InvalidPage , <EOL> PageNotAnInteger ) <EOL> from django . test import TestCase <EOL> from django . utils import six <EOL> from django . utils import unittest <EOL> from . models import Article <EOL> class PaginationTests ( unittest . TestCase ) : <EOL> """<STR_LIT>""" <EOL> def check_paginator ( self , params , output ) : <EOL> """<STR_LIT>""" <EOL> count , num_pages , page_range = output <EOL> paginator = Paginator ( * params ) <EOL> self . check_attribute ( '<STR_LIT:count>' , paginator , count , params ) <EOL> self . check_attribute ( '<STR_LIT>' , paginator , num_pages , params ) <EOL> self . check_attribute ( '<STR_LIT>' , paginator , page_range , params , coerce = list ) <EOL> def check_attribute ( self , name , paginator , expected , params , coerce = None ) : <EOL> """<STR_LIT>""" <EOL> got = getattr ( paginator , name ) <EOL> if coerce is not None : <EOL> got = coerce ( got ) <EOL> self . assertEqual ( expected , got , <EOL> "<STR_LIT>" <EOL> % ( name , expected , got , params ) ) <EOL> def test_paginator ( self ) : <EOL> """<STR_LIT>""" <EOL> nine = [ <NUM_LIT:1> , <NUM_LIT:2> , <NUM_LIT:3> , <NUM_LIT:4> , <NUM_LIT:5> , <NUM_LIT:6> , <NUM_LIT:7> , <NUM_LIT:8> , <NUM_LIT:9> ] <EOL> ten = nine + [ <NUM_LIT:10> ] <EOL> eleven = ten + [ <NUM_LIT:11> ] <EOL> tests = ( <EOL> ( ( ten , <NUM_LIT:4> , <NUM_LIT:0> , False ) , ( <NUM_LIT:10> , <NUM_LIT:3> , [ <NUM_LIT:1> , <NUM_LIT:2> , <NUM_LIT:3> ] ) ) , <EOL> ( ( ten , <NUM_LIT:4> , <NUM_LIT:1> , False ) , ( <NUM_LIT:10> , <NUM_LIT:3> , [ <NUM_LIT:1> , <NUM_LIT:2> , <NUM_LIT:3> ] ) ) , <EOL> ( ( ten , <NUM_LIT:4> , <NUM_LIT:2> , False ) , ( <NUM_LIT:10> , <NUM_LIT:2> , [ <NUM_LIT:1> , <NUM_LIT:2> ] ) ) , <EOL> ( ( ten , <NUM_LIT:4> , <NUM_LIT:5> , False ) , ( <NUM_LIT:10> , <NUM_LIT:2> , [ <NUM_LIT:1> , <NUM_LIT:2> ] ) ) , <EOL> ( ( ten , <NUM_LIT:4> , <NUM_LIT:6> , False ) , ( <NUM_LIT:10> , <NUM_LIT:1> , [ <NUM_LIT:1> ] ) ) , <EOL> ( ( ten , <NUM_LIT:4> , <NUM_LIT:0> , True ) , ( <NUM_LIT:10> , <NUM_LIT:3> , [ <NUM_LIT:1> , <NUM_LIT:2> , <NUM_LIT:3> ] ) ) , <EOL> ( ( ten , <NUM_LIT:4> , <NUM_LIT:1> , True ) , ( <NUM_LIT:10> , <NUM_LIT:3> , [ <NUM_LIT:1> , <NUM_LIT:2> , <NUM_LIT:3> ] ) ) , <EOL> ( ( ten , <NUM_LIT:4> , <NUM_LIT:2> , True ) , ( <NUM_LIT:10> , <NUM_LIT:2> , [ <NUM_LIT:1> , <NUM_LIT:2> ] ) ) , <EOL> ( ( ten , <NUM_LIT:4> , <NUM_LIT:5> , True ) , ( <NUM_LIT:10> , <NUM_LIT:2> , [ <NUM_LIT:1> , <NUM_LIT:2> ] ) ) , <EOL> ( ( ten , <NUM_LIT:4> , <NUM_LIT:6> , True ) , ( <NUM_LIT:10> , <NUM_LIT:1> , [ <NUM_LIT:1> ] ) ) , <EOL> ( ( [ <NUM_LIT:1> ] , <NUM_LIT:4> , <NUM_LIT:0> , False ) , ( <NUM_LIT:1> , <NUM_LIT:1> , [ <NUM_LIT:1> ] ) ) , <EOL> ( ( [ <NUM_LIT:1> ] , <NUM_LIT:4> , <NUM_LIT:1> , False ) , ( <NUM_LIT:1> , <NUM_LIT:1> , [ <NUM_LIT:1> ] ) ) , <EOL> ( ( [ <NUM_LIT:1> ] , <NUM_LIT:4> , <NUM_LIT:2> , False ) , ( <NUM_LIT:1> , <NUM_LIT:1> , [ <NUM_LIT:1> ] ) ) , <EOL> ( ( [ <NUM_LIT:1> ] , <NUM_LIT:4> , <NUM_LIT:0> , True ) , ( <NUM_LIT:1> , <NUM_LIT:1> , [ <NUM_LIT:1> ] ) ) , <EOL> ( ( [ <NUM_LIT:1> ] , <NUM_LIT:4> , <NUM_LIT:1> , True ) , ( <NUM_LIT:1> , <NUM_LIT:1> , [ <NUM_LIT:1> ] ) ) , <EOL> ( ( [ <NUM_LIT:1> ] , <NUM_LIT:4> , <NUM_LIT:2> , True ) , ( <NUM_LIT:1> , <NUM_LIT:1> , [ <NUM_LIT:1> ] ) ) , <EOL> ( ( [ ] , <NUM_LIT:4> , <NUM_LIT:0> , False ) , ( <NUM_LIT:0> , <NUM_LIT:0> , [ ] ) ) , <EOL> ( ( [ ] , <NUM_LIT:4> , <NUM_LIT:1> , False ) , ( <NUM_LIT:0> , <NUM_LIT:0> , [ ] ) ) , <EOL> ( ( [ ] , <NUM_LIT:4> , <NUM_LIT:2> , False ) , ( <NUM_LIT:0> , <NUM_LIT:0> , [ ] ) ) , <EOL> ( ( [ ] , <NUM_LIT:4> , <NUM_LIT:0> , True ) , ( <NUM_LIT:0> , <NUM_LIT:1> , [ <NUM_LIT:1> ] ) ) , <EOL> ( ( [ ] , <NUM_LIT:4> , <NUM_LIT:1> , True ) , ( <NUM_LIT:0> , <NUM_LIT:1> , [ <NUM_LIT:1> ] ) ) , <EOL> ( ( [ ] , <NUM_LIT:4> , <NUM_LIT:2> , True ) , ( <NUM_LIT:0> , <NUM_LIT:1> , [ <NUM_LIT:1> ] ) ) , <EOL> ( ( [ ] , <NUM_LIT:1> , <NUM_LIT:0> , True ) , ( <NUM_LIT:0> , <NUM_LIT:1> , [ <NUM_LIT:1> ] ) ) , <EOL> ( ( [ ] , <NUM_LIT:1> , <NUM_LIT:0> , False ) , ( <NUM_LIT:0> , <NUM_LIT:0> , [ ] ) ) , <EOL> ( ( [ <NUM_LIT:1> ] , <NUM_LIT:2> , <NUM_LIT:0> , True ) , ( <NUM_LIT:1> , <NUM_LIT:1> , [ <NUM_LIT:1> ] ) ) , <EOL> ( ( nine , <NUM_LIT:10> , <NUM_LIT:0> , True ) , ( <NUM_LIT:9> , <NUM_LIT:1> , [ <NUM_LIT:1> ] ) ) , <EOL> ( ( [ <NUM_LIT:1> ] , <NUM_LIT:1> , <NUM_LIT:0> , True ) , ( <NUM_LIT:1> , <NUM_LIT:1> , [ <NUM_LIT:1> ] ) ) , <EOL> ( ( [ <NUM_LIT:1> , <NUM_LIT:2> ] , <NUM_LIT:2> , <NUM_LIT:0> , True ) , ( <NUM_LIT:2> , <NUM_LIT:1> , [ <NUM_LIT:1> ] ) ) , <EOL> ( ( ten , <NUM_LIT:10> , <NUM_LIT:0> , True ) , ( <NUM_LIT:10> , <NUM_LIT:1> , [ <NUM_LIT:1> ] ) ) , <EOL> ( ( [ <NUM_LIT:1> , <NUM_LIT:2> ] , <NUM_LIT:1> , <NUM_LIT:0> , True ) , ( <NUM_LIT:2> , <NUM_LIT:2> , [ <NUM_LIT:1> , <NUM_LIT:2> ] ) ) , <EOL> ( ( [ <NUM_LIT:1> , <NUM_LIT:2> , <NUM_LIT:3> ] , <NUM_LIT:2> , <NUM_LIT:0> , True ) , ( <NUM_LIT:3> , <NUM_LIT:2> , [ <NUM_LIT:1> , <NUM_LIT:2> ] ) ) , <EOL> ( ( eleven , <NUM_LIT:10> , <NUM_LIT:0> , True ) , ( <NUM_LIT:11> , <NUM_LIT:2> , [ <NUM_LIT:1> , <NUM_LIT:2> ] ) ) , <EOL> ( ( [ <NUM_LIT:1> , <NUM_LIT:2> ] , <NUM_LIT:1> , <NUM_LIT:1> , True ) , ( <NUM_LIT:2> , <NUM_LIT:1> , [ <NUM_LIT:1> ] ) ) , <EOL> ( ( [ <NUM_LIT:1> , <NUM_LIT:2> , <NUM_LIT:3> ] , <NUM_LIT:2> , <NUM_LIT:1> , True ) , ( <NUM_LIT:3> , <NUM_LIT:1> , [ <NUM_LIT:1> ] ) ) , <EOL> ( ( eleven , <NUM_LIT:10> , <NUM_LIT:1> , True ) , ( <NUM_LIT:11> , <NUM_LIT:1> , [ <NUM_LIT:1> ] ) ) , <EOL> ( ( ten , '<STR_LIT:4>' , <NUM_LIT:1> , False ) , ( <NUM_LIT:10> , <NUM_LIT:3> , [ <NUM_LIT:1> , <NUM_LIT:2> , <NUM_LIT:3> ] ) ) , <EOL> ( ( ten , '<STR_LIT:4>' , <NUM_LIT:1> , False ) , ( <NUM_LIT:10> , <NUM_LIT:3> , [ <NUM_LIT:1> , <NUM_LIT:2> , <NUM_LIT:3> ] ) ) , <EOL> ( ( ten , <NUM_LIT:4> , '<STR_LIT:1>' , False ) , ( <NUM_LIT:10> , <NUM_LIT:3> , [ <NUM_LIT:1> , <NUM_LIT:2> , <NUM_LIT:3> ] ) ) , <EOL> ( ( ten , <NUM_LIT:4> , '<STR_LIT:1>' , False ) , ( <NUM_LIT:10> , <NUM_LIT:3> , [ <NUM_LIT:1> , <NUM_LIT:2> , <NUM_LIT:3> ] ) ) , <EOL> ) <EOL> for params , output in tests : <EOL> self . check_paginator ( params , output ) <EOL> def test_invalid_page_number ( self ) : <EOL> """<STR_LIT>""" <EOL> paginator = Paginator ( [ <NUM_LIT:1> , <NUM_LIT:2> , <NUM_LIT:3> ] , <NUM_LIT:2> ) <EOL> self . assertRaises ( InvalidPage , paginator . page , <NUM_LIT:3> ) <EOL> self . assertRaises ( PageNotAnInteger , paginator . validate_number , None ) <EOL> self . assertRaises ( PageNotAnInteger , paginator . validate_number , '<STR_LIT:x>' ) <EOL> paginator = Paginator ( [ ] , <NUM_LIT:2> ) <EOL> self . assertEqual ( paginator . validate_number ( <NUM_LIT:1> ) , <NUM_LIT:1> ) <EOL> def test_paginate_misc_classes ( self ) : <EOL> class CountContainer ( object ) : <EOL> def count ( self ) : <EOL> return <NUM_LIT> <EOL> paginator = Paginator ( CountContainer ( ) , <NUM_LIT:10> ) <EOL> self . assertEqual ( <NUM_LIT> , paginator . count ) <EOL> self . assertEqual ( <NUM_LIT:5> , paginator . num_pages ) <EOL> self . assertEqual ( [ <NUM_LIT:1> , <NUM_LIT:2> , <NUM_LIT:3> , <NUM_LIT:4> , <NUM_LIT:5> ] , list ( paginator . page_range ) ) <EOL> class LenContainer ( object ) : <EOL> def __len__ ( self ) : <EOL> return <NUM_LIT> <EOL> paginator = Paginator ( LenContainer ( ) , <NUM_LIT:10> ) <EOL> self . assertEqual ( <NUM_LIT> , paginator . count ) <EOL> self . assertEqual ( <NUM_LIT:5> , paginator . num_pages ) <EOL> self . assertEqual ( [ <NUM_LIT:1> , <NUM_LIT:2> , <NUM_LIT:3> , <NUM_LIT:4> , <NUM_LIT:5> ] , list ( paginator . page_range ) ) <EOL> def check_indexes ( self , params , page_num , indexes ) : <EOL> """<STR_LIT>""" <EOL> paginator = Paginator ( * params ) <EOL> if page_num == '<STR_LIT>' : <EOL> page_num = <NUM_LIT:1> <EOL> elif page_num == '<STR_LIT>' : <EOL> page_num = paginator . num_pages <EOL> page = paginator . page ( page_num ) <EOL> start , end = indexes <EOL> msg = ( "<STR_LIT>" <EOL> "<STR_LIT>" ) <EOL> self . assertEqual ( start , page . start_index ( ) , <EOL> msg % ( '<STR_LIT>' , page_num , start , page . start_index ( ) , params ) ) <EOL> self . assertEqual ( end , page . end_index ( ) , <EOL> msg % ( '<STR_LIT>' , page_num , end , page . end_index ( ) , params ) ) <EOL> def test_page_indexes ( self ) : <EOL> """<STR_LIT>""" <EOL> ten = [ <NUM_LIT:1> , <NUM_LIT:2> , <NUM_LIT:3> , <NUM_LIT:4> , <NUM_LIT:5> , <NUM_LIT:6> , <NUM_LIT:7> , <NUM_LIT:8> , <NUM_LIT:9> , <NUM_LIT:10> ] <EOL> tests = ( <EOL> ( ( ten , <NUM_LIT:1> , <NUM_LIT:0> , True ) , ( <NUM_LIT:1> , <NUM_LIT:1> ) , ( <NUM_LIT:10> , <NUM_LIT:10> ) ) , <EOL> ( ( ten , <NUM_LIT:2> , <NUM_LIT:0> , True ) , ( <NUM_LIT:1> , <NUM_LIT:2> ) , ( <NUM_LIT:9> , <NUM_LIT:10> ) ) , <EOL> ( ( ten , <NUM_LIT:3> , <NUM_LIT:0> , True ) , ( <NUM_LIT:1> , <NUM_LIT:3> ) , ( <NUM_LIT:10> , <NUM_LIT:10> ) ) , <EOL> ( ( ten , <NUM_LIT:5> , <NUM_LIT:0> , True ) , ( <NUM_LIT:1> , <NUM_LIT:5> ) , ( <NUM_LIT:6> , <NUM_LIT:10> ) ) , <EOL> ( ( ten , <NUM_LIT:1> , <NUM_LIT:1> , True ) , ( <NUM_LIT:1> , <NUM_LIT:1> ) , ( <NUM_LIT:9> , <NUM_LIT:10> ) ) , <EOL> ( ( ten , <NUM_LIT:1> , <NUM_LIT:2> , True ) , ( <NUM_LIT:1> , <NUM_LIT:1> ) , ( <NUM_LIT:8> , <NUM_LIT:10> ) ) , <EOL> ( ( ten , <NUM_LIT:3> , <NUM_LIT:1> , True ) , ( <NUM_LIT:1> , <NUM_LIT:3> ) , ( <NUM_LIT:7> , <NUM_LIT:10> ) ) , <EOL> ( ( ten , <NUM_LIT:3> , <NUM_LIT:2> , True ) , ( <NUM_LIT:1> , <NUM_LIT:3> ) , ( <NUM_LIT:7> , <NUM_LIT:10> ) ) , <EOL> ( ( ten , <NUM_LIT:3> , <NUM_LIT:4> , True ) , ( <NUM_LIT:1> , <NUM_LIT:3> ) , ( <NUM_LIT:4> , <NUM_LIT:10> ) ) , <EOL> ( ( ten , <NUM_LIT:5> , <NUM_LIT:1> , True ) , ( <NUM_LIT:1> , <NUM_LIT:5> ) , ( <NUM_LIT:6> , <NUM_LIT:10> ) ) , <EOL> ( ( ten , <NUM_LIT:5> , <NUM_LIT:2> , True ) , ( <NUM_LIT:1> , <NUM_LIT:5> ) , ( <NUM_LIT:6> , <NUM_LIT:10> ) ) , <EOL> ( ( ten , <NUM_LIT:5> , <NUM_LIT:5> , True ) , ( <NUM_LIT:1> , <NUM_LIT:10> ) , ( <NUM_LIT:1> , <NUM_LIT:10> ) ) , <EOL> ( ( [ <NUM_LIT:1> ] , <NUM_LIT:4> , <NUM_LIT:0> , False ) , ( <NUM_LIT:1> , <NUM_LIT:1> ) , ( <NUM_LIT:1> , <NUM_LIT:1> ) ) , <EOL> ( ( [ <NUM_LIT:1> ] , <NUM_LIT:4> , <NUM_LIT:1> , False ) , ( <NUM_LIT:1> , <NUM_LIT:1> ) , ( <NUM_LIT:1> , <NUM_LIT:1> ) ) , <EOL> ( ( [ <NUM_LIT:1> ] , <NUM_LIT:4> , <NUM_LIT:2> , False ) , ( <NUM_LIT:1> , <NUM_LIT:1> ) , ( <NUM_LIT:1> , <NUM_LIT:1> ) ) , <EOL> ( ( [ <NUM_LIT:1> ] , <NUM_LIT:4> , <NUM_LIT:0> , True ) , ( <NUM_LIT:1> , <NUM_LIT:1> ) , ( <NUM_LIT:1> , <NUM_LIT:1> ) ) , <EOL> ( ( [ <NUM_LIT:1> ] , <NUM_LIT:4> , <NUM_LIT:1> , True ) , ( <NUM_LIT:1> , <NUM_LIT:1> ) , ( <NUM_LIT:1> , <NUM_LIT:1> ) ) , <EOL> ( ( [ <NUM_LIT:1> ] , <NUM_LIT:4> , <NUM_LIT:2> , True ) , ( <NUM_LIT:1> , <NUM_LIT:1> ) , ( <NUM_LIT:1> , <NUM_LIT:1> ) ) , <EOL> ( ( [ ] , <NUM_LIT:4> , <NUM_LIT:0> , True ) , ( <NUM_LIT:0> , <NUM_LIT:0> ) , ( <NUM_LIT:0> , <NUM_LIT:0> ) ) , <EOL> ( ( [ ] , <NUM_LIT:4> , <NUM_LIT:1> , True ) , ( <NUM_LIT:0> , <NUM_LIT:0> ) , ( <NUM_LIT:0> , <NUM_LIT:0> ) ) , <EOL> ( ( [ ] , <NUM_LIT:4> , <NUM_LIT:2> , True ) , ( <NUM_LIT:0> , <NUM_LIT:0> ) , ( <NUM_LIT:0> , <NUM_LIT:0> ) ) , <EOL> ) <EOL> for params , first , last in tests : <EOL> self . check_indexes ( params , '<STR_LIT>' , first ) <EOL> self . check_indexes ( params , '<STR_LIT>' , last ) <EOL> self . assertRaises ( EmptyPage , self . check_indexes , ( [ ] , <NUM_LIT:4> , <NUM_LIT:0> , False ) , <NUM_LIT:1> , None ) <EOL> self . assertRaises ( EmptyPage , self . check_indexes , ( [ ] , <NUM_LIT:4> , <NUM_LIT:1> , False ) , <NUM_LIT:1> , None ) <EOL> self . assertRaises ( EmptyPage , self . check_indexes , ( [ ] , <NUM_LIT:4> , <NUM_LIT:2> , False ) , <NUM_LIT:1> , None ) <EOL> def test_page_sequence ( self ) : <EOL> """<STR_LIT>""" <EOL> eleven = '<STR_LIT>' <EOL> page2 = Paginator ( eleven , per_page = <NUM_LIT:5> , orphans = <NUM_LIT:1> ) . page ( <NUM_LIT:2> ) <EOL> self . assertEqual ( len ( page2 ) , <NUM_LIT:6> ) <EOL> self . assertTrue ( '<STR_LIT:k>' in page2 ) <EOL> self . assertFalse ( '<STR_LIT:a>' in page2 ) <EOL> self . assertEqual ( '<STR_LIT>' . join ( page2 ) , '<STR_LIT>' ) <EOL> self . assertEqual ( '<STR_LIT>' . join ( reversed ( page2 ) ) , '<STR_LIT>' ) <EOL> class ModelPaginationTests ( TestCase ) : <EOL> """<STR_LIT>""" <EOL> def setUp ( self ) : <EOL> for x in range ( <NUM_LIT:1> , <NUM_LIT:10> ) : <EOL> a = Article ( headline = '<STR_LIT>' % x , pub_date = datetime ( <NUM_LIT> , <NUM_LIT:7> , <NUM_LIT> ) ) <EOL> a . save ( ) <EOL> def test_first_page ( self ) : <EOL> paginator = Paginator ( Article . objects . all ( ) , <NUM_LIT:5> ) <EOL> p = paginator . page ( <NUM_LIT:1> ) <EOL> self . assertEqual ( "<STR_LIT>" , six . text_type ( p ) ) <EOL> self . assertQuerysetEqual ( p . object_list , [ <EOL> "<STR_LIT>" , <EOL> "<STR_LIT>" , <EOL> "<STR_LIT>" , <EOL> "<STR_LIT>" , <EOL> "<STR_LIT>" <EOL> ] <EOL> ) <EOL> self . assertTrue ( p . has_next ( ) ) <EOL> self . assertFalse ( p . has_previous ( ) ) <EOL> self . assertTrue ( p . has_other_pages ( ) ) <EOL> self . assertEqual ( <NUM_LIT:2> , p . next_page_number ( ) ) <EOL> self . assertRaises ( InvalidPage , p . previous_page_number ) <EOL> self . assertEqual ( <NUM_LIT:1> , p . start_index ( ) ) <EOL> self . assertEqual ( <NUM_LIT:5> , p . end_index ( ) ) <EOL> def test_last_page ( self ) : <EOL> paginator = Paginator ( Article . objects . all ( ) , <NUM_LIT:5> ) <EOL> p = paginator . page ( <NUM_LIT:2> ) <EOL> self . assertEqual ( "<STR_LIT>" , six . text_type ( p ) ) <EOL> self . assertQuerysetEqual ( p . object_list , [ <EOL> "<STR_LIT>" , <EOL> "<STR_LIT>" , <EOL> "<STR_LIT>" , <EOL> "<STR_LIT>" <EOL> ] <EOL> ) <EOL> self . assertFalse ( p . has_next ( ) ) <EOL> self . assertTrue ( p . has_previous ( ) ) <EOL> self . assertTrue ( p . has_other_pages ( ) ) <EOL> self . assertRaises ( InvalidPage , p . next_page_number ) <EOL> self . assertEqual ( <NUM_LIT:1> , p . previous_page_number ( ) ) <EOL> self . assertEqual ( <NUM_LIT:6> , p . start_index ( ) ) <EOL> self . assertEqual ( <NUM_LIT:9> , p . end_index ( ) ) <EOL> def test_page_getitem ( self ) : <EOL> """<STR_LIT>""" <EOL> paginator = Paginator ( Article . objects . all ( ) , <NUM_LIT:5> ) <EOL> p = paginator . page ( <NUM_LIT:1> ) <EOL> self . assertIsNone ( p . object_list . _result_cache ) <EOL> self . assertRaises ( TypeError , lambda : p [ '<STR_LIT>' ] ) <EOL> self . assertIsNone ( p . object_list . _result_cache ) <EOL> self . assertEqual ( p [ <NUM_LIT:0> ] , Article . objects . get ( headline = '<STR_LIT>' ) ) <EOL> self . assertQuerysetEqual ( p [ slice ( <NUM_LIT:2> ) ] , [ <EOL> "<STR_LIT>" , <EOL> "<STR_LIT>" , <EOL> ] <EOL> ) </s>
