PhpSpreadsheet/tests/PhpSpreadsheetTests/Collection/CellsTest.php

120 lines
4.9 KiB
PHP
Raw Normal View History

<?php
namespace PhpOffice\PhpSpreadsheetTests\Collection;
use PhpOffice\PhpSpreadsheet\Cell\Cell;
use PhpOffice\PhpSpreadsheet\Collection\Cells;
use PhpOffice\PhpSpreadsheet\Collection\Memory;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
use PHPUnit_Framework_TestCase;
class CellsTest extends PHPUnit_Framework_TestCase
{
public function testCollectionCell()
{
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$collection = $sheet->getCellCollection();
// Assert empty state
self::assertEquals([], $collection->getCoordinates(), 'cell list should be empty');
self::assertEquals([], $collection->getSortedCoordinates(), 'sorted cell list should be empty');
self::assertNull($collection->get('B2'), 'getting non-existing cell must return null');
self::assertFalse($collection->has('B2'), 'non-existing cell should be non-existent');
// Add one cell
$cell1 = $sheet->getCell('B2');
self::assertSame($cell1, $collection->add('B2', $cell1), 'adding a cell should return the cell');
// Assert cell presence
self::assertEquals(['B2'], $collection->getCoordinates(), 'cell list should contains the cell');
self::assertEquals(['B2'], $collection->getSortedCoordinates(), 'sorted cell list contains the cell');
self::assertSame($cell1, $collection->get('B2'), 'should get exact same object');
self::assertTrue($collection->has('B2'), 'cell should exists');
// Add a second cell
$cell2 = $sheet->getCell('A1');
self::assertSame($cell2, $collection->add('A1', $cell2), 'adding a second cell should return the cell');
self::assertEquals(['B2', 'A1'], $collection->getCoordinates(), 'cell list should contains the cell');
self::assertEquals(['A1', 'B2'], $collection->getSortedCoordinates(), 'sorted cell list contains the cell');
// Assert collection copy
$sheet2 = $spreadsheet->createSheet();
$collection2 = $collection->cloneCellCollection($sheet2);
self::assertTrue($collection2->has('A1'));
$copiedCell2 = $collection2->get('A1');
self::assertNotSame($cell2, $copiedCell2, 'copied cell should not be the same object any more');
self::assertSame($collection2, $copiedCell2->getParent(), 'copied cell should be owned by the copied collection');
self::assertSame('A1', $copiedCell2->getCoordinate(), 'copied cell should keep attributes');
// Assert deletion
$collection->delete('B2');
self::assertFalse($collection->has('B2'), 'cell should have been deleted');
self::assertEquals(['A1'], $collection->getCoordinates(), 'cell list should contains the cell');
// Assert update
$cell2 = $sheet->getCell('A1');
self::assertSame($sheet->getCellCollection(), $collection);
self::assertSame($cell2, $collection->update($cell2), 'should update existing cell');
$cell3 = $sheet->getCell('C3');
self::assertSame($cell3, $collection->update($cell3), 'should silently add non-existing cell');
self::assertEquals(['A1', 'C3'], $collection->getCoordinates(), 'cell list should contains the cell');
}
public function testCacheLastCell()
{
$workbook = new Spreadsheet();
$cells = ['A1', 'A2'];
$sheet = $workbook->getActiveSheet();
$sheet->setCellValue('A1', 1);
$sheet->setCellValue('A2', 2);
self::assertEquals($cells, $sheet->getCoordinates(), 'list should include last added cell');
}
public function testCanGetCellAfterAnotherIsDeleted()
{
$workbook = new Spreadsheet();
$sheet = $workbook->getActiveSheet();
$collection = $sheet->getCellCollection();
$sheet->setCellValue('A1', 1);
$sheet->setCellValue('A2', 1);
$collection->delete('A1');
$sheet->setCellValue('A3', 1);
self::assertNotNull($collection->get('A2'), 'should be able to get back the cell even when another cell was deleted while this one was the current one');
}
/**
* @expectedException \PhpOffice\PhpSpreadsheet\Exception
*/
public function testThrowsWhenCellCannotBeRetrievedFromCache()
{
$collection = $this->getMockBuilder(Cells::class)
->setConstructorArgs([new Worksheet(), new Memory()])
->setMethods(['has'])
->getMock();
$collection->method('has')
->willReturn(true);
$collection->get('A2');
}
/**
* @expectedException \PhpOffice\PhpSpreadsheet\Exception
*/
public function testThrowsWhenCellCannotBeStoredInCache()
{
$cache = $this->createMock(Memory::class);
$cell = $this->createMock(Cell::class);
$cache->method('set')
->willReturn(false);
$collection = new Cells(new Worksheet(), $cache);
$collection->add('A1', $cell);
$collection->add('A2', $cell);
}
}