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

BetterBooleanTest::testInline()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 42
Code Lines 37

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
eloc 37
dl 0
loc 42
rs 9.328
c 2
b 0
f 0
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 testInline(): void
145
    {
146
        $spreadsheet = new Spreadsheet();
147
        $sheet = $spreadsheet->getActiveSheet();
148
        $sheet->getCell('A1')->setValue(1);
149
        $sheet->getCell('B1')->setValue('Hello');
150
        $sheet->getCell('C1')->setValue(true);
151
        $sheet->getCell('D1')->setValue('=IF(1>2, TRUE, FALSE)');
152
        $sheet->getCell('E1')->setValueExplicit(1, DataType::TYPE_STRING);
153
        $sheet->getCell('F1')->setValue('="A"&"B"');
154
        $sheet->getCell('G1')->setValue('=1+2');
155
        $calc = Calculation::getInstance();
156
        $calc->setLocale('fr');
157
        $writer = new HtmlWriter($spreadsheet);
158
        $writer->setBetterBoolean(true);
159
        $writer->setUseInlineCss(true);
160
        $html = $writer->generateHtmlAll();
161
        $html = str_replace('vertical-align:bottom; color:#000000; font-family:\'Calibri\'; font-size:11pt; ', '', $html);
162
        $html = str_replace(' width:42pt" class="gridlines gridlinesp"', '"', $html);
163
        self::assertStringNotContainsString('TRUE', $html);
164
        self::assertStringContainsString('<td style="text-align:right;">1</td>', $html);
165
        self::assertStringContainsString('<td style="text-align:left;">Hello</td>', $html);
166
        self::assertStringContainsString('<td data-type="b" style="text-align:center;">VRAI</td>', $html);
167
        self::assertStringContainsString('<td data-type="b" style="text-align:center;">FAUX</td>', $html);
168
        self::assertStringContainsString('<td data-type="s" style="text-align:left;">1</td>', $html);
169
        self::assertStringContainsString('<td style="text-align:left;">AB</td>', $html);
170
        self::assertStringContainsString('<td style="text-align:right;">3</td>', $html);
171
172
        /** @var callable */
173
        $callableWriter = [$this, 'setBetter'];
174
        $reloaded = $this->writeAndReload($spreadsheet, 'Html', null, $callableWriter);
175
        $spreadsheet->disconnectWorksheets();
176
177
        $rsheet = $reloaded->getActiveSheet();
178
        self::assertSame(1, $rsheet->getCell('A1')->getValue());
179
        self::assertSame('Hello', $rsheet->getCell('B1')->getValue());
180
        self::assertTrue($rsheet->getCell('C1')->getValue());
181
        self::assertFalse($rsheet->getCell('D1')->getValue());
182
        self::assertSame('1', $rsheet->getCell('E1')->getValue());
183
        self::assertSame('AB', $rsheet->getCell('F1')->getValue());
184
        self::assertSame(3, $rsheet->getCell('G1')->getValue());
185
        $reloaded->disconnectWorksheets();
186
    }
187
188
    public function testForeignNoLocale(): void
189
    {
190
        $fragment = '<table><tbody><tr>'
191
            . '<td>1</td>'
192
            . '<td>Hello</td>'
193
            . '<td data-type="b">ИСТИНА</td>' // Bulgarian TRUE
194
            . '<td data-type="b">EPÄTOSI</td>' // Finnish FALSE
195
            . '<td data-type="b">whatever</td>'
196
            . '<td data-type="b">tRuE</td>'
197
            . '<td data-type="s">1</td>'
198
            . '</tr></tbody></table>';
199
        $reader = new HtmlReader();
200
        $spreadsheet = $reader->loadFromString($fragment);
201
        $sheet = $spreadsheet->getActiveSheet();
202
        self::assertSame(1, $sheet->getCell('A1')->getValue());
203
        self::assertSame('Hello', $sheet->getCell('B1')->getValue());
204
        self::assertTrue($sheet->getCell('C1')->getValue());
205
        self::assertFalse($sheet->getCell('D1')->getValue());
206
        self::assertSame('whatever', $sheet->getCell('E1')->getValue());
207
        self::assertTrue($sheet->getCell('F1')->getValue());
208
        self::assertSame('1', $sheet->getCell('G1')->getValue());
209
        $spreadsheet->disconnectWorksheets();
210
    }
211
}
212