diff --git a/src/enums/DatatypeEnum.php b/src/enums/DatatypeEnum.php index 45c7f5d..83ad1bc 100644 --- a/src/enums/DatatypeEnum.php +++ b/src/enums/DatatypeEnum.php @@ -66,9 +66,9 @@ class DatatypeEnum return $type; } } - - return self::__DEFAULT; } + + return self::__DEFAULT; } /** diff --git a/src/extensions/DatatypeTrait.php b/src/extensions/DatatypeTrait.php index 6ffd9e2..37012f1 100644 --- a/src/extensions/DatatypeTrait.php +++ b/src/extensions/DatatypeTrait.php @@ -23,7 +23,11 @@ trait DatatypeTrait { * @return string|false */ private function getMostFrequentDataypeForColumn($datatypes) { - array_filter($datatypes); + array_filter($datatypes); + + if (empty($datatypes)){ + return false; + } // workaround because array_count_values($datatypes) does not work anymore :-( foreach ($datatypes as $type) { diff --git a/tests/methods/DatatypeTest.php b/tests/methods/DatatypeTest.php new file mode 100644 index 0000000..35c7f9e --- /dev/null +++ b/tests/methods/DatatypeTest.php @@ -0,0 +1,69 @@ +assertEquals(DatatypeEnum::TYPE_INT, DatatypeEnum::getValidTypeFromSample('1')); + $this->assertEquals(DatatypeEnum::TYPE_INT, DatatypeEnum::getValidTypeFromSample('+1')); + $this->assertEquals(DatatypeEnum::TYPE_INT, DatatypeEnum::getValidTypeFromSample('-1')); + $this->assertNotEquals(DatatypeEnum::TYPE_INT, DatatypeEnum::getValidTypeFromSample('--1')); + $this->assertNotEquals(DatatypeEnum::TYPE_INT, DatatypeEnum::getValidTypeFromSample('test')); + $this->assertNotEquals(DatatypeEnum::TYPE_INT, DatatypeEnum::getValidTypeFromSample('1.0')); + $this->assertNotEquals(DatatypeEnum::TYPE_INT, DatatypeEnum::getValidTypeFromSample('1,0')); + $this->assertNotEquals(DatatypeEnum::TYPE_INT, DatatypeEnum::getValidTypeFromSample('1,1')); + $this->assertNotEquals(DatatypeEnum::TYPE_INT, DatatypeEnum::getValidTypeFromSample('0.1')); + $this->assertNotEquals(DatatypeEnum::TYPE_INT, DatatypeEnum::getValidTypeFromSample('true')); + $this->assertNotEquals(DatatypeEnum::TYPE_INT, DatatypeEnum::getValidTypeFromSample('2018-02-19')); + } + + public function testSampleIsValidBool(){ + $this->assertEquals(DatatypeEnum::TYPE_BOOL, DatatypeEnum::getValidTypeFromSample('true')); + $this->assertEquals(DatatypeEnum::TYPE_BOOL, DatatypeEnum::getValidTypeFromSample('TRUE')); + $this->assertEquals(DatatypeEnum::TYPE_BOOL, DatatypeEnum::getValidTypeFromSample('false')); + $this->assertEquals(DatatypeEnum::TYPE_BOOL, DatatypeEnum::getValidTypeFromSample('FALSE')); + $this->assertNotEquals(DatatypeEnum::TYPE_BOOL, DatatypeEnum::getValidTypeFromSample('FALS')); + $this->assertNotEquals(DatatypeEnum::TYPE_BOOL, DatatypeEnum::getValidTypeFromSample('test')); + $this->assertNotEquals(DatatypeEnum::TYPE_BOOL, DatatypeEnum::getValidTypeFromSample('0')); + $this->assertNotEquals(DatatypeEnum::TYPE_BOOL, DatatypeEnum::getValidTypeFromSample('1')); + $this->assertNotEquals(DatatypeEnum::TYPE_BOOL, DatatypeEnum::getValidTypeFromSample('0.1')); + } + + public function testSampleIsValidFloat(){ + $this->assertEquals(DatatypeEnum::TYPE_FLOAT, DatatypeEnum::getValidTypeFromSample('1.0')); + $this->assertEquals(DatatypeEnum::TYPE_FLOAT, DatatypeEnum::getValidTypeFromSample('-1.1')); + $this->assertEquals(DatatypeEnum::TYPE_FLOAT, DatatypeEnum::getValidTypeFromSample('+1,1')); + $this->assertEquals(DatatypeEnum::TYPE_FLOAT, DatatypeEnum::getValidTypeFromSample('1,1')); + $this->assertEquals(DatatypeEnum::TYPE_FLOAT, DatatypeEnum::getValidTypeFromSample('1,1')); + $this->assertEquals(DatatypeEnum::TYPE_FLOAT, DatatypeEnum::getValidTypeFromSample('1e-03')); + $this->assertEquals(DatatypeEnum::TYPE_FLOAT, DatatypeEnum::getValidTypeFromSample('1e+03')); + $this->assertNotEquals(DatatypeEnum::TYPE_FLOAT, DatatypeEnum::getValidTypeFromSample('1')); + $this->assertNotEquals(DatatypeEnum::TYPE_FLOAT, DatatypeEnum::getValidTypeFromSample('test')); + $this->assertNotEquals(DatatypeEnum::TYPE_FLOAT, DatatypeEnum::getValidTypeFromSample('1,,1')); + $this->assertNotEquals(DatatypeEnum::TYPE_FLOAT, DatatypeEnum::getValidTypeFromSample('1..1')); + $this->assertNotEquals(DatatypeEnum::TYPE_FLOAT, DatatypeEnum::getValidTypeFromSample('2018-02-19')); + } + + public function testSampleIsValidDate(){ + $this->assertEquals(DatatypeEnum::TYPE_DATE, DatatypeEnum::getValidTypeFromSample('2018-02-19')); + $this->assertEquals(DatatypeEnum::TYPE_DATE, DatatypeEnum::getValidTypeFromSample('18-2-19')); + $this->assertEquals(DatatypeEnum::TYPE_DATE, DatatypeEnum::getValidTypeFromSample('01.02.2018')); + $this->assertEquals(DatatypeEnum::TYPE_DATE, DatatypeEnum::getValidTypeFromSample('1.2.18')); + $this->assertEquals(DatatypeEnum::TYPE_DATE, DatatypeEnum::getValidTypeFromSample('07/31/2018')); + $this->assertNotEquals(DatatypeEnum::TYPE_DATE, DatatypeEnum::getValidTypeFromSample('31/07/2018')); + $this->assertNotEquals(DatatypeEnum::TYPE_DATE, DatatypeEnum::getValidTypeFromSample('1-2')); + $this->assertEquals(DatatypeEnum::TYPE_DATE, DatatypeEnum::getValidTypeFromSample('1.2.')); + $this->assertNotEquals(DatatypeEnum::TYPE_DATE, DatatypeEnum::getValidTypeFromSample('test')); + } + +} diff --git a/tests/methods/ParseTest.php b/tests/methods/ParseTest.php index 2ea3f2e..07eb3b7 100644 --- a/tests/methods/ParseTest.php +++ b/tests/methods/ParseTest.php @@ -2,7 +2,7 @@ namespace ParseCsv\tests\methods; use ParseCsv\Csv; -use PHPUnit_Framework_TestCase as TestCase; +use PHPUnit\Framework\TestCase; class ParseTest extends TestCase { diff --git a/tests/methods/SaveTest.php b/tests/methods/SaveTest.php index 0918b69..6e43b97 100644 --- a/tests/methods/SaveTest.php +++ b/tests/methods/SaveTest.php @@ -2,7 +2,7 @@ namespace ParseCsv\tests\methods; use ParseCsv\Csv; -use PHPUnit_Framework_TestCase as TestCase; +use PHPUnit\Framework\TestCase; class SaveTest extends TestCase { diff --git a/tests/methods/fixtures/datatype.csv b/tests/methods/fixtures/datatype.csv index 83e6019..d5d848a 100644 --- a/tests/methods/fixtures/datatype.csv +++ b/tests/methods/fixtures/datatype.csv @@ -1,5 +1,5 @@ sep=; title;isbn;publishedAt;published;count;price Красивая кулинария;5454-5587-3210;21.05.2011;true;1;10.99 -The Wine Connoisseurs;2547-8548-2541;12.12.2011;TRUE;;20,33 +The Wine Connoisseurs;2547-8548-2541;12.12.2011;TRUE;;20.33 Weißwein;1313-4545-8875;23.02.2012;false;10;10