ChartMethodTest.php 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. <?php
  2. namespace PhpOffice\PhpSpreadsheetTests\Chart;
  3. use PhpOffice\PhpSpreadsheet\Chart\Axis;
  4. use PhpOffice\PhpSpreadsheet\Chart\Chart;
  5. use PhpOffice\PhpSpreadsheet\Chart\DataSeries;
  6. use PhpOffice\PhpSpreadsheet\Chart\DataSeriesValues;
  7. use PhpOffice\PhpSpreadsheet\Chart\Legend as ChartLegend;
  8. use PhpOffice\PhpSpreadsheet\Chart\PlotArea;
  9. use PhpOffice\PhpSpreadsheet\Chart\Title;
  10. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  11. use PHPUnit\Framework\TestCase;
  12. class ChartMethodTest extends TestCase
  13. {
  14. public function testMethodVsConstructor(): void
  15. {
  16. $spreadsheet = new Spreadsheet();
  17. $worksheet = $spreadsheet->getActiveSheet();
  18. $worksheet->fromArray(
  19. [
  20. ['', 2010, 2011, 2012],
  21. ['Q1', 12, 15, 21],
  22. ['Q2', 56, 73, 86],
  23. ['Q3', 52, 61, 69],
  24. ['Q4', 30, 32, 0],
  25. ]
  26. );
  27. // Set the Labels for each data series we want to plot
  28. // Datatype
  29. // Cell reference for data
  30. // Format Code
  31. // Number of datapoints in series
  32. // Data values
  33. // Data Marker
  34. $dataSeriesLabels = [
  35. new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$B$1', null, 1), // 2010
  36. new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$C$1', null, 1), // 2011
  37. new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$D$1', null, 1), // 2012
  38. ];
  39. // Set the X-Axis Labels
  40. // Datatype
  41. // Cell reference for data
  42. // Format Code
  43. // Number of datapoints in series
  44. // Data values
  45. // Data Marker
  46. $xAxisTickValues = [
  47. new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$A$2:$A$5', null, 4), // Q1 to Q4
  48. ];
  49. // Set the Data values for each data series we want to plot
  50. // Datatype
  51. // Cell reference for data
  52. // Format Code
  53. // Number of datapoints in series
  54. // Data values
  55. // Data Marker
  56. $dataSeriesValues = [
  57. new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, 'Worksheet!$B$2:$B$5', null, 4),
  58. new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, 'Worksheet!$C$2:$C$5', null, 4),
  59. new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, 'Worksheet!$D$2:$D$5', null, 4),
  60. ];
  61. // Build the dataseries
  62. $series = new DataSeries(
  63. DataSeries::TYPE_LINECHART, // plotType
  64. DataSeries::GROUPING_PERCENT_STACKED, // plotGrouping
  65. range(0, count($dataSeriesValues) - 1), // plotOrder
  66. $dataSeriesLabels, // plotLabel
  67. $xAxisTickValues, // plotCategory
  68. $dataSeriesValues // plotValues
  69. );
  70. // Set the series in the plot area
  71. $plotArea = new PlotArea(null, [$series]);
  72. $title = new Title('Method vs Constructor test');
  73. $legend = new ChartLegend(ChartLegend::POSITION_TOPRIGHT, null, false);
  74. $xAxis = new Axis();
  75. $yAxis = new Axis();
  76. $xAxisLabel = new Title('X-Axis label');
  77. $yAxisLabel = new Title('Y-Axis label');
  78. $chart1 = new Chart(
  79. 'chart1', // name
  80. $title, // title
  81. $legend, // legend
  82. $plotArea, // plotArea
  83. true, // plotVisibleOnly
  84. DataSeries::EMPTY_AS_GAP, // displayBlanksAs
  85. $xAxisLabel, // xAxisLabel
  86. $yAxisLabel, // yAxisLabel
  87. $xAxis, // xAxis
  88. $yAxis // yAxis
  89. );
  90. $chart2 = new Chart('xyz');
  91. $chart2
  92. ->setName('chart1')
  93. ->setLegend($legend)
  94. ->setPlotArea($plotArea)
  95. ->setPlotVisibleOnly(true)
  96. ->setDisplayBlanksAs(DataSeries::EMPTY_AS_GAP)
  97. ->setChartAxisX($xAxis)
  98. ->setChartAxisY($yAxis)
  99. ->setXAxisLabel($xAxisLabel)
  100. ->setYAxisLabel($yAxisLabel)
  101. ->setTitle($title);
  102. self::assertEquals($chart1, $chart2);
  103. $spreadsheet->disconnectWorksheets();
  104. }
  105. public function testPositions(): void
  106. {
  107. $chart = new Chart('chart1');
  108. $chart->setTopLeftPosition('B3', 2, 4);
  109. self::assertSame('B3', $chart->getTopLeftCell());
  110. self::assertEquals(['X' => 2, 'Y' => 4], $chart->getTopLeftOffset());
  111. self::assertEquals(2, $chart->getTopLeftXOffset());
  112. self::assertEquals(4, $chart->getTopLeftYOffset());
  113. $chart->setTopLeftCell('B5');
  114. self::assertSame('B5', $chart->getTopLeftCell());
  115. self::assertEquals(2, $chart->getTopLeftXOffset());
  116. self::assertEquals(4, $chart->getTopLeftYOffset());
  117. $chart->setTopLeftOffset(6, 8);
  118. self::assertSame('B5', $chart->getTopLeftCell());
  119. self::assertEquals(6, $chart->getTopLeftXOffset());
  120. self::assertEquals(8, $chart->getTopLeftYOffset());
  121. $chart->setbottomRightPosition('H9', 3, 5);
  122. self::assertSame('H9', $chart->getBottomRightCell());
  123. self::assertEquals(['X' => 3, 'Y' => 5], $chart->getBottomRightOffset());
  124. self::assertEquals(3, $chart->getBottomRightXOffset());
  125. self::assertEquals(5, $chart->getBottomRightYOffset());
  126. $chart->setbottomRightCell('H11');
  127. self::assertSame('H11', $chart->getBottomRightCell());
  128. self::assertEquals(3, $chart->getBottomRightXOffset());
  129. self::assertEquals(5, $chart->getBottomRightYOffset());
  130. $chart->setbottomRightOffset(7, 9);
  131. self::assertSame('H11', $chart->getBottomRightCell());
  132. self::assertEquals(7, $chart->getBottomRightXOffset());
  133. self::assertEquals(9, $chart->getBottomRightYOffset());
  134. }
  135. }