Passed
Push — master ( 2d1f4e...e6aacf )
by
unknown
26:57 queued 19:21
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\PhpSpreadsheet\Spreadsheet;
9
use PhpOffice\PhpSpreadsheetTests\Functional\AbstractFunctional;
10
11
class CeilingFloorTest extends AbstractFunctional
12
{
13
    private const INFILE = 'tests/data/Reader/Ods/issue.407.ods';
14
15
    private const EXPECTED_ODS = [
16
        'A1' => '=FLOOR(2.5,1)',
17
        'A2' => '=FLOOR.MATH(2.5,1)',
18
        'A3' => '=FLOOR.PRECISE(2.5,1)',
19
        'A4' => '=FLOOR.ODS(2.5,1,0)',
20
        'C1' => '=CEILING(2.5,1)',
21
        'C2' => '=CEILING.MATH(2.5,1)',
22
        'C3' => '=CEILING.PRECISE(2.5,1)',
23
        'C4' => '=CEILING.ODS(2.5,1)',
24
        'E1' => '=FLOOR.ODS(37, -1, 0)',
25
        'F1' => '=CEILING.ODS(-37.2,1,0)',
26
    ];
27
28
    private const EXPECTED_XLSX = [
29
        'A1' => '=FLOOR(2.5,1)',
30
        'A2' => '=FLOOR.MATH(2.5,1)',
31
        'A3' => '=FLOOR.PRECISE(2.5,1)',
32
        'A4' => '=FLOOR.MATH(2.5,1,0)', // note different from ODS
33
        'C1' => '=CEILING(2.5,1)',
34
        'C2' => '=CEILING.MATH(2.5,1)',
35
        'C3' => '=CEILING.PRECISE(2.5,1)',
36
        'C4' => '=CEILING.MATH(2.5,1)', // different from ODS
37
        'E1' => '=FLOOR.MATH(37, -1, 0)', // different from ODS
38
        'F1' => '=CEILING.MATH(-37.2,1,0)', // different from ODS
39
    ];
40
41
    public function testReadAndWriteOds(): void
42
    {
43
        $reader = new OdsReader();
44
        $spreadsheetOld = $reader->load(self::INFILE);
45
        $oldSheet = $spreadsheetOld->getActiveSheet();
46
        foreach (self::EXPECTED_ODS as $key => $value) {
47
            self::assertSame(
48
                $value,
49
                $oldSheet->getCell($key)->getValue(),
50
                "Error in cell $key"
51
            );
52
        }
53
        self::assertSame('#NUM!', $oldSheet->getCell('E1')->getCalculatedValue());
54
        self::assertSame('#NUM!', $oldSheet->getCell('F1')->getCalculatedValue());
55
56
        $spreadsheet = $this->writeAndReload($spreadsheetOld, 'Ods');
57
        $spreadsheetOld->disconnectWorksheets();
58
        $sheet = $spreadsheet->getActiveSheet();
59
        foreach (self::EXPECTED_ODS as $key => $value) {
60
            self::assertSame(
61
                $value,
62
                $sheet->getCell($key)->getValue(),
63
                "Error in cell $key"
64
            );
65
        }
66
        self::assertSame('#NUM!', $sheet->getCell('E1')->getCalculatedValue());
67
        self::assertSame('#NUM!', $sheet->getCell('F1')->getCalculatedValue());
68
69
        $spreadsheet->disconnectWorksheets();
70
    }
71
72
    public function testReadAndWriteXlsx(): void
73
    {
74
        $reader = new OdsReader();
75
        $spreadsheetOld = $reader->load(self::INFILE);
76
77
        $spreadsheet = $this->writeAndReload($spreadsheetOld, 'Xlsx');
78
        $spreadsheetOld->disconnectWorksheets();
79
        $sheet = $spreadsheet->getActiveSheet();
80
        foreach (self::EXPECTED_XLSX as $key => $value) {
81
            self::assertSame(
82
                $value,
83
                $sheet->getCell($key)->getValue(),
84
                "Error in cell $key"
85
            );
86
        }
87
        self::assertSame(37.0, $sheet->getCell('E1')->getCalculatedValue()); // different from ODS
88
        self::assertSame(-37.0, $sheet->getCell('F1')->getCalculatedValue()); // different from ODS
89
90
        $spreadsheet->disconnectWorksheets();
91
    }
92
93
    public function testWriteXcl(): void
94
    {
95
        $spreadsheet = new Spreadsheet();
96
        $sheet = $spreadsheet->getActiveSheet();
97
        $sheet->getCell('A1')->setValue('=CEILING.XCL(17.8,8)');
98
        $sheet->getCell('B1')->setValue('=FLOOR.XCL(17.8,8)');
99
100
        $spreadsheetOds = $this->writeAndReload($spreadsheet, 'Ods');
101
        $sheetOds = $spreadsheetOds->getActiveSheet();
102
        self::assertSame('=CEILING(17.8,8)', $sheetOds->getCell('A1')->getValue());
103
        self::assertSame('=FLOOR(17.8,8)', $sheetOds->getCell('B1')->getValue());
104
        $spreadsheetOds->disconnectWorksheets();
105
106
        $spreadsheetXlsx = $this->writeAndReload($spreadsheet, 'Xlsx');
107
        $sheetXlsx = $spreadsheetXlsx->getActiveSheet();
108
        self::assertSame('=CEILING(17.8,8)', $sheetXlsx->getCell('A1')->getValue());
109
        self::assertSame('=FLOOR(17.8,8)', $sheetXlsx->getCell('B1')->getValue());
110
        $spreadsheetXlsx->disconnectWorksheets();
111
112
        $spreadsheetXls = $this->writeAndReload($spreadsheet, 'Xls');
113
        $sheetXls = $spreadsheetXls->getActiveSheet();
114
        self::assertSame('=CEILING(17.8,8)', $sheetXls->getCell('A1')->getValue());
115
        self::assertSame('=FLOOR(17.8,8)', $sheetXls->getCell('B1')->getValue());
116
        $spreadsheetXls->disconnectWorksheets();
117
118
        $spreadsheet->disconnectWorksheets();
119
    }
120
}
121