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