aef4d711f5
Because even if it doesn't make a difference in practice, it is technically more correct to call static methods statically. It also better advertise that those methods can be used from any context.
230 lines
8.1 KiB
PHP
230 lines
8.1 KiB
PHP
<?php
|
|
|
|
namespace PhpOffice\PhpSpreadsheetTests\Reader;
|
|
|
|
use PhpOffice\PhpSpreadsheet\Cell\DataType;
|
|
use PhpOffice\PhpSpreadsheet\Reader\Ods;
|
|
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
|
use PhpOffice\PhpSpreadsheet\Style\Font;
|
|
use PHPUnit_Framework_TestCase;
|
|
|
|
/**
|
|
* @todo The class doesn't read the bold/italic/underline properties (rich text)
|
|
*/
|
|
class OdsTest extends PHPUnit_Framework_TestCase
|
|
{
|
|
/**
|
|
* @var Spreadsheet
|
|
*/
|
|
private $spreadsheetOOCalcTest;
|
|
|
|
/**
|
|
* @var Spreadsheet
|
|
*/
|
|
private $spreadsheetData;
|
|
|
|
/**
|
|
* @return Spreadsheet
|
|
*/
|
|
protected function loadOOCalcTestFile()
|
|
{
|
|
if (!$this->spreadsheetOOCalcTest) {
|
|
$filename = __DIR__ . '/../../../samples/templates/OOCalcTest.ods';
|
|
|
|
// Load into this instance
|
|
$reader = new Ods();
|
|
$this->spreadsheetOOCalcTest = $reader->loadIntoExisting($filename, new Spreadsheet());
|
|
}
|
|
|
|
return $this->spreadsheetOOCalcTest;
|
|
}
|
|
|
|
/**
|
|
* @return Spreadsheet
|
|
*/
|
|
protected function loadDataFile()
|
|
{
|
|
if (!$this->spreadsheetData) {
|
|
$filename = __DIR__ . '/../../data/Reader/Ods/data.ods';
|
|
|
|
// Load into this instance
|
|
$reader = new Ods();
|
|
$this->spreadsheetData = $reader->loadIntoExisting($filename, new Spreadsheet());
|
|
}
|
|
|
|
return $this->spreadsheetData;
|
|
}
|
|
|
|
public function testReadFileProperties()
|
|
{
|
|
$filename = __DIR__ . '/../../data/Reader/Ods/data.ods';
|
|
|
|
// Load into this instance
|
|
$reader = new Ods();
|
|
|
|
// Test "listWorksheetNames" method
|
|
|
|
self::assertEquals([
|
|
'Sheet1',
|
|
'Second Sheet',
|
|
], $reader->listWorksheetNames($filename));
|
|
}
|
|
|
|
public function testLoadWorksheets()
|
|
{
|
|
$spreadsheet = $this->loadDataFile();
|
|
|
|
self::assertInstanceOf('PhpOffice\PhpSpreadsheet\Spreadsheet', $spreadsheet);
|
|
|
|
self::assertEquals(2, $spreadsheet->getSheetCount());
|
|
|
|
$firstSheet = $spreadsheet->getSheet(0);
|
|
self::assertInstanceOf('PhpOffice\PhpSpreadsheet\Worksheet', $firstSheet);
|
|
|
|
$secondSheet = $spreadsheet->getSheet(1);
|
|
self::assertInstanceOf('PhpOffice\PhpSpreadsheet\Worksheet', $secondSheet);
|
|
}
|
|
|
|
public function testReadValueAndComments()
|
|
{
|
|
$spreadsheet = $this->loadOOCalcTestFile();
|
|
|
|
$firstSheet = $spreadsheet->getSheet(0);
|
|
|
|
self::assertEquals(29, $firstSheet->getHighestRow());
|
|
self::assertEquals('N', $firstSheet->getHighestColumn());
|
|
|
|
// Simple cell value
|
|
self::assertEquals('Test String 1', $firstSheet->getCell('A1')->getValue());
|
|
|
|
// Merged cell
|
|
self::assertEquals('BOX', $firstSheet->getCell('B18')->getValue());
|
|
|
|
// Comments/Annotations
|
|
self::assertEquals(
|
|
'Test for a simple colour-formatted string',
|
|
$firstSheet->getComment('A1')->getText()->getPlainText()
|
|
);
|
|
|
|
// Data types
|
|
self::assertEquals(DataType::TYPE_STRING, $firstSheet->getCell('A1')->getDataType());
|
|
self::assertEquals(DataType::TYPE_NUMERIC, $firstSheet->getCell('B1')->getDataType()); // Int
|
|
|
|
self::assertEquals(DataType::TYPE_NUMERIC, $firstSheet->getCell('B6')->getDataType()); // Float
|
|
self::assertEquals(1.23, $firstSheet->getCell('B6')->getValue());
|
|
self::assertEquals(0, $firstSheet->getCell('G10')->getValue());
|
|
|
|
self::assertEquals(DataType::TYPE_NUMERIC, $firstSheet->getCell('A10')->getDataType()); // Date
|
|
self::assertEquals(22269.0, $firstSheet->getCell('A10')->getValue());
|
|
|
|
self::assertEquals(DataType::TYPE_NUMERIC, $firstSheet->getCell('A13')->getDataType()); // Time
|
|
self::assertEquals(25569.0625, $firstSheet->getCell('A13')->getValue());
|
|
|
|
self::assertEquals(DataType::TYPE_NUMERIC, $firstSheet->getCell('A15')->getDataType()); // Date + Time
|
|
self::assertEquals(22269.0625, $firstSheet->getCell('A15')->getValue());
|
|
|
|
self::assertEquals(DataType::TYPE_NUMERIC, $firstSheet->getCell('A11')->getDataType()); // Fraction
|
|
|
|
self::assertEquals(DataType::TYPE_BOOL, $firstSheet->getCell('D6')->getDataType());
|
|
self::assertTrue($firstSheet->getCell('D6')->getValue());
|
|
|
|
self::assertEquals(DataType::TYPE_FORMULA, $firstSheet->getCell('C6')->getDataType()); // Formula
|
|
self::assertEquals('=TRUE()', $firstSheet->getCell('C6')->getValue()); // Formula
|
|
|
|
/*
|
|
* Percentage, Currency
|
|
*/
|
|
|
|
$spreadsheet = $this->loadDataFile();
|
|
|
|
$firstSheet = $spreadsheet->getSheet(0);
|
|
|
|
self::assertEquals(DataType::TYPE_NUMERIC, $firstSheet->getCell('A1')->getDataType()); // Percentage (10%)
|
|
self::assertEquals(0.1, $firstSheet->getCell('A1')->getValue());
|
|
|
|
self::assertEquals(DataType::TYPE_NUMERIC, $firstSheet->getCell('A2')->getDataType()); // Percentage (10.00%)
|
|
self::assertEquals(0.1, $firstSheet->getCell('A2')->getValue());
|
|
|
|
self::assertEquals(DataType::TYPE_NUMERIC, $firstSheet->getCell('A4')->getDataType()); // Currency (€10.00)
|
|
self::assertEquals(10, $firstSheet->getCell('A4')->getValue());
|
|
|
|
self::assertEquals(DataType::TYPE_NUMERIC, $firstSheet->getCell('A5')->getDataType()); // Currency ($20)
|
|
self::assertEquals(20, $firstSheet->getCell('A5')->getValue());
|
|
}
|
|
|
|
public function testReadColors()
|
|
{
|
|
$spreadsheet = $this->loadOOCalcTestFile();
|
|
$firstSheet = $spreadsheet->getSheet(0);
|
|
|
|
// Background color
|
|
|
|
$style = $firstSheet->getCell('K3')->getStyle();
|
|
|
|
self::assertEquals('none', $style->getFill()->getFillType());
|
|
self::assertEquals('FFFFFFFF', $style->getFill()->getStartColor()->getARGB());
|
|
self::assertEquals('FF000000', $style->getFill()->getEndColor()->getARGB());
|
|
}
|
|
|
|
public function testReadRichText()
|
|
{
|
|
$spreadsheet = $this->loadOOCalcTestFile();
|
|
$firstSheet = $spreadsheet->getSheet(0);
|
|
|
|
self::assertEquals(
|
|
"I don't know if OOCalc supports Rich Text in the same way as Excel, " .
|
|
'And this row should be autofit height with text wrap',
|
|
$firstSheet->getCell('A28')->getValue()
|
|
);
|
|
}
|
|
|
|
public function testReadCellsWithRepeatedSpaces()
|
|
{
|
|
$spreadsheet = $this->loadDataFile();
|
|
$firstSheet = $spreadsheet->getSheet(0);
|
|
|
|
self::assertEquals('This has 4 spaces before and 2 after ', $firstSheet->getCell('A8')->getValue());
|
|
self::assertEquals('This only one after ', $firstSheet->getCell('A9')->getValue());
|
|
self::assertEquals('Test with DIFFERENT styles and multiple spaces: ', $firstSheet->getCell('A10')->getValue());
|
|
self::assertEquals("test with new \nLines", $firstSheet->getCell('A11')->getValue());
|
|
}
|
|
|
|
public function testReadHyperlinks()
|
|
{
|
|
$spreadsheet = $this->loadOOCalcTestFile();
|
|
$firstSheet = $spreadsheet->getSheet(0);
|
|
|
|
$hyperlink = $firstSheet->getCell('A29');
|
|
|
|
self::assertEquals(DataType::TYPE_STRING, $hyperlink->getDataType());
|
|
self::assertEquals('PHPExcel', $hyperlink->getValue());
|
|
self::assertEquals('http://www.phpexcel.net/', $hyperlink->getHyperlink()->getUrl());
|
|
}
|
|
|
|
/*
|
|
* Below some test for features not implemented yet
|
|
*/
|
|
|
|
public function testReadBoldItalicUnderline()
|
|
{
|
|
$this->markTestIncomplete('Features not implemented yet');
|
|
|
|
$spreadsheet = $this->loadOOCalcTestFile();
|
|
$firstSheet = $spreadsheet->getSheet(0);
|
|
|
|
// Font styles
|
|
|
|
$style = $firstSheet->getCell('A1')->getStyle();
|
|
self::assertEquals('FF000000', $style->getFont()->getColor()->getARGB());
|
|
self::assertEquals(11, $style->getFont()->getSize());
|
|
self::assertEquals(Font::UNDERLINE_NONE, $style->getFont()->getUnderline());
|
|
|
|
$style = $firstSheet->getCell('E3')->getStyle();
|
|
self::assertEquals(Font::UNDERLINE_SINGLE, $style->getFont()->getUnderline());
|
|
|
|
$style = $firstSheet->getCell('E1')->getStyle();
|
|
self::assertTrue($style->getFont()->getBold());
|
|
self::assertTrue($style->getFont()->getItalic());
|
|
}
|
|
}
|