CsvNumberFormatTest.php 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. <?php
  2. namespace PhpOffice\PhpSpreadsheetTests\Reader\Csv;
  3. use PhpOffice\PhpSpreadsheet\Cell\DataType;
  4. use PhpOffice\PhpSpreadsheet\Reader\Csv;
  5. use PHPUnit\Framework\TestCase;
  6. class CsvNumberFormatTest extends TestCase
  7. {
  8. /**
  9. * @var string
  10. */
  11. protected $filename;
  12. /**
  13. * @var Csv
  14. */
  15. protected $csvReader;
  16. protected function setUp(): void
  17. {
  18. $this->filename = 'tests/data/Reader/CSV/NumberFormatTest.csv';
  19. $this->csvReader = new Csv();
  20. }
  21. /**
  22. * @dataProvider providerNumberFormatNoConversionTest
  23. *
  24. * @param mixed $expectedValue
  25. */
  26. public function testNumberFormatNoConversion($expectedValue, string $expectedFormat, string $cellAddress): void
  27. {
  28. $spreadsheet = $this->csvReader->load($this->filename);
  29. $worksheet = $spreadsheet->getActiveSheet();
  30. $cell = $worksheet->getCell($cellAddress);
  31. self::assertSame($expectedValue, $cell->getValue(), 'Expected value check');
  32. self::assertSame($expectedFormat, $cell->getFormattedValue(), 'Format mask check');
  33. }
  34. public function providerNumberFormatNoConversionTest(): array
  35. {
  36. return [
  37. [
  38. -123,
  39. '-123',
  40. 'A1',
  41. ],
  42. [
  43. '12,345.67',
  44. '12,345.67',
  45. 'C1',
  46. ],
  47. [
  48. '-1,234.567',
  49. '-1,234.567',
  50. 'A3',
  51. ],
  52. ];
  53. }
  54. /**
  55. * @dataProvider providerNumberValueConversionTest
  56. *
  57. * @param mixed $expectedValue
  58. */
  59. public function testNumberValueConversion($expectedValue, string $cellAddress): void
  60. {
  61. $this->csvReader->castFormattedNumberToNumeric(true);
  62. $spreadsheet = $this->csvReader->load($this->filename);
  63. $worksheet = $spreadsheet->getActiveSheet();
  64. $cell = $worksheet->getCell($cellAddress);
  65. self::assertSame(DataType::TYPE_NUMERIC, $cell->getDataType(), 'Datatype check');
  66. self::assertSame($expectedValue, $cell->getValue(), 'Expected value check');
  67. }
  68. public function providerNumberValueConversionTest(): array
  69. {
  70. return [
  71. 'A1' => [
  72. -123,
  73. 'A1',
  74. ],
  75. 'B1' => [
  76. 1234,
  77. 'B1',
  78. ],
  79. 'C1' => [
  80. 12345.67,
  81. 'C1',
  82. ],
  83. 'A2' => [
  84. 123.4567,
  85. 'A2',
  86. ],
  87. 'B2' => [
  88. 123.456789012,
  89. 'B2',
  90. ],
  91. 'A3' => [
  92. -1234.567,
  93. 'A3',
  94. ],
  95. 'B3' => [
  96. 1234.567,
  97. 'B3',
  98. ],
  99. ];
  100. }
  101. /**
  102. * @dataProvider providerNumberFormatConversionTest
  103. *
  104. * @param mixed $expectedValue
  105. */
  106. public function testNumberFormatConversion($expectedValue, string $expectedFormat, string $cellAddress): void
  107. {
  108. $this->csvReader->castFormattedNumberToNumeric(true, true);
  109. $spreadsheet = $this->csvReader->load($this->filename);
  110. $worksheet = $spreadsheet->getActiveSheet();
  111. $cell = $worksheet->getCell($cellAddress);
  112. self::assertSame(DataType::TYPE_NUMERIC, $cell->getDataType(), 'Datatype check');
  113. self::assertSame($expectedValue, $cell->getValue(), 'Expected value check');
  114. self::assertSame($expectedFormat, $cell->getFormattedValue(), 'Format mask check');
  115. }
  116. public function providerNumberFormatConversionTest(): array
  117. {
  118. return [
  119. 'A1' => [
  120. -123,
  121. '-123',
  122. 'A1',
  123. ],
  124. 'B1' => [
  125. 1234,
  126. '1,234',
  127. 'B1',
  128. ],
  129. 'C1' => [
  130. 12345.67,
  131. '12,345.67',
  132. 'C1',
  133. ],
  134. 'A2' => [
  135. 123.4567,
  136. '123.4567',
  137. 'A2',
  138. ],
  139. 'B2' => [
  140. 123.456789012,
  141. '123.456789',
  142. 'B2',
  143. ],
  144. 'A3' => [
  145. -1234.567,
  146. '-1,234.567',
  147. 'A3',
  148. ],
  149. 'B3' => [
  150. 1234.567,
  151. '1234.567',
  152. 'B3',
  153. ],
  154. ];
  155. }
  156. }