Issue2931Test.php 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. <?php
  2. namespace PhpOffice\PhpSpreadsheetTests\Chart;
  3. use PhpOffice\PhpSpreadsheet\Chart\Chart;
  4. use PhpOffice\PhpSpreadsheet\Chart\DataSeries;
  5. use PhpOffice\PhpSpreadsheet\Chart\DataSeriesValues;
  6. use PhpOffice\PhpSpreadsheet\Chart\Legend as ChartLegend;
  7. use PhpOffice\PhpSpreadsheet\Chart\PlotArea;
  8. use PhpOffice\PhpSpreadsheet\Chart\Title;
  9. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  10. use PhpOffice\PhpSpreadsheet\Writer\Xlsx as XlsxWriter;
  11. use PHPUnit\Framework\TestCase;
  12. class Issue2931Test extends TestCase
  13. {
  14. public function testSurface(): void
  15. {
  16. $spreadsheet = new Spreadsheet();
  17. $sheet = $spreadsheet->getActiveSheet();
  18. $dataSeriesLabels = [
  19. new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, null, null, 1, ['5-6']),
  20. new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, null, null, 1, ['6-7']),
  21. new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, null, null, 1, ['7-8']),
  22. ];
  23. $xAxisTickValues = [
  24. new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, null, null, 9, [1, 2, 3, 4, 5, 6, 7, 8, 9]),
  25. ];
  26. $dataSeriesValues = [
  27. new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, null, null, 9, [6, 6, 6, 6, 6, 6, 5.9, 6, 6]),
  28. new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, null, null, 9, [6, 6, 6, 6.5, 7, 7, 7, 7, 7]),
  29. new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, null, null, 9, [6, 6, 6, 7, 8, 8, 8, 8, 7.9]),
  30. ];
  31. $series = new DataSeries(
  32. DataSeries::TYPE_SURFACECHART,
  33. DataSeries::GROUPING_STANDARD, // grouping should not be written for surface chart
  34. range(0, count($dataSeriesValues) - 1),
  35. $dataSeriesLabels,
  36. $xAxisTickValues,
  37. $dataSeriesValues,
  38. null, // plotDirection
  39. false, // smooth line
  40. DataSeries::STYLE_LINEMARKER // plotStyle
  41. );
  42. $plotArea = new PlotArea(null, [$series]);
  43. $legend = new ChartLegend(ChartLegend::POSITION_BOTTOM, null, false);
  44. $title = new Title('График распредления температур в пределах кр');
  45. $chart = new Chart(
  46. 'chart2',
  47. $title,
  48. $legend,
  49. $plotArea,
  50. true,
  51. DataSeries::EMPTY_AS_GAP,
  52. );
  53. $chart->setTopLeftPosition('$A$1');
  54. $chart->setBottomRightPosition('$P$20');
  55. $sheet->addChart($chart);
  56. $writer = new XlsxWriter($spreadsheet);
  57. $writer->setIncludeCharts(true);
  58. $writer = new XlsxWriter($spreadsheet);
  59. $writer->setIncludeCharts(true);
  60. $writerChart = new XlsxWriter\Chart($writer);
  61. $data = $writerChart->writeChart($chart);
  62. // rotX etc. should be generated for surfaceChart 2D
  63. // even when unspecified.
  64. $expectedXml2D = [
  65. '<c:view3D><c:rotX val="90"/><c:rotY val="0"/><c:rAngAx val="0"/><c:perspective val="0"/></c:view3D>',
  66. ];
  67. $expectedXml3D = [
  68. '<c:view3D/>',
  69. ];
  70. $expectedXmlNoX = [
  71. 'c:grouping',
  72. ];
  73. // confirm that file contains expected tags
  74. foreach ($expectedXml2D as $expected) {
  75. self::assertSame(1, substr_count($data, $expected), $expected);
  76. }
  77. foreach ($expectedXmlNoX as $expected) {
  78. self::assertSame(0, substr_count($data, $expected), $expected);
  79. }
  80. $series->setPlotType(DataSeries::TYPE_SURFACECHART_3D);
  81. $plotArea = new PlotArea(null, [$series]);
  82. $chart->setPlotArea($plotArea);
  83. $writerChart = new XlsxWriter\Chart($writer);
  84. $data = $writerChart->writeChart($chart);
  85. // confirm that file contains expected tags
  86. foreach ($expectedXml3D as $expected) {
  87. self::assertSame(1, substr_count($data, $expected), $expected);
  88. }
  89. foreach ($expectedXmlNoX as $expected) {
  90. self::assertSame(0, substr_count($data, $expected), $expected);
  91. }
  92. $spreadsheet->disconnectWorksheets();
  93. }
  94. }