فهرست منبع

ZF-7020: Zend_Paginator_ScrollingStyle_Elastic is only "elastic" near first pages, but not near last pages

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@18552 44c647ce-9c0f-0410-b52a-842ac1e357ba
norm2782 16 سال پیش
والد
کامیت
816e923786
2فایلهای تغییر یافته به همراه43 افزوده شده و 12 حذف شده
  1. 2 0
      library/Zend/Paginator/ScrollingStyle/Elastic.php
  2. 41 12
      tests/Zend/Paginator/ScrollingStyle/ElasticTest.php

+ 2 - 0
library/Zend/Paginator/ScrollingStyle/Elastic.php

@@ -54,6 +54,8 @@ class Zend_Paginator_ScrollingStyle_Elastic extends Zend_Paginator_ScrollingStyl
 
         if ($originalPageRange + $pageNumber - 1 < $pageRange) {
             $pageRange = $originalPageRange + $pageNumber - 1;
+        } else if ($originalPageRange + $pageNumber - 1 > count($paginator)) {
+            $pageRange = $originalPageRange + count($paginator) - $pageNumber;
         }
 
         return parent::getPages($paginator, $pageRange);

+ 41 - 12
tests/Zend/Paginator/ScrollingStyle/ElasticTest.php

@@ -21,6 +21,11 @@
  */
 
 /**
+ * Test helper
+ */
+require_once dirname(dirname(dirname(dirname(__FILE__)))) . DIRECTORY_SEPARATOR . 'TestHelper.php';
+
+/**
  * @see Zend_Paginator_ScrollingStyle_Elastic
  */
 require_once 'Zend/Paginator/ScrollingStyle/Elastic.php';
@@ -53,7 +58,7 @@ class Zend_Paginator_ScrollingStyle_ElasticTest extends PHPUnit_Framework_TestCa
      * @var Zend_Paginator
      */
     private $_paginator;
-    
+
     /**
      * Prepares the environment before running a test.
      */
@@ -74,7 +79,7 @@ class Zend_Paginator_ScrollingStyle_ElasticTest extends PHPUnit_Framework_TestCa
         $this->_paginator = null;
         parent::tearDown();
     }
-    
+
     public function testGetsPagesInRangeForFirstPage()
     {
         $this->_paginator->setCurrentPageNumber(1);
@@ -82,7 +87,7 @@ class Zend_Paginator_ScrollingStyle_ElasticTest extends PHPUnit_Framework_TestCa
         $expected = array_combine(range(1, 5), range(1, 5));
         $this->assertEquals($expected, $actual);
     }
-    
+
     public function testGetsPagesInRangeForSecondPage()
     {
         $this->_paginator->setCurrentPageNumber(2);
@@ -90,7 +95,7 @@ class Zend_Paginator_ScrollingStyle_ElasticTest extends PHPUnit_Framework_TestCa
         $expected = array_combine(range(1, 6), range(1, 6));
         $this->assertEquals($expected, $actual);
     }
-    
+
     public function testGetsPagesInRangeForTenthPage()
     {
         $this->_paginator->setCurrentPageNumber(10);
@@ -98,23 +103,23 @@ class Zend_Paginator_ScrollingStyle_ElasticTest extends PHPUnit_Framework_TestCa
         $expected = array_combine(range(6, 14), range(6, 14));
         $this->assertEquals($expected, $actual);
     }
-    
+
     public function testGetsPagesInRangeForLastPage()
     {
         $this->_paginator->setCurrentPageNumber(21);
         $actual = $this->_scrollingStyle->getPages($this->_paginator);
-        $expected = array_combine(range(13, 21), range(13, 21));
+        $expected = array_combine(range(17, 21), range(17, 21));
         $this->assertEquals($expected, $actual);
     }
-    
+
     public function testGetsNextAndPreviousPageForFirstPage()
     {
         $this->_paginator->setCurrentPageNumber(1);
         $pages = $this->_paginator->getPages('Elastic');
-        
+
         $this->assertEquals(2, $pages->next);
     }
-    
+
     public function testGetsNextAndPreviousPageForSecondPage()
     {
         $this->_paginator->setCurrentPageNumber(2);
@@ -122,7 +127,7 @@ class Zend_Paginator_ScrollingStyle_ElasticTest extends PHPUnit_Framework_TestCa
         $this->assertEquals(1, $pages->previous);
         $this->assertEquals(3, $pages->next);
     }
-    
+
     public function testGetsNextAndPreviousPageForMiddlePage()
     {
         $this->_paginator->setCurrentPageNumber(10);
@@ -130,7 +135,7 @@ class Zend_Paginator_ScrollingStyle_ElasticTest extends PHPUnit_Framework_TestCa
         $this->assertEquals(9, $pages->previous);
         $this->assertEquals(11, $pages->next);
     }
-    
+
     public function testGetsNextAndPreviousPageForSecondLastPage()
     {
         $this->_paginator->setCurrentPageNumber(20);
@@ -138,11 +143,35 @@ class Zend_Paginator_ScrollingStyle_ElasticTest extends PHPUnit_Framework_TestCa
         $this->assertEquals(19, $pages->previous);
         $this->assertEquals(21, $pages->next);
     }
-    
+
     public function testGetsNextAndPreviousPageForLastPage()
     {
         $this->_paginator->setCurrentPageNumber(21);
         $pages = $this->_paginator->getPages('Elastic');
         $this->assertEquals(20, $pages->previous);
     }
+
+    public function testNoPagesOnLastPageEqualsPageRange()
+    {
+        $this->_paginator->setPageRange(3);
+        $this->_paginator->setCurrentPageNumber(21);
+        $pages = $this->_paginator->getPages('Elastic');
+        $this->assertEquals(3, count($pages->pagesInRange));
+    }
+
+    public function testNoPagesOnSecondLastPageEqualsPageRangeMinOne()
+    {
+        $this->_paginator->setPageRange(3);
+        $this->_paginator->setCurrentPageNumber(20);
+        $pages = $this->_paginator->getPages('Elastic');
+        $this->assertEquals(4, count($pages->pagesInRange));
+    }
+
+    public function testNoPagesBeforeSecondLastPageEqualsPageRangeMinTwo()
+    {
+        $this->_paginator->setPageRange(3);
+        $this->_paginator->setCurrentPageNumber(19);
+        $pages = $this->_paginator->getPages('Elastic');
+        $this->assertEquals(5, count($pages->pagesInRange));
+    }
 }