mirror of
https://github.com/parsecsv/parsecsv-for-php.git
synced 2026-02-19 08:36:39 +00:00
Merge pull request #180 from parsecsv/more-conditions-bu
Bugfix for verbal conditions
This commit is contained in:
@@ -1,3 +1,4 @@
|
|||||||
|
dist: trusty
|
||||||
language: php
|
language: php
|
||||||
dist: trusty
|
dist: trusty
|
||||||
|
|
||||||
|
|||||||
14
src/Csv.php
14
src/Csv.php
@@ -1054,8 +1054,20 @@ class Csv {
|
|||||||
|
|
||||||
if (preg_match('/^(.+) (' . $operators_regex . ') (.+)$/i', trim($condition), $capture)) {
|
if (preg_match('/^(.+) (' . $operators_regex . ') (.+)$/i', trim($condition), $capture)) {
|
||||||
$field = $capture[1];
|
$field = $capture[1];
|
||||||
$op = $capture[2];
|
$op = strtolower($capture[2]);
|
||||||
$value = $capture[3];
|
$value = $capture[3];
|
||||||
|
if ($op == 'equals' && preg_match('/^(.+) is (less|greater) than or$/i', $field, $m)) {
|
||||||
|
$field = $m[1];
|
||||||
|
$op = $m[2] == 'less' ? '<=' : '>=';
|
||||||
|
}
|
||||||
|
if ($op == 'is' && preg_match('/^(less|greater) than (.+)$/i', $value, $m)) {
|
||||||
|
$value = $m[2];
|
||||||
|
$op = $m[1] == 'less' ? '<' : '>';
|
||||||
|
}
|
||||||
|
if ($op == 'is' && preg_match('/^not (.+)$/i', $value, $m)) {
|
||||||
|
$value = $m[1];
|
||||||
|
$op = '!=';
|
||||||
|
}
|
||||||
|
|
||||||
if (preg_match('/^([\'"])(.*)([\'"])$/', $value, $capture) && $capture[1] == $capture[3]) {
|
if (preg_match('/^([\'"])(.*)([\'"])$/', $value, $capture) && $capture[1] == $capture[3]) {
|
||||||
$value = strtr($capture[2], array(
|
$value = strtr($capture[2], array(
|
||||||
|
|||||||
@@ -21,21 +21,93 @@ class ConditionsTest extends BaseClass {
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testRating() {
|
public function testRatingEquals() {
|
||||||
$this->csv->conditions = 'rating < 3';
|
$rating_of_3 = [
|
||||||
$this->_compareWithExpected([
|
'The Last Templar',
|
||||||
|
'The Broker (Paperback)',
|
||||||
|
'Without Blood (Paperback)',
|
||||||
|
];
|
||||||
|
$this->csv->conditions = 'rating = 3';
|
||||||
|
$this->_compareWithExpected($rating_of_3);
|
||||||
|
$this->csv->conditions = 'rating is 3';
|
||||||
|
$this->_compareWithExpected($rating_of_3);
|
||||||
|
$this->csv->conditions = 'rating equals 3';
|
||||||
|
$this->_compareWithExpected($rating_of_3);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testRatingNotEquals() {
|
||||||
|
$rating_not_4 = [
|
||||||
'The Killing Kind',
|
'The Killing Kind',
|
||||||
'The Third Secret',
|
'The Third Secret',
|
||||||
]);
|
'The Last Templar',
|
||||||
|
'The Traveller',
|
||||||
|
'Prey',
|
||||||
|
'The Broker (Paperback)',
|
||||||
|
'Without Blood (Paperback)',
|
||||||
|
'State of Fear (Paperback)',
|
||||||
|
'Digital Fortress : A Thriller (Mass Market Paperback)',
|
||||||
|
'Angels & Demons (Mass Market Paperback)',
|
||||||
|
];
|
||||||
|
// $this->csv->conditions = 'rating != 4';
|
||||||
|
// $this->_compareWithExpected($rating_not_4);
|
||||||
|
$this->csv->conditions = 'rating is not 4';
|
||||||
|
$this->_compareWithExpected($rating_not_4);
|
||||||
|
// $this->csv->conditions = 'rating does not contain 4';
|
||||||
|
// $this->_compareWithExpected($rating_not_4);
|
||||||
|
}
|
||||||
|
|
||||||
$this->csv->conditions = 'rating >= 5';
|
public function testRatingLessThan() {
|
||||||
$this->_compareWithExpected([
|
$less_than_1 = [
|
||||||
|
'The Killing Kind',
|
||||||
|
'The Third Secret',
|
||||||
|
];
|
||||||
|
$this->csv->conditions = 'rating < 1';
|
||||||
|
$this->_compareWithExpected($less_than_1);
|
||||||
|
$this->csv->conditions = 'rating is less than 1';
|
||||||
|
$this->_compareWithExpected($less_than_1);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testRatingLessOrEquals() {
|
||||||
|
$less_or_equals_1 = [
|
||||||
|
'The Killing Kind',
|
||||||
|
'The Third Secret',
|
||||||
|
];
|
||||||
|
$this->csv->conditions = 'rating <= 1';
|
||||||
|
$this->_compareWithExpected($less_or_equals_1);
|
||||||
|
$this->csv->conditions = 'rating is less than or equals 1';
|
||||||
|
$this->_compareWithExpected($less_or_equals_1);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testRatingGreaterThan() {
|
||||||
|
$greater_4 = [
|
||||||
'The Traveller',
|
'The Traveller',
|
||||||
'Prey',
|
'Prey',
|
||||||
'State of Fear (Paperback)',
|
'State of Fear (Paperback)',
|
||||||
'Digital Fortress : A Thriller (Mass Market Paperback)',
|
'Digital Fortress : A Thriller (Mass Market Paperback)',
|
||||||
'Angels & Demons (Mass Market Paperback)',
|
'Angels & Demons (Mass Market Paperback)',
|
||||||
]);
|
];
|
||||||
|
$this->csv->conditions = 'rating > 4';
|
||||||
|
$this->_compareWithExpected($greater_4);
|
||||||
|
$this->csv->conditions = 'rating is greater than 4';
|
||||||
|
$this->_compareWithExpected($greater_4);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testRatingGreaterOrEquals() {
|
||||||
|
$greater_or_equal_4 = [
|
||||||
|
'The Traveller',
|
||||||
|
'Crisis Four',
|
||||||
|
'Prey',
|
||||||
|
'State of Fear (Paperback)',
|
||||||
|
'The Rule of Four (Paperback)',
|
||||||
|
'Deception Point (Paperback)',
|
||||||
|
'Digital Fortress : A Thriller (Mass Market Paperback)',
|
||||||
|
'Angels & Demons (Mass Market Paperback)',
|
||||||
|
'The Da Vinci Code (Hardcover)',
|
||||||
|
];
|
||||||
|
$this->csv->conditions = 'rating >= 4';
|
||||||
|
$this->_compareWithExpected($greater_or_equal_4);
|
||||||
|
$this->csv->conditions = 'rating is greater than or equals 4';
|
||||||
|
$this->_compareWithExpected($greater_or_equal_4);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testTitleContainsSecretOrCode() {
|
public function testTitleContainsSecretOrCode() {
|
||||||
|
|||||||
Reference in New Issue
Block a user