Passed
Pull Request — master (#4114)
by Owen
15:13
created

XlsGifBmpTest::testGifIssue4112()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 26
Code Lines 20

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 20
c 1
b 0
f 0
dl 0
loc 26
rs 9.6
cc 3
nc 3
nop 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace PhpOffice\PhpSpreadsheetTests\Writer\Xls;
6
7
use DateTime;
8
use PhpOffice\PhpSpreadsheet\Reader\Exception as ReaderException;
9
use PhpOffice\PhpSpreadsheet\Spreadsheet;
10
use PhpOffice\PhpSpreadsheet\Worksheet\Drawing;
11
use PhpOffice\PhpSpreadsheet\Worksheet\MemoryDrawing;
12
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
13
use PhpOffice\PhpSpreadsheetTests\Functional\AbstractFunctional;
14
15
class XlsGifBmpTest extends AbstractFunctional
16
{
17
    private string $filename = '';
18
19
    protected function tearDown(): void
20
    {
21
        if ($this->filename) {
22
            unlink($this->filename);
23
        }
24
        $this->filename = '';
25
    }
26
27
    public function testBmp(): void
28
    {
29
        $pgmstart = (float) (new DateTime())->format('U');
30
        $spreadsheet = new Spreadsheet();
31
        $filstart = $spreadsheet->getProperties()->getModified();
32
        self::assertLessThanOrEqual($filstart, $pgmstart);
33
34
        // Add a drawing to the worksheet
35
        $drawing = new Drawing();
36
        $drawing->setName('Letters B, M, and P');
37
        $drawing->setDescription('Handwritten B, M, and P');
38
        $drawing->setPath(__DIR__ . '/../../../../samples/images/bmp.bmp');
39
        $drawing->setHeight(36);
40
        $drawing->setWorksheet($spreadsheet->getActiveSheet());
41
        $drawing->setCoordinates('A1');
42
43
        $reloadedSpreadsheet = $this->writeAndReload($spreadsheet, 'Xls');
44
        $spreadsheet->disconnectWorksheets();
45
        $creationDatestamp = $reloadedSpreadsheet->getProperties()->getCreated();
46
        $filstart = $creationDatestamp;
47
        $worksheet = $reloadedSpreadsheet->getActiveSheet();
48
        $drawings = $worksheet->getDrawingCollection();
49
        self::assertCount(1, $drawings);
50
        foreach ($worksheet->getDrawingCollection() as $drawing) {
51
            $mimeType = ($drawing instanceof MemoryDrawing) ? $drawing->getMimeType() : 'notmemorydrawing';
52
            self::assertEquals('image/png', $mimeType);
53
        }
54
        $pgmend = (float) (new DateTime())->format('U');
55
56
        self::assertLessThanOrEqual($pgmend, $pgmstart);
57
        self::assertLessThanOrEqual($pgmend, $filstart);
58
        self::assertLessThanOrEqual($filstart, $pgmstart);
59
        $reloadedSpreadsheet->disconnectWorksheets();
60
    }
61
62
    public function testGif(): void
63
    {
64
        $spreadsheet = new Spreadsheet();
65
66
        // Add a drawing to the worksheet
67
        $drawing = new Drawing();
68
        $drawing->setName('Letters G, I, and G');
69
        $drawing->setDescription('Handwritten G, I, and F');
70
        $drawing->setPath(__DIR__ . '/../../../../samples/images/gif.gif');
71
        $drawing->setHeight(36);
72
        $drawing->setWorksheet($spreadsheet->getActiveSheet());
73
        $drawing->setCoordinates('A1');
74
75
        $reloadedSpreadsheet = $this->writeAndReload($spreadsheet, 'Xls');
76
        $spreadsheet->disconnectWorksheets();
77
        $worksheet = $reloadedSpreadsheet->getActiveSheet();
78
        $drawings = $worksheet->getDrawingCollection();
79
        self::assertCount(1, $drawings);
80
        foreach ($worksheet->getDrawingCollection() as $drawing) {
81
            $mimeType = ($drawing instanceof MemoryDrawing) ? $drawing->getMimeType() : 'notmemorydrawing';
82
            self::assertEquals('image/png', $mimeType);
83
        }
84
        $reloadedSpreadsheet->disconnectWorksheets();
85
    }
86
87
    public function testGifIssue4112(): void
88
    {
89
        $spreadsheet = new Spreadsheet();
90
        $spreadsheet->removeSheetByIndex(0);
91
        $sheet = new Worksheet($spreadsheet, 'Insured List');
92
        $spreadsheet->addSheet($sheet, 0);
93
94
        // Add a drawing to the worksheet
95
        $drawing = new Drawing();
96
        $drawing->setName('Letters G, I, and G');
97
        $drawing->setDescription('Handwritten G, I, and F');
98
        $drawing->setPath(__DIR__ . '/../../../../samples/images/gif.gif');
99
        $drawing->setHeight(36);
100
        $drawing->setWorksheet($sheet);
101
        $drawing->setCoordinates('A1');
102
103
        $reloadedSpreadsheet = $this->writeAndReload($spreadsheet, 'Xls');
104
        $spreadsheet->disconnectWorksheets();
105
        $worksheet = $reloadedSpreadsheet->getActiveSheet();
106
        $drawings = $worksheet->getDrawingCollection();
107
        self::assertCount(1, $drawings);
108
        foreach ($worksheet->getDrawingCollection() as $drawing) {
109
            $mimeType = ($drawing instanceof MemoryDrawing) ? $drawing->getMimeType() : 'notmemorydrawing';
110
            self::assertEquals('image/png', $mimeType);
111
        }
112
        $reloadedSpreadsheet->disconnectWorksheets();
113
    }
114
115
    public function testInvalidTimestamp(): void
116
    {
117
        $this->expectException(ReaderException::class);
118
        $this->expectExceptionMessage('Expecting 8 byte string');
119
        \PhpOffice\PhpSpreadsheet\Shared\OLE::OLE2LocalDate(' ');
120
    }
121
}
122