diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/AbstractTestCase.php | 3 | ||||
-rw-r--r-- | test/ControlsTest.php | 12 | ||||
-rw-r--r-- | test/FactoryTest.php | 14 | ||||
-rw-r--r-- | test/Plugin/ColumnConsistencyValidatorTest.php | 2 | ||||
-rw-r--r-- | test/Plugin/NullValidatorTest.php | 2 | ||||
-rw-r--r-- | test/Plugin/SkipNullValuesFormatterTest.php | 2 | ||||
-rw-r--r-- | test/ReaderTest.php | 191 | ||||
-rw-r--r-- | test/StreamFilterTest.php | 18 | ||||
-rw-r--r-- | test/WriterTest.php | 15 | ||||
-rw-r--r-- | test/data/foo.csv (renamed from test/foo.csv) | 0 | ||||
-rw-r--r-- | test/data/newline.csv (renamed from test/newline.csv) | 0 |
11 files changed, 177 insertions, 82 deletions
diff --git a/test/AbstractTestCase.php b/test/AbstractTestCase.php index a8280b7..9466650 100644 --- a/test/AbstractTestCase.php +++ b/test/AbstractTestCase.php @@ -4,9 +4,6 @@ namespace League\Csv\Test; use PHPUnit_Framework_TestCase; -/** - * @group controls - */ class AbstractTestCase extends PHPUnit_Framework_TestCase { protected function checkRequirements() diff --git a/test/ControlsTest.php b/test/ControlsTest.php index 4eebed7..f80364a 100644 --- a/test/ControlsTest.php +++ b/test/ControlsTest.php @@ -7,8 +7,6 @@ use League\Csv\Writer; use SplFileObject; use SplTempFileObject; -date_default_timezone_set('UTC'); - /** * @group controls */ @@ -93,7 +91,7 @@ class ControlsTest extends AbstractTestCase public function testDetectDelimiterList() { - $this->assertSame([4 => ','], $this->csv->detectDelimiterList()); + $this->assertSame([',' => 4], $this->csv->fetchDelimitersOccurrence([','])); } /** @@ -102,7 +100,7 @@ class ControlsTest extends AbstractTestCase */ public function testDetectDelimiterListWithInvalidRowLimit() { - $this->csv->detectDelimiterList(-4); + $this->csv->fetchDelimitersOccurrence([','], -4); } public function testDetectDelimiterListWithNoCSV() @@ -110,7 +108,7 @@ class ControlsTest extends AbstractTestCase $file = new SplTempFileObject(); $file->fwrite("How are you today ?\nI'm doing fine thanks!"); $csv = Writer::createFromFileObject($file); - $this->assertSame([], $csv->detectDelimiterList(5, ['toto', '|'])); + $this->assertSame(['|' => 0], $csv->fetchDelimitersOccurrence(['toto', '|'], 5)); } public function testDetectDelimiterListWithInconsistentCSV() @@ -124,7 +122,7 @@ class ControlsTest extends AbstractTestCase $data->fputcsv(['toto', 'tata', 'tutu']); $csv = Writer::createFromFileObject($data); - $this->assertSame([12 => '|', 4 => ';'], $csv->detectDelimiterList(5, ['|'])); + $this->assertSame(['|' => 12, ';' => 4], $csv->fetchDelimitersOccurrence(['|', ';'], 5)); } /** @@ -197,7 +195,7 @@ class ControlsTest extends AbstractTestCase public function testAppliedFlags($flag, $line_count) { $path = __DIR__.'/data/tmp.txt'; - $obj = new SplFileObject($path, 'w+'); + $obj = new SplFileObject($path, 'w+'); $obj->fwrite("1st\n2nd\n"); $reader = Reader::createFromFileObject($obj); $reader->setFlags($flag); diff --git a/test/FactoryTest.php b/test/FactoryTest.php index e35b402..f696176 100644 --- a/test/FactoryTest.php +++ b/test/FactoryTest.php @@ -2,7 +2,7 @@ namespace League\Csv\Test; -use DateTime; +use ArrayIterator; use League\Csv\Reader; use SplFileInfo; use SplFileObject; @@ -15,21 +15,21 @@ class FactoryTest extends AbstractTestCase { public function testCreateFromPathWithFilePath() { - $path = __DIR__.'/foo.csv'; + $path = __DIR__.'/data/foo.csv'; $csv = Reader::createFromPath($path); $this->assertSame($path, $csv->getIterator()->getRealPath()); } public function testCreateFromPathWithSplFileInfo() { - $path = __DIR__.'/foo.csv'; + $path = __DIR__.'/data/foo.csv'; $csv = Reader::createFromPath(new SplFileInfo($path)); $this->assertSame($path, $csv->getIterator()->getRealPath()); } public function testCreateFromPathWithPHPWrapper() { - $path = __DIR__.'/foo.csv'; + $path = __DIR__.'/data/foo.csv'; $csv = Reader::createFromPath('php://filter/read=string.toupper/resource='.$path); $this->assertFalse($csv->getIterator()->getRealPath()); } @@ -45,9 +45,9 @@ class FactoryTest extends AbstractTestCase /** * @expectedException InvalidArgumentException */ - public function testCreateFromPathWithUnStringableObject() + public function testCreateFromPathWithInvalidObject() { - Reader::createFromPath(new DateTime()); + Reader::createFromPath(new ArrayIterator([])); } public function testCreateFromString() @@ -67,7 +67,7 @@ class FactoryTest extends AbstractTestCase public function testCreateFromFileObjectWithSplFileObject() { - $path = __DIR__.'/foo.csv'; + $path = __DIR__.'/data/foo.csv'; $obj = new SplFileObject($path); $reader = Reader::createFromFileObject($obj); $this->assertInstanceof('League\Csv\Reader', $reader); diff --git a/test/Plugin/ColumnConsistencyValidatorTest.php b/test/Plugin/ColumnConsistencyValidatorTest.php index 43f023a..e49e770 100644 --- a/test/Plugin/ColumnConsistencyValidatorTest.php +++ b/test/Plugin/ColumnConsistencyValidatorTest.php @@ -22,7 +22,7 @@ class ColumnConsistencyValidatorTest extends AbstractTestCase public function tearDown() { - $csv = new SplFileObject(dirname(__DIR__).'/foo.csv', 'w'); + $csv = new SplFileObject(dirname(__DIR__).'/data/foo.csv', 'w'); $csv->setCsvControl(); $csv->fputcsv(['john', 'doe', 'john.doe@example.com'], ',', '"'); $this->csv = null; diff --git a/test/Plugin/NullValidatorTest.php b/test/Plugin/NullValidatorTest.php index 6e351ce..c4114ad 100644 --- a/test/Plugin/NullValidatorTest.php +++ b/test/Plugin/NullValidatorTest.php @@ -23,7 +23,7 @@ class NullValidatorTest extends AbstractTestCase public function tearDown() { - $csv = new SplFileObject(dirname(__DIR__).'/foo.csv', 'w'); + $csv = new SplFileObject(dirname(__DIR__).'/data/foo.csv', 'w'); $csv->setCsvControl(); $csv->fputcsv(['john', 'doe', 'john.doe@example.com'], ',', '"'); $this->csv = null; diff --git a/test/Plugin/SkipNullValuesFormatterTest.php b/test/Plugin/SkipNullValuesFormatterTest.php index 8f203da..3e0787e 100644 --- a/test/Plugin/SkipNullValuesFormatterTest.php +++ b/test/Plugin/SkipNullValuesFormatterTest.php @@ -23,7 +23,7 @@ class SkipNullValuesFormatterTest extends AbstractTestCase public function tearDown() { - $csv = new SplFileObject(dirname(__DIR__).'/foo.csv', 'w'); + $csv = new SplFileObject(dirname(__DIR__).'/data/foo.csv', 'w'); $csv->setCsvControl(); $csv->fputcsv(['john', 'doe', 'john.doe@example.com'], ',', '"'); $this->csv = null; diff --git a/test/ReaderTest.php b/test/ReaderTest.php index d650c51..9a0c630 100644 --- a/test/ReaderTest.php +++ b/test/ReaderTest.php @@ -3,6 +3,7 @@ namespace League\Csv\Test; use League\Csv\Reader; +use League\Csv\Writer; use SplTempFileObject; /** @@ -151,10 +152,21 @@ class ReaderTest extends AbstractTestCase $this->assertContains(['JANE', 'DOE', 'JANE.DOE@EXAMPLE.COM'], $res); } - public function testFetchAssoc() + public function testFetchAssocReturnsArray() { $keys = ['firstname', 'lastname', 'email']; $res = $this->csv->fetchAssoc($keys); + $this->assertInternalType('array', $res); + foreach ($res as $offset => $row) { + $this->assertSame($keys, array_keys($row)); + } + } + + public function testFetchAssocReturnsIterator() + { + $keys = ['firstname', 'lastname', 'email']; + $res = $this->csv->setReturnType(Reader::TYPE_ITERATOR)->fetchAssoc($keys); + $this->assertInstanceof('\Iterator', $res); foreach ($res as $offset => $row) { $this->assertSame($keys, array_keys($row)); } @@ -216,15 +228,6 @@ class ReaderTest extends AbstractTestCase } /** - * @expectedException \InvalidArgumentException - */ - public function testFetchAssocThrowsExceptionWithNonUniqueAssocKeys() - { - $keys = ['firstname', 'lastname', 'firstname']; - $this->csv->fetchAssoc($keys); - } - - /** * @param $expected * @dataProvider validBOMSequences */ @@ -364,21 +367,19 @@ class ReaderTest extends AbstractTestCase ]; } - public function testFetchCol() + public function testFetchColumn() { - $this->csv->addFilter(function ($row) { - return $row != [null]; - - }); - $this->assertSame(['john', 'jane'], $this->csv->fetchColumn(0)); - $this->csv->addFilter(function ($row) { - return $row != [null]; + $this->assertContains('john', $this->csv->fetchColumn(0)); + $this->assertContains('jane', $this->csv->fetchColumn()); + } - }); - $this->assertSame(['john', 'jane'], $this->csv->fetchColumn()); + public function testFetchColumnReturnsIterator() + { + $this->assertContains('john', $this->csv->setReturnType(Reader::TYPE_ITERATOR)->fetchColumn(0)); + $this->assertContains('jane', $this->csv->setReturnType(Reader::TYPE_ITERATOR)->fetchColumn()); } - public function testFetchColInconsistentColumnCSV() + public function testFetchColumnInconsistentColumnCSV() { $raw = [ ['john', 'doe'], @@ -390,16 +391,11 @@ class ReaderTest extends AbstractTestCase $file->fputcsv($row); } $csv = Reader::createFromFileObject($file); - $this->csv->addFilter(function ($row) { - return $row != [null]; - - }); $res = $csv->fetchColumn(2); - $this->assertInternalType('array', $res); $this->assertCount(1, $res); } - public function testFetchColEmptyCol() + public function testFetchColumnEmptyCol() { $raw = [ ['john', 'doe'], @@ -412,31 +408,23 @@ class ReaderTest extends AbstractTestCase } $csv = Reader::createFromFileObject($file); $res = $csv->fetchColumn(2); - $this->csv->addFilter(function ($row) { - return $row != [null]; - - }); - $this->assertInternalType('array', $res); $this->assertCount(0, $res); } - public function testFetchColCallback() + public function testFetchColumnCallback() { $func = function ($value) { - return array_map('strtoupper', $value); + return strtoupper($value); }; - $this->csv->addFilter(function ($row) { - return $row != [null]; - - }); - $this->assertSame(['JOHN', 'JANE'], $this->csv->fetchColumn(0, $func)); + $iterator = $this->csv->fetchColumn(0, $func); + $this->assertSame(['JOHN', 'JANE'], $iterator); } /** * @expectedException \InvalidArgumentException */ - public function testFetchColFailure() + public function testFetchColumnFailure() { $this->csv->fetchColumn('toto'); } @@ -482,6 +470,127 @@ class ReaderTest extends AbstractTestCase public function testGetWriter() { - $this->assertInstanceOf('\League\Csv\Writer', $this->csv->newWriter()); + $this->assertInstanceOf(Writer::class, $this->csv->newWriter()); + } + + /** + * @dataProvider fetchPairsDataProvider + */ + public function testFetchPairsIteratorMode($key, $value, $callable, $expected) + { + $iterator = $this->csv->setReturnType(Reader::TYPE_ITERATOR)->fetchPairs($key, $value, $callable); + foreach ($iterator as $key => $value) { + $res = current($expected); + $this->assertSame($value, $res[$key]); + next($expected); + } + } + + public function fetchPairsDataProvider() + { + return [ + 'default values' => [ + 'key' => 0, + 'value' => 1, + 'callable' => null, + 'expected' => [ + ['john' => 'doe'], + ['jane' => 'doe'], + ], + ], + 'changed key order' => [ + 'key' => 1, + 'value' => 0, + 'callable' => null, + 'expected' => [ + ['doe' => 'john'], + ['doe' => 'jane'], + ], + ], + 'with callback' => [ + 'key' => 0, + 'value' => 1, + 'callable' => function ($row) { + return [ + strtoupper($row[0]), + strtoupper($row[1]), + ]; + }, + 'expected' => [ + ['JOHN' => 'DOE'], + ['JANE' => 'DOE'], + ], + ], + ]; + } + + /** + * @dataProvider fetchPairsArrayDataProvider + */ + public function testFetchPairsArrayMode($key, $value, $callable, $expected) + { + $array = $this->csv->fetchPairs($key, $value, $callable); + $this->assertSame($expected, $array); + } + + public function fetchPairsArrayDataProvider() + { + return [ + 'default values' => [ + 'key' => 0, + 'value' => 1, + 'callable' => null, + 'expected' => ['john' => 'doe', 'jane' => 'doe'], + ], + 'changed key order' => [ + 'key' => 1, + 'value' => 0, + 'callable' => null, + 'expected' => ['doe' => 'jane'], + ], + 'with callback' => [ + 'key' => 0, + 'value' => 1, + 'callable' => function ($row) { + return [ + strtoupper($row[0]), + strtoupper($row[1]), + ]; + }, + 'expected' => ['JOHN' => 'DOE', 'JANE' => 'DOE'], + ], + ]; + } + + /** + * @expectedException \UnexpectedValueException + */ + public function testReturnTypeThrowsException() + { + $this->csv->setReturnType('toto'); + } + + /** + * @dataProvider readerReturnTypeProvider + */ + public function testReturnTypeResetBetweenCallToArray($method, array $args = []) + { + $this->assertSame(Reader::TYPE_ARRAY, $this->csv->getReturnType()); + $this->csv->setReturnType(Reader::TYPE_ITERATOR); + call_user_func_array([$this->csv, $method], $args); + $this->assertSame(Reader::TYPE_ARRAY, $this->csv->getReturnType()); + } + + public function readerReturnTypeProvider() + { + return [ + ['fetch'], + ['fetchOne'], + ['fetchAll'], + ['fetchColumn'], + ['fetchPairs'], + ['fetchAssoc'], + ['each', [function (array $row) { return true; }]], + ]; } } diff --git a/test/StreamFilterTest.php b/test/StreamFilterTest.php index 7bb8a7b..fe81c48 100644 --- a/test/StreamFilterTest.php +++ b/test/StreamFilterTest.php @@ -15,7 +15,7 @@ class StreamFilterTest extends AbstractTestCase { public function testInitStreamFilterWithWriterStream() { - $filter = 'php://filter/write=string.rot13/resource='.__DIR__.'/foo.csv'; + $filter = 'php://filter/write=string.rot13/resource='.__DIR__.'/data/foo.csv'; $csv = Reader::createFromPath($filter); $this->assertTrue($csv->hasStreamFilter('string.rot13')); $this->assertSame(STREAM_FILTER_WRITE, $csv->getStreamFilterMode()); @@ -23,7 +23,7 @@ class StreamFilterTest extends AbstractTestCase public function testInitStreamFilterWithReaderStream() { - $filter = 'php://filter/read=string.toupper/resource='.__DIR__.'/foo.csv'; + $filter = 'php://filter/read=string.toupper/resource='.__DIR__.'/data/foo.csv'; $csv = Reader::createFromPath($filter); $this->assertTrue($csv->hasStreamFilter('string.toupper')); $this->assertSame(STREAM_FILTER_READ, $csv->getStreamFilterMode()); @@ -31,7 +31,7 @@ class StreamFilterTest extends AbstractTestCase public function testInitStreamFilterWithBothStream() { - $filter = 'php://filter/string.toupper/resource='.__DIR__.'/foo.csv'; + $filter = 'php://filter/string.toupper/resource='.__DIR__.'/data/foo.csv'; $csv = Reader::createFromPath($filter); $this->assertTrue($csv->hasStreamFilter('string.toupper')); $this->assertSame(STREAM_FILTER_ALL, $csv->getStreamFilterMode()); @@ -42,12 +42,12 @@ class StreamFilterTest extends AbstractTestCase */ public function testInitStreamFilterWithSplFileObject() { - Reader::createFromFileObject(new SplFileObject(__DIR__.'/foo.csv'))->getStreamFilterMode(); + Reader::createFromFileObject(new SplFileObject(__DIR__.'/data/foo.csv'))->getStreamFilterMode(); } public function testappendStreamFilter() { - $csv = Reader::createFromPath(__DIR__.'/foo.csv'); + $csv = Reader::createFromPath(__DIR__.'/data/foo.csv'); $csv->appendStreamFilter('string.toupper'); foreach ($csv->getIterator() as $row) { $this->assertSame($row, ['JOHN', 'DOE', 'JOHN.DOE@EXAMPLE.COM']); @@ -79,7 +79,7 @@ class StreamFilterTest extends AbstractTestCase */ public function testaddMultipleStreamFilter() { - $csv = Reader::createFromPath(__DIR__.'/foo.csv'); + $csv = Reader::createFromPath(__DIR__.'/data/foo.csv'); $csv->appendStreamFilter('string.tolower'); $csv->prependStreamFilter('string.rot13'); $csv->appendStreamFilter('string.toupper'); @@ -105,7 +105,7 @@ class StreamFilterTest extends AbstractTestCase public function testGetFilterPath() { - $csv = Writer::createFromPath(__DIR__.'/foo.csv'); + $csv = Writer::createFromPath(__DIR__.'/data/foo.csv'); $csv->appendStreamFilter('string.rot13'); $csv->prependStreamFilter('string.toupper'); $this->assertFalse($csv->getIterator()->getRealPath()); @@ -113,7 +113,7 @@ class StreamFilterTest extends AbstractTestCase public function testGetFilterPathWithAllStream() { - $filter = 'php://filter/string.toupper/resource='.__DIR__.'/foo.csv'; + $filter = 'php://filter/string.toupper/resource='.__DIR__.'/data/foo.csv'; $csv = Reader::createFromPath($filter); $this->assertFalse($csv->getIterator()->getRealPath()); } @@ -121,7 +121,7 @@ class StreamFilterTest extends AbstractTestCase public function testSetStreamFilterWriterNewLine() { stream_filter_register(FilterReplace::FILTER_NAME.'*', '\lib\FilterReplace'); - $csv = Writer::createFromPath(__DIR__.'/newline.csv'); + $csv = Writer::createFromPath(__DIR__.'/data/newline.csv'); $csv->appendStreamFilter(FilterReplace::FILTER_NAME."\r\n:\n"); $this->assertTrue($csv->hasStreamFilter(FilterReplace::FILTER_NAME."\r\n:\n")); $csv->insertOne([1, 'two', 3, "new\r\nline"]); diff --git a/test/WriterTest.php b/test/WriterTest.php index 7ba1ef4..d21a9a6 100644 --- a/test/WriterTest.php +++ b/test/WriterTest.php @@ -21,7 +21,7 @@ class WriterTest extends AbstractTestCase public function tearDown() { - $csv = new SplFileObject(__DIR__.'/foo.csv', 'w'); + $csv = new SplFileObject(__DIR__.'/data/foo.csv', 'w'); $csv->setCsvControl(); $csv->fputcsv(['john', 'doe', 'john.doe@example.com'], ',', '"'); $this->csv = null; @@ -29,7 +29,7 @@ class WriterTest extends AbstractTestCase public function testSupportsStreamFilter() { - $csv = Writer::createFromPath(__DIR__.'/foo.csv'); + $csv = Writer::createFromPath(__DIR__.'/data/foo.csv'); $this->assertTrue($csv->isActiveStreamFilter()); $csv->appendStreamFilter('string.toupper'); $csv->insertOne(['jane', 'doe', 'jane@example.com']); @@ -51,7 +51,7 @@ class WriterTest extends AbstractTestCase public function testInsertNormalFile() { - $csv = Writer::createFromPath(__DIR__.'/foo.csv', 'a+'); + $csv = Writer::createFromPath(__DIR__.'/data/foo.csv', 'a+'); $csv->insertOne(['jane', 'doe', 'jane.doe@example.com']); $this->assertContains(['jane', 'doe', 'jane.doe@example.com'], $csv); } @@ -112,15 +112,6 @@ class WriterTest extends AbstractTestCase $this->assertSame("jane,doe\r\n", (string) $csv); } - public function testCustomNewlineFromCreateFromString() - { - $expected = "\r\n"; - $raw = 'john,doe,john.doe@example.com'.PHP_EOL - .'jane,doe,jane.doe@example.com'.PHP_EOL; - $csv = Writer::createFromString($raw, $expected); - $this->assertSame($expected, $csv->getNewline()); - } - public function testAddValidationRules() { $func = function (array $row) { diff --git a/test/foo.csv b/test/data/foo.csv index 2f6d89f..2f6d89f 100644 --- a/test/foo.csv +++ b/test/data/foo.csv diff --git a/test/newline.csv b/test/data/newline.csv index a9da13c..a9da13c 100644 --- a/test/newline.csv +++ b/test/data/newline.csv |