CsvIssue2232Test.php 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. <?php
  2. namespace PhpOffice\PhpSpreadsheetTests\Reader\Csv;
  3. use PhpOffice\PhpSpreadsheet\Cell\Cell;
  4. use PhpOffice\PhpSpreadsheet\Cell\IValueBinder;
  5. use PhpOffice\PhpSpreadsheet\Cell\StringValueBinder;
  6. use PhpOffice\PhpSpreadsheet\Reader\Csv;
  7. use PhpOffice\PhpSpreadsheet\Settings;
  8. use PHPUnit\Framework\TestCase;
  9. class CsvIssue2232Test extends TestCase
  10. {
  11. /**
  12. * @var IValueBinder
  13. */
  14. private $valueBinder;
  15. /** @var string */
  16. private $locale;
  17. protected function setUp(): void
  18. {
  19. $this->valueBinder = Cell::getValueBinder();
  20. $this->locale = Settings::getLocale();
  21. }
  22. protected function tearDown(): void
  23. {
  24. Cell::setValueBinder($this->valueBinder);
  25. Settings::setLocale($this->locale);
  26. }
  27. /**
  28. * @dataProvider providerIssue2232
  29. *
  30. * @param mixed $b2Value
  31. * @param mixed $b3Value
  32. */
  33. public function testBooleanConversions(bool $useStringBinder, ?bool $preserveBoolString, $b2Value, $b3Value): void
  34. {
  35. if ($useStringBinder) {
  36. $binder = new StringValueBinder();
  37. if (is_bool($preserveBoolString)) {
  38. $binder->setBooleanConversion($preserveBoolString);
  39. }
  40. Cell::setValueBinder($binder);
  41. }
  42. $reader = new Csv();
  43. $filename = 'tests/data/Reader/CSV/issue.2232.csv';
  44. $spreadsheet = $reader->load($filename);
  45. $sheet = $spreadsheet->getActiveSheet();
  46. self::assertSame($b2Value, $sheet->getCell('B2')->getValue());
  47. self::assertSame($b3Value, $sheet->getCell('B3')->getValue());
  48. $spreadsheet->disconnectWorksheets();
  49. }
  50. public function providerIssue2232(): array
  51. {
  52. return [
  53. [false, false, false, true],
  54. [false, null, false, true],
  55. [false, true, false, true],
  56. [true, false, false, true],
  57. [true, null, 'FaLSe', 'tRUE'],
  58. [true, true, 'FaLSe', 'tRUE'],
  59. ];
  60. }
  61. /**
  62. * @dataProvider providerIssue2232locale
  63. *
  64. * @param mixed $b4Value
  65. * @param mixed $b5Value
  66. */
  67. public function testBooleanConversionsLocaleAware(bool $useStringBinder, ?bool $preserveBoolString, $b4Value, $b5Value): void
  68. {
  69. if ($useStringBinder) {
  70. $binder = new StringValueBinder();
  71. if (is_bool($preserveBoolString)) {
  72. $binder->setBooleanConversion($preserveBoolString);
  73. }
  74. Cell::setValueBinder($binder);
  75. }
  76. Settings::setLocale('fr');
  77. $reader = new Csv();
  78. $filename = 'tests/data/Reader/CSV/issue.2232.csv';
  79. $spreadsheet = $reader->load($filename);
  80. $sheet = $spreadsheet->getActiveSheet();
  81. self::assertSame($b4Value, $sheet->getCell('B4')->getValue());
  82. self::assertSame($b5Value, $sheet->getCell('B5')->getValue());
  83. $spreadsheet->disconnectWorksheets();
  84. }
  85. public function providerIssue2232locale(): array
  86. {
  87. return [
  88. [true, true, 'Faux', 'Vrai'],
  89. [true, true, 'Faux', 'Vrai'],
  90. [false, false, false, true],
  91. [false, false, false, true],
  92. ];
  93. }
  94. }