mirror of
https://github.com/parsecsv/parsecsv-for-php.git
synced 2026-02-19 08:36:39 +00:00
Added PHPUnit test for sorting; I could not get the rows in the right...
order without calling array_values - maybe this helps just PHPUnit. I consider the risk of breaking library users' code unlikely.
This commit is contained in:
@@ -730,6 +730,9 @@ class parseCSV {
|
||||
|
||||
$this->sort_reverse ? krsort($rows, $sort_type) : ksort($rows, $sort_type);
|
||||
|
||||
// Avoid issues with mixing string and integer keys:
|
||||
$rows = array_values($rows);
|
||||
|
||||
if ($this->offset !== null || $this->limit !== null) {
|
||||
$rows = array_slice($rows, ($this->offset === null ? 0 : $this->offset), $this->limit, true);
|
||||
}
|
||||
|
||||
31
tests/properties/BaseClass.php
Normal file
31
tests/properties/BaseClass.php
Normal file
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
class BaseClass extends PHPUnit\Framework\TestCase {
|
||||
|
||||
/**
|
||||
* CSV
|
||||
* The parseCSV object
|
||||
*
|
||||
* @access protected
|
||||
* @var parseCSV
|
||||
*/
|
||||
protected $csv;
|
||||
|
||||
/**
|
||||
* Setup
|
||||
* Setup our test environment objects
|
||||
*
|
||||
* @access public
|
||||
*/
|
||||
public function setUp() {
|
||||
$this->csv = new parseCSV();
|
||||
}
|
||||
|
||||
protected function _compareWithExpected($expected) {
|
||||
$this->csv->auto(__DIR__ . '/../../examples/_books.csv');
|
||||
$actual = array_map(function ($row) {
|
||||
return $row['title'];
|
||||
}, $this->csv->data);
|
||||
$this->assertEquals($expected, $actual);
|
||||
}
|
||||
}
|
||||
56
tests/properties/SortByTest.php
Normal file
56
tests/properties/SortByTest.php
Normal file
@@ -0,0 +1,56 @@
|
||||
<?php
|
||||
|
||||
class SortByTest extends BaseClass {
|
||||
|
||||
public function testSortByRating() {
|
||||
$this->csv->sort_by = 'rating';
|
||||
$this->_compareWithExpected([
|
||||
// Rating 0
|
||||
'The Killing Kind',
|
||||
'The Third Secret',
|
||||
|
||||
// Rating 3
|
||||
'The Last Templar',
|
||||
'The Broker (Paperback)',
|
||||
'Without Blood (Paperback)',
|
||||
|
||||
// Rating 4
|
||||
'Deception Point (Paperback)',
|
||||
'The Rule of Four (Paperback)',
|
||||
'The Da Vinci Code (Hardcover)',
|
||||
|
||||
// Rating 5
|
||||
'State of Fear (Paperback)',
|
||||
'Prey',
|
||||
'Digital Fortress : A Thriller (Mass Market Paperback)',
|
||||
'Angels & Demons (Mass Market Paperback)',
|
||||
]);
|
||||
}
|
||||
|
||||
public function testReverseSortByRating() {
|
||||
$this->csv->sort_by = 'rating';
|
||||
$this->csv->sort_reverse = true;
|
||||
$this->_compareWithExpected([
|
||||
|
||||
// Rating 5
|
||||
'Digital Fortress : A Thriller (Mass Market Paperback)',
|
||||
'Prey',
|
||||
'State of Fear (Paperback)',
|
||||
'Angels & Demons (Mass Market Paperback)',
|
||||
|
||||
// Rating 4
|
||||
'The Da Vinci Code (Hardcover)',
|
||||
'The Rule of Four (Paperback)',
|
||||
'Deception Point (Paperback)',
|
||||
|
||||
// Rating 3
|
||||
'The Broker (Paperback)',
|
||||
'The Last Templar',
|
||||
'Without Blood (Paperback)',
|
||||
|
||||
// Rating 0
|
||||
'The Third Secret',
|
||||
'The Killing Kind',
|
||||
]);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user