Skip to content

Commit f3e2eba

Browse files
committed
Additional Coverage
1 parent abf357e commit f3e2eba

File tree

10 files changed

+149
-24
lines changed

10 files changed

+149
-24
lines changed

src/PhpSpreadsheet/Writer/Ods/Settings.php

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -88,9 +88,7 @@ private function writeWorksheetSettings(XMLWriter $objWriter, Worksheet $workshe
8888
$objWriter->writeAttribute('config:name', $worksheet->getTitle());
8989

9090
$this->writeSelectedCells($objWriter, $worksheet);
91-
if ($worksheet->getFreezePane() !== null) {
92-
$this->writeFreezePane($objWriter, $worksheet);
93-
}
91+
$this->writeFreezePane($objWriter, $worksheet);
9492

9593
$objWriter->endElement(); // config:config-item-map-entry Worksheet
9694
}
@@ -125,7 +123,7 @@ private function writeSplitValue(XMLWriter $objWriter, string $splitMode, string
125123

126124
private function writeFreezePane(XMLWriter $objWriter, Worksheet $worksheet): void
127125
{
128-
$freezePane = CellAddress::fromCellAddress($worksheet->getFreezePane() ?? '');
126+
$freezePane = CellAddress::fromCellAddress($worksheet->getFreezePane() ?? 'A1');
129127
if ($freezePane->cellAddress() === 'A1') {
130128
return;
131129
}

src/PhpSpreadsheet/Writer/Xls/CellDataValidation.php

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -47,32 +47,20 @@ public static function type(DataValidation $dataValidation): int
4747
{
4848
$validationType = $dataValidation->getType();
4949

50-
if (array_key_exists($validationType, self::$validationTypeMap)) {
51-
return self::$validationTypeMap[$validationType];
52-
}
53-
54-
return self::$validationTypeMap[DataValidation::TYPE_NONE];
50+
return self::$validationTypeMap[$validationType] ?? self::$validationTypeMap[DataValidation::TYPE_NONE];
5551
}
5652

5753
public static function errorStyle(DataValidation $dataValidation): int
5854
{
5955
$errorStyle = $dataValidation->getErrorStyle();
6056

61-
if (array_key_exists($errorStyle, self::$errorStyleMap)) {
62-
return self::$errorStyleMap[$errorStyle];
63-
}
64-
65-
return self::$errorStyleMap[DataValidation::STYLE_STOP];
57+
return self::$errorStyleMap[$errorStyle] ?? self::$errorStyleMap[DataValidation::STYLE_STOP];
6658
}
6759

6860
public static function operator(DataValidation $dataValidation): int
6961
{
7062
$operator = $dataValidation->getOperator();
7163

72-
if (array_key_exists($operator, self::$operatorMap)) {
73-
return self::$operatorMap[$operator];
74-
}
75-
76-
return self::$operatorMap[DataValidation::OPERATOR_BETWEEN];
64+
return self::$operatorMap[$operator] ?? self::$operatorMap[DataValidation::OPERATOR_BETWEEN];
7765
}
7866
}

src/PhpSpreadsheet/Writer/Xls/ErrorCode.php

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,6 @@ class ErrorCode
1919

2020
public static function error(string $errorCode): int
2121
{
22-
if (array_key_exists($errorCode, self::$errorCodeMap)) {
23-
return self::$errorCodeMap[$errorCode];
24-
}
25-
26-
return 0;
22+
return self::$errorCodeMap[$errorCode] ?? 0;
2723
}
2824
}

tests/PhpSpreadsheetTests/Reader/Xlsx/Issue4248Test.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ public function testStyles(): void
2828
$reader = new XlsxReader();
2929
$spreadsheet = $reader->load($file);
3030
$writer = new XlsxWriter($spreadsheet);
31+
$writer->setUseDiskCaching(true, sys_get_temp_dir());
3132
$this->outfile = File::temporaryFilename();
3233
$writer->save($this->outfile);
3334
$spreadsheet->disconnectWorksheets();

tests/PhpSpreadsheetTests/Reader/Xlsx/VmlTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ public function testAddComments(): void
3434
$sheet = $spreadsheet->getActiveSheet();
3535
$sheet->getComment('A1')->getText()->createText('top left cell');
3636
$writer = new XlsxWriter($spreadsheet);
37+
$writer->setUseDiskCaching(true, sys_get_temp_dir());
3738
$this->outfile1 = File::temporaryFileName();
3839
$writer->save($this->outfile1);
3940
$spreadsheet->disconnectWorksheets();

