2017-04-14 05:22:33 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								< ? php  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								namespace  PhpOffice\PhpSpreadsheetTests\Collection ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-10-29 08:39:42 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								use  PhpOffice\PhpSpreadsheet\Cell\Cell ;  
						 
					
						
							
								
									
										
										
										
											2017-04-14 05:22:33 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								use  PhpOffice\PhpSpreadsheet\Collection\Cells ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								use  PhpOffice\PhpSpreadsheet\Collection\Memory ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								use  PhpOffice\PhpSpreadsheet\Spreadsheet ;  
						 
					
						
							
								
									
										
										
										
											2017-10-29 08:39:42 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								use  PhpOffice\PhpSpreadsheet\Worksheet\Worksheet ;  
						 
					
						
							
								
									
										
										
										
											2017-11-08 15:48:01 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								use  PHPUnit\Framework\TestCase ;  
						 
					
						
							
								
									
										
										
										
											2017-04-14 05:22:33 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-11-08 15:48:01 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								class  CellsTest  extends  TestCase  
						 
					
						
							
								
									
										
										
										
											2017-04-14 05:22:33 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    public  function  testCollectionCell () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $spreadsheet  =  new  Spreadsheet (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $sheet  =  $spreadsheet -> getActiveSheet (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $collection  =  $sheet -> getCellCollection (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // Assert empty state
 
							 
						 
					
						
							
								
									
										
										
										
											2017-09-20 05:55:42 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        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' ); 
							 
						 
					
						
							
								
									
										
										
										
											2017-04-14 05:22:33 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // Add one cell
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $cell1  =  $sheet -> getCell ( 'B2' ); 
							 
						 
					
						
							
								
									
										
										
										
											2017-09-20 05:55:42 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self :: assertSame ( $cell1 ,  $collection -> add ( 'B2' ,  $cell1 ),  'adding a cell should return the cell' ); 
							 
						 
					
						
							
								
									
										
										
										
											2017-04-14 05:22:33 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // Assert cell presence
 
							 
						 
					
						
							
								
									
										
										
										
											2017-09-20 05:55:42 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        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' ); 
							 
						 
					
						
							
								
									
										
										
										
											2017-04-14 05:22:33 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // Add a second cell
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $cell2  =  $sheet -> getCell ( 'A1' ); 
							 
						 
					
						
							
								
									
										
										
										
											2017-09-20 05:55:42 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        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' ); 
							 
						 
					
						
							
								
									
										
										
										
											2017-04-14 05:22:33 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // Assert collection copy
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $sheet2  =  $spreadsheet -> createSheet (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $collection2  =  $collection -> cloneCellCollection ( $sheet2 ); 
							 
						 
					
						
							
								
									
										
										
										
											2017-09-20 05:55:42 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self :: assertTrue ( $collection2 -> has ( 'A1' )); 
							 
						 
					
						
							
								
									
										
										
										
											2017-04-14 05:22:33 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        $copiedCell2  =  $collection2 -> get ( 'A1' ); 
							 
						 
					
						
							
								
									
										
										
										
											2017-09-20 05:55:42 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        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' ); 
							 
						 
					
						
							
								
									
										
										
										
											2017-04-14 05:22:33 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // Assert deletion
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $collection -> delete ( 'B2' ); 
							 
						 
					
						
							
								
									
										
										
										
											2017-09-20 05:55:42 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self :: assertFalse ( $collection -> has ( 'B2' ),  'cell should have been deleted' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self :: assertEquals ([ 'A1' ],  $collection -> getCoordinates (),  'cell list should contains the cell' ); 
							 
						 
					
						
							
								
									
										
										
										
											2017-04-14 05:22:33 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // Assert update
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $cell2  =  $sheet -> getCell ( 'A1' ); 
							 
						 
					
						
							
								
									
										
										
										
											2017-09-20 05:55:42 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self :: assertSame ( $sheet -> getCellCollection (),  $collection ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self :: assertSame ( $cell2 ,  $collection -> update ( $cell2 ),  'should update existing cell' ); 
							 
						 
					
						
							
								
									
										
										
										
											2017-04-14 05:22:33 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $cell3  =  $sheet -> getCell ( 'C3' ); 
							 
						 
					
						
							
								
									
										
										
										
											2017-09-20 05:55:42 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self :: assertSame ( $cell3 ,  $collection -> update ( $cell3 ),  'should silently add non-existing cell' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self :: assertEquals ([ 'A1' ,  'C3' ],  $collection -> getCoordinates (),  'cell list should contains the cell' ); 
							 
						 
					
						
							
								
									
										
										
										
											2017-04-14 05:22:33 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    public  function  testCacheLastCell () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $workbook  =  new  Spreadsheet (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $cells  =  [ 'A1' ,  'A2' ]; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $sheet  =  $workbook -> getActiveSheet (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $sheet -> setCellValue ( 'A1' ,  1 ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $sheet -> setCellValue ( 'A2' ,  2 ); 
							 
						 
					
						
							
								
									
										
										
										
											2017-09-20 05:55:42 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        self :: assertEquals ( $cells ,  $sheet -> getCoordinates (),  'list should include last added cell' ); 
							 
						 
					
						
							
								
									
										
										
										
											2017-04-14 05:22:33 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    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 ); 
							 
						 
					
						
							
								
									
										
										
										
											2017-09-20 05:55:42 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        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' ); 
							 
						 
					
						
							
								
									
										
										
										
											2017-04-14 05:22:33 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ 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 ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}