Completed
Push — develop ( 0c7df7...c72383 )
by Adrien
68:50 queued 61:57
created

CsvTest::testEscapeCharacters()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 13
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 8
nc 1
nop 0
dl 0
loc 13
rs 9.4285
c 0
b 0
f 0
1
<?php
2
3
namespace PhpOffice\PhpSpreadsheetTests\Reader;
4
5
use PhpOffice\PhpSpreadsheet\Reader\Csv;
6
use PHPUnit\Framework\TestCase;
7
8
class CsvTest extends TestCase
9
{
10
    /**
11
     * @dataProvider providerDelimiterDetection
12
     *
13
     * @param string $filename
14
     * @param string $expectedDelimiter
15
     * @param string $cell
16
     * @param float|int|string $expectedValue
17
     */
18
    public function testDelimiterDetection($filename, $expectedDelimiter, $cell, $expectedValue)
19
    {
20
        $reader = new Csv();
21
        self::assertNull($reader->getDelimiter());
22
23
        $spreadsheet = $reader->load($filename);
24
25
        self::assertSame($expectedDelimiter, $reader->getDelimiter(), 'should be able to infer the delimiter');
26
27
        $actual = $spreadsheet->getActiveSheet()->getCell($cell)->getValue();
28
        self::assertSame($expectedValue, $actual, 'should be able to retrieve correct value');
29
    }
30
31
    public function providerDelimiterDetection()
32
    {
33
        return [
34
            [
35
                __DIR__ . '/../../data/Reader/CSV/enclosure.csv',
36
                ',',
37
                'C4',
38
                'username2',
39
            ],
40
            [
41
                __DIR__ . '/../../data/Reader/CSV/semicolon_separated.csv',
42
                ';',
43
                'C2',
44
                '25,5',
45
            ],
46
            [
47
                __DIR__ . '/../../data/Reader/HTML/csv_with_angle_bracket.csv',
48
                ',',
49
                'B1',
50
                'Number of items with weight <= 50kg',
51
            ],
52
            [
53
                __DIR__ . '/../../../samples/Reader/sampleData/example1.csv',
54
                ',',
55
                'I4',
56
                '100%',
57
            ],
58
            [
59
                __DIR__ . '/../../../samples/Reader/sampleData/example2.csv',
60
                ',',
61
                'D8',
62
                -58.373161,
63
            ],
64
        ];
65
    }
66
67
    /**
68
     * @dataProvider providerCanLoad
69
     *
70
     * @param bool $expected
71
     * @param string $filename
72
     */
73
    public function testCanLoad($expected, $filename)
74
    {
75
        $reader = new Csv();
76
        self::assertSame($expected, $reader->canRead($filename));
77
    }
78
79
    public function providerCanLoad()
80
    {
81
        return [
82
            [false, 'data/Reader/Ods/data.ods'],
83
            [false, 'data/Reader/Xml/WithoutStyle.xml'],
84
            [true, 'data/Reader/CSV/enclosure.csv'],
85
            [true, 'data/Reader/CSV/semicolon_separated.csv'],
86
            [true, 'data/Reader/HTML/csv_with_angle_bracket.csv'],
87
            [true, 'data/Reader/CSV/empty.csv'],
88
            [true, '../samples/Reader/sampleData/example1.csv'],
89
            [true, '../samples/Reader/sampleData/example2.csv'],
90
        ];
91
    }
92
93
    public function testEscapeCharacters()
94
    {
95
        $reader = (new Csv())->setEscapeCharacter('"');
96
        $worksheet = $reader->load(__DIR__ . '/../../data/Reader/CSV/backslash.csv')
97
            ->getActiveSheet();
98
99
        $expected = [
100
            ['field 1', 'field 2\\'],
101
            ['field 3\\', 'field 4'],
102
        ];
103
104
        $this->assertSame('"', $reader->getEscapeCharacter());
105
        $this->assertSame($expected, $worksheet->toArray());
106
    }
107
}
108