瀏覽代碼

ZF-3873: Zend_Paginator sets an incorrect lastItemNumber when using the Null adapter.

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@17281 44c647ce-9c0f-0410-b52a-842ac1e357ba
norm2782 16 年之前
父節點
當前提交
e1aca6aef1
共有 2 個文件被更改,包括 42 次插入6 次删除
  1. 10 3
      library/Zend/Paginator/Adapter/Null.php
  2. 32 3
      tests/Zend/Paginator/Adapter/NullTest.php

+ 10 - 3
library/Zend/Paginator/Adapter/Null.php

@@ -38,10 +38,10 @@ class Zend_Paginator_Adapter_Null implements Zend_Paginator_Adapter_Interface
      * @var integer
      */
     protected $_count = null;
-    
+
     /**
      * Constructor.
-     * 
+     *
      * @param array $count Total item count
      */
     public function __construct($count = 0)
@@ -58,7 +58,14 @@ class Zend_Paginator_Adapter_Null implements Zend_Paginator_Adapter_Interface
      */
     public function getItems($offset, $itemCountPerPage)
     {
-        return array_fill(0, $itemCountPerPage, null);
+        if ($offset > $this->count()) {
+            return array();
+        }
+
+        $remainItemCount  = $this->count() - $offset;
+        $currentItemCount = $remainItemCount > $itemCountPerPage ? $itemCountPerPage : $remainItemCount;
+
+        return array_fill(0, $currentItemCount, null);
     }
 
     /**

+ 32 - 3
tests/Zend/Paginator/Adapter/NullTest.php

@@ -21,6 +21,11 @@
  */
 
 /**
+ * @see Zend_Paginator
+ */
+require_once 'Zend/Paginator.php';
+
+/**
  * @see Zend_Paginator_Adapter_Null
  */
 require_once 'Zend/Paginator/Adapter/Null.php';
@@ -43,7 +48,7 @@ class Zend_Paginator_Adapter_NullTest extends PHPUnit_Framework_TestCase
      * @var Zend_Paginator_Adapter_Array
      */
     private $_adapter;
-    
+
     /**
      * Prepares the environment before running a test.
      */
@@ -60,15 +65,39 @@ class Zend_Paginator_Adapter_NullTest extends PHPUnit_Framework_TestCase
         $this->_adapter = null;
         parent::tearDown();
     }
-    
+
     public function testGetsItems()
     {
         $actual = $this->_adapter->getItems(0, 10);
         $this->assertEquals(array_fill(0, 10, null), $actual);
     }
-    
+
     public function testReturnsCorrectCount()
     {
         $this->assertEquals(101, $this->_adapter->count());
     }
+
+    /**
+     * @group ZF-3873
+     */
+    public function testAdapterReturnsCorrectValues()
+    {
+        $paginator = Zend_Paginator::factory(2);
+        $paginator->setCurrentPageNumber(1);
+        $paginator->setItemCountPerPage(5);
+
+        $pages = $paginator->getPages();
+
+        $this->assertEquals(2, $pages->currentItemCount);
+        $this->assertEquals(2, $pages->lastItemNumber);
+
+        $paginator = Zend_Paginator::factory(19);
+        $paginator->setCurrentPageNumber(4);
+        $paginator->setItemCountPerPage(5);
+
+        $pages = $paginator->getPages();
+
+        $this->assertEquals(4, $pages->currentItemCount);
+        $this->assertEquals(19, $pages->lastItemNumber);
+    }
 }