Passed
Pull Request — master (#4344)
by Owen
28:48 queued 15:40
created

NonLatinFormulasTest   A

Complexity

Total Complexity 1

Size/Duplication

Total Lines 53
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 1
eloc 37
dl 0
loc 53
rs 10
c 1
b 0
f 0

1 Method

Rating   Name   Duplication   Size   Complexity  
A testNonLatin() 0 51 1
1
<?php
2
3
namespace PhpOffice\PhpSpreadsheetTests\Writer\Xls;
4
5
use PhpOffice\PhpSpreadsheet\Cell\DataValidation;
6
use PhpOffice\PhpSpreadsheet\Cell\DataValidator;
7
use PhpOffice\PhpSpreadsheet\NamedRange;
8
use PhpOffice\PhpSpreadsheet\Spreadsheet;
9
use PhpOffice\PhpSpreadsheetTests\Functional\AbstractFunctional;
10
11
class NonLatinFormulasTest extends AbstractFunctional
12
{
13
    public function testNonLatin(): void
14
    {
15
        $spreadsheet = new Spreadsheet();
16
        $worksheet = $spreadsheet->getActiveSheet();
17
18
        $validation = $worksheet->getCell('B1')->getDataValidation();
19
        $validation->setType(DataValidation::TYPE_LIST);
20
        $validation->setErrorStyle(DataValidation::STYLE_STOP);
21
        $validation->setAllowBlank(false);
22
        $validation->setShowInputMessage(true);
23
        $validation->setShowErrorMessage(true);
24
        $validation->setShowDropDown(true);
25
        $validation->setFormula1('"слово, сло"');
26
27
        $dataValidator = new DataValidator();
28
        $worksheet->getCell('B1')->setValue('слово');
29
        self::assertTrue(
30
            $dataValidator->isValid($worksheet->getCell('B1'))
31
        );
32
        $worksheet->getCell('B1')->setValue('слов');
33
        self::assertFalse(
34
            $dataValidator->isValid($worksheet->getCell('B1'))
35
        );
36
37
        $worksheet->setTitle('словслов');
38
        $worksheet->getCell('A1')->setValue('=словслов!B1');
39
        $worksheet->getCell('A2')->setValue("='словслов'!B1");
40
        $spreadsheet->addNamedRange(new NamedRange('слсл', $worksheet, '$B$1'));
41
        $worksheet->getCell('A3')->setValue('=слсл');
42
43
        $robj = $this->writeAndReload($spreadsheet, 'Xls');
44
        $spreadsheet->disconnectWorksheets();
45
        $sheet0 = $robj->getActiveSheet();
46
        self::assertSame('словслов', $sheet0->getTitle());
47
        self::assertSame('=словслов!B1', $sheet0->getCell('A1')->getValue());
48
        self::assertSame('слов', $sheet0->getCell('A1')->getCalculatedValue());
49
        // Quotes around sheet name are stripped off - harmless
50
        //self::assertSame("='словслов'!B1", $sheet0->getCell('A2')->getValue());
51
        self::assertSame('слов', $sheet0->getCell('A2')->getCalculatedValue());
52
        // Formulas with defined names don't work in Xls Writer
53
        //self::assertSame('=слсл', $sheet0->getCell('A3')->getValue());
54
        // But result should be accurate
55
        self::assertSame('слов', $sheet0->getCell('A3')->getCalculatedValue());
56
        $names = $robj->getDefinedNames();
57
        self::assertCount(1, $names);
58
        // name has been uppercased
59
        $namedRange = $names['СЛСЛ'] ?? null;
60
        self::assertInstanceOf(NamedRange::class, $namedRange);
61
        self::assertSame('$B$1', $namedRange->getRange());
62
63
        $robj->disconnectWorksheets();
64
    }
65
}
66