Failed Conditions
Pull Request — master (#4412)
by
unknown
22:45 queued 07:48
created

HtmlDifferentConditionalFormattingsTest   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 80
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 6
eloc 62
c 1
b 0
f 0
dl 0
loc 80
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A testConditionalFormattingRulesHtml() 0 45 2
A extractCell() 0 18 3
A setUp() 0 9 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace PhpOffice\PhpSpreadsheetTests\Writer\Html;
6
7
use PhpOffice\PhpSpreadsheet\Cell\Coordinate;
8
use PhpOffice\PhpSpreadsheet\Reader\Xlsx as XlsxReader;
9
use PhpOffice\PhpSpreadsheet\Writer\Html as HtmlWriter;
10
use PHPUnit\Framework\TestCase;
11
12
class HtmlDifferentConditionalFormattingsTest extends TestCase
13
{
14
    private string $data = '';
15
16
    protected function setUp(): void
17
    {
18
        $file = 'tests/data/Writer/Html/HtmlTestDifferentConditionalFormattings.xlsx';
19
        $reader = new XlsxReader();
20
        $spreadsheet = $reader->load($file);
21
        $writer = new HtmlWriter($spreadsheet);
22
        $writer->setConditionalFormatting(true);
23
        $this->data = $writer->generateHtmlAll();
24
        $spreadsheet->disconnectWorksheets();
25
    }
26
27
    private function extractCell(string $coordinate): string
28
    {
29
        [$column, $row] = Coordinate::indexesFromString($coordinate);
30
        --$column;
31
        --$row;
32
        // extract row into $matches
33
        $match = preg_match('~<tr class="row' . $row . '".+?</tr>~s', $this->data, $matches);
34
        if ($match !== 1) {
35
            return 'unable to match row';
36
        }
37
        $rowData = $matches[0];
38
        // extract cell into $matches
39
        $match = preg_match('~<td class="column' . $column . ' .+?</td>~s', $rowData, $matches);
40
        if ($match !== 1) {
41
            return 'unable to match column';
42
        }
43
44
        return $matches[0];
45
    }
46
47
    public function testConditionalFormattingRulesHtml(): void
48
    {
49
        $expectedMatches = [
50
            ['A1', '"vertical-align:bottom;border-bottom:1px solid #000000 !important;border-top:1px solid #000000 !important;border-left:1px solid #000000 !important;border-right:1px solid #000000 !important;color:#000000;font-family:\'Arial\';font-size:11pt;background-color:#B7E1CD;">1<', 'A1 equals hit'],
51
            ['B1', 'class="column1 style1 n">2<', 'B1 equals miss'],
52
            ['E1', '"vertical-align:bottom;border-bottom:1px solid #000000 !important;border-top:1px solid #000000 !important;border-left:1px solid #000000 !important;border-right:1px solid #000000 !important;color:#000000;font-family:\'Arial\';font-size:11pt;background-color:#B7E1CD;">1<', 'E1 equals horizontal reference hit'],
53
            ['F1', 'class="column5 style1 n">2<', 'F1 equals horizontal reference miss'],
54
            ['G1', 'class="column6 style1 n">3<', 'G1 equals horizontal reference miss'],
55
            ['A2', '"vertical-align:bottom;border-bottom:1px solid #000000 !important;border-top:1px solid #000000 !important;border-left:1px solid #000000 !important;border-right:1px solid #000000 !important;color:#000000;font-family:\'Arial\';font-size:11pt;background-color:#B7E1CD;">terve<', 'A2 text contains hit'],
56
            ['B2', 'class="column1 style1 s">moi<', 'B2 text contains miss'],
57
            ['A3', '"vertical-align:bottom;border-bottom:1px solid #000000 !important;border-top:1px solid #000000 !important;border-left:1px solid #000000 !important;border-right:1px solid #000000 !important;color:#000000;font-family:\'Arial\';font-size:11pt;background-color:#B7E1CD;">terve<', 'A3 text does not contain hit'],
58
            ['B3', 'class="column1 style1 s">moi<', 'B2 text does not contain miss'],
59
            ['A4', '"vertical-align:bottom;border-bottom:1px solid #000000 !important;border-top:1px solid #000000 !important;border-left:1px solid #000000 !important;border-right:1px solid #000000 !important;color:#000000;font-family:\'Arial\';font-size:11pt;background-color:#B7E1CD;">terve<', 'A4 text starts with hit'],
60
            ['B4', 'class="column1 style1 s">moi<', 'B2 text starts with miss'],
61
            ['A5', '"vertical-align:bottom;border-bottom:1px solid #000000 !important;border-top:1px solid #000000 !important;border-left:1px solid #000000 !important;border-right:1px solid #000000 !important;color:#000000;font-family:\'Arial\';font-size:11pt;background-color:#B7E1CD;">terve<', 'A5 text ends with hit'],
62
            ['B5', 'class="column1 style1 s">moi<', 'B5 text ends with miss'],
63
            ['A6', '"vertical-align:bottom;border-bottom:1px solid #000000 !important;border-top:1px solid #000000 !important;border-left:1px solid #000000 !important;border-right:1px solid #000000 !important;color:#000000;font-family:\'Arial\';font-size:11pt;background-color:#B7E1CD;">2025/01/01<', 'A6 date after hit'],
64
            ['B6', 'class="column1 style2 n">2020/01/01<', 'B6 date after miss'],
65
            ['A7', '"vertical-align:bottom;border-bottom:1px solid #000000 !important;border-top:1px solid #000000 !important;border-left:1px solid #000000 !important;border-right:1px solid #000000 !important;color:#000000;font-family:\'Arial\';font-size:11pt;background-color:#B7E1CD;">terve vaan<', 'A7 text contains hit'],
66
            ['B7', 'class="column1 style1 s">moi<', 'B7 text contains miss'],
67
            ['A8', '"vertical-align:bottom;border-bottom:1px solid #000000 !important;border-top:1px solid #000000 !important;border-left:1px solid #000000 !important;border-right:1px solid #000000 !important;color:#000000;font-family:\'Arial\';font-size:11pt;background-color:#B7E1CD;">terve<', 'A8 text does not contain hit'],
68
            ['B8', 'class="column1 style1 s">terve vaan<', 'B2 does not contain miss'],
69
            ['A9', '"vertical-align:bottom;border-bottom:1px solid #000000 !important;border-top:1px solid #000000 !important;border-left:1px solid #000000 !important;border-right:1px solid #000000 !important;color:#000000;font-family:\'Arial\';font-size:11pt;background-color:#B7E1CD;">#DIV/0!<', 'A10 own formula is error hit'],
70
            ['B9', 'class="column1 style1 s">moi<', 'B9 own formula is error miss'],
71
            ['A10', '"vertical-align:bottom;border-bottom:1px solid #000000 !important;border-top:1px solid #000000 !important;border-left:1px solid #000000 !important;border-right:1px solid #000000 !important;color:#000000;font-family:\'Arial\';font-size:11pt;background-color:#B7E1CD;">moi<', 'A10 own formula is not error hit'],
72
            ['B10', 'class="column1 style3 s">#DIV/0!<', 'B10 own formula is not error miss'],
73
            ['A11', '"vertical-align:bottom;border-bottom:1px solid #000000 !important;border-top:1px solid #000000 !important;border-left:1px solid #000000 !important;border-right:1px solid #000000 !important;color:#000000;font-family:\'Arial\';font-size:11pt;background-color:#B7E1CD;">terve<', 'A11 own formula count instances of cell on line and hit when more than one hit'],
74
            ['B11', '"vertical-align:bottom;border-bottom:1px solid #000000 !important;border-top:1px solid #000000 !important;border-left:1px solid #000000 !important;border-right:1px solid #000000 !important;color:#000000;font-family:\'Arial\';font-size:11pt;background-color:#B7E1CD;">terve<', 'B11 own formula count instances of cell on line and hit when more than one hit'],
75
            ['C11', 'class="column2 style1 s">moi<', 'C11 own formula count instances of cell on line and hit when more than one miss'],
76
            ['A12', '"vertical-align:bottom;border-bottom:1px solid #000000 !important;border-top:1px solid #000000 !important;border-left:1px solid #000000 !important;border-right:1px solid #000000 !important;color:#000000;font-family:\'Arial\';font-size:11pt;background-color:#B7E1CD;">moi<', 'A12 own formula count instances of cell on line and hit when at most 1 hit'],
77
            ['B12', 'class="column1 style1 s">terve<', 'B12 own formula count instances of cell on line and hit when at most 1 miss'],
78
            ['C12', 'class="column2 style1 s">terve<', 'C11 own formula count instances of cell on line and hit when at most 1 miss'],
79
            ['A13', '"vertical-align:bottom;border-bottom:1px solid #000000 !important;border-top:1px solid #000000 !important;border-left:1px solid #000000 !important;border-right:1px solid #000000 !important;color:#000000;font-family:\'Arial\';font-size:11pt;background-color:#B7E1CD;">12<', 'A13 own formula self reference hit'],
80
            ['B13', 'class="column1 style1 n">10<', 'B13 own formula self reference miss'],
81
            ['A14', '"vertical-align:bottom;border-bottom:1px solid #000000 !important;border-top:1px solid #000000 !important;border-left:1px solid #000000 !important;border-right:1px solid #000000 !important;color:#000000;font-family:\'Arial\';font-size:11pt;background-color:#B7E1CD;">10<', 'A14 multiple conditional hits'],
82
            ['B14', 'class="column1 style1 n">1<', 'B14 multiple conditionals miss'],
83
            ['F7', '"vertical-align:bottom;border-bottom:1px solid #000000 !important;border-top:1px solid #000000 !important;border-left:1px solid #000000 !important;border-right:1px solid #000000 !important;color:#000000;font-family:\'Arial\';font-size:11pt;background-color:#B7E1CD;">1<', 'F7 equals vertical reference hit'],
84
            ['F8', 'class="column5 style1 n">2<', 'F8 equals vertical reference miss'],
85
            ['F9', 'class="column5 style1 n">3<', 'F9 equals vertical reference miss'],
86
            ['F10', 'class="column5 style1 n">4<', 'F10 equals vertical reference miss'],
87
        ];
88
        foreach ($expectedMatches as $expected) {
89
            [$coordinate, $expectedString, $message] = $expected;
90
            $string = $this->extractCell($coordinate);
91
            self::assertStringContainsString($expectedString, $string, $message);
92
        }
93
    }
94
}
95