diff --git a/examples/basic.php b/examples/basic.php index beec5cb..66f1abc 100644 --- a/examples/basic.php +++ b/examples/basic.php @@ -1,8 +1,8 @@
assertTrue(is_string($this->csv->file_data));
$this->assertEquals($csv, $this->csv->file_data);
}
+
+ /**
+ * @runInSeparateProcess because download.php uses header()
+ *
+ * @see https://github.com/sebastianbergmann/phpunit/issues/720#issuecomment-10421092
+ */
+ public function testCodeExamples() {
+ chdir('examples');
+ foreach (glob('*.php') as $script_file) {
+ ob_start();
+ /** @noinspection PhpIncludeInspection */
+ require $script_file;
+ if ($script_file != 'download.php') {
+ $this->assertContains('', ob_get_clean());
+ }
+ }
+ }
}
diff --git a/tests/methods/ParseTest.php b/tests/methods/ParseTest.php
index d48435f..9566499 100644
--- a/tests/methods/ParseTest.php
+++ b/tests/methods/ParseTest.php
@@ -178,10 +178,10 @@ class ParseTest extends TestCase
}
public function autoQuotesDataProvider() {
- return [
- 'double-enclosure' => ['tests/methods/fixtures/auto-double-enclosure.csv', '"'],
- 'single-enclosure' => ['tests/methods/fixtures/auto-single-enclosure.csv', "'"],
- ];
+ return array(
+ array('auto-double-enclosure.csv', '"'),
+ array('auto-single-enclosure.csv', "'"),
+ );
}
/**
@@ -194,7 +194,7 @@ class ParseTest extends TestCase
*/
public function testAutoQuotes($file, $enclosure) {
$csv = new Csv();
- $csv->auto($file, true, null, null, $enclosure);
+ $csv->auto(__DIR__ . '/fixtures/' . $file, true, null, null, $enclosure);
$this->assertArrayHasKey('column1', $csv->data[0], 'Data parsed incorrectly with enclosure ' . $enclosure);
$this->assertEquals('value1', $csv->data[0]['column1'], 'Data parsed incorrectly with enclosure ' . $enclosure);
}
diff --git a/tests/properties/BaseClass.php b/tests/properties/BaseClass.php
new file mode 100644
index 0000000..a81f5c6
--- /dev/null
+++ b/tests/properties/BaseClass.php
@@ -0,0 +1,36 @@
+csv = new Csv();
+ }
+
+ 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, array_values($actual));
+ }
+}
diff --git a/tests/properties/ConditionsTest.php b/tests/properties/ConditionsTest.php
new file mode 100644
index 0000000..c68b65d
--- /dev/null
+++ b/tests/properties/ConditionsTest.php
@@ -0,0 +1,49 @@
+csv->conditions = 'author does not contain dan brown';
+
+ $this->_compareWithExpected([
+ 'The Killing Kind',
+ 'The Third Secret',
+ 'The Last Templar',
+ 'The Traveller',
+ 'Crisis Four',
+ 'Prey',
+ 'The Broker (Paperback)',
+ 'Without Blood (Paperback)',
+ 'State of Fear (Paperback)',
+ 'The Rule of Four (Paperback)',
+ ]);
+ }
+
+ public function testRating() {
+ $this->csv->conditions = 'rating < 3';
+ $this->_compareWithExpected([
+ 'The Killing Kind',
+ 'The Third Secret',
+ ]);
+
+ $this->csv->conditions = 'rating >= 5';
+ $this->_compareWithExpected([
+ 'The Traveller',
+ 'Prey',
+ 'State of Fear (Paperback)',
+ 'Digital Fortress : A Thriller (Mass Market Paperback)',
+ 'Angels & Demons (Mass Market Paperback)',
+ ]);
+ }
+
+ public function testTitleContainsSecretOrCode() {
+ $this->csv->conditions = 'title contains code OR title contains SECRET';
+
+ $this->_compareWithExpected([
+ 'The Third Secret',
+ 'The Da Vinci Code (Hardcover)',
+ ]);
+ }
+}
diff --git a/tests/properties/SortByTest.php b/tests/properties/SortByTest.php
new file mode 100644
index 0000000..58c0ef5
--- /dev/null
+++ b/tests/properties/SortByTest.php
@@ -0,0 +1,60 @@
+csv->sort_by = 'rating';
+ $this->csv->conditions = 'title does not contain Blood';
+ $this->_compareWithExpected([
+ // Rating 0
+ 'The Killing Kind',
+ 'The Third Secret',
+
+ // Rating 3
+ 'The Last Templar',
+ 'The Broker (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->conditions =
+ 'title does not contain Prey AND ' .
+ 'title does not contain Fortress AND ' .
+ 'title does not contain Blood AND ' .
+ 'title does not contain Fear';
+ $this->csv->sort_reverse = true;
+ $this->_compareWithExpected([
+
+ // Rating 5
+ 'Angels & Demons (Mass Market Paperback)',
+ 'The Traveller',
+
+ // Rating 4
+ 'The Da Vinci Code (Hardcover)',
+ 'The Rule of Four (Paperback)',
+ 'Deception Point (Paperback)',
+
+ // Rating 3
+ 'The Broker (Paperback)',
+ 'The Last Templar',
+
+ // Rating 0
+ 'The Third Secret',
+ 'The Killing Kind',
+ ]);
+ }
+}