Passed
Pull Request — master (#4359)
by Owen
11:43
created

testDrawingInCommentImageFormatsConversions()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 66
Code Lines 51

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 51
dl 0
loc 66
rs 9.069
c 0
b 0
f 0
cc 1
nc 1
nop 0

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
declare(strict_types=1);
4
5
namespace PhpOffice\PhpSpreadsheetTests\Writer\Xlsx;
6
7
use PhpOffice\PhpSpreadsheet\Comment;
8
use PhpOffice\PhpSpreadsheet\Exception as PhpSpreadsheetException;
9
use PhpOffice\PhpSpreadsheet\IOFactory;
10
use PhpOffice\PhpSpreadsheet\Reader\Xlsx;
11
use PhpOffice\PhpSpreadsheet\Shared\File;
12
use PhpOffice\PhpSpreadsheet\Spreadsheet;
13
use PhpOffice\PhpSpreadsheet\Worksheet\BaseDrawing;
14
use PhpOffice\PhpSpreadsheet\Worksheet\Drawing;
15
use PhpOffice\PhpSpreadsheet\Worksheet\MemoryDrawing;
16
use PhpOffice\PhpSpreadsheetTests\Functional\AbstractFunctional;
17
18
class DrawingsTest extends AbstractFunctional
19
{
20
    /**
21
     * Test save and load XLSX file with drawing on 2nd worksheet.
22
     */
23
    public function testSaveLoadWithDrawingOn2ndWorksheet(): void
24
    {
25
        // Read spreadsheet from file
26
        $inputFilename = 'tests/data/Writer/XLSX/drawing_on_2nd_page.xlsx';
27
        $reader = new Xlsx();
28
        $spreadsheet = $reader->load($inputFilename);
29
30
        // Save spreadsheet to file and read it back
31
        $reloadedSpreadsheet = $this->writeAndReload($spreadsheet, 'Xlsx');
32
33
        $spreadsheet->disconnectWorksheets();
34
        self::assertNotNull(
35
            $reloadedSpreadsheet->getSheetByName('Sheet1 (2)')
36
        );
37
        $reloadedSpreadsheet->disconnectWorksheets();
38
    }
39
40
    /**
41
     * Test save and load XLSX file with drawing with the same file name.
42
     */
43
    public function testSaveLoadWithDrawingWithSamePath(): void
44
    {
45
        // Read spreadsheet from file
46
        $originalFileName = 'tests/data/Writer/XLSX/saving_drawing_with_same_path.xlsx';
47
48
        $originalFile = file_get_contents($originalFileName);
49
50
        $tempFileName = File::sysGetTempDir() . '/saving_drawing_with_same_path';
51
52
        file_put_contents($tempFileName, $originalFile);
53
54
        $reader = new Xlsx();
55
        $spreadsheet = $reader->load($tempFileName);
56
57
        $spreadsheet->getActiveSheet()->setCellValue('D5', 'foo');
58
        // Save spreadsheet to file to the same path. Success test case won't
59
        // throw exception here
60
        $writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
61
        $writer->save($tempFileName);
62
63
        $reloadedSpreadsheet = $reader->load($tempFileName);
64
65
        unlink($tempFileName);
66
67
        $spreadsheet->disconnectWorksheets();
68
        self::assertNotNull(
69
            $reloadedSpreadsheet->getSheetByName('Worksheet')
70
        );
71
        $reloadedSpreadsheet->disconnectWorksheets();
72
    }
73
74
    /**
75
     * Test save and load XLSX file with drawing in comment.
76
     */
77
    public function testSaveLoadWithDrawingInComment(): void
78
    {
79
        // Read spreadsheet from file
80
        $originalFileName = 'tests/data/Writer/XLSX/drawing_in_comment.xlsx';
81
82
        $originalFile = file_get_contents($originalFileName);
83
84
        $tempFileName = File::sysGetTempDir() . '/drawing_in_comment.xlsx';
85
86
        file_put_contents($tempFileName, $originalFile);
87
88
        // Load native xlsx file with drawing in comment background
89
        $reader = new Xlsx();
90
        $spreadsheet = $reader->load($tempFileName);
91
92
        $sheet = $spreadsheet->getActiveSheet();
93
        $comment = $sheet->getComment('A1');
94
95
        self::assertTrue($comment->hasBackgroundImage());
96
        self::assertEquals($comment->getBackgroundImage()->getWidth(), 178);
97
        self::assertEquals($comment->getBackgroundImage()->getHeight(), 140);
98
        self::assertEquals($comment->getBackgroundImage()->getType(), IMAGETYPE_JPEG);
99
100
        $writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
101
        $writer->save($tempFileName);
102
103
        $reloadedSpreadsheet = $reader->load($tempFileName);
104
        unlink($tempFileName);
105
106
        $spreadsheet->disconnectWorksheets();
107
        $reloadedSpreadsheet->disconnectWorksheets();
108
    }
109
110
    /**
111
     * Test save and load XLSX file with drawing in comment, image in BMP/GIF format saved as PNG.
112
     */
113
    public function testDrawingInCommentImageFormatsConversions(): void
114
    {
115
        $reader = new Xlsx();
116
        $spreadsheet = new Spreadsheet();
117
        $sheet = $spreadsheet->getActiveSheet();
118
119
        // Add gif image to comment background
120
        $sheet->setCellValue('A1', '.gif');
121
        $drawing = new Drawing();
122
        $drawing->setName('Green Square');
123
        $drawing->setPath('tests/data/Writer/XLSX/green_square.gif');
124
        self::assertEquals($drawing->getWidth(), 150);
125
        self::assertEquals($drawing->getHeight(), 150);
126
        $comment = $sheet->getComment('A1');
127
        $comment->setBackgroundImage($drawing);
128
        $comment->setSizeAsBackgroundImage();
129
        self::assertEquals($comment->getWidth(), '112.5pt');
130
        self::assertEquals($comment->getHeight(), '112.5pt');
131
        self::assertTrue($comment->hasBackgroundImage());
132
        self::assertEquals($comment->getBackgroundImage()->getType(), IMAGETYPE_GIF);
133
134
        // Add bmp image to comment background
135
        $sheet->setCellValue('A2', '.bmp 16 colors');
136
        $drawing = new Drawing();
137
        $drawing->setName('Yellow Square');
138
        $drawing->setPath('tests/data/Writer/XLSX/yellow_square_16.bmp');
139
        self::assertEquals($drawing->getWidth(), 70);
140
        self::assertEquals($drawing->getHeight(), 70);
141
        $comment = $sheet->getComment('A2');
142
        $comment->setBackgroundImage($drawing);
143
        $comment->setSizeAsBackgroundImage();
144
        self::assertEquals($comment->getWidth(), '52.5pt');
145
        self::assertEquals($comment->getHeight(), '52.5pt');
146
        self::assertTrue($comment->hasBackgroundImage());
147
        self::assertEquals($comment->getBackgroundImage()->getType(), IMAGETYPE_BMP);
148
149
        // Write file
150
        $writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
151
        $tempFileName = File::sysGetTempDir() . '/drawings_in_comments_conversions.xlsx';
152
        $writer->save($tempFileName);
153
154
        // Read new file
155
        $reloadedSpreadsheet = $reader->load($tempFileName);
156
        $sheet = $reloadedSpreadsheet->getActiveSheet();
157
158
        // Check first image in comment background
159
        $comment = $sheet->getComment('A1');
160
        self::assertEquals($comment->getWidth(), '112.5pt');
161
        self::assertEquals($comment->getHeight(), '112.5pt');
162
        self::assertTrue($comment->hasBackgroundImage());
163
        self::assertEquals($comment->getBackgroundImage()->getWidth(), 150);
164
        self::assertEquals($comment->getBackgroundImage()->getHeight(), 150);
165
        self::assertEquals($comment->getBackgroundImage()->getType(), IMAGETYPE_PNG);
166
167
        // Check second image in comment background
168
        $comment = $sheet->getComment('A2');
169
        self::assertEquals($comment->getWidth(), '52.5pt');
170
        self::assertEquals($comment->getHeight(), '52.5pt');
171
        self::assertTrue($comment->hasBackgroundImage());
172
        self::assertEquals($comment->getBackgroundImage()->getWidth(), 70);
173
        self::assertEquals($comment->getBackgroundImage()->getHeight(), 70);
174
        self::assertEquals($comment->getBackgroundImage()->getType(), IMAGETYPE_PNG);
175
176
        unlink($tempFileName);
177
        $spreadsheet->disconnectWorksheets();
178
        $reloadedSpreadsheet->disconnectWorksheets();
179
    }
180
181
    /**
182
     * Test build and save XLSX with drawings in comments with comment size correction.
183
     */
184
    public function testBuildWithDifferentImageFormats(): void
185
    {
186
        $reader = new Xlsx();
187
        $spreadsheet = new Spreadsheet();
188
        $sheet = $spreadsheet->getActiveSheet();
189
190
        // Add png image to comment background
191
        $sheet->setCellValue('A1', '.png');
192
        $drawing = new Drawing();
193
        $drawing->setName('Blue Square');
194
        $drawing->setPath('tests/data/Writer/XLSX/blue_square.png');
195
        self::assertEquals($drawing->getWidth(), 100);
196
        self::assertEquals($drawing->getHeight(), 100);
197
        $comment = $sheet->getComment('A1');
198
        $comment->setBackgroundImage($drawing);
199
        $comment->setSizeAsBackgroundImage();
200
        self::assertEquals($comment->getWidth(), '75pt');
201
        self::assertEquals($comment->getHeight(), '75pt');
202
203
        $comment = $sheet->getComment('A1');
204
        self::assertTrue($comment->hasBackgroundImage());
205
        self::assertEquals($comment->getBackgroundImage()->getType(), IMAGETYPE_PNG);
206
207
        // Add gif image to comment background
208
        $sheet->setCellValue('A2', '.gif');
209
        $drawing = new Drawing();
210
        $drawing->setName('Green Square');
211
        $drawing->setPath('tests/data/Writer/XLSX/green_square.gif');
212
        self::assertEquals($drawing->getWidth(), 150);
213
        self::assertEquals($drawing->getHeight(), 150);
214
        $comment = $sheet->getComment('A2');
215
        $comment->setBackgroundImage($drawing);
216
        $comment->setSizeAsBackgroundImage();
217
        self::assertEquals($comment->getWidth(), '112.5pt');
218
        self::assertEquals($comment->getHeight(), '112.5pt');
219
220
        $comment = $sheet->getComment('A2');
221
        self::assertTrue($comment->hasBackgroundImage());
222
        self::assertEquals($comment->getBackgroundImage()->getType(), IMAGETYPE_GIF);
223
224
        // Add jpeg image to comment background
225
        $sheet->setCellValue('A3', '.jpeg');
226
        $drawing = new Drawing();
227
        $drawing->setName('Red Square');
228
        $drawing->setPath('tests/data/Writer/XLSX/red_square.jpeg');
229
        self::assertEquals($drawing->getWidth(), 50);
230
        self::assertEquals($drawing->getHeight(), 50);
231
        $comment = $sheet->getComment('A3');
232
        $comment->setBackgroundImage($drawing);
233
        $comment->setSizeAsBackgroundImage();
234
        self::assertEquals($comment->getWidth(), '37.5pt');
235
        self::assertEquals($comment->getHeight(), '37.5pt');
236
237
        $comment = $sheet->getComment('A3');
238
        self::assertTrue($comment->hasBackgroundImage());
239
        self::assertEquals($comment->getBackgroundImage()->getType(), IMAGETYPE_JPEG);
240
241
        // Add bmp image to comment background
242
        $sheet->setCellValue('A4', '.bmp 16 colors');
243
        $drawing = new Drawing();
244
        $drawing->setName('Yellow Square');
245
        $drawing->setPath('tests/data/Writer/XLSX/yellow_square_16.bmp');
246
        self::assertEquals($drawing->getWidth(), 70);
247
        self::assertEquals($drawing->getHeight(), 70);
248
        $comment = $sheet->getComment('A4');
249
        $comment->setBackgroundImage($drawing);
250
        $comment->setSizeAsBackgroundImage();
251
        self::assertEquals($comment->getWidth(), '52.5pt');
252
        self::assertEquals($comment->getHeight(), '52.5pt');
253
254
        $comment = $sheet->getComment('A4');
255
        self::assertTrue($comment->hasBackgroundImage());
256
        self::assertEquals($comment->getBackgroundImage()->getType(), IMAGETYPE_BMP);
257
258
        // Add bmp image to comment background
259
        $sheet->setCellValue('A5', '.bmp 256 colors');
260
        $drawing = new Drawing();
261
        $drawing->setName('Brown Square');
262
        $drawing->setPath('tests/data/Writer/XLSX/brown_square_256.bmp');
263
        self::assertEquals($drawing->getWidth(), 70);
264
        self::assertEquals($drawing->getHeight(), 70);
265
        $comment = $sheet->getComment('A5');
266
        $comment->setBackgroundImage($drawing);
267
        $comment->setSizeAsBackgroundImage();
268
        self::assertEquals($comment->getWidth(), '52.5pt');
269
        self::assertEquals($comment->getHeight(), '52.5pt');
270
271
        $comment = $sheet->getComment('A5');
272
        self::assertTrue($comment->hasBackgroundImage());
273
        self::assertEquals($comment->getBackgroundImage()->getType(), IMAGETYPE_BMP);
274
275
        // Add bmp image to comment background
276
        $sheet->setCellValue('A6', '.bmp 24 bit');
277
        $drawing = new Drawing();
278
        $drawing->setName('Orange Square');
279
        $drawing->setPath('tests/data/Writer/XLSX/orange_square_24_bit.bmp');
280
        self::assertEquals($drawing->getWidth(), 70);
281
        self::assertEquals($drawing->getHeight(), 70);
282
        self::assertSame(IMAGETYPE_PNG, $drawing->getImageTypeForSave());
283
        $comment = $sheet->getComment('A6');
284
        $comment->setBackgroundImage($drawing);
285
        $comment->setSizeAsBackgroundImage();
286
        self::assertEquals($comment->getWidth(), '52.5pt');
287
        self::assertEquals($comment->getHeight(), '52.5pt');
288
289
        $comment = $sheet->getComment('A6');
290
        self::assertTrue($comment->hasBackgroundImage());
291
        self::assertEquals($comment->getBackgroundImage()->getType(), IMAGETYPE_BMP);
292
293
        // Add unsupported tiff image to comment background
294
        $sheet->setCellValue('A7', '.tiff');
295
        $drawing = new Drawing();
296
        $drawing->setName('Purple Square');
297
        $drawing->setPath('tests/data/Writer/XLSX/purple_square.tiff');
298
        self::assertStringContainsString('purple_square.tiff', $drawing->getFilename());
299
        self::assertFalse($drawing->getIsUrl());
300
        $comment = $sheet->getComment('A7');
301
        self::assertFalse($comment->hasBackgroundImage());
302
        self::assertEquals($comment->getBackgroundImage()->getType(), IMAGETYPE_UNKNOWN);
303
304
        try {
305
            $comment->setBackgroundImage($drawing);
306
            self::fail('Should throw exception when attempting to add tiff');
307
        } catch (PhpSpreadsheetException $e) {
308
            self::assertEquals($e->getMessage(), 'Unsupported image type in comment background. Supported types: PNG, JPEG, BMP, GIF.');
309
        }
310
311
        try {
312
            $drawing->getImageTypeForSave();
313
            self::fail('Should throw exception when attempting to get image type for tiff');
314
        } catch (PhpSpreadsheetException $e) {
315
            self::assertEquals($e->getMessage(), 'Unsupported image type in comment background. Supported types: PNG, JPEG, BMP, GIF.');
316
        }
317
318
        try {
319
            $drawing->getMediaFilename();
320
            self::fail('Should throw exception when attempting to get media file name for tiff');
321
        } catch (PhpSpreadsheetException $e) {
322
            self::assertEquals($e->getMessage(), 'Unsupported image type in comment background. Supported types: PNG, JPEG, BMP, GIF.');
323
        }
324
325
        try {
326
            $drawing->getImageFileExtensionForSave();
327
            self::fail('Should throw exception when attempting to get image file extention for tiff');
328
        } catch (PhpSpreadsheetException $e) {
329
            self::assertEquals($e->getMessage(), 'Unsupported image type in comment background. Supported types: PNG, JPEG, BMP, GIF.');
330
        }
331
332
        try {
333
            $drawing->getImageMimeType();
334
            self::fail('Should throw exception when attempting to get image mime type for tiff');
335
        } catch (PhpSpreadsheetException $e) {
336
            self::assertEquals($e->getMessage(), 'Unsupported image type in comment background. Supported types: PNG, JPEG, BMP, GIF.');
337
        }
338
339
        // Write file
340
        $writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
341
        $tempFileName = File::sysGetTempDir() . '/drawings_in_comments.xlsx';
342
        $writer->save($tempFileName);
343
344
        // Read new file
345
        $reloadedSpreadsheet = $reader->load($tempFileName);
346
        $sheet = $reloadedSpreadsheet->getActiveSheet();
347
348
        // Check first image in comment background
349
        $comment = $sheet->getComment('A1');
350
        self::assertEquals($comment->getWidth(), '75pt');
351
        self::assertEquals($comment->getHeight(), '75pt');
352
        self::assertTrue($comment->hasBackgroundImage());
353
        self::assertEquals($comment->getBackgroundImage()->getWidth(), 100);
354
        self::assertEquals($comment->getBackgroundImage()->getHeight(), 100);
355
        self::assertEquals($comment->getBackgroundImage()->getType(), IMAGETYPE_PNG);
356
357
        // Check second image in comment background
358
        $comment = $sheet->getComment('A2');
359
        self::assertEquals($comment->getWidth(), '112.5pt');
360
        self::assertEquals($comment->getHeight(), '112.5pt');
361
        self::assertTrue($comment->hasBackgroundImage());
362
        self::assertEquals($comment->getBackgroundImage()->getWidth(), 150);
363
        self::assertEquals($comment->getBackgroundImage()->getHeight(), 150);
364
        self::assertEquals($comment->getBackgroundImage()->getType(), IMAGETYPE_PNG);
365
366
        // Check third image in comment background
367
        $comment = $sheet->getComment('A3');
368
        self::assertEquals($comment->getWidth(), '37.5pt');
369
        self::assertEquals($comment->getHeight(), '37.5pt');
370
        self::assertTrue($comment->hasBackgroundImage());
371
        self::assertEquals($comment->getBackgroundImage()->getWidth(), 50);
372
        self::assertEquals($comment->getBackgroundImage()->getHeight(), 50);
373
        self::assertEquals($comment->getBackgroundImage()->getType(), IMAGETYPE_JPEG);
374
375
        // Check fourth image in comment background
376
        $comment = $sheet->getComment('A4');
377
        self::assertEquals($comment->getWidth(), '52.5pt');
378
        self::assertEquals($comment->getHeight(), '52.5pt');
379
        self::assertTrue($comment->hasBackgroundImage());
380
        self::assertEquals($comment->getBackgroundImage()->getWidth(), 70);
381
        self::assertEquals($comment->getBackgroundImage()->getHeight(), 70);
382
        self::assertEquals($comment->getBackgroundImage()->getType(), IMAGETYPE_PNG);
383
384
        // Check fifth image in comment background
385
        $comment = $sheet->getComment('A5');
386
        self::assertEquals($comment->getWidth(), '52.5pt');
387
        self::assertEquals($comment->getHeight(), '52.5pt');
388
        self::assertTrue($comment->hasBackgroundImage());
389
        self::assertEquals($comment->getBackgroundImage()->getWidth(), 70);
390
        self::assertEquals($comment->getBackgroundImage()->getHeight(), 70);
391
        self::assertEquals($comment->getBackgroundImage()->getType(), IMAGETYPE_PNG);
392
393
        // Check sixth image in comment background
394
        $comment = $sheet->getComment('A6');
395
        self::assertEquals($comment->getWidth(), '52.5pt');
396
        self::assertEquals($comment->getHeight(), '52.5pt');
397
        self::assertTrue($comment->hasBackgroundImage());
398
        self::assertEquals($comment->getBackgroundImage()->getWidth(), 70);
399
        self::assertEquals($comment->getBackgroundImage()->getHeight(), 70);
400
        self::assertEquals($comment->getBackgroundImage()->getType(), IMAGETYPE_PNG);
401
402
        // Check seventh image in comment background
403
        $comment = $sheet->getComment('A7');
404
        self::assertFalse($comment->hasBackgroundImage());
405
        self::assertEquals($comment->getBackgroundImage()->getWidth(), 0);
406
        self::assertEquals($comment->getBackgroundImage()->getHeight(), 0);
407
        self::assertEquals($comment->getBackgroundImage()->getType(), IMAGETYPE_UNKNOWN);
408
409
        unlink($tempFileName);
410
411
        $spreadsheet->disconnectWorksheets();
412
        $reloadedSpreadsheet->disconnectWorksheets();
413
    }
414
415
    /**
416
     * Test save and load XLSX file with drawing image that coordinate is two cell anchor.
417
     */
418
    public function testTwoCellAnchorDrawing(): void
419
    {
420
        $spreadsheet = new Spreadsheet();
421
        $sheet = $spreadsheet->getActiveSheet();
422
423
        // Add gif image that coordinates is two cell anchor.
424
        $drawing = new Drawing();
425
        $drawing->setName('Green Square');
426
        $drawing->setPath('tests/data/Writer/XLSX/green_square.gif');
427
        self::assertEquals($drawing->getWidth(), 150);
428
        self::assertEquals($drawing->getHeight(), 150);
429
        $drawing->setCoordinates('A1');
430
        $drawing->setOffsetX(30);
431
        $drawing->setOffsetY(10);
432
        $drawing->setCoordinates2('E8');
433
        $drawing->setOffsetX2(-50);
434
        $drawing->setOffsetY2(-20);
435
        $drawing->setWorksheet($sheet);
436
437
        // Write file
438
        $reloadedSpreadsheet = $this->writeAndReload($spreadsheet, 'Xlsx');
439
        $spreadsheet->disconnectWorksheets();
440
        $rsheet = $reloadedSpreadsheet->getActiveSheet();
441
442
        // Check image coordinates.
443
        $drawingCollection = $rsheet->getDrawingCollection();
444
        self::assertCount(1, $drawingCollection);
445
        $drawing = $drawingCollection[0];
446
        self::assertNotNull($drawing);
447
448
        self::assertSame(150, $drawing->getWidth());
449
        self::assertSame(150, $drawing->getHeight());
450
        self::assertSame('A1', $drawing->getCoordinates());
451
        self::assertSame(30, $drawing->getOffsetX());
452
        self::assertSame(10, $drawing->getOffsetY());
453
        self::assertSame('E8', $drawing->getCoordinates2());
454
        self::assertSame(-50, $drawing->getOffsetX2());
455
        self::assertSame(-20, $drawing->getOffsetY2());
456
        self::assertSame($rsheet, $drawing->getWorksheet());
457
        $reloadedSpreadsheet->disconnectWorksheets();
458
    }
459
460
    /**
461
     * Test editAs attribute for two-cell anchors.
462
     */
463
    #[\PHPUnit\Framework\Attributes\DataProvider('providerEditAs')]
464
    public function testTwoCellEditAs(string $editAs, ?string $expectedResult = null): void
465
    {
466
        if ($expectedResult === null) {
467
            $expectedResult = $editAs;
468
        }
469
        $spreadsheet = new Spreadsheet();
470
        $sheet = $spreadsheet->getActiveSheet();
471
472
        // Add gif image that coordinates is two cell anchor.
473
        $drawing = new Drawing();
474
        $drawing->setName('Green Square');
475
        $drawing->setPath('tests/data/Writer/XLSX/green_square.gif');
476
        self::assertEquals($drawing->getWidth(), 150);
477
        self::assertEquals($drawing->getHeight(), 150);
478
        $drawing->setCoordinates('A1');
479
        $drawing->setOffsetX(30);
480
        $drawing->setOffsetY(10);
481
        $drawing->setCoordinates2('E8');
482
        $drawing->setOffsetX2(-50);
483
        $drawing->setOffsetY2(-20);
484
        if ($editAs !== '') {
485
            $drawing->setEditAs($editAs);
486
        }
487
        $drawing->setWorksheet($sheet);
488
489
        // Write file
490
        $reloadedSpreadsheet = $this->writeAndReload($spreadsheet, 'Xlsx');
491
        $spreadsheet->disconnectWorksheets();
492
        $rsheet = $reloadedSpreadsheet->getActiveSheet();
493
494
        // Check image coordinates.
495
        $drawingCollection = $rsheet->getDrawingCollection();
496
        $drawing = $drawingCollection[0];
497
        self::assertNotNull($drawing);
498
499
        self::assertSame(150, $drawing->getWidth());
500
        self::assertSame(150, $drawing->getHeight());
501
        self::assertSame('A1', $drawing->getCoordinates());
502
        self::assertSame(30, $drawing->getOffsetX());
503
        self::assertSame(10, $drawing->getOffsetY());
504
        self::assertSame('E8', $drawing->getCoordinates2());
505
        self::assertSame(-50, $drawing->getOffsetX2());
506
        self::assertSame(-20, $drawing->getOffsetY2());
507
        self::assertSame($rsheet, $drawing->getWorksheet());
508
        self::assertSame($expectedResult, $drawing->getEditAs());
509
        $reloadedSpreadsheet->disconnectWorksheets();
510
    }
511
512
    public static function providerEditAs(): array
513
    {
514
        return [
515
            'absolute' => ['absolute'],
516
            'onecell' => ['oneCell'],
517
            'twocell' => ['twoCell'],
518
            'unset (will be treated as twoCell)' => [''],
519
            'unknown (will be treated as twoCell)' => ['unknown', ''],
520
        ];
521
    }
522
523
    public function testMemoryDrawingDuplicateResource(): void
524
    {
525
        $gdImage = imagecreatetruecolor(120, 20);
526
        $textColor = ($gdImage === false) ? false : imagecolorallocate($gdImage, 255, 255, 255);
527
        if ($gdImage === false || $textColor === false) {
528
            self::fail('imagecreatetruecolor or imagecolorallocate failed');
529
        } else {
530
            $spreadsheet = new Spreadsheet();
531
            $aSheet = $spreadsheet->getActiveSheet();
532
            imagestring($gdImage, 1, 5, 5, 'Created with PhpSpreadsheet', $textColor);
533
            $listOfModes = [
534
                BaseDrawing::EDIT_AS_TWOCELL,
535
                BaseDrawing::EDIT_AS_ABSOLUTE,
536
                BaseDrawing::EDIT_AS_ONECELL,
537
            ];
538
539
            foreach ($listOfModes as $i => $mode) {
540
                $drawing = new MemoryDrawing();
541
                $drawing->setName('In-Memory image ' . $i);
542
                $drawing->setDescription('In-Memory image ' . $i);
543
544
                $drawing->setCoordinates('A' . ((4 * $i) + 1));
545
                $drawing->setCoordinates2('D' . ((4 * $i) + 4));
546
                $drawing->setEditAs($mode);
547
548
                $drawing->setImageResource($gdImage);
549
                $drawing->setRenderingFunction(
550
                    MemoryDrawing::RENDERING_JPEG
551
                );
552
553
                $drawing->setMimeType(MemoryDrawing::MIMETYPE_DEFAULT);
554
555
                $drawing->setWorksheet($aSheet);
556
            }
557
            $reloadedSpreadsheet = $this->writeAndReload($spreadsheet, 'Xlsx');
558
            $spreadsheet->disconnectWorksheets();
559
560
            foreach ($reloadedSpreadsheet->getActiveSheet()->getDrawingCollection() as $index => $pDrawing) {
561
                self::assertEquals($listOfModes[$index], $pDrawing->getEditAs(), 'functional test drawing twoCellAnchor');
562
            }
563
            $reloadedSpreadsheet->disconnectWorksheets();
564
        }
565
    }
566
}
567