Completed
Push — master ( fe79f7...a3187a )
by Mark
36s queued 32s
created

SpreadsheetTest::testNotSerializable()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 4
c 1
b 0
f 0
dl 0
loc 7
rs 10
cc 1
nc 1
nop 0
1
<?php
2
3
namespace PhpOffice\PhpSpreadsheetTests;
4
5
use PhpOffice\PhpSpreadsheet\Exception;
6
use PhpOffice\PhpSpreadsheet\Spreadsheet;
7
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
8
use PHPUnit\Framework\TestCase;
9
10
class SpreadsheetTest extends TestCase
11
{
12
    /** @var ?Spreadsheet */
13
    private $spreadsheet;
14
15
    protected function tearDown(): void
16
    {
17
        if ($this->spreadsheet !== null) {
18
            $this->spreadsheet->disconnectWorksheets();
19
            $this->spreadsheet = null;
20
        }
21
    }
22
23
    private function getSpreadsheet(): Spreadsheet
24
    {
25
        $this->spreadsheet = $spreadsheet = new Spreadsheet();
26
        $sheet = $spreadsheet->getActiveSheet();
27
28
        $sheet->setTitle('someSheet1');
29
        $sheet = new Worksheet();
30
        $sheet->setTitle('someSheet2');
31
        $spreadsheet->addSheet($sheet);
32
        $sheet = new Worksheet();
33
        $sheet->setTitle('someSheet 3');
34
        $spreadsheet->addSheet($sheet);
35
36
        return $spreadsheet;
37
    }
38
39
    public function dataProviderForSheetNames(): array
40
    {
41
        $array = [
42
            [0, 'someSheet1'],
43
            [0, "'someSheet1'"],
44
            [1, 'someSheet2'],
45
            [1, "'someSheet2'"],
46
            [2, 'someSheet 3'],
47
            [2, "'someSheet 3'"],
48
            [null, 'someSheet 33'],
49
        ];
50
51
        return $array;
52
    }
53
54
    /**
55
     * @dataProvider dataProviderForSheetNames
56
     */
57
    public function testGetSheetByName(?int $index, string $sheetName): void
58
    {
59
        $spreadsheet = $this->getSpreadsheet();
60
        if ($index === null) {
61
            self::assertNull($spreadsheet->getSheetByName($sheetName));
62
        } else {
63
            self::assertSame($spreadsheet->getSheet($index), $spreadsheet->getSheetByName($sheetName));
64
        }
65
    }
66
67
    public function testAddSheetDuplicateTitle(): void
68
    {
69
        $spreadsheet = $this->getSpreadsheet();
70
        $this->expectException(Exception::class);
71
        $sheet = new Worksheet();
72
        $sheet->setTitle('someSheet2');
73
        $spreadsheet->addSheet($sheet);
74
    }
75
76
    public function testAddSheetNoAdjustActive(): void
77
    {
78
        $spreadsheet = $this->getSpreadsheet();
79
        $spreadsheet->setActiveSheetIndex(2);
80
        self::assertEquals(2, $spreadsheet->getActiveSheetIndex());
81
        $sheet = new Worksheet();
82
        $sheet->setTitle('someSheet4');
83
        $spreadsheet->addSheet($sheet);
84
        self::assertEquals(2, $spreadsheet->getActiveSheetIndex());
85
    }
86
87
    public function testAddSheetAdjustActive(): void
88
    {
89
        $spreadsheet = $this->getSpreadsheet();
90
        $spreadsheet->setActiveSheetIndex(2);
91
        self::assertEquals(2, $spreadsheet->getActiveSheetIndex());
92
        $sheet = new Worksheet();
93
        $sheet->setTitle('someSheet0');
94
        $spreadsheet->addSheet($sheet, 0);
95
        self::assertEquals(3, $spreadsheet->getActiveSheetIndex());
96
    }
97
98
    public function testRemoveSheetIndexTooHigh(): void
99
    {
100
        $spreadsheet = $this->getSpreadsheet();
101
        $this->expectException(Exception::class);
102
        $spreadsheet->removeSheetByIndex(4);
103
    }
104
105
    public function testRemoveSheetNoAdjustActive(): void
106
    {
107
        $spreadsheet = $this->getSpreadsheet();
108
        $spreadsheet->setActiveSheetIndex(1);
109
        self::assertEquals(1, $spreadsheet->getActiveSheetIndex());
110
        $spreadsheet->removeSheetByIndex(2);
111
        self::assertEquals(1, $spreadsheet->getActiveSheetIndex());
112
    }
113
114
    public function testRemoveSheetAdjustActive(): void
115
    {
116
        $spreadsheet = $this->getSpreadsheet();
117
        $spreadsheet->setActiveSheetIndex(2);
118
        self::assertEquals(2, $spreadsheet->getActiveSheetIndex());
119
        $spreadsheet->removeSheetByIndex(1);
120
        self::assertEquals(1, $spreadsheet->getActiveSheetIndex());
121
    }
122
123
    public function testGetSheetIndexTooHigh(): void
124
    {
125
        $spreadsheet = $this->getSpreadsheet();
126
        $this->expectException(Exception::class);
127
        $spreadsheet->getSheet(4);
128
    }
129
130
    public function testGetIndexNonExistent(): void
131
    {
132
        $spreadsheet = $this->getSpreadsheet();
133
        $this->expectException(Exception::class);
134
        $sheet = new Worksheet();
135
        $sheet->setTitle('someSheet4');
136
        $spreadsheet->getIndex($sheet);
137
    }
138
139
    public function testSetIndexByName(): void
140
    {
141
        $spreadsheet = $this->getSpreadsheet();
142
        $spreadsheet->setIndexByName('someSheet1', 1);
143
        self::assertEquals('someSheet2', $spreadsheet->getSheet(0)->getTitle());
144
        self::assertEquals('someSheet1', $spreadsheet->getSheet(1)->getTitle());
145
        self::assertEquals('someSheet 3', $spreadsheet->getSheet(2)->getTitle());
146
    }
147
148
    public function testRemoveAllSheets(): void
149
    {
150
        $spreadsheet = $this->getSpreadsheet();
151
        $spreadsheet->setActiveSheetIndex(2);
152
        self::assertEquals(2, $spreadsheet->getActiveSheetIndex());
153
        $spreadsheet->removeSheetByIndex(0);
154
        self::assertEquals(1, $spreadsheet->getActiveSheetIndex());
155
        $spreadsheet->removeSheetByIndex(0);
156
        self::assertEquals(0, $spreadsheet->getActiveSheetIndex());
157
        $spreadsheet->removeSheetByIndex(0);
158
        self::assertEquals(-1, $spreadsheet->getActiveSheetIndex());
159
        $sheet = new Worksheet();
160
        $sheet->setTitle('someSheet4');
161
        $spreadsheet->addSheet($sheet);
162
        self::assertEquals(0, $spreadsheet->getActiveSheetIndex());
163
    }
164
165
    public function testBug1735(): void
166
    {
167
        $spreadsheet1 = new Spreadsheet();
168
        $spreadsheet1->createSheet()->setTitle('addedsheet');
169
        $spreadsheet1->setActiveSheetIndex(1);
170
        $spreadsheet1->removeSheetByIndex(0);
171
        $sheet = $spreadsheet1->getActiveSheet();
172
        self::assertEquals('addedsheet', $sheet->getTitle());
173
    }
174
175
    public function testSetActiveSheetIndexTooHigh(): void
176
    {
177
        $spreadsheet = $this->getSpreadsheet();
178
        $this->expectException(Exception::class);
179
        $spreadsheet->setActiveSheetIndex(4);
180
    }
181
182
    public function testSetActiveSheetNoSuchName(): void
183
    {
184
        $spreadsheet = $this->getSpreadsheet();
185
        $this->expectException(Exception::class);
186
        $spreadsheet->setActiveSheetIndexByName('unknown');
187
    }
188
189
    public function testAddExternal(): void
190
    {
191
        $spreadsheet = $this->getSpreadsheet();
192
        $spreadsheet1 = new Spreadsheet();
193
        $sheet = $spreadsheet1->createSheet()->setTitle('someSheet19');
194
        $sheet->getCell('A1')->setValue(1);
195
        $sheet->getCell('A1')->getStyle()->getFont()->setBold(true);
196
        $sheet->getCell('B1')->getStyle()->getFont()->setSuperscript(true);
197
        $sheet->getCell('C1')->getStyle()->getFont()->setSubscript(true);
198
        self::assertCount(4, $spreadsheet1->getCellXfCollection());
199
        self::assertEquals(1, $sheet->getCell('A1')->getXfIndex());
200
        $spreadsheet->getActiveSheet()->getCell('A1')->getStyle()->getFont()->setBold(true);
201
        self::assertCount(2, $spreadsheet->getCellXfCollection());
202
        $sheet3 = $spreadsheet->addExternalSheet($sheet);
203
        self::assertCount(6, $spreadsheet->getCellXfCollection());
204
        self::assertEquals('someSheet19', $sheet3->getTitle());
205
        self::assertEquals(1, $sheet3->getCell('A1')->getValue());
206
        self::assertTrue($sheet3->getCell('A1')->getStyle()->getFont()->getBold());
207
        // Prove Xf index changed although style is same.
208
        self::assertEquals(3, $sheet3->getCell('A1')->getXfIndex());
209
    }
210
211
    public function testAddExternalDuplicateName(): void
212
    {
213
        $this->expectException(Exception::class);
214
        $spreadsheet = new Spreadsheet();
215
        $sheet = $spreadsheet->createSheet()->setTitle('someSheet1');
216
        $sheet->getCell('A1')->setValue(1);
217
        $sheet->getCell('A1')->getStyle()->getFont()->setBold(true);
218
        $spreadsheet->addExternalSheet($sheet);
219
    }
220
221
    public function testAddExternalColumnDimensionStyles(): void
222
    {
223
        $spreadsheet1 = new Spreadsheet();
224
        $sheet1 = $spreadsheet1->createSheet()->setTitle('sheetWithColumnDimension');
225
        $sheet1->getCell('A1')->setValue(1);
226
        $sheet1->getCell('A1')->getStyle()->getFont()->setItalic(true);
227
        $sheet1->getColumnDimension('B')->setWidth(10)->setXfIndex($sheet1->getCell('A1')->getXfIndex());
228
        $index = $sheet1->getColumnDimension('B')->getXfIndex();
229
        self::assertEquals(1, $index);
230
        self::assertCount(2, $spreadsheet1->getCellXfCollection());
231
232
        $spreadsheet2 = new Spreadsheet();
233
        $sheet2 = $spreadsheet2->createSheet()->setTitle('sheetWithTwoStyles');
234
        $sheet2->getCell('A1')->setValue(1);
235
        $sheet2->getCell('A1')->getStyle()->getFont()->setBold(true);
236
        $sheet2->getCell('B2')->getStyle()->getFont()->setSuperscript(true);
237
        $countXfs = count($spreadsheet2->getCellXfCollection());
238
        self::assertEquals(3, $countXfs);
239
240
        $sheet3 = $spreadsheet2->addExternalSheet($sheet1);
241
        self::assertCount(5, $spreadsheet2->getCellXfCollection());
242
        self::assertTrue($sheet3->getCell('A1')->getStyle()->getFont()->getItalic());
243
        self::assertTrue($sheet3->getCell('B1')->getStyle()->getFont()->getItalic());
244
        self::assertFalse($sheet3->getCell('B1')->getStyle()->getFont()->getBold());
245
        // Prove Xf index changed although style is same.
246
        self::assertEquals($countXfs + $index, $sheet3->getCell('B1')->getXfIndex());
247
        self::assertEquals($countXfs + $index, $sheet3->getColumnDimension('B')->getXfIndex());
248
    }
249
250
    public function testAddExternalRowDimensionStyles(): void
251
    {
252
        $spreadsheet1 = new Spreadsheet();
253
        $sheet1 = $spreadsheet1->createSheet()->setTitle('sheetWithColumnDimension');
254
        $sheet1->getCell('A1')->setValue(1);
255
        $sheet1->getCell('A1')->getStyle()->getFont()->setItalic(true);
256
        $sheet1->getRowDimension(2)->setXfIndex($sheet1->getCell('A1')->getXfIndex());
257
        $index = $sheet1->getRowDimension(2)->getXfIndex();
258
        self::assertEquals(1, $index);
259
        self::assertCount(2, $spreadsheet1->getCellXfCollection());
260
261
        $spreadsheet2 = new Spreadsheet();
262
        $sheet2 = $spreadsheet2->createSheet()->setTitle('sheetWithTwoStyles');
263
        $sheet2->getCell('A1')->setValue(1);
264
        $sheet2->getCell('A1')->getStyle()->getFont()->setBold(true);
265
        $sheet2->getCell('B2')->getStyle()->getFont()->setSuperscript(true);
266
        $countXfs = count($spreadsheet2->getCellXfCollection());
267
        self::assertEquals(3, $countXfs);
268
269
        $sheet3 = $spreadsheet2->addExternalSheet($sheet1);
270
        self::assertCount(5, $spreadsheet2->getCellXfCollection());
271
        self::assertTrue($sheet3->getCell('A1')->getStyle()->getFont()->getItalic());
272
        self::assertTrue($sheet3->getCell('A2')->getStyle()->getFont()->getItalic());
273
        self::assertFalse($sheet3->getCell('A2')->getStyle()->getFont()->getBold());
274
        // Prove Xf index changed although style is same.
275
        self::assertEquals($countXfs + $index, $sheet3->getCell('A2')->getXfIndex());
276
        self::assertEquals($countXfs + $index, $sheet3->getRowDimension(2)->getXfIndex());
277
    }
278
279
    public function testNotSerializable(): void
280
    {
281
        $this->spreadsheet = $spreadsheet = new Spreadsheet();
0 ignored issues
show
Unused Code introduced by
The assignment to $spreadsheet is dead and can be removed.
Loading history...
282
283
        $this->expectException(Exception::class);
284
        $this->expectExceptionMessage('Spreadsheet objects cannot be serialized');
285
        serialize($this->spreadsheet);
286
    }
287
288
    public function testNotJsonEncodable(): void
289
    {
290
        $this->spreadsheet = $spreadsheet = new Spreadsheet();
0 ignored issues
show
Unused Code introduced by
The assignment to $spreadsheet is dead and can be removed.
Loading history...
291
292
        $this->expectException(Exception::class);
293
        $this->expectExceptionMessage('Spreadsheet objects cannot be json encoded');
294
        json_encode($this->spreadsheet);
295
    }
296
}
297