BUGFIX: PaginatedList::getIterator() trims the original list to the page lenght when the source list is DataList

This commit is contained in:
Saophalkun Ponlu 2012-07-15 01:02:49 +12:00
parent bf91594e4f
commit c555256890
2 changed files with 16 additions and 1 deletions

View File

@ -172,8 +172,9 @@ class PaginatedList extends SS_ListDecorator {
*/
public function getIterator() {
if($this->limitItems) {
$tmptList = clone $this->list;
return new IteratorIterator(
$this->list->limit($this->pageLength, $this->getPageStart())
$tmptList->limit($this->pageLength, $this->getPageStart())
);
} else {
return new IteratorIterator($this->list);

View File

@ -7,6 +7,14 @@
*/
class PaginatedListTest extends SapphireTest {
static $fixture_file = 'DataObjectTest.yml';
protected $extraDataObjects = array(
'DataObjectTest_Team',
'DataObjectTest_SubTeam',
'DataObjectTest_Player'
);
public function testPageStart() {
$list = new PaginatedList(new ArrayList());
$this->assertEquals(0, $list->getPageStart(), 'The start defaults to 0.');
@ -84,6 +92,12 @@ class PaginatedListTest extends SapphireTest {
$list->setCurrentPage(999);
$this->assertDOSEquals(array(), $list->getIterator());
$players = DataObjectTest_Player::get();
$list = new PaginatedList($players);
$list->setPageLength(1);
$list->getIterator();
$this->assertEquals(4, $list->getTotalItems(), 'Getting an iterator should not trim the list to the page length.');
}
public function testPages() {