diff --git a/.travis.yml b/.travis.yml index 74ff91c..43e4d04 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,12 +7,16 @@ php: - 7.3 - 7.4 -before_script: +env: + global: + - XDEBUG_MODE=coverage + +before_script: - composer install - curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter - chmod +x ./cc-test-reporter - export GIT_COMMIT_SHA=$TRAVIS_COMMIT - - export GIT_BRANCH=$TRAVIS_BRANCH + - export GIT_BRANCH=$TRAVIS_BRANCH - ./cc-test-reporter before-build script: @@ -22,6 +26,6 @@ after_success: - ./cc-test-reporter after-build --exit-code 0 --debug notifications: - email: false + email: false slack: secure: WVnUU0fkZS75md3mm7B08SxhP3HDeHbJ8GTPR1DUVjK3MHAmKeSah/plNNxn9I/TdlXnHzQO5WBN33nUq0ODGGT4WFzFa66YTX2tb+bNSmewBOv82hEoITTI1PI9SLq0WNtcamHWCM3Rt1XtiZb3DQk/OcUfiWrrn74q4PPX+VY= diff --git a/src/CsvReader.php b/src/CsvReader.php index eb411ef..806ea33 100644 --- a/src/CsvReader.php +++ b/src/CsvReader.php @@ -58,7 +58,7 @@ public function __construct( $this->validateLineBreak(); rewind($this->filePointer); - $this->header = $this->readLine(); + $this->header = UTF8BOMHelper::detectAndRemoveBOM($this->readLine()); $this->rewind(); } diff --git a/src/UTF8BOMHelper.php b/src/UTF8BOMHelper.php new file mode 100644 index 0000000..2f2d5c3 --- /dev/null +++ b/src/UTF8BOMHelper.php @@ -0,0 +1,37 @@ +getHeader()); + } + + public function bomProvider() + { + return [ + ['utf32BigEndianBom'], + ['utf32LittleEndianBom'], + ['utf16BigEndianBom'], + ['utf16LittleEndianBom'], + ['utf8Bom'], + ]; + } + public function testParseMacLineEndsInField() { $csvFile = new CsvReader(__DIR__ . '/data/test-input.lineBreaks.csv', ",", '"', '\\'); diff --git a/tests/UTF8BOMHelperTest.php b/tests/UTF8BOMHelperTest.php new file mode 100644 index 0000000..6c5f67d --- /dev/null +++ b/tests/UTF8BOMHelperTest.php @@ -0,0 +1,34 @@ +current(); + $this->assertNotSame(['id', 'name'], $firstLine); + $this->assertSame(['id', 'name'], UTF8BOMHelper::detectAndRemoveBOM($firstLine)); + } + + public function bomProvider() + { + return [ + ['utf32BigEndianBom'], + ['utf32LittleEndianBom'], + ['utf16BigEndianBom'], + ['utf16LittleEndianBom'], + ['utf8Bom'], + ]; + } +} diff --git a/tests/data/bom/utf16BigEndianBom.csv b/tests/data/bom/utf16BigEndianBom.csv new file mode 100755 index 0000000..dcc7b32 --- /dev/null +++ b/tests/data/bom/utf16BigEndianBom.csv @@ -0,0 +1 @@ +þÿ"id","name" \ No newline at end of file diff --git a/tests/data/bom/utf16LittleEndianBom.csv b/tests/data/bom/utf16LittleEndianBom.csv new file mode 100755 index 0000000..e2a9161 --- /dev/null +++ b/tests/data/bom/utf16LittleEndianBom.csv @@ -0,0 +1 @@ +ÿþ"id","name" \ No newline at end of file diff --git a/tests/data/bom/utf32BigEndianBom.csv b/tests/data/bom/utf32BigEndianBom.csv new file mode 100755 index 0000000..9fc85e1 Binary files /dev/null and b/tests/data/bom/utf32BigEndianBom.csv differ diff --git a/tests/data/bom/utf32LittleEndianBom.csv b/tests/data/bom/utf32LittleEndianBom.csv new file mode 100755 index 0000000..64bdb76 Binary files /dev/null and b/tests/data/bom/utf32LittleEndianBom.csv differ diff --git a/tests/data/bom/utf8Bom.csv b/tests/data/bom/utf8Bom.csv new file mode 100755 index 0000000..62fde9a --- /dev/null +++ b/tests/data/bom/utf8Bom.csv @@ -0,0 +1 @@ +"id","name" \ No newline at end of file