DefaultValueBinderTest.php 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. <?php
  2. namespace PhpOffice\PhpSpreadsheetTests\Cell;
  3. use DateTime;
  4. use DateTimeImmutable;
  5. use PhpOffice\PhpSpreadsheet\Cell\DataType;
  6. use PhpOffice\PhpSpreadsheet\Cell\DefaultValueBinder;
  7. use PhpOffice\PhpSpreadsheet\RichText\RichText;
  8. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  9. use PHPUnit\Framework\TestCase;
  10. class DefaultValueBinderTest extends TestCase
  11. {
  12. /**
  13. * @dataProvider binderProvider
  14. *
  15. * @param mixed $value
  16. */
  17. public function testBindValue($value): void
  18. {
  19. $spreadsheet = new Spreadsheet();
  20. $sheet = $spreadsheet->getActiveSheet();
  21. $cell = $sheet->getCell('A1');
  22. $binder = new DefaultValueBinder();
  23. $result = $binder->bindValue($cell, $value);
  24. self::assertTrue($result);
  25. $spreadsheet->disconnectWorksheets();
  26. }
  27. public function binderProvider(): array
  28. {
  29. return [
  30. [null],
  31. [''],
  32. ['ABC'],
  33. ['=SUM(A1:B2)'],
  34. [true],
  35. [false],
  36. [123],
  37. [-123.456],
  38. ['123'],
  39. ['-123.456'],
  40. ['#REF!'],
  41. [new DateTime()],
  42. [new DateTimeImmutable()],
  43. ['123456\n'],
  44. ];
  45. }
  46. /**
  47. * @dataProvider providerDataTypeForValue
  48. *
  49. * @param mixed $expectedResult
  50. * @param mixed $value
  51. */
  52. public function testDataTypeForValue($expectedResult, $value): void
  53. {
  54. $result = DefaultValueBinder::dataTypeForValue($value);
  55. self::assertEquals($expectedResult, $result);
  56. }
  57. public function providerDataTypeForValue(): array
  58. {
  59. return require 'tests/data/Cell/DefaultValueBinder.php';
  60. }
  61. public function testDataTypeForRichTextObject(): void
  62. {
  63. $objRichText = new RichText();
  64. $objRichText->createText('Hello World');
  65. $expectedResult = DataType::TYPE_INLINE;
  66. $result = DefaultValueBinder::dataTypeForValue($objRichText);
  67. self::assertEquals($expectedResult, $result);
  68. }
  69. public function testCanOverrideStaticMethodWithoutOverridingBindValue(): void
  70. {
  71. $spreadsheet = new Spreadsheet();
  72. $sheet = $spreadsheet->getActiveSheet();
  73. $cell = $sheet->getCell('A1');
  74. $binder = new ValueBinderWithOverriddenDataTypeForValue();
  75. self::assertFalse($binder::$called);
  76. $binder->bindValue($cell, 123);
  77. self::assertTrue($binder::$called);
  78. $spreadsheet->disconnectWorksheets();
  79. }
  80. }