LocaleFloatsTest.php 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. <?php
  2. namespace PhpOffice\PhpSpreadsheetTests\Writer\Xlsx;
  3. use PHPUnit\Framework\TestCase;
  4. class LocaleFloatsTest extends TestCase
  5. {
  6. /**
  7. * @var bool
  8. */
  9. private $localeAdjusted;
  10. /**
  11. * @var false|string
  12. */
  13. private $currentLocale;
  14. protected function setUp(): void
  15. {
  16. $this->currentLocale = setlocale(LC_ALL, '0');
  17. if (!setlocale(LC_ALL, 'fr_FR.UTF-8', 'fra_fra')) {
  18. $this->localeAdjusted = false;
  19. return;
  20. }
  21. $this->localeAdjusted = true;
  22. }
  23. protected function tearDown(): void
  24. {
  25. if ($this->localeAdjusted && is_string($this->currentLocale)) {
  26. setlocale(LC_ALL, $this->currentLocale);
  27. }
  28. }
  29. public function testLocaleFloatsCorrectlyConvertedByWriter(): void
  30. {
  31. if (!$this->localeAdjusted) {
  32. self::markTestSkipped('Unable to set locale for testing.');
  33. }
  34. $spreadsheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet();
  35. $spreadsheet->getActiveSheet()->setCellValue('A1', 1.1);
  36. $filename = 'decimalcomma.xlsx';
  37. $writer = new \PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet);
  38. $writer->save($filename);
  39. $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
  40. $spreadsheet = $reader->load($filename);
  41. unlink($filename);
  42. $result = $spreadsheet->getActiveSheet()->getCell('A1')->getValue();
  43. $actual = sprintf('%f', $result);
  44. self::assertStringContainsString('1,1', $actual);
  45. }
  46. }