Passed
Pull Request — master (#4466)
by Owen
15:22
created

CeilingFloorTest::testReadAndWriteXlsx()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 19
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 13
dl 0
loc 19
rs 9.8333
c 1
b 0
f 0
cc 2
nc 2
nop 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace PhpOffice\PhpSpreadsheetTests\Reader\Ods;
6
7
use PhpOffice\PhpSpreadsheet\Reader\Ods as OdsReader;
8
use PhpOffice\PhpSpreadsheetTests\Functional\AbstractFunctional;
9
10
class CeilingFloorTest extends AbstractFunctional
11
{
12
    private const INFILE = 'tests/data/Reader/Ods/issue.407.ods';
13
14
    private const EXPECTED_ODS = [
15
        'A1' => '=FLOOR(2.5,1)',
16
        'A2' => '=FLOOR.MATH(2.5,1)',
17
        'A3' => '=FLOOR.PRECISE(2.5,1)',
18
        'A4' => '=FLOOR.ODS(2.5,1,0)',
19
        'C1' => '=CEILING(2.5,1)',
20
        'C2' => '=CEILING.MATH(2.5,1)',
21
        'C3' => '=CEILING.PRECISE(2.5,1)',
22
        'C4' => '=CEILING.ODS(2.5,1)',
23
        'E1' => '=FLOOR.ODS(37, -1, 0)',
24
        'F1' => '=CEILING.ODS(-37.2,1,0)',
25
    ];
26
27
    private const EXPECTED_XLSX = [
28
        'A1' => '=FLOOR(2.5,1)',
29
        'A2' => '=FLOOR.MATH(2.5,1)',
30
        'A3' => '=FLOOR.PRECISE(2.5,1)',
31
        'A4' => '=FLOOR.MATH(2.5,1,0)', // note different from ODS
32
        'C1' => '=CEILING(2.5,1)',
33
        'C2' => '=CEILING.MATH(2.5,1)',
34
        'C3' => '=CEILING.PRECISE(2.5,1)',
35
        'C4' => '=CEILING.MATH(2.5,1)', // different from ODS
36
        'E1' => '=FLOOR.MATH(37, -1, 0)', // different from ODS
37
        'F1' => '=CEILING.MATH(-37.2,1,0)', // different from ODS
38
    ];
39
40
    public function testReadAndWriteOds(): void
41
    {
42
        $reader = new OdsReader();
43
        $spreadsheetOld = $reader->load(self::INFILE);
44
        $oldSheet = $spreadsheetOld->getActiveSheet();
45
        foreach (self::EXPECTED_ODS as $key => $value) {
46
            self::assertSame(
47
                $value,
48
                $oldSheet->getCell($key)->getValue(),
49
                "Error in cell $key"
50
            );
51
        }
52
        self::assertSame('#VALUE!', $oldSheet->getCell('E1')->getCalculatedValue());
53
        self::assertSame('#VALUE!', $oldSheet->getCell('F1')->getCalculatedValue());
54
55
        $spreadsheet = $this->writeAndReload($spreadsheetOld, 'Ods');
56
        $spreadsheetOld->disconnectWorksheets();
57
        $sheet = $spreadsheet->getActiveSheet();
58
        foreach (self::EXPECTED_ODS as $key => $value) {
59
            self::assertSame(
60
                $value,
61
                $sheet->getCell($key)->getValue(),
62
                "Error in cell $key"
63
            );
64
        }
65
        self::assertSame('#VALUE!', $sheet->getCell('E1')->getCalculatedValue());
66
        self::assertSame('#VALUE!', $sheet->getCell('F1')->getCalculatedValue());
67
68
        $spreadsheet->disconnectWorksheets();
69
    }
70
71
    public function testReadAndWriteXlsx(): void
72
    {
73
        $reader = new OdsReader();
74
        $spreadsheetOld = $reader->load(self::INFILE);
75
76
        $spreadsheet = $this->writeAndReload($spreadsheetOld, 'Xlsx');
77
        $spreadsheetOld->disconnectWorksheets();
78
        $sheet = $spreadsheet->getActiveSheet();
79
        foreach (self::EXPECTED_XLSX as $key => $value) {
80
            self::assertSame(
81
                $value,
82
                $sheet->getCell($key)->getValue(),
83
                "Error in cell $key"
84
            );
85
        }
86
        self::assertSame(37.0, $sheet->getCell('E1')->getCalculatedValue()); // different from ODS
87
        self::assertSame(-37.0, $sheet->getCell('F1')->getCalculatedValue()); // different from ODS
88
89
        $spreadsheet->disconnectWorksheets();
90
    }
91
}
92