Passed
Push — master ( 9da522...68fd71 )
by
unknown
12:32 queued 17s
created

MicrosecondsTest::testIssue4476()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 29
Code Lines 23

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 23
dl 0
loc 29
rs 9.552
c 1
b 0
f 0
cc 1
nc 1
nop 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace PhpOffice\PhpSpreadsheetTests\Writer\Ods;
6
7
use DateTime;
8
use PhpOffice\PhpSpreadsheet\Shared\Date;
9
use PhpOffice\PhpSpreadsheet\Spreadsheet;
10
use PhpOffice\PhpSpreadsheetTests\Functional\AbstractFunctional;
11
12
class MicrosecondsTest extends AbstractFunctional
13
{
14
    /**
15
     * Test save and load XLSX file for round-trip DateTime.
16
     * Ods Writer does not support date formats,
17
     * and Reader does not support styles, so this
18
     * test is slightly different than its Xls/Xlsx counterparts.
19
     */
20
    public function testIssue4476(): void
21
    {
22
        $date = '2020-10-21';
23
        $time = '14:55:31';
24
        $originalDateTime = new DateTime("{$date}T{$time}");
25
        $spreadsheet = new Spreadsheet();
26
        $sheet = $spreadsheet->getActiveSheet();
27
        $sheet->setCellValue('A1', Date::dateTimeToExcel($originalDateTime));
28
        $reloadedSpreadsheet = $this->writeAndReload($spreadsheet, 'Ods');
29
        $spreadsheet->disconnectWorksheets();
30
31
        $rsheet = $reloadedSpreadsheet->getActiveSheet();
32
        $rsheet->getStyle('A1')
33
            ->getNumberFormat()
34
            ->setFormatCode('yyyy-mm-dd hh:mm:ss.000');
35
        /** @var float */
36
        $reread = $rsheet->getCell('A1')->getValue();
37
        $temp = Date::excelToDateTimeObject($reread)
38
            ->format('Y-m-d H:i:s.u');
39
        self::assertSame("{$date} {$time}.000000", $temp, 'round trip works with float value');
40
        $formatted = $rsheet->getCell('A1')->getFormattedValue();
41
        self::assertSame("{$date} {$time}.000", $formatted, 'round trip works with formatted value');
42
        /** @var float */
43
        $temp = Date::stringToExcel($formatted);
44
        $temp = Date::excelToDateTimeObject($temp)
45
            ->format('Y-m-d H:i:s.u');
46
        self::assertSame("{$date} {$time}.000000", $temp, 'round trip works using stringToExcel on formatted value');
47
48
        $reloadedSpreadsheet->disconnectWorksheets();
49
    }
50
}
51