Failed Conditions
Pull Request — master (#4257)
by Owen
12:35
created

BetterBooleanTest::testLocale()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 37
Code Lines 32

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
eloc 32
c 2
b 0
f 0
dl 0
loc 37
rs 9.408
cc 1
nc 1
nop 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace PhpOffice\PhpSpreadsheetTests\Writer\Html;
6
7
use PhpOffice\PhpSpreadsheet\Calculation\Calculation;
8
use PhpOffice\PhpSpreadsheet\Cell\DataType;
9
use PhpOffice\PhpSpreadsheet\Reader\Html as HtmlReader;
10
use PhpOffice\PhpSpreadsheet\Spreadsheet;
11
use PhpOffice\PhpSpreadsheet\Writer\Html as HtmlWriter;
12
use PhpOffice\PhpSpreadsheetTests\Functional;
13
14
class BetterBooleanTest extends Functional\AbstractFunctional
15
{
16
    private string $locale;
17
18
    protected function setUp(): void
19
    {
20
        $calculation = Calculation::getInstance();
21
        $this->locale = $calculation->getLocale();
22
    }
23
24
    protected function tearDown(): void
25
    {
26
        $calculation = Calculation::getInstance();
27
        $calculation->setLocale($this->locale);
28
    }
29
30
    public function testDefault(): void
31
    {
32
        $spreadsheet = new Spreadsheet();
33
        $writer = new HtmlWriter($spreadsheet);
34
        // Default will change with next PhpSpreadsheet release
35
        self::assertFalse($writer->getBetterBoolean());
36
        $spreadsheet->disconnectWorksheets();
37
    }
38
39
    public function setBetter(HtmlWriter $writer): void
40
    {
41
        $writer->setBetterBoolean(true);
42
    }
43
44
    public function setNotBetter(HtmlWriter $writer): void
45
    {
46
        $writer->setBetterBoolean(false);
47
    }
48
49
    public function testBetterBoolean(): void
50
    {
51
        $spreadsheet = new Spreadsheet();
52
        $sheet = $spreadsheet->getActiveSheet();
53
        $sheet->getCell('A1')->setValue(1);
54
        $sheet->getCell('B1')->setValue('Hello');
55
        $sheet->getCell('C1')->setValue(true);
56
        $sheet->getCell('D1')->setValue('=IF(1>2, TRUE, FALSE)');
57
        $sheet->getCell('E1')->setValueExplicit(1, DataType::TYPE_STRING);
58
        $sheet->getCell('F1')->setValue('="A"&"B"');
59
        $sheet->getCell('G1')->setValue('=1+2');
60
61
        /** @var callable */
62
        $callableWriter = [$this, 'setBetter'];
63
        $reloaded = $this->writeAndReload($spreadsheet, 'Html', null, $callableWriter);
64
        $spreadsheet->disconnectWorksheets();
65
66
        $rsheet = $reloaded->getActiveSheet();
67
        self::assertSame(1, $rsheet->getCell('A1')->getValue());
68
        self::assertSame('Hello', $rsheet->getCell('B1')->getValue());
69
        self::assertTrue($rsheet->getCell('C1')->getValue());
70
        self::assertFalse($rsheet->getCell('D1')->getValue());
71
        self::assertSame('1', $rsheet->getCell('E1')->getValue());
72
        self::assertSame('AB', $rsheet->getCell('F1')->getValue());
73
        self::assertSame(3, $rsheet->getCell('G1')->getValue());
74
        $reloaded->disconnectWorksheets();
75
    }
76
77
    public function testNotBetterBoolean(): void
78
    {
79
        $spreadsheet = new Spreadsheet();
80
        $sheet = $spreadsheet->getActiveSheet();
81
        $sheet->getCell('A1')->setValue(1);
82
        $sheet->getCell('B1')->setValue('Hello');
83
        $sheet->getCell('C1')->setValue(true);
84
        $sheet->getCell('D1')->setValue('=IF(1>2, TRUE, FALSE)');
85
        $sheet->getCell('E1')->setValueExplicit(1, DataType::TYPE_STRING);
86
        $sheet->getCell('F1')->setValue('="A"&"B"');
87
        $sheet->getCell('G1')->setValue('=1+2');
88
89
        /** @var callable */
90
        $callableWriter = [$this, 'setNotBetter'];
91
        $reloaded = $this->writeAndReload($spreadsheet, 'Html', null, $callableWriter);
92
        $spreadsheet->disconnectWorksheets();
93
94
        $rsheet = $reloaded->getActiveSheet();
95
        self::assertSame(1, $rsheet->getCell('A1')->getValue());
96
        self::assertSame('Hello', $rsheet->getCell('B1')->getValue());
97
        self::assertSame(1, $rsheet->getCell('C1')->getValue());
98
        self::assertNull($rsheet->getCell('D1')->getValue());
99
        self::assertSame(1, $rsheet->getCell('E1')->getValue());
100
        self::assertSame('AB', $rsheet->getCell('F1')->getValue());
101
        self::assertSame(3, $rsheet->getCell('G1')->getValue());
102
        $reloaded->disconnectWorksheets();
103
    }
104
105
    public function testLocale(): void
106
    {
107
        $spreadsheet = new Spreadsheet();
108
        $sheet = $spreadsheet->getActiveSheet();
109
        $sheet->getCell('A1')->setValue(1);
110
        $sheet->getCell('B1')->setValue('Hello');
111
        $sheet->getCell('C1')->setValue(true);
112
        $sheet->getCell('D1')->setValue('=IF(1>2, TRUE, FALSE)');
113
        $sheet->getCell('E1')->setValueExplicit(1, DataType::TYPE_STRING);
114
        $sheet->getCell('F1')->setValue('="A"&"B"');
115
        $sheet->getCell('G1')->setValue('=1+2');
116
        $calc = Calculation::getInstance();
117
        $calc->setLocale('fr');
118
        $writer = new HtmlWriter($spreadsheet);
119
        $writer->setBetterBoolean(true);
120
        $html = $writer->generateHtmlAll();
121
        self::assertStringNotContainsString('TRUE', $html);
122
        self::assertStringContainsString('<td data-type="b" class="column2 style0 b">VRAI</td>', $html);
123
        self::assertStringContainsString('<td data-type="b" class="column3 style0 b">FAUX</td>', $html);
124
        self::assertStringContainsString('<td data-type="s" class="column4 style0 s">1</td>', $html);
125
        self::assertStringContainsString('<td class="column5 style0 s">AB</td>', $html);
126
        self::assertStringContainsString('<td class="column6 style0 n">3</td>', $html);
127
128
        /** @var callable */
129
        $callableWriter = [$this, 'setBetter'];
130
        $reloaded = $this->writeAndReload($spreadsheet, 'Html', null, $callableWriter);
131
        $spreadsheet->disconnectWorksheets();
132
133
        $rsheet = $reloaded->getActiveSheet();
134
        self::assertSame(1, $rsheet->getCell('A1')->getValue());
135
        self::assertSame('Hello', $rsheet->getCell('B1')->getValue());
136
        self::assertTrue($rsheet->getCell('C1')->getValue());
137
        self::assertFalse($rsheet->getCell('D1')->getValue());
138
        self::assertSame('1', $rsheet->getCell('E1')->getValue());
139
        self::assertSame('AB', $rsheet->getCell('F1')->getValue());
140
        self::assertSame(3, $rsheet->getCell('G1')->getValue());
141
        $reloaded->disconnectWorksheets();
142
    }
143
144
    public function testForeignNoLocale(): void
145
    {
146
        $fragment = '<table><tbody><tr>'
147
            . '<td>1</td>'
148
            . '<td>Hello</td>'
149
            . '<td data-type="b">ИСТИНА</td>' // Bulgarian TRUE
150
            . '<td data-type="b">EPÄTOSI</td>' // Finnish FALSE
151
            . '<td data-type="b">whatever</td>'
152
            . '<td data-type="b">tRuE</td>'
153
            . '<td data-type="s">1</td>'
154
            . '</tr></tbody></table>';
155
        $reader = new HtmlReader();
156
        $spreadsheet = $reader->loadFromString($fragment);
157
        $sheet = $spreadsheet->getActiveSheet();
158
        self::assertSame(1, $sheet->getCell('A1')->getValue());
159
        self::assertSame('Hello', $sheet->getCell('B1')->getValue());
160
        self::assertTrue($sheet->getCell('C1')->getValue());
161
        self::assertFalse($sheet->getCell('D1')->getValue());
162
        self::assertSame('whatever', $sheet->getCell('E1')->getValue());
163
        self::assertTrue($sheet->getCell('F1')->getValue());
164
        self::assertSame('1', $sheet->getCell('G1')->getValue());
165
        $spreadsheet->disconnectWorksheets();
166
    }
167
}
168