Failed Conditions
Pull Request — master (#4127)
by Owen
12:31
created

RetainSelectedCellsTest   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 123
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 8
eloc 91
c 1
b 0
f 0
dl 0
loc 123
rs 10

4 Methods

Rating   Name   Duplication   Size   Complexity  
A tearDown() 0 5 2
A providerFormats() 0 8 1
A testRetainSelectedCells() 0 49 4
A testRetainAutoSize() 0 42 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace PhpOffice\PhpSpreadsheetTests\Writer;
6
7
use PhpOffice\PhpSpreadsheet\IOFactory;
8
use PhpOffice\PhpSpreadsheet\Shared\File;
9
use PhpOffice\PhpSpreadsheet\Spreadsheet;
10
use PhpOffice\PhpSpreadsheetTests\Functional\AbstractFunctional;
11
12
class RetainSelectedCellsTest extends AbstractFunctional
13
{
14
    private string $fileName = '';
15
16
    protected function tearDown(): void
17
    {
18
        if ($this->fileName !== '') {
19
            unlink($this->fileName);
20
            $this->fileName = '';
21
        }
22
    }
23
24
    public static function providerFormats(): array
25
    {
26
        return [
27
            ['Xls'],
28
            ['Xlsx'],
29
            ['Ods'],
30
            ['Csv'],
31
            ['Html'],
32
        ];
33
    }
34
35
    /**
36
     * Test selected cell is retained in memory and in file written to disk.
37
     *
38
     * @dataProvider providerFormats
39
     */
40
    public function testRetainSelectedCells(string $format): void
41
    {
42
        $spreadsheet = new Spreadsheet();
43
        $sheet = $spreadsheet->getActiveSheet();
44
        $sheet->setCellValue('A1', '=SIN(1)')
45
            ->setCellValue('A2', '=SIN(2)')
46
            ->setCellValue('A3', '=SIN(3)')
47
            ->setCellValue('B1', '=SIN(4)')
48
            ->setCellValue('B2', '=SIN(5)')
49
            ->setCellValue('B3', '=SIN(6)')
50
            ->setCellValue('C1', '=SIN(7)')
51
            ->setCellValue('C2', '=SIN(8)')
52
            ->setCellValue('C3', '=SIN(9)');
53
        $sheet->setSelectedCell('A3');
54
        $sheet = $spreadsheet->createSheet();
55
        $sheet->setCellValue('A1', '=SIN(1)')
56
            ->setCellValue('A2', '=SIN(2)')
57
            ->setCellValue('A3', '=SIN(3)')
58
            ->setCellValue('B1', '=SIN(4)')
59
            ->setCellValue('B2', '=SIN(5)')
60
            ->setCellValue('B3', '=SIN(6)')
61
            ->setCellValue('C1', '=SIN(7)')
62
            ->setCellValue('C2', '=SIN(8)')
63
            ->setCellValue('C3', '=SIN(9)');
64
        $sheet->setSelectedCell('B1');
65
        $sheet = $spreadsheet->createSheet();
66
        $sheet->setCellValue('A1', '=SIN(1)')
67
            ->setCellValue('A2', '=SIN(2)')
68
            ->setCellValue('A3', '=SIN(3)')
69
            ->setCellValue('B1', '=SIN(4)')
70
            ->setCellValue('B2', '=SIN(5)')
71
            ->setCellValue('B3', '=SIN(6)')
72
            ->setCellValue('C1', '=SIN(7)')
73
            ->setCellValue('C2', '=SIN(8)')
74
            ->setCellValue('C3', '=SIN(9)');
75
        $sheet->setSelectedCell('C2');
76
        $spreadsheet->setActiveSheetIndex(1);
77
78
        $reloaded = $this->writeAndReload($spreadsheet, $format);
79
        self::assertEquals('A3', $spreadsheet->getSheet(0)->getSelectedCells());
80
        self::assertEquals('B1', $spreadsheet->getSheet(1)->getSelectedCells());
81
        self::assertEquals('C2', $spreadsheet->getSheet(2)->getSelectedCells());
82
        self::assertEquals(1, $spreadsheet->getActiveSheetIndex());
83
        // SelectedCells and ActiveSheet don't make sense for Html, Csv.
84
        if ($format === 'Xlsx' || $format === 'Xls' || $format === 'Ods') {
85
            self::assertEquals('A3', $reloaded->getSheet(0)->getSelectedCells());
86
            self::assertEquals('B1', $reloaded->getSheet(1)->getSelectedCells());
87
            self::assertEquals('C2', $reloaded->getSheet(2)->getSelectedCells());
88
            self::assertEquals(1, $reloaded->getActiveSheetIndex());
89
        }
90
    }
91
92
    /** @dataProvider providerFormats */
93
    public function testRetainAutoSize(string $type): void
94
    {
95
        $spreadsheet = new Spreadsheet();
96
        $sheet1 = $spreadsheet->getActiveSheet();
97
        $array = [
98
            [1, 2, 3, 4, 5],
99
            [11, 12, 13, 14, 15],
100
            [21, 22, 23, 24, 25],
101
            [31, 32, 33, 34, 35],
102
        ];
103
        $sheet1->fromArray($array);
104
        $sheet2 = $spreadsheet->createSheet();
105
        $sheet2->fromArray($array);
106
        $sheet3 = $spreadsheet->createSheet();
107
        $sheet3->fromArray($array);
108
        $sheet1->getStyle('A1')->getFont()->setName('Arial');
109
        $sheet2->getStyle('A1')->getFont()->setName('Arial');
110
        $sheet3->getStyle('A1')->getFont()->setName('Arial');
111
        $sheet1->getColumnDimension('A')->setAutoSize(true);
112
        $sheet2->getColumnDimension('A')->setAutoSize(true);
113
        $sheet3->getColumnDimension('A')->setAutoSize(true);
114
        $sheet1->setSelectedCells('B2');
115
        $sheet2->setSelectedCells('C3');
116
        $sheet3->setSelectedCells('D4');
117
        $spreadsheet->setActiveSheetIndex(1);
118
        $activeCellSheet1 = $sheet1->getActiveCell();
119
        $activeCellSheet2 = $sheet2->getActiveCell();
120
        $activeCellSheet3 = $sheet3->getActiveCell();
121
122
        $this->fileName = File::temporaryFilename();
123
        $writer = IOFactory::createWriter($spreadsheet, $type);
124
        $writer->save($this->fileName);
125
126
        self::assertSame(1, $spreadsheet->getActiveSheetIndex());
127
        self::assertSame('B2', $spreadsheet->getSheet(0)->getSelectedCells());
128
        self::assertSame('C3', $spreadsheet->getSheet(1)->getSelectedCells());
129
        self::assertSame('D4', $spreadsheet->getSheet(2)->getSelectedCells());
130
        self::assertSame($activeCellSheet1, $spreadsheet->getSheet(0)->getActiveCell());
131
        self::assertSame($activeCellSheet2, $spreadsheet->getSheet(1)->getActiveCell());
132
        self::assertSame($activeCellSheet3, $spreadsheet->getSheet(2)->getActiveCell());
133
134
        $spreadsheet->disconnectWorksheets();
135
    }
136
}
137