PhpSpreadsheet/tests/PhpSpreadsheetTests/Reader/OdsTest.php

222 lines
8.0 KiB
PHP

<?php
/**
* Created by PhpStorm.
* User: paul
* Date: 2/14/17
* Time: 9:18 PM
*/
namespace PhpOffice\PhpSpreadsheetTests\Reader;
use PhpOffice\PhpSpreadsheet\Cell\DataType;
use PhpOffice\PhpSpreadsheet\Reader\Ods;
use PhpOffice\PhpSpreadsheet\Style\Font;
/*
* @todo Fix sheet name (is not imported correctly)
* @todo Sheets count is incorrect
* @todo The class doesn't read the bold/italic/underline properties
*/
class OdsTest extends \PHPUnit_Framework_TestCase
{
/**
* @var \PhpOffice\PhpSpreadsheet\Spreadsheet
*/
public $spreadsheetOOCalcTest;
/**
* @var \PhpOffice\PhpSpreadsheet\Spreadsheet
*/
public $spreadsheetData;
/**
* @return \PhpOffice\PhpSpreadsheet\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 \PhpOffice\PhpSpreadsheet\Spreadsheet());
}
return $this->spreadsheetOOCalcTest;
}
/**
* @return \PhpOffice\PhpSpreadsheet\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 \PhpOffice\PhpSpreadsheet\Spreadsheet());
}
return $this->spreadsheetData;
}
public function testLoadWorksheets()
{
$spreadsheet = $this->loadDataFile();
$this->assertInstanceOf('PhpOffice\PhpSpreadsheet\Spreadsheet', $spreadsheet);
// $this->assertCount(1, $spreadsheet->getAllSheets());
$firstSheet = $spreadsheet->getSheet(0);
$this->assertInstanceOf('PhpOffice\PhpSpreadsheet\Worksheet', $firstSheet);
$secondSheet = $spreadsheet->getSheet(1);
$this->assertInstanceOf('PhpOffice\PhpSpreadsheet\Worksheet', $secondSheet);
}
public function testReadValueAndComments(){
$spreadsheet = $this->loadOOCalcTestFile();
$firstSheet = $spreadsheet->getSheet(0);
$this->assertEquals(29, $firstSheet->getHighestRow());
$this->assertEquals('N', $firstSheet->getHighestColumn());
// Simple cell value
$this->assertEquals("Test String 1", $firstSheet->getCell("A1")->getValue());
// Merged cell
$this->assertEquals("BOX", $firstSheet->getCell("B18")->getValue());
// Comments/Annotations
$this->assertEquals(
"Test for a simple colour-formatted string",
$firstSheet->getComment("A1")->getText()->getPlainText()
);
// Data types
$this->assertEquals(DataType::TYPE_STRING, $firstSheet->getCell("A1")->getDataType());
$this->assertEquals(DataType::TYPE_NUMERIC, $firstSheet->getCell("B1")->getDataType()); // Int
$this->assertEquals(DataType::TYPE_NUMERIC, $firstSheet->getCell("B6")->getDataType()); // Float
$this->assertEquals(1.23, $firstSheet->getCell("B6")->getValue());
$this->assertEquals(0, $firstSheet->getCell("G10")->getValue());
$this->assertEquals(DataType::TYPE_NUMERIC, $firstSheet->getCell("A10")->getDataType()); // Date
$this->assertEquals(22269.0, $firstSheet->getCell("A10")->getValue());
$this->assertEquals(DataType::TYPE_NUMERIC, $firstSheet->getCell("A13")->getDataType()); // Time
$this->assertEquals(25569.0625, $firstSheet->getCell("A13")->getValue());
$this->assertEquals(DataType::TYPE_NUMERIC, $firstSheet->getCell("A15")->getDataType()); // Date + Time
$this->assertEquals(22269.0625, $firstSheet->getCell("A15")->getValue());
$this->assertEquals(DataType::TYPE_NUMERIC, $firstSheet->getCell("A11")->getDataType()); // Fraction
$this->assertEquals(DataType::TYPE_BOOL, $firstSheet->getCell("D6")->getDataType());
$this->assertTrue($firstSheet->getCell("D6")->getValue());
$this->assertEquals(DataType::TYPE_FORMULA, $firstSheet->getCell("C6")->getDataType()); // Formula
$this->assertEquals("=TRUE()", $firstSheet->getCell("C6")->getValue()); // Formula
/*
* Percentage, Currency
*/
$spreadsheet = $this->loadDataFile();
$firstSheet = $spreadsheet->getSheet(0);
$this->assertEquals(DataType::TYPE_NUMERIC, $firstSheet->getCell("A1")->getDataType()); // Percentage (10%)
$this->assertEquals(0.1, $firstSheet->getCell("A1")->getValue());
$this->assertEquals(DataType::TYPE_NUMERIC, $firstSheet->getCell("A2")->getDataType()); // Percentage (10.00%)
$this->assertEquals(0.1, $firstSheet->getCell("A2")->getValue());
$this->assertEquals(DataType::TYPE_NUMERIC, $firstSheet->getCell("A4")->getDataType()); // Currency (€10.00)
$this->assertEquals(10, $firstSheet->getCell("A4")->getValue());
$this->assertEquals(DataType::TYPE_NUMERIC, $firstSheet->getCell("A5")->getDataType()); // Currency ($20)
$this->assertEquals(20, $firstSheet->getCell("A5")->getValue());
}
public function testReadColors()
{
$spreadsheet = $this->loadOOCalcTestFile();
$firstSheet = $spreadsheet->getSheet(0);
// Background color
$style = $firstSheet->getCell("K3")->getStyle();
$this->assertEquals("none", $style->getFill()->getFillType());
$this->assertEquals("FFFFFFFF", $style->getFill()->getStartColor()->getARGB());
$this->assertEquals("FF000000", $style->getFill()->getEndColor()->getARGB());
}
public function testReadRichText(){
$spreadsheet = $this->loadOOCalcTestFile();
$firstSheet = $spreadsheet->getSheet(0);
$this->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);
$this->assertEquals("This has 4 spaces before and 2 after ", $firstSheet->getCell("A8")->getValue());
$this->assertEquals("This only one after ", $firstSheet->getCell("A9")->getValue());
$this->assertEquals("Test with DIFFERENT styles and multiple spaces: ", $firstSheet->getCell("A10")->getValue());
$this->assertEquals("test with new \nLines", $firstSheet->getCell("A11")->getValue());
}
public function testReadHyperlinks(){
$spreadsheet = $this->loadOOCalcTestFile();
$firstSheet = $spreadsheet->getSheet(0);
$hyperlink = $firstSheet->getCell("A29");
$this->assertEquals(DataType::TYPE_STRING, $hyperlink->getDataType());
$this->assertEquals("PHPExcel", $hyperlink->getValue());
$this->assertEquals("http://www.phpexcel.net/", $hyperlink->getHyperlink()->getUrl());
}
/*
* Below some test for features not implemented yet
*/
public function testReadBoldItalicUnderline()
{
$this->markTestSkipped("Features not implemented yet");
$spreadsheet = $this->loadOOCalcTestFile();
$firstSheet = $spreadsheet->getSheet(0);
// Font styles
$style = $firstSheet->getCell("A1")->getStyle();
$this->assertEquals("FF000000", $style->getFont()->getColor()->getARGB());
$this->assertEquals(11, $style->getFont()->getSize());
$this->assertEquals(Font::UNDERLINE_NONE, $style->getFont()->getUnderline());
$style = $firstSheet->getCell("E3")->getStyle();
$this->assertEquals(Font::UNDERLINE_SINGLE, $style->getFont()->getUnderline());
$style = $firstSheet->getCell("E1")->getStyle();
$this->assertTrue($style->getFont()->getBold());
$this->assertTrue($style->getFont()->getItalic());
}
}