74 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
namespace PhpOffice\PhpSpreadsheetTests\Style;
 | 
						|
 | 
						|
use PhpOffice\PhpSpreadsheet\Spreadsheet;
 | 
						|
use PhpOffice\PhpSpreadsheet\Style\Border;
 | 
						|
use PhpOffice\PhpSpreadsheet\Style\Color;
 | 
						|
use PHPUnit\Framework\TestCase;
 | 
						|
 | 
						|
class BorderRangeTest extends TestCase
 | 
						|
{
 | 
						|
    public function testBorderRangeInAction()
 | 
						|
    {
 | 
						|
        // testcase for the initial bug problem: setting border+color fails
 | 
						|
        // set red borders aroundlA1:B3 square. Verify that the borders set are actually correct
 | 
						|
 | 
						|
        $spreadsheet = new Spreadsheet();
 | 
						|
        $sheet = $spreadsheet->getActiveSheet();
 | 
						|
 | 
						|
        $argb = 'FFFF0000';
 | 
						|
        $color = new Color($argb);
 | 
						|
 | 
						|
        $sheet->getStyle('A1:C1')->getBorders()->getTop()->setBorderStyle(Border::BORDER_THIN)->setColor($color);
 | 
						|
        $sheet->getStyle('A1:A3')->getBorders()->getLeft()->setBorderStyle(Border::BORDER_THIN)->setColor($color);
 | 
						|
        $sheet->getStyle('C1:C3')->getBorders()->getRight()->setBorderStyle(Border::BORDER_THIN)->setColor($color);
 | 
						|
        $sheet->getStyle('A3:C3')->getBorders()->getBottom()->setBorderStyle(Border::BORDER_THIN)->setColor($color);
 | 
						|
 | 
						|
        // upper row
 | 
						|
        $expectations = [
 | 
						|
            // cell => Left/Right/Top/Bottom
 | 
						|
            'A1' => 'LT',
 | 
						|
            'B1' => 'T',
 | 
						|
            'C1' => 'RT',
 | 
						|
            'A2' => 'L',
 | 
						|
            'B2' => '',
 | 
						|
            'C2' => 'R',
 | 
						|
            'A3' => 'LB',
 | 
						|
            'B3' => 'B',
 | 
						|
            'C3' => 'RB',
 | 
						|
        ];
 | 
						|
        $sides = [
 | 
						|
            'L' => 'Left',
 | 
						|
            'R' => 'Right',
 | 
						|
            'T' => 'Top',
 | 
						|
            'B' => 'Bottom',
 | 
						|
        ];
 | 
						|
 | 
						|
        foreach ($expectations as $cell => $borders) {
 | 
						|
            $bs = $sheet->getStyle($cell)->getBorders();
 | 
						|
            foreach ($sides as $sidekey => $side) {
 | 
						|
                $assertion = "setBorderStyle on a range of cells, $cell $side";
 | 
						|
                $func = "get$side";
 | 
						|
                $b = $bs->$func(); // boo
 | 
						|
 | 
						|
                if (strpos($borders, $sidekey) === false) {
 | 
						|
                    self::assertSame(Border::BORDER_NONE, $b->getBorderStyle(), $assertion);
 | 
						|
                } else {
 | 
						|
                    self::assertSame(Border::BORDER_THIN, $b->getBorderStyle(), $assertion);
 | 
						|
                    self::assertSame($argb, $b->getColor()->getARGB(), $assertion);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    public function testBorderRangeDirectly()
 | 
						|
    {
 | 
						|
        // testcase for the underlying problem directly
 | 
						|
        $spreadsheet = new Spreadsheet();
 | 
						|
        $sheet = $spreadsheet->getActiveSheet();
 | 
						|
        $style = $sheet->getStyle('A1:C1')->getBorders()->getTop()->setBorderStyle(Border::BORDER_THIN);
 | 
						|
        self::assertSame('A1:C1', $style->getSelectedCells(), 'getSelectedCells should not change after a style operation on a border range');
 | 
						|
    }
 | 
						|
}
 |