tests/PhpSpreadsheetTests/Worksheet/DrawingTest.php

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,15 @@
55
namespace PhpOffice\PhpSpreadsheetTests\Worksheet;
66

77
use PhpOffice\PhpSpreadsheet\Exception as PhpSpreadsheetException;
8+
use PhpOffice\PhpSpreadsheet\Shared\XMLWriter;
89
use PhpOffice\PhpSpreadsheet\Spreadsheet;
910
use PhpOffice\PhpSpreadsheet\Worksheet\Drawing;
1011
use PhpOffice\PhpSpreadsheet\Worksheet\HeaderFooterDrawing;
1112
use PhpOffice\PhpSpreadsheet\Worksheet\MemoryDrawing;
13+
use PhpOffice\PhpSpreadsheet\Writer\Exception as WriterException;
14+
use PhpOffice\PhpSpreadsheet\Writer\Xlsx as XlsxWriter;
1215
use PHPUnit\Framework\TestCase;
16+
use ReflectionMethod;
1317

1418
class DrawingTest extends TestCase
1519
{
@@ -118,4 +122,19 @@ public function testSetWidthAndHeight(): void
118122
self::assertSame(175, $drawing->getWidth());
119123
self::assertSame(234, $drawing->getHeight());
120124
}
125+
126+
public function testBadAddToXml(): void
127+
{
128+
$this->expectException(WriterException::class);
129+
$this->expectExceptionMessage('Invalid parameters passed.');
130+
$drawing = new Drawing();
131+
$drawing->setName('Blue Square');
132+
$drawing->setPath('tests/data/Writer/XLSX/blue_square.png');
133+
$objWriter = new XMLWriter();
134+
$spreadsheet = new Spreadsheet();
135+
$writerXlsx = new XlsxWriter($spreadsheet);
136+
$writerXlsxDrawing = new XlsxWriter\Drawing($writerXlsx);
137+
$reflectionMethod = new ReflectionMethod($writerXlsxDrawing, 'writeDrawing');
138+
$reflectionMethod->invokeArgs($writerXlsxDrawing, [$objWriter, $drawing]);
139+
}
121140
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace PhpOffice\PhpSpreadsheetTests\Writer\Ods;
6+
7+
use PhpOffice\PhpSpreadsheet\Spreadsheet;
8+
use PhpOffice\PhpSpreadsheet\Writer\Ods as OdsWriter;
9+
use PHPUnit\Framework\TestCase;
10+
11+
class FreezeTest extends TestCase
12+
{
13+
public static function testFreeze(): void
14+
{
15+
// We can write FreezePane data to Ods but we cannot yet read it.
16+
$spreadsheet = new Spreadsheet();
17+
$sheet = $spreadsheet->getActiveSheet();
18+
$sheet->fromArray([
19+
['A', 'B', 'C', 'D'],
20+
[1, 2, 3, 4],
21+
]);
22+
$sheet->freezePane('A2');
23+
$writer = new OdsWriter($spreadsheet);
24+
$writerSettings = new OdsWriter\Settings($writer);
25+
$settings = $writerSettings->write();
26+
// The items we are particular interested in below are:
27+
// HorizontalSplitMode, HorizontalSplitPosition
28+
// VerticalSplitMode, VerticalSplitPosition
29+
$expected = '<config:config-item-map-entry config:name="Worksheet">'
30+
. '<config:config-item config:name="CursorPositionX" config:type="int">0</config:config-item>'
31+
. '<config:config-item config:name="CursorPositionY" config:type="int">0</config:config-item>'
32+
. '<config:config-item config:name="HorizontalSplitMode" config:type="short">2</config:config-item>'
33+
. '<config:config-item config:name="HorizontalSplitPosition" config:type="int">0</config:config-item>'
34+
. '<config:config-item config:name="PositionLeft" config:type="short">0</config:config-item>'
35+
. '<config:config-item config:name="PositionRight" config:type="short">0</config:config-item>'
36+
. '<config:config-item config:name="VerticalSplitMode" config:type="short">2</config:config-item>'
37+
. '<config:config-item config:name="VerticalSplitPosition" config:type="int">1</config:config-item>'
38+
. '<config:config-item config:name="PositionTop" config:type="short">0</config:config-item>'
39+
. '<config:config-item config:name="PositionBottom" config:type="short">1</config:config-item>'
40+
. '<config:config-item config:name="ActiveSplitRange" config:type="short">3</config:config-item>'
41+
. '</config:config-item-map-entry>';
42+
self::assertStringContainsString($expected, $settings);
43+
$spreadsheet->disconnectWorksheets();
44+
}
45+
}

tests/PhpSpreadsheetTests/Writer/Xlsx/ArrayFormulaValidationTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ public function testWriteArrayFormulaValidation(string $formula): void
5353

5454
$this->outputFile = File::temporaryFilename();
5555
$writer = new XlsxWriter($spreadsheet);
56+
$writer->setUseDiskCaching(true, sys_get_temp_dir());
5657
$writer->save($this->outputFile);
5758
$spreadsheet->disconnectWorksheets();
5859

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace PhpOffice\PhpSpreadsheetTests\Writer\Xlsx;
6+
7+
use PhpOffice\PhpSpreadsheet\Shared\XMLWriter;
8+
use PhpOffice\PhpSpreadsheet\Spreadsheet;
9+
use PhpOffice\PhpSpreadsheet\Writer\Exception as WriterException;
10+
use PhpOffice\PhpSpreadsheet\Writer\Xlsx as XlsxWriter;
11+
use PHPUnit\Framework\TestCase;
12+
use ReflectionMethod;
13+
14+
class BadParamExceptionTest extends TestCase
15+
{
16+
public function testBadAddToXmlWorkbook(): void
17+
{
18+
$this->expectException(WriterException::class);
19+
$this->expectExceptionMessage('Invalid parameters passed.');
20+
$objWriter = new XMLWriter();
21+
$spreadsheet = new Spreadsheet();
22+
$writerXlsx = new XlsxWriter($spreadsheet);
23+
$writerXlsxWorkbook = new XlsxWriter\Workbook($writerXlsx);
24+
$reflectionMethod = new ReflectionMethod($writerXlsxWorkbook, 'writeSheet');
25+
$reflectionMethod->invokeArgs($writerXlsxWorkbook, [$objWriter, '']);
26+
}
27+
28+
public function testBadAddToXmlRels(): void
29+
{
30+
$this->expectException(WriterException::class);
31+
$this->expectExceptionMessage('Invalid parameters passed.');
32+
$objWriter = new XMLWriter();
33+
$spreadsheet = new Spreadsheet();
34+
$writerXlsx = new XlsxWriter($spreadsheet);
35+
$writerXlsxRels = new XlsxWriter\Rels($writerXlsx);
36+
$reflectionMethod = new ReflectionMethod($writerXlsxRels, 'writeRelationship');
37+
$reflectionMethod->invokeArgs($writerXlsxRels, [$objWriter, '', '', '']);
38+
}
39+
}

tests/PhpSpreadsheetTests/Writer/Xlsx/Issue3443Test.php

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,4 +98,41 @@ public function testDefaultAlign(): void
9898

9999
$reloadedSpreadsheet->disconnectWorksheets();
100100
}
101+
102+
public function testReadOrder(): void
103+
{
104+
$mixedString = 'xאבy'; // both LTR and RTL characters
105+
$spreadsheet = new Spreadsheet();
106+
$sheet = $spreadsheet->getActiveSheet();
107+
// Following Cells will display differently depending on read order.
108+
// PhpSpreadsheet will not show any differences, but Excel will.
109+
$sheet->getCell('A1')->setValue($mixedString);
110+
$sheet->getCell('A2')->setValue($mixedString);
111+
$sheet->getCell('A3')->setValue($mixedString);
112+
$sheet->getStyle('A2')->getAlignment()
113+
->setReadOrder(Alignment::READORDER_LTR);
114+
$sheet->getStyle('A3')->getAlignment()
115+
->setReadOrder(Alignment::READORDER_RTL);
116+
117+
$reloadedSpreadsheet = $this->writeAndReload($spreadsheet, 'Xlsx');
118+
$spreadsheet->disconnectWorksheets();
119+
$rsheet = $reloadedSpreadsheet->getActiveSheet();
120+
self::assertSame($mixedString, $rsheet->getCell('A1')->getFormattedValue());
121+
self::assertSame($mixedString, $rsheet->getCell('A2')->getFormattedValue());
122+
self::assertSame($mixedString, $rsheet->getCell('A3')->getFormattedValue());
123+
self::assertSame(
124+
Alignment::READORDER_CONTEXT,
125+
$rsheet->getStyle('A1')->getAlignment()->getReadOrder()
126+
);
127+
self::assertSame(
128+
Alignment::READORDER_LTR,
129+
$rsheet->getStyle('A2')->getAlignment()->getReadOrder()
130+
);
131+
self::assertSame(
132+
Alignment::READORDER_RTL,
133+
$rsheet->getStyle('A3')->getAlignment()->getReadOrder()
134+
);
135+
136+
$reloadedSpreadsheet->disconnectWorksheets();
137+
}
101138
}

0 commit comments

Comments
 (0)