102 lines
3.0 KiB
PHP
102 lines
3.0 KiB
PHP
<?php
|
|
|
|
namespace PhpOffice\PhpSpreadsheetTests\Reader\Csv;
|
|
|
|
use PhpOffice\PhpSpreadsheet\Calculation\Calculation;
|
|
use PhpOffice\PhpSpreadsheet\Cell\Cell;
|
|
use PhpOffice\PhpSpreadsheet\Cell\IValueBinder;
|
|
use PhpOffice\PhpSpreadsheet\Cell\StringValueBinder;
|
|
use PhpOffice\PhpSpreadsheet\Reader\Csv;
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
class CsvIssue2232Test extends TestCase
|
|
{
|
|
/**
|
|
* @var IValueBinder
|
|
*/
|
|
private $valueBinder;
|
|
|
|
protected function setUp(): void
|
|
{
|
|
$this->valueBinder = Cell::getValueBinder();
|
|
}
|
|
|
|
protected function tearDown(): void
|
|
{
|
|
Cell::setValueBinder($this->valueBinder);
|
|
}
|
|
|
|
/**
|
|
* @dataProvider providerIssue2232
|
|
*
|
|
* @param mixed $b2Value
|
|
* @param mixed $b3Value
|
|
*/
|
|
public function testBooleanConversions(bool $useStringBinder, ?bool $preserveBoolString, $b2Value, $b3Value): void
|
|
{
|
|
if ($useStringBinder) {
|
|
$binder = new StringValueBinder();
|
|
if (is_bool($preserveBoolString)) {
|
|
$binder->setBooleanConversion($preserveBoolString);
|
|
}
|
|
Cell::setValueBinder($binder);
|
|
}
|
|
$reader = new Csv();
|
|
$filename = 'tests/data/Reader/CSV/issue.2232.csv';
|
|
$spreadsheet = $reader->load($filename);
|
|
$sheet = $spreadsheet->getActiveSheet();
|
|
self::assertSame($b2Value, $sheet->getCell('B2')->getValue());
|
|
self::assertSame($b3Value, $sheet->getCell('B3')->getValue());
|
|
$spreadsheet->disconnectWorksheets();
|
|
}
|
|
|
|
public function providerIssue2232(): array
|
|
{
|
|
return [
|
|
[false, false, false, true],
|
|
[false, null, false, true],
|
|
[false, true, false, true],
|
|
[true, false, false, true],
|
|
[true, null, 'FaLSe', 'tRUE'],
|
|
[true, true, 'FaLSe', 'tRUE'],
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @dataProvider providerIssue2232locale
|
|
*
|
|
* @param mixed $b4Value
|
|
* @param mixed $b5Value
|
|
*/
|
|
public function testBooleanConversionsLocaleAware(bool $useStringBinder, ?bool $preserveBoolString, $b4Value, $b5Value): void
|
|
{
|
|
if ($useStringBinder) {
|
|
$binder = new StringValueBinder();
|
|
if (is_bool($preserveBoolString)) {
|
|
$binder->setBooleanConversion($preserveBoolString);
|
|
}
|
|
Cell::setValueBinder($binder);
|
|
}
|
|
|
|
Calculation::getInstance()->setLocale('fr');
|
|
|
|
$reader = new Csv();
|
|
$filename = 'tests/data/Reader/CSV/issue.2232.csv';
|
|
$spreadsheet = $reader->load($filename);
|
|
$sheet = $spreadsheet->getActiveSheet();
|
|
self::assertSame($b4Value, $sheet->getCell('B4')->getValue());
|
|
self::assertSame($b5Value, $sheet->getCell('B5')->getValue());
|
|
$spreadsheet->disconnectWorksheets();
|
|
}
|
|
|
|
public function providerIssue2232locale(): array
|
|
{
|
|
return [
|
|
[true, true, 'Faux', 'Vrai'],
|
|
[true, true, 'Faux', 'Vrai'],
|
|
[false, false, false, true],
|
|
[false, false, false, true],
|
|
];
|
|
}
|
|
}
|