Files
PhpSpreadsheet/tests/PhpSpreadsheetTests/Chart/DataSeriesValuesTest.php
T
oleibman 5d5e550342 Additional Support for Chart DataSeriesValues (#2906)
* Additional Support for Chart DataSeriesValues

Fix #2863. DataSeriesValues now extends Properties, allowing it to share code in common with Axis and Gridlines. This causes some minor breakages; in particular line width is now initialized to null instead of Excel's default value, and is specified in points, as the user would expect from Excel, rather than the value stored in Xml.

This change:
- adds support for 1 or 2 marker colors.
- adds support for `smoothLine` to DataSeriesValues.
- will determine `catAx` or `valAx` for Axis based on what is read from the Xml when available, rather than guessing based on format. (Another minor break.)
- reads `formatCode` and `sourceLinked` for Axis.
- correct 2 uses of `$plotSeriesRef` to `$plotSeriesIndex` in Writer/Xlsx/Chart.
- pushes coverage over 90% for Chart (88.70% overall).

* Update Change Log

I had updated previously but forgot to stage the member.

* Adopt Some Suggestions

Incorporate some changes suggested by @bridgeplayr.

* Use ChartColor for DSV Fill And Font Text

DataSeriesValues Fill could be a scalar or an array, so I saved it till last.

* Some Final Cleanup

No code changes.

Illustrate even more of the new features in existing sample files.

Deprecate *_ARGB in Properties/ChartColors in favor of *_RGB, because it uses only 6 hex digits. The alpha value is stored separately.
2022-06-29 17:52:09 -07:00

91 lines
2.8 KiB
PHP

<?php
namespace PhpOffice\PhpSpreadsheetTests\Chart;
use PhpOffice\PhpSpreadsheet\Chart\DataSeriesValues;
use PhpOffice\PhpSpreadsheet\Chart\Properties;
use PhpOffice\PhpSpreadsheet\Exception;
use PHPUnit\Framework\TestCase;
class DataSeriesValuesTest extends TestCase
{
public function testSetDataType(): void
{
$dataTypeValues = [
'Number',
'String',
];
$testInstance = new DataSeriesValues();
foreach ($dataTypeValues as $dataTypeValue) {
$result = $testInstance->setDataType($dataTypeValue);
self::assertInstanceOf(DataSeriesValues::class, $result);
}
}
public function testSetInvalidDataTypeThrowsException(): void
{
$testInstance = new DataSeriesValues();
try {
$testInstance->setDataType('BOOLEAN');
} catch (Exception $e) {
self::assertEquals($e->getMessage(), 'Invalid datatype for chart data series values');
return;
}
self::fail('An expected exception has not been raised.');
}
public function testGetDataType(): void
{
$dataTypeValue = 'String';
$testInstance = new DataSeriesValues();
$testInstance->setDataType($dataTypeValue);
$result = $testInstance->getDataType();
self::assertEquals($dataTypeValue, $result);
}
public function testGetLineWidth(): void
{
$testInstance = new DataSeriesValues();
// default has changed to null from 1 point (12700)
self::assertNull($testInstance->getLineWidth(), 'should have default');
$testInstance->setLineWidth(40000 / Properties::POINTS_WIDTH_MULTIPLIER);
self::assertEquals(40000 / Properties::POINTS_WIDTH_MULTIPLIER, $testInstance->getLineWidth());
$testInstance->setLineWidth(1);
self::assertEquals(12700 / Properties::POINTS_WIDTH_MULTIPLIER, $testInstance->getLineWidth(), 'should enforce minimum width');
}
public function testFillColorCorrectInput(): void
{
$testInstance = new DataSeriesValues();
self::assertEquals($testInstance, $testInstance->setFillColor('00abb8'));
self::assertEquals($testInstance, $testInstance->setFillColor(['00abb8', 'b8292f']));
}
public function testFillColorInvalidInput(): void
{
$testInstance = new DataSeriesValues();
$this->expectException(\Exception::class);
$this->expectExceptionMessage('Invalid hex color for chart series');
$testInstance->setFillColor('WRONG COLOR');
}
public function testFillColorInvalidInputInArray(): void
{
$testInstance = new DataSeriesValues();
$this->expectException(\Exception::class);
$this->expectExceptionMessage('Invalid hex color for chart series (color: "WRONG COLOR")');
$testInstance->setFillColor(['b8292f', 'WRONG COLOR']);
}
}