p2 project
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

283 lines
9.8 KiB

2 months ago
<?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 static 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 static 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 static 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 static 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 static 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 static 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();
}
}