Failed Conditions
Pull Request — master (#4141)
by Owen
16:19 queued 01:34
created

StringValueBinder2Test::tearDown()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 1
c 1
b 0
f 0
dl 0
loc 3
rs 10
cc 1
nc 1
nop 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace PhpOffice\PhpSpreadsheetTests\Cell;
6
7
use PhpOffice\PhpSpreadsheet\Cell\Cell;
8
use PhpOffice\PhpSpreadsheet\Cell\DataType;
9
use PhpOffice\PhpSpreadsheet\Cell\IValueBinder;
10
use PhpOffice\PhpSpreadsheet\Cell\StringValueBinder;
11
use PhpOffice\PhpSpreadsheet\Spreadsheet;
12
use PHPUnit\Framework\TestCase;
13
14
class StringValueBinder2Test extends TestCase
15
{
16
    private IValueBinder $valueBinder;
17
18
    protected function setUp(): void
19
    {
20
        $this->valueBinder = Cell::getValueBinder();
21
    }
22
23
    protected function tearDown(): void
24
    {
25
        Cell::setValueBinder($this->valueBinder);
26
    }
27
28
    public function testStringValueBinderIgnoredErrorsDefault(): void
29
    {
30
        $valueBinder = new StringValueBinder();
31
        Cell::setValueBinder($valueBinder);
32
        $spreadsheet = new Spreadsheet();
33
        $sheet = $spreadsheet->getActiveSheet();
34
        $sheet->fromArray([
35
            [1, 'x', 3.2],
36
            ['y', -5, 'z'],
37
        ]);
38
        $ignoredCells = [];
39
        foreach ($sheet->getRowIterator() as $row) {
40
            foreach ($row->getCellIterator() as $cell) {
41
                $coordinate = $cell->getCoordinate();
42
                self::assertSame(DataType::TYPE_STRING, $cell->getDataType(), "not string for cell $coordinate");
43
                if ($cell->getIgnoredErrors()->getNumberStoredAsText()) {
44
                    $ignoredCells[] = $coordinate;
45
                }
46
            }
47
        }
48
        self::assertSame([], $ignoredCells);
49
        $spreadsheet->disconnectWorksheets();
50
    }
51
52
    public function testStringValueBinderIgnoredErrorsTrue(): void
53
    {
54
        $valueBinder = new StringValueBinder();
55
        $valueBinder->setSetIgnoredErrors(true);
56
        Cell::setValueBinder($valueBinder);
57
        $spreadsheet = new Spreadsheet();
58
        $sheet = $spreadsheet->getActiveSheet();
59
        $sheet->fromArray([
60
            [1, 'x', 3.2],
61
            ['y', -5, 'z'],
62
        ]);
63
        $ignoredCells = [];
64
        foreach ($sheet->getRowIterator() as $row) {
65
            foreach ($row->getCellIterator() as $cell) {
66
                $coordinate = $cell->getCoordinate();
67
                self::assertSame(DataType::TYPE_STRING, $cell->getDataType(), "not string for cell $coordinate");
68
                if ($cell->getIgnoredErrors()->getNumberStoredAsText()) {
69
                    $ignoredCells[] = $coordinate;
70
                }
71
            }
72
        }
73
        self::assertSame(['A1', 'C1', 'B2'], $ignoredCells);
74
        $spreadsheet->disconnectWorksheets();
75
    }
76
77
    public function testStringValueBinderPreserveNumeric(): void
78
    {
79
        $valueBinder = new StringValueBinder();
80
        $valueBinder->setNumericConversion(false);
81
        $valueBinder->setSetIgnoredErrors(true);
82
        Cell::setValueBinder($valueBinder);
83
        $spreadsheet = new Spreadsheet();
84
        $sheet = $spreadsheet->getActiveSheet();
85
        $sheet->fromArray([
86
            [1, 'x', 3.2],
87
            ['y', -5, 'z'],
88
        ]);
89
        $ignoredCells = [];
90
        foreach ($sheet->getRowIterator() as $row) {
91
            foreach ($row->getCellIterator() as $cell) {
92
                $coordinate = $cell->getCoordinate();
93
                $expected = is_numeric($cell->getValue()) ? DataType::TYPE_NUMERIC : DataType::TYPE_STRING;
94
                self::assertSame($expected, $cell->getDataType(), "wrong type for cell $coordinate");
95
                if ($cell->getIgnoredErrors()->getNumberStoredAsText()) {
96
                    $ignoredCells[] = $coordinate;
97
                }
98
            }
99
        }
100
        self::assertSame([], $ignoredCells);
101
        $spreadsheet->disconnectWorksheets();
102
    }
103
}
104