| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282 |
- <?php
- namespace PhpOffice\PhpSpreadsheetTests\Cell;
- use DateTime;
- use DateTimeZone;
- use PhpOffice\PhpSpreadsheet\Cell\Cell;
- use PhpOffice\PhpSpreadsheet\Cell\DataType;
- use PhpOffice\PhpSpreadsheet\Cell\IValueBinder;
- use PhpOffice\PhpSpreadsheet\Cell\StringValueBinder;
- use PhpOffice\PhpSpreadsheet\RichText\RichText;
- use PhpOffice\PhpSpreadsheet\Spreadsheet;
- use PHPUnit\Framework\TestCase;
- class StringValueBinderTest extends TestCase
- {
- /**
- * @var IValueBinder
- */
- private $valueBinder;
- protected function setUp(): void
- {
- $this->valueBinder = Cell::getValueBinder();
- }
- protected function tearDown(): void
- {
- Cell::setValueBinder($this->valueBinder);
- }
- /**
- * @dataProvider providerDataValuesDefault
- *
- * @param mixed $value
- * @param mixed $expectedValue
- */
- public function testStringValueBinderDefaultBehaviour(
- $value,
- $expectedValue,
- string $expectedDataType
- ): void {
- Cell::setValueBinder(new StringValueBinder());
- $spreadsheet = new Spreadsheet();
- $sheet = $spreadsheet->getActiveSheet();
- $cell = $sheet->getCell('A1');
- $cell->setValue($value);
- self::assertSame($expectedValue, $cell->getValue());
- self::assertSame($expectedDataType, $cell->getDataType());
- $spreadsheet->disconnectWorksheets();
- }
- public function providerDataValuesDefault(): array
- {
- return [
- [null, '', DataType::TYPE_STRING],
- [true, '1', DataType::TYPE_STRING],
- [false, '', DataType::TYPE_STRING],
- ['', '', DataType::TYPE_STRING],
- ['123', '123', DataType::TYPE_STRING],
- ['123.456', '123.456', DataType::TYPE_STRING],
- ['0.123', '0.123', DataType::TYPE_STRING],
- ['.123', '.123', DataType::TYPE_STRING],
- ['-0.123', '-0.123', DataType::TYPE_STRING],
- ['-.123', '-.123', DataType::TYPE_STRING],
- ['1.23e-4', '1.23e-4', DataType::TYPE_STRING],
- ['ABC', 'ABC', DataType::TYPE_STRING],
- ['=SUM(A1:C3)', '=SUM(A1:C3)', DataType::TYPE_STRING],
- [123, '123', DataType::TYPE_STRING],
- [123.456, '123.456', DataType::TYPE_STRING],
- [0.123, '0.123', DataType::TYPE_STRING],
- [.123, '0.123', DataType::TYPE_STRING],
- [-0.123, '-0.123', DataType::TYPE_STRING],
- [-.123, '-0.123', DataType::TYPE_STRING],
- [1.23e-4, '0.000123', DataType::TYPE_STRING],
- [1.23e-24, '1.23E-24', DataType::TYPE_STRING],
- [new DateTime('2021-06-01 00:00:00', new DateTimeZone('UTC')), '2021-06-01 00:00:00', DataType::TYPE_STRING],
- ];
- }
- /**
- * @dataProvider providerDataValuesSuppressNullConversion
- *
- * @param mixed $value
- * @param mixed $expectedValue
- */
- public function testStringValueBinderSuppressNullConversion(
- $value,
- $expectedValue,
- string $expectedDataType
- ): void {
- $binder = new StringValueBinder();
- $binder->setNullConversion(false);
- Cell::setValueBinder($binder);
- $spreadsheet = new Spreadsheet();
- $sheet = $spreadsheet->getActiveSheet();
- $cell = $sheet->getCell('A1');
- $cell->setValue($value);
- self::assertSame($expectedValue, $cell->getValue());
- self::assertSame($expectedDataType, $cell->getDataType());
- $spreadsheet->disconnectWorksheets();
- }
- public function providerDataValuesSuppressNullConversion(): array
- {
- return [
- [null, null, DataType::TYPE_NULL],
- [true, '1', DataType::TYPE_STRING],
- [123, '123', DataType::TYPE_STRING],
- ];
- }
- /**
- * @dataProvider providerDataValuesSuppressBooleanConversion
- *
- * @param mixed $value
- * @param mixed $expectedValue
- */
- public function testStringValueBinderSuppressBooleanConversion(
- $value,
- $expectedValue,
- string $expectedDataType
- ): void {
- $binder = new StringValueBinder();
- $binder->setBooleanConversion(false);
- Cell::setValueBinder($binder);
- $spreadsheet = new Spreadsheet();
- $sheet = $spreadsheet->getActiveSheet();
- $cell = $sheet->getCell('A1');
- $cell->setValue($value);
- self::assertSame($expectedValue, $cell->getValue());
- self::assertSame($expectedDataType, $cell->getDataType());
- $spreadsheet->disconnectWorksheets();
- }
- public function providerDataValuesSuppressBooleanConversion(): array
- {
- return [
- [true, true, DataType::TYPE_BOOL],
- [false, false, DataType::TYPE_BOOL],
- [null, '', DataType::TYPE_STRING],
- [123, '123', DataType::TYPE_STRING],
- ];
- }
- /**
- * @dataProvider providerDataValuesSuppressNumericConversion
- *
- * @param mixed $value
- * @param mixed $expectedValue
- */
- public function testStringValueBinderSuppressNumericConversion(
- $value,
- $expectedValue,
- string $expectedDataType
- ): void {
- $binder = new StringValueBinder();
- $binder->setNumericConversion(false);
- Cell::setValueBinder($binder);
- $spreadsheet = new Spreadsheet();
- $sheet = $spreadsheet->getActiveSheet();
- $cell = $sheet->getCell('A1');
- $cell->setValue($value);
- self::assertSame($expectedValue, $cell->getValue());
- self::assertSame($expectedDataType, $cell->getDataType());
- $spreadsheet->disconnectWorksheets();
- }
- public function providerDataValuesSuppressNumericConversion(): array
- {
- return [
- [123, 123, DataType::TYPE_NUMERIC],
- [123.456, 123.456, DataType::TYPE_NUMERIC],
- [0.123, 0.123, DataType::TYPE_NUMERIC],
- [.123, 0.123, DataType::TYPE_NUMERIC],
- [-0.123, -0.123, DataType::TYPE_NUMERIC],
- [-.123, -0.123, DataType::TYPE_NUMERIC],
- [1.23e-4, 0.000123, DataType::TYPE_NUMERIC],
- [1.23e-24, 1.23E-24, DataType::TYPE_NUMERIC],
- [true, '1', DataType::TYPE_STRING],
- [false, '', DataType::TYPE_STRING],
- [null, '', DataType::TYPE_STRING],
- ];
- }
- /**
- * @dataProvider providerDataValuesSuppressFormulaConversion
- *
- * @param mixed $value
- * @param mixed $expectedValue
- */
- public function testStringValueBinderSuppressFormulaConversion(
- $value,
- $expectedValue,
- string $expectedDataType
- ): void {
- $binder = new StringValueBinder();
- $binder->setFormulaConversion(false);
- Cell::setValueBinder($binder);
- $spreadsheet = new Spreadsheet();
- $sheet = $spreadsheet->getActiveSheet();
- $cell = $sheet->getCell('A1');
- $cell->setValue($value);
- self::assertSame($expectedValue, $cell->getValue());
- self::assertSame($expectedDataType, $cell->getDataType());
- $spreadsheet->disconnectWorksheets();
- }
- public function providerDataValuesSuppressFormulaConversion(): array
- {
- return [
- ['=SUM(A1:C3)', '=SUM(A1:C3)', DataType::TYPE_FORMULA, false],
- ];
- }
- /**
- * @dataProvider providerDataValuesSuppressAllConversion
- *
- * @param mixed $value
- * @param mixed $expectedValue
- */
- public function testStringValueBinderSuppressAllConversion(
- $value,
- $expectedValue,
- string $expectedDataType
- ): void {
- $binder = new StringValueBinder();
- $binder->setConversionForAllValueTypes(false);
- Cell::setValueBinder($binder);
- $spreadsheet = new Spreadsheet();
- $sheet = $spreadsheet->getActiveSheet();
- $cell = $sheet->getCell('A1');
- $cell->setValue($value);
- self::assertSame($expectedValue, $cell->getValue());
- self::assertSame($expectedDataType, $cell->getDataType());
- $spreadsheet->disconnectWorksheets();
- }
- public function providerDataValuesSuppressAllConversion(): array
- {
- return [
- [null, null, DataType::TYPE_NULL],
- [true, true, DataType::TYPE_BOOL],
- [false, false, DataType::TYPE_BOOL],
- ['', '', DataType::TYPE_STRING],
- ['123', '123', DataType::TYPE_STRING],
- ['123.456', '123.456', DataType::TYPE_STRING],
- ['0.123', '0.123', DataType::TYPE_STRING],
- ['.123', '.123', DataType::TYPE_STRING],
- ['-0.123', '-0.123', DataType::TYPE_STRING],
- ['-.123', '-.123', DataType::TYPE_STRING],
- ['1.23e-4', '1.23e-4', DataType::TYPE_STRING],
- ['ABC', 'ABC', DataType::TYPE_STRING],
- ['=SUM(A1:C3)', '=SUM(A1:C3)', DataType::TYPE_FORMULA, false],
- [123, 123, DataType::TYPE_NUMERIC],
- [123.456, 123.456, DataType::TYPE_NUMERIC],
- [0.123, 0.123, DataType::TYPE_NUMERIC],
- [.123, 0.123, DataType::TYPE_NUMERIC],
- [-0.123, -0.123, DataType::TYPE_NUMERIC],
- [-.123, -0.123, DataType::TYPE_NUMERIC],
- [1.23e-4, 0.000123, DataType::TYPE_NUMERIC],
- [1.23e-24, 1.23E-24, DataType::TYPE_NUMERIC],
- ];
- }
- public function testStringValueBinderForRichTextObject(): void
- {
- $objRichText = new RichText();
- $objRichText->createText('Hello World');
- $binder = new StringValueBinder();
- $binder->setConversionForAllValueTypes(false);
- Cell::setValueBinder($binder);
- $spreadsheet = new Spreadsheet();
- $sheet = $spreadsheet->getActiveSheet();
- $cell = $sheet->getCell('A1');
- $cell->setValue($objRichText);
- self::assertSame('inlineStr', $cell->getDataType());
- self::assertSame('Hello World', $cell->getCalculatedValue());
- $spreadsheet->disconnectWorksheets();
- }
- }
|