Files
Chamilo/vendor/szymach/c-pchart/tests/unit/PieTest.php
2025-08-14 22:41:49 +02:00

344 lines
12 KiB
PHP

<?php
namespace Test\CpChart;
use Codeception\Test\Unit;
use CpChart\Chart\Pie;
use CpChart\Data;
use CpChart\Image;
use Test\CpChart\UnitTester;
use const DIRECTION_VERTICAL;
use const LEGEND_HORIZONTAL;
use const LEGEND_NOBORDER;
use const TEXT_ALIGN_TOPMIDDLE;
class PieTest extends Unit
{
/**
* @var UnitTester
*/
protected $tester;
public function test2dPieRender()
{
$data = new Data();
$data->addPoints([40, 60, 15, 10, 6, 4], 'ScoreA');
$data->setSerieDescription('ScoreA', 'Application A');
$data->addPoints(['<10', '10<>20', '20<>40', '40<>60', '60<>80', '>80'], 'Labels');
$data->setAbscissa('Labels');
$image = new Image(700, 230, $data);
$image->drawFilledRectangle(
0,
0,
700,
230,
[
'R' => 173, 'G' => 152, 'B' => 217, 'Dash' => 1, 'DashR' => 193,
'DashG' => 172, 'DashB' => 237
]
);
$image->drawGradientArea(
0,
0,
700,
230,
DIRECTION_VERTICAL,
[
'StartR' => 209, 'StartG' => 150, 'StartB' => 231, 'EndR' => 111,
'EndG' => 3, 'EndB' => 138, 'Alpha' => 50
]
);
$image->drawGradientArea(
0,
0,
700,
20,
DIRECTION_VERTICAL,
[
'StartR' => 0, 'StartG' => 0, 'StartB' => 0, 'EndR' => 50, 'EndG' => 50,
'EndB' => 50, 'Alpha' => 100
]
);
$image->drawRectangle(0, 0, 699, 229, ['R' => 0, 'G' => 0, 'B' => 0]);
$image->setFontProperties(['FontName' => 'Silkscreen.ttf', 'FontSize' => 6]);
$image->drawText(
10,
13,
'pPie - Draw 2D pie charts',
['R' => 255, 'G' => 255, 'B' => 255]
);
$image->setFontProperties(
['FontName' => 'Forgotte.ttf', 'FontSize' => 10, 'R' => 80, 'G' => 80, 'B' => 80]
);
$image->setShadow(
true,
['X' => 2, 'Y' => 2, 'R' => 150, 'G' => 150, 'B' => 150, 'Alpha' => 100]
);
$pieChart = new Pie($image, $data);
$pieChart->draw2DPie(140, 125, ['SecondPass' => false]);
$pieChart->draw2DPie(340, 125, ['DrawLabels' => true, 'Border' => true]);
$pieChart->draw2DPie(
540,
125,
[
'DataGapAngle' => 10, 'DataGapRadius' => 6, 'Border' => true,
'BorderR' => 255, 'BorderG' => 255, 'BorderB' => 255
]
);
$image->setFontProperties(['FontName' => 'MankSans.ttf', 'FontSize' => 11]);
$image->setShadow(
true,
['X' => 1, 'Y' => 1, 'R' => 0, 'G' => 0, 'B' => 0, 'Alpha' => 20]
);
$image->drawText(
140,
200,
'Single AA pass',
['R' => 0, 'G' => 0, 'B' => 0, 'Align' => TEXT_ALIGN_TOPMIDDLE]
);
$image->drawText(
540,
200,
'Extended AA pass / Splitted',
['R' => 0, 'G' => 0, 'B' => 0, 'Align' => TEXT_ALIGN_TOPMIDDLE]
);
$filename = $this->tester->getOutputPathForChart('draw2DPie.png');
$pieChart->pChartObject->render($filename);
$pieChart->pChartObject->stroke();
$this->tester->seeFileFound($filename);
}
public function test2dRingRender()
{
$data = new Data();
$data->addPoints([50, 2, 3, 4, 7, 10, 25, 48, 41, 10], 'ScoreA');
$data->setSerieDescription('ScoreA', 'Application A');
$data->addPoints(
['A0', 'B1', 'C2', 'D3', 'E4', 'F5', 'G6', 'H7', 'I8', 'J9'],
'Labels'
);
$data->setAbscissa('Labels');
$image = new Image(300, 260, $data);
$settings = [
'R' => 170, 'G' => 183, 'B' => 87, 'Dash' => 1, 'DashR' => 190,
'DashG' => 203, 'DashB' => 107
];
$image->drawFilledRectangle(0, 0, 300, 300, $settings);
$settings = [
'StartR' => 219, 'StartG' => 231, 'StartB' => 139, 'EndR' => 1,
'EndG' => 138, 'EndB' => 68, 'Alpha' => 50
];
$image->drawGradientArea(0, 0, 300, 260, DIRECTION_VERTICAL, $settings);
$image->drawGradientArea(
0,
0,
300,
20,
DIRECTION_VERTICAL,
[
'StartR' => 0, 'StartG' => 0, 'StartB' => 0, 'EndR' => 50, 'EndG' => 50,
'EndB' => 50, 'Alpha' => 100
]
);
$image->drawRectangle(0, 0, 299, 259, ['R' => 0, 'G' => 0, 'B' => 0]);
$image->setFontProperties(['FontName' => 'Silkscreen.ttf', 'FontSize' => 6]);
$image->drawText(
10,
13,
'pPie - Draw 2D ring charts',
['R' => 255, 'G' => 255, 'B' => 255]
);
$image->setFontProperties([
'FontName' => 'Forgotte.ttf', 'FontSize' => 10, 'R' => 80, 'G' => 80, 'B' => 80
]);
$image->setShadow(
true,
['X' => 2, 'Y' => 2, 'R' => 0, 'G' => 0, 'B' => 0, 'Alpha' => 50]
);
$pieChart = new Pie($image, $data);
$pieChart->draw2DRing(
160,
140,
['DrawLabels' => true, 'LabelStacked' => true, 'Border' => true]
);
$image->setShadow(false);
$pieChart->drawPieLegend(15, 40, ['Alpha' => 20]);
$filename = $this->tester->getOutputPathForChart('draw2DRing.png');
$pieChart->pChartObject->render($filename);
$pieChart->pChartObject->stroke();
$this->tester->seeFileFound($filename);
}
public function test3dPieRender()
{
$data = new Data();
$data->addPoints([40, 30, 20], 'ScoreA');
$data->setSerieDescription('ScoreA', 'Application A');
$data->addPoints(['A', 'B', 'C'], 'Labels');
$data->setAbscissa('Labels');
$image = new Image(700, 230, $data, true);
$settings = [
'R' => 173, 'G' => 152, 'B' => 217, 'Dash' => 1, 'DashR' => 193,
'DashG' => 172, 'DashB' => 237
];
$image->drawFilledRectangle(0, 0, 700, 230, $settings);
$settings = [
'StartR' => 209, 'StartG' => 150, 'StartB' => 231, 'EndR' => 111,
'EndG' => 3, 'EndB' => 138, 'Alpha' => 50
];
$image->drawGradientArea(0, 0, 700, 230, DIRECTION_VERTICAL, $settings);
$image->drawGradientArea(
0,
0,
700,
20,
DIRECTION_VERTICAL,
[
'StartR' => 0, 'StartG' => 0, 'StartB' => 0, 'EndR' => 50, 'EndG' => 50,
'EndB' => 50, 'Alpha' => 100
]
);
$image->drawRectangle(0, 0, 699, 229, ['R' => 0, 'G' => 0, 'B' => 0]);
$image->setFontProperties(['FontName' => 'Silkscreen.ttf', 'FontSize' => 6]);
$image->drawText(
10,
13,
'pPie - Draw 3D pie charts',
['R' => 255, 'G' => 255, 'B' => 255]
);
$image->setFontProperties([
'FontName' => 'Forgotte.ttf', 'FontSize' => 10,
'R' => 80, 'G' => 80, 'B' => 80
]);
$pieChart = new Pie($image, $data);
$pieChart->setSliceColor(0, ['R' => 143, 'G' => 197, 'B' => 0]);
$pieChart->setSliceColor(1, ['R' => 97, 'G' => 77, 'B' => 63]);
$pieChart->setSliceColor(2, ['R' => 97, 'G' => 113, 'B' => 63]);
$pieChart->draw3DPie(120, 125, ['SecondPass' => false]);
$pieChart->draw3DPie(340, 125, ['DrawLabels' => true, 'Border' => true]);
$image->setShadow(
true,
['X' => 3, 'Y' => 3, 'R' => 0, 'G' => 0, 'B' => 0, 'Alpha' => 10]
);
$pieChart->draw3DPie(
560,
125,
['WriteValues' => true, 'DataGapAngle' => 10, 'DataGapRadius' => 6, 'Border' => true]
);
$image->setFontProperties(['FontName' => 'pf_arma_five.ttf', 'FontSize' => 6]);
$image->setShadow(
true,
['X' => 1, 'Y' => 1, 'R' => 0, 'G' => 0, 'B' => 0, 'Alpha' => 20]
);
$image->drawText(
120,
200,
'Single AA pass',
[
'DrawBox' => true, 'BoxRounded' => true, 'R' => 0, 'G' => 0, 'B' => 0,
'Align' => TEXT_ALIGN_TOPMIDDLE
]
);
$image->drawText(
440,
200,
'Extended AA pass / Splitted',
[
'DrawBox' => true, 'BoxRounded' => true, 'R' => 0, 'G' => 0, 'B' => 0,
'Align' => TEXT_ALIGN_TOPMIDDLE
]
);
$image->setFontProperties([
'FontName' => 'Silkscreen.ttf', 'FontSize' => 6,
'R' => 255, 'G' => 255, 'B' => 255
]);
$pieChart->drawPieLegend(
600,
8,
['Style' => LEGEND_NOBORDER, 'Mode' => LEGEND_HORIZONTAL]
);
$filename = $this->tester->getOutputPathForChart('draw3DPie.png');
$pieChart->pChartObject->render($filename);
$pieChart->pChartObject->stroke();
$this->tester->seeFileFound($filename);
}
public function test3dRingRender()
{
$data = new Data();
$data->addPoints([50, 2, 3, 4, 7, 10, 25, 48, 41, 10], 'ScoreA');
$data->setSerieDescription('ScoreA', 'Application A');
$data->addPoints(
['A0', 'B1', 'C2', 'D3', 'E4', 'F5', 'G6', 'H7', 'I8', 'J9'],
'Labels'
);
$data->setAbscissa('Labels');
$image = new Image(400, 400, $data);
$settings = [
'R' => 170, 'G' => 183, 'B' => 87, 'Dash' => 1, 'DashR' => 190,
'DashG' => 203, 'DashB' => 107
];
$image->drawFilledRectangle(0, 0, 400, 400, $settings);
$settings = [
'StartR' => 219, 'StartG' => 231, 'StartB' => 139, 'EndR' => 1,
'EndG' => 138, 'EndB' => 68, 'Alpha' => 50
];
$image->drawGradientArea(0, 0, 400, 400, DIRECTION_VERTICAL, $settings);
$image->drawGradientArea(
0,
0,
400,
20,
DIRECTION_VERTICAL,
[
'StartR' => 0, 'StartG' => 0, 'StartB' => 0, 'EndR' => 50, 'EndG' => 50,
'EndB' => 50, 'Alpha' => 100
]
);
$image->drawRectangle(0, 0, 399, 399, ['R' => 0, 'G' => 0, 'B' => 0]);
$image->setFontProperties(['FontName' => 'Silkscreen.ttf', 'FontSize' => 6]);
$image->drawText(
10,
13,
'pPie - Draw 3D ring charts',
['R' => 255, 'G' => 255, 'B' => 255]
);
$image->setFontProperties([
'FontName' => 'Forgotte.ttf',
'FontSize' => 10,
'R' => 80,
'G' => 80,
'B' => 80
]);
$image->setShadow(
true,
['X' => 2, 'Y' => 2, 'R' => 0, 'G' => 0, 'B' => 0, 'Alpha' => 50]
);
$pieChart = new Pie($image, $data);
$pieChart->draw3DRing(
200,
200,
['DrawLabels' => true, 'LabelStacked' => true, 'Border' => true]
);
$pieChart->drawPieLegend(
80,
360,
['Mode' => LEGEND_HORIZONTAL, 'Style' => LEGEND_NOBORDER, 'Alpha' => 20]
);
$filename = $this->tester->getOutputPathForChart('draw3DRing.png');
$pieChart->pChartObject->render($filename);
$pieChart->pChartObject->stroke();
$this->tester->seeFileFound($filename);
}
}