Introduce identical functional tests across several formats
This commit is contained in:
parent
11b055b29f
commit
32a55a3f13
|
@ -0,0 +1,35 @@
|
|||
<?php
|
||||
|
||||
namespace PhpOffice\PhpSpreadsheetTests\Functional;
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\IOFactory;
|
||||
use PhpOffice\PhpSpreadsheet\Shared\File;
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* Base class for functional test to write and reload file on disk across different formats.
|
||||
*/
|
||||
abstract class AbstractFunctional extends TestCase
|
||||
{
|
||||
/**
|
||||
* Write spreadsheet to disk, reload and return it.
|
||||
*
|
||||
* @param Spreadsheet $spreadsheet
|
||||
* @param string $format
|
||||
*
|
||||
* @return Spreadsheet
|
||||
*/
|
||||
protected function writeAndReload(Spreadsheet $spreadsheet, $format)
|
||||
{
|
||||
$filename = tempnam(File::sysGetTempDir(), 'phpspreadsheet-test');
|
||||
$writer = IOFactory::createWriter($spreadsheet, $format);
|
||||
$writer->save($filename);
|
||||
|
||||
$reader = IOFactory::createReader($format);
|
||||
$reloadedSpreadsheet = $reader->load($filename);
|
||||
unlink($filename);
|
||||
|
||||
return $reloadedSpreadsheet;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,37 @@
|
|||
<?php
|
||||
|
||||
namespace PhpOffice\PhpSpreadsheetTests\Functional;
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
class Enclosure extends AbstractFunctional
|
||||
{
|
||||
public function providerFormats()
|
||||
{
|
||||
return [
|
||||
['Html'],
|
||||
['Xls'],
|
||||
['Xlsx'],
|
||||
['Ods'],
|
||||
['Csv'],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider providerFormats
|
||||
*
|
||||
* @param string $format
|
||||
*/
|
||||
public function testEnclosure($format)
|
||||
{
|
||||
$value = '<img alt="" src="http://example.com/image.jpg" />';
|
||||
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$spreadsheet->getActiveSheet()->getCell('A1')->setValue($value);
|
||||
|
||||
$reloadedSpreadsheet = $this->writeAndReload($spreadsheet, $format);
|
||||
|
||||
$actual = $reloadedSpreadsheet->getActiveSheet()->getCell('A1')->getCalculatedValue();
|
||||
self::assertSame($value, $actual, 'should be able to write and read strings with multiples quotes');
|
||||
}
|
||||
}
|
|
@ -0,0 +1,40 @@
|
|||
<?php
|
||||
|
||||
namespace PhpOffice\PhpSpreadsheetTests\Functional;
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
class FreezePane extends AbstractFunctional
|
||||
{
|
||||
public function providerFormats()
|
||||
{
|
||||
return [
|
||||
['Xls'],
|
||||
['Xlsx'],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider providerFormats
|
||||
*
|
||||
* @param string $format
|
||||
*/
|
||||
public function testFreezePane($format)
|
||||
{
|
||||
$cellSplit = 'B2';
|
||||
$topLeftCell = 'E5';
|
||||
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$spreadsheet->getActiveSheet()->freezePane($cellSplit, $topLeftCell);
|
||||
|
||||
$reloadedSpreadsheet = $this->writeAndReload($spreadsheet, $format);
|
||||
|
||||
// Read written file
|
||||
$reloadedActive = $reloadedSpreadsheet->getActiveSheet();
|
||||
$actualCellSplit = $reloadedActive->getFreezePane();
|
||||
$actualTopLeftCell = $reloadedActive->getTopLeftCell();
|
||||
|
||||
self::assertSame($cellSplit, $actualCellSplit, 'should be able to set freeze pane');
|
||||
self::assertSame($topLeftCell, $actualTopLeftCell, 'should be able to set the top left cell');
|
||||
}
|
||||
}
|
|
@ -0,0 +1,42 @@
|
|||
<?php
|
||||
|
||||
namespace PhpOffice\PhpSpreadsheetTests\Functional;
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
|
||||
class MergedCells extends AbstractFunctional
|
||||
{
|
||||
public function providerFormats()
|
||||
{
|
||||
return [
|
||||
['Html'],
|
||||
['Xls'],
|
||||
['Xlsx'],
|
||||
['Ods'],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider providerFormats
|
||||
*
|
||||
* @param string $format
|
||||
*/
|
||||
public function testMergedCells($format)
|
||||
{
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$spreadsheet->setActiveSheetIndex(0);
|
||||
$spreadsheet->getActiveSheet()->setCellValue('A1', '1');
|
||||
$spreadsheet->getActiveSheet()->setCellValue('B1', '2');
|
||||
$spreadsheet->getActiveSheet()->setCellValue('A2', '33');
|
||||
$spreadsheet->getActiveSheet()->mergeCells('A2:B2');
|
||||
|
||||
$reloadedSpreadsheet = $this->writeAndReload($spreadsheet, $format);
|
||||
|
||||
$actual = 0;
|
||||
foreach ($reloadedSpreadsheet->getWorksheetIterator() as $worksheet) {
|
||||
$actual += count($worksheet->getMergeCells());
|
||||
}
|
||||
|
||||
self::assertSame(1, $actual, "Format $format failed, could not read 1 merged cell");
|
||||
}
|
||||
}
|
|
@ -1,63 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace PhpOffice\PhpSpreadsheetTests;
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\IOFactory;
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
class MergedCells extends TestCase
|
||||
{
|
||||
public function providerMergedCells()
|
||||
{
|
||||
return [
|
||||
['Html'],
|
||||
['Xls'],
|
||||
['Xlsx'],
|
||||
['Ods'],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider providerMergedCells
|
||||
*
|
||||
* @param string $format
|
||||
*/
|
||||
public function testMergedCells($format)
|
||||
{
|
||||
$filename = tempnam(sys_get_temp_dir(), strtolower($format));
|
||||
$this->writeMergedCells($filename, $format);
|
||||
$actual = $this->readMergedCells($filename, $format);
|
||||
unlink($filename);
|
||||
|
||||
self::assertSame(1, $actual, "Format $format failed, could not read 1 merged cell");
|
||||
}
|
||||
|
||||
private function writeMergedCells($filename, $format)
|
||||
{
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$spreadsheet->setActiveSheetIndex(0);
|
||||
$spreadsheet->getActiveSheet()->setCellValue('A1', '1');
|
||||
$spreadsheet->getActiveSheet()->setCellValue('B1', '2');
|
||||
$spreadsheet->getActiveSheet()->setCellValue('A2', '33');
|
||||
$spreadsheet->getActiveSheet()->mergeCells('A2:B2');
|
||||
|
||||
$writer = IOFactory::createWriter($spreadsheet, $format);
|
||||
|
||||
$writer->save($filename);
|
||||
}
|
||||
|
||||
private function readMergedCells($filename, $format)
|
||||
{
|
||||
$reader = IOFactory::createReader($format);
|
||||
$spreadsheet = $reader->load($filename);
|
||||
$n = 0;
|
||||
foreach ($spreadsheet->getWorksheetIterator() as $worksheet) {
|
||||
foreach ($worksheet->getMergeCells() as $cells) {
|
||||
++$n;
|
||||
}
|
||||
}
|
||||
|
||||
return $n;
|
||||
}
|
||||
}
|
|
@ -2,35 +2,14 @@
|
|||
|
||||
namespace PhpOffice\PhpSpreadsheetTests\Reader;
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Reader\Csv as ReaderCsv;
|
||||
use PhpOffice\PhpSpreadsheet\Shared\File;
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
use PhpOffice\PhpSpreadsheet\Writer\Csv as WriterCsv;
|
||||
use PhpOffice\PhpSpreadsheet\Reader\Csv;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
class CsvTest extends TestCase
|
||||
{
|
||||
public function testEnclosure()
|
||||
{
|
||||
$value = '<img alt="" src="http://example.com/image.jpg" />';
|
||||
$filename = tempnam(File::sysGetTempDir(), 'phpspreadsheet');
|
||||
|
||||
// Write temp file with value
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$spreadsheet->getActiveSheet()->getCell('A1')->setValue($value);
|
||||
$writer = new WriterCsv($spreadsheet);
|
||||
$writer->save($filename);
|
||||
|
||||
// Read written file
|
||||
$reader = new ReaderCsv();
|
||||
$reloadedSpreadsheet = $reader->load($filename);
|
||||
$actual = $reloadedSpreadsheet->getActiveSheet()->getCell('A1')->getCalculatedValue();
|
||||
self::assertSame($value, $actual, 'should be able to write and read strings with multiples quotes');
|
||||
}
|
||||
|
||||
public function testDelimiterDetection()
|
||||
{
|
||||
$reader = new ReaderCsv();
|
||||
$reader = new Csv();
|
||||
self::assertNull($reader->getDelimiter());
|
||||
|
||||
$filename = __DIR__ . '/../../data/Reader/CSV/semicolon_separated.csv';
|
||||
|
|
|
@ -1,37 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace PhpOffice\PhpSpreadsheetTests\Reader;
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Reader\Xls as ReaderXls;
|
||||
use PhpOffice\PhpSpreadsheet\Shared\File;
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
use PhpOffice\PhpSpreadsheet\Writer\Xls as WriterXls;
|
||||
use PHPUnit_Framework_TestCase;
|
||||
|
||||
class XlsTest extends PHPUnit_Framework_TestCase
|
||||
{
|
||||
public function testFreezePane()
|
||||
{
|
||||
$filename = tempnam(File::sysGetTempDir(), 'phpspreadsheet');
|
||||
|
||||
$cellSplit = 'B2';
|
||||
$topLeftCell = 'E5';
|
||||
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$active = $spreadsheet->getActiveSheet();
|
||||
$active->freezePane($cellSplit, $topLeftCell);
|
||||
|
||||
$writer = new WriterXls($spreadsheet);
|
||||
$writer->save($filename);
|
||||
|
||||
// Read written file
|
||||
$reader = new ReaderXls();
|
||||
$reloadedSpreadsheet = $reader->load($filename);
|
||||
$reloadedActive = $reloadedSpreadsheet->getActiveSheet();
|
||||
$actualCellSplit = $reloadedActive->getFreezePane();
|
||||
$actualTopLeftCell = $reloadedActive->getTopLeftCell();
|
||||
|
||||
self::assertSame($cellSplit, $actualCellSplit, 'should be able to set freeze pane');
|
||||
self::assertSame($topLeftCell, $actualTopLeftCell, 'should be able to set the top left cell');
|
||||
}
|
||||
}
|
|
@ -2,10 +2,7 @@
|
|||
|
||||
namespace PhpOffice\PhpSpreadsheetTests\Reader;
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Reader\Xlsx as ReaderXlsx;
|
||||
use PhpOffice\PhpSpreadsheet\Shared\File;
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
use PhpOffice\PhpSpreadsheet\Writer\Xlsx as WriterXlsx;
|
||||
use PhpOffice\PhpSpreadsheet\Reader\Xlsx;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
class XlsxTest extends TestCase
|
||||
|
@ -16,32 +13,7 @@ class XlsxTest extends TestCase
|
|||
public function testLoadXlsxWithoutCellReference()
|
||||
{
|
||||
$filename = './data/Reader/XLSX/without_cell_reference.xlsx';
|
||||
$reader = new ReaderXlsx();
|
||||
$reader = new Xlsx();
|
||||
$reader->load($filename);
|
||||
}
|
||||
|
||||
public function testFreezePane()
|
||||
{
|
||||
$filename = tempnam(File::sysGetTempDir(), 'phpspreadsheet');
|
||||
|
||||
$cellSplit = 'B2';
|
||||
$topLeftCell = 'E5';
|
||||
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$active = $spreadsheet->getActiveSheet();
|
||||
$active->freezePane($cellSplit, $topLeftCell);
|
||||
|
||||
$writer = new WriterXlsx($spreadsheet);
|
||||
$writer->save($filename);
|
||||
|
||||
// Read written file
|
||||
$reader = new ReaderXlsx();
|
||||
$reloadedSpreadsheet = $reader->load($filename);
|
||||
$reloadedActive = $reloadedSpreadsheet->getActiveSheet();
|
||||
$actualCellSplit = $reloadedActive->getFreezePane();
|
||||
$actualTopLeftCell = $reloadedActive->getTopLeftCell();
|
||||
|
||||
self::assertSame($cellSplit, $actualCellSplit, 'should be able to set freeze pane');
|
||||
self::assertSame($topLeftCell, $actualTopLeftCell, 'should be able to set the top left cell');
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue