Skip to content

Commit 32a55a3

Browse files
committed
Introduce identical functional tests across several formats
1 parent 11b055b commit 32a55a3

File tree

8 files changed

+158
-153
lines changed

8 files changed

+158
-153
lines changed
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
<?php
2+
3+
namespace PhpOffice\PhpSpreadsheetTests\Functional;
4+
5+
use PhpOffice\PhpSpreadsheet\IOFactory;
6+
use PhpOffice\PhpSpreadsheet\Shared\File;
7+
use PhpOffice\PhpSpreadsheet\Spreadsheet;
8+
use PHPUnit\Framework\TestCase;
9+
10+
/**
11+
* Base class for functional test to write and reload file on disk across different formats.
12+
*/
13+
abstract class AbstractFunctional extends TestCase
14+
{
15+
/**
16+
* Write spreadsheet to disk, reload and return it.
17+
*
18+
* @param Spreadsheet $spreadsheet
19+
* @param string $format
20+
*
21+
* @return Spreadsheet
22+
*/
23+
protected function writeAndReload(Spreadsheet $spreadsheet, $format)
24+
{
25+
$filename = tempnam(File::sysGetTempDir(), 'phpspreadsheet-test');
26+
$writer = IOFactory::createWriter($spreadsheet, $format);
27+
$writer->save($filename);
28+
29+
$reader = IOFactory::createReader($format);
30+
$reloadedSpreadsheet = $reader->load($filename);
31+
unlink($filename);
32+
33+
return $reloadedSpreadsheet;
34+
}
35+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<?php
2+
3+
namespace PhpOffice\PhpSpreadsheetTests\Functional;
4+
5+
use PhpOffice\PhpSpreadsheet\Spreadsheet;
6+
7+
class Enclosure extends AbstractFunctional
8+
{
9+
public function providerFormats()
10+
{
11+
return [
12+
['Html'],
13+
['Xls'],
14+
['Xlsx'],
15+
['Ods'],
16+
['Csv'],
17+
];
18+
}
19+
20+
/**
21+
* @dataProvider providerFormats
22+
*
23+
* @param string $format
24+
*/
25+
public function testEnclosure($format)
26+
{
27+
$value = '<img alt="" src="http://example.com/image.jpg" />';
28+
29+
$spreadsheet = new Spreadsheet();
30+
$spreadsheet->getActiveSheet()->getCell('A1')->setValue($value);
31+
32+
$reloadedSpreadsheet = $this->writeAndReload($spreadsheet, $format);
33+
34+
$actual = $reloadedSpreadsheet->getActiveSheet()->getCell('A1')->getCalculatedValue();
35+
self::assertSame($value, $actual, 'should be able to write and read strings with multiples quotes');
36+
}
37+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
<?php
2+
3+
namespace PhpOffice\PhpSpreadsheetTests\Functional;
4+
5+
use PhpOffice\PhpSpreadsheet\Spreadsheet;
6+
7+
class FreezePane extends AbstractFunctional
8+
{
9+
public function providerFormats()
10+
{
11+
return [
12+
['Xls'],
13+
['Xlsx'],
14+
];
15+
}
16+
17+
/**
18+
* @dataProvider providerFormats
19+
*
20+
* @param string $format
21+
*/
22+
public function testFreezePane($format)
23+
{
24+
$cellSplit = 'B2';
25+
$topLeftCell = 'E5';
26+
27+
$spreadsheet = new Spreadsheet();
28+
$spreadsheet->getActiveSheet()->freezePane($cellSplit, $topLeftCell);
29+
30+
$reloadedSpreadsheet = $this->writeAndReload($spreadsheet, $format);
31+
32+
// Read written file
33+
$reloadedActive = $reloadedSpreadsheet->getActiveSheet();
34+
$actualCellSplit = $reloadedActive->getFreezePane();
35+
$actualTopLeftCell = $reloadedActive->getTopLeftCell();
36+
37+
self::assertSame($cellSplit, $actualCellSplit, 'should be able to set freeze pane');
38+
self::assertSame($topLeftCell, $actualTopLeftCell, 'should be able to set the top left cell');
39+
}
40+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
<?php
2+
3+
namespace PhpOffice\PhpSpreadsheetTests\Functional;
4+
5+
use PhpOffice\PhpSpreadsheet\Spreadsheet;
6+
7+
class MergedCells extends AbstractFunctional
8+
{
9+
public function providerFormats()
10+
{
11+
return [
12+
['Html'],
13+
['Xls'],
14+
['Xlsx'],
15+
['Ods'],
16+
];
17+
}
18+
19+
/**
20+
* @dataProvider providerFormats
21+
*
22+
* @param string $format
23+
*/
24+
public function testMergedCells($format)
25+
{
26+
$spreadsheet = new Spreadsheet();
27+
$spreadsheet->setActiveSheetIndex(0);
28+
$spreadsheet->getActiveSheet()->setCellValue('A1', '1');
29+
$spreadsheet->getActiveSheet()->setCellValue('B1', '2');
30+
$spreadsheet->getActiveSheet()->setCellValue('A2', '33');
31+
$spreadsheet->getActiveSheet()->mergeCells('A2:B2');
32+
33+
$reloadedSpreadsheet = $this->writeAndReload($spreadsheet, $format);
34+
35+
$actual = 0;
36+
foreach ($reloadedSpreadsheet->getWorksheetIterator() as $worksheet) {
37+
$actual += count($worksheet->getMergeCells());
38+
}
39+
40+
self::assertSame(1, $actual, "Format $format failed, could not read 1 merged cell");
41+
}
42+
}

tests/PhpSpreadsheetTests/MergedCells.php

Lines changed: 0 additions & 63 deletions
This file was deleted.

tests/PhpSpreadsheetTests/Reader/CsvTest.php

Lines changed: 2 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -2,35 +2,14 @@
22

33
namespace PhpOffice\PhpSpreadsheetTests\Reader;
44

5-
use PhpOffice\PhpSpreadsheet\Reader\Csv as ReaderCsv;
6-
use PhpOffice\PhpSpreadsheet\Shared\File;
7-
use PhpOffice\PhpSpreadsheet\Spreadsheet;
8-
use PhpOffice\PhpSpreadsheet\Writer\Csv as WriterCsv;
5+
use PhpOffice\PhpSpreadsheet\Reader\Csv;
96
use PHPUnit\Framework\TestCase;
107

118
class CsvTest extends TestCase
129
{
13-
public function testEnclosure()
14-
{
15-
$value = '<img alt="" src="http://example.com/image.jpg" />';
16-
$filename = tempnam(File::sysGetTempDir(), 'phpspreadsheet');
17-
18-
// Write temp file with value
19-
$spreadsheet = new Spreadsheet();
20-
$spreadsheet->getActiveSheet()->getCell('A1')->setValue($value);
21-
$writer = new WriterCsv($spreadsheet);
22-
$writer->save($filename);
23-
24-
// Read written file
25-
$reader = new ReaderCsv();
26-
$reloadedSpreadsheet = $reader->load($filename);
27-
$actual = $reloadedSpreadsheet->getActiveSheet()->getCell('A1')->getCalculatedValue();
28-
self::assertSame($value, $actual, 'should be able to write and read strings with multiples quotes');
29-
}
30-
3110
public function testDelimiterDetection()
3211
{
33-
$reader = new ReaderCsv();
12+
$reader = new Csv();
3413
self::assertNull($reader->getDelimiter());
3514

3615
$filename = __DIR__ . '/../../data/Reader/CSV/semicolon_separated.csv';

tests/PhpSpreadsheetTests/Reader/XlsTest.php

Lines changed: 0 additions & 37 deletions
This file was deleted.

tests/PhpSpreadsheetTests/Reader/XlsxTest.php

Lines changed: 2 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,7 @@
22

33
namespace PhpOffice\PhpSpreadsheetTests\Reader;
44

5-
use PhpOffice\PhpSpreadsheet\Reader\Xlsx as ReaderXlsx;
6-
use PhpOffice\PhpSpreadsheet\Shared\File;
7-
use PhpOffice\PhpSpreadsheet\Spreadsheet;
8-
use PhpOffice\PhpSpreadsheet\Writer\Xlsx as WriterXlsx;
5+
use PhpOffice\PhpSpreadsheet\Reader\Xlsx;
96
use PHPUnit\Framework\TestCase;
107

118
class XlsxTest extends TestCase
@@ -16,32 +13,7 @@ class XlsxTest extends TestCase
1613
public function testLoadXlsxWithoutCellReference()
1714
{
1815
$filename = './data/Reader/XLSX/without_cell_reference.xlsx';
19-
$reader = new ReaderXlsx();
16+
$reader = new Xlsx();
2017
$reader->load($filename);
2118
}
22-
23-
public function testFreezePane()
24-
{
25-
$filename = tempnam(File::sysGetTempDir(), 'phpspreadsheet');
26-
27-
$cellSplit = 'B2';
28-
$topLeftCell = 'E5';
29-
30-
$spreadsheet = new Spreadsheet();
31-
$active = $spreadsheet->getActiveSheet();
32-
$active->freezePane($cellSplit, $topLeftCell);
33-
34-
$writer = new WriterXlsx($spreadsheet);
35-
$writer->save($filename);
36-
37-
// Read written file
38-
$reader = new ReaderXlsx();
39-
$reloadedSpreadsheet = $reader->load($filename);
40-
$reloadedActive = $reloadedSpreadsheet->getActiveSheet();
41-
$actualCellSplit = $reloadedActive->getFreezePane();
42-
$actualTopLeftCell = $reloadedActive->getTopLeftCell();
43-
44-
self::assertSame($cellSplit, $actualCellSplit, 'should be able to set freeze pane');
45-
self::assertSame($topLeftCell, $actualTopLeftCell, 'should be able to set the top left cell');
46-
}
4719
}

0 commit comments

Comments
 (0)