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:
Christian Bläul
2018-02-02 12:22:23 +01:00
committed by Fonata
parent 7470d2b804
commit 75902f4a22
3 changed files with 90 additions and 0 deletions

View File

@@ -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);
}

View 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);
}
}

View 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',
]);
}
}