summaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/AbstractTestCase.php3
-rw-r--r--test/ControlsTest.php12
-rw-r--r--test/FactoryTest.php14
-rw-r--r--test/Plugin/ColumnConsistencyValidatorTest.php2
-rw-r--r--test/Plugin/NullValidatorTest.php2
-rw-r--r--test/Plugin/SkipNullValuesFormatterTest.php2
-rw-r--r--test/ReaderTest.php191
-rw-r--r--test/StreamFilterTest.php18
-rw-r--r--test/WriterTest.php15
-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