Completed
Push — master ( ba1ce8...40abd1 )
by Adrien
22s queued 19s
created

DefinedNameTest   A

Complexity

Total Complexity 13

Size/Duplication

Total Lines 192
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 109
dl 0
loc 192
rs 10
c 1
b 0
f 0
wmc 13

13 Methods

Rating   Name   Duplication   Size   Complexity  
A testAddScopedDefinedNameWithSameName() 0 17 1
A setUp() 0 13 1
A testDefinedNameNoWorksheetNoScope() 0 4 1
A testAddDuplicateDefinedName() 0 13 1
A testRemoveDefinedName() 0 12 1
A testRemoveScopedDefinedNameWhenDuplicateNames() 0 15 1
A testRemoveGlobalDefinedNameWhenDuplicateNames() 0 15 1
A testAddDefinedName() 0 7 1
A testSetAndGetRange() 0 12 1
A testClone() 0 12 1
A testScope() 0 13 1
A testChangeWorksheet() 0 13 1
A testLocalOnly() 0 13 1
1
<?php
2
3
namespace PhpOffice\PhpSpreadsheetTests;
4
5
use PhpOffice\PhpSpreadsheet\DefinedName;
6
use PhpOffice\PhpSpreadsheet\NamedRange;
7
use PhpOffice\PhpSpreadsheet\Spreadsheet;
8
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
9
use PHPUnit\Framework\TestCase;
10
11
class DefinedNameTest extends TestCase
12
{
13
    /** @var Spreadsheet */
14
    private $spreadsheet;
15
16
    protected function setUp(): void
17
    {
18
        parent::setUp();
19
        $this->spreadsheet = new Spreadsheet();
20
21
        $this->spreadsheet->getActiveSheet()
22
            ->setTitle('Sheet #1');
23
24
        $worksheet2 = new Worksheet();
25
        $worksheet2->setTitle('Sheet #2');
26
        $this->spreadsheet->addSheet($worksheet2);
27
28
        $this->spreadsheet->setActiveSheetIndex(0);
29
    }
30
31
    public function testAddDefinedName(): void
32
    {
33
        $this->spreadsheet->addDefinedName(
34
            DefinedName::createInstance('Foo', $this->spreadsheet->getActiveSheet(), '=A1')
35
        );
36
37
        self::assertCount(1, $this->spreadsheet->getDefinedNames());
38
    }
39
40
    public function testAddDuplicateDefinedName(): void
41
    {
42
        $this->spreadsheet->addDefinedName(
43
            DefinedName::createInstance('Foo', $this->spreadsheet->getActiveSheet(), '=A1')
44
        );
45
        $this->spreadsheet->addDefinedName(
46
            DefinedName::createInstance('FOO', $this->spreadsheet->getActiveSheet(), '=B1')
47
        );
48
49
        self::assertCount(1, $this->spreadsheet->getDefinedNames());
50
        self::assertSame(
51
            '=B1',
52
            $this->spreadsheet->getDefinedName('foo', $this->spreadsheet->getActiveSheet())->getValue()
53
        );
54
    }
55
56
    public function testAddScopedDefinedNameWithSameName(): void
57
    {
58
        $this->spreadsheet->addDefinedName(
59
            DefinedName::createInstance('Foo', $this->spreadsheet->getActiveSheet(), '=A1')
60
        );
61
        $this->spreadsheet->addDefinedName(
62
            DefinedName::createInstance('FOO', $this->spreadsheet->getSheetByName('Sheet #2'), '=B1', true)
63
        );
64
65
        self::assertCount(2, $this->spreadsheet->getDefinedNames());
66
        self::assertSame(
67
            '=A1',
68
            $this->spreadsheet->getDefinedName('foo', $this->spreadsheet->getActiveSheet())->getValue()
69
        );
70
        self::assertSame(
71
            '=B1',
72
            $this->spreadsheet->getDefinedName('foo', $this->spreadsheet->getSheetByName('Sheet #2'))->getValue()
73
        );
74
    }
75
76
    public function testRemoveDefinedName(): void
77
    {
78
        $this->spreadsheet->addDefinedName(
79
            DefinedName::createInstance('Foo', $this->spreadsheet->getActiveSheet(), '=A1')
80
        );
81
        $this->spreadsheet->addDefinedName(
82
            DefinedName::createInstance('Bar', $this->spreadsheet->getActiveSheet(), '=B1')
83
        );
84
85
        $this->spreadsheet->removeDefinedName('Foo', $this->spreadsheet->getActiveSheet());
86
87
        self::assertCount(1, $this->spreadsheet->getDefinedNames());
88
    }
89
90
    public function testRemoveGlobalDefinedNameWhenDuplicateNames(): void
91
    {
92
        $this->spreadsheet->addDefinedName(
93
            DefinedName::createInstance('Foo', $this->spreadsheet->getActiveSheet(), '=A1')
94
        );
95
        $this->spreadsheet->addDefinedName(
96
            DefinedName::createInstance('FOO', $this->spreadsheet->getSheetByName('Sheet #2'), '=B1', true)
97
        );
98
99
        $this->spreadsheet->removeDefinedName('Foo', $this->spreadsheet->getActiveSheet());
100
101
        self::assertCount(1, $this->spreadsheet->getDefinedNames());
102
        self::assertSame(
103
            '=B1',
104
            $this->spreadsheet->getDefinedName('foo', $this->spreadsheet->getSheetByName('Sheet #2'))->getValue()
105
        );
106
    }
107
108
    public function testRemoveScopedDefinedNameWhenDuplicateNames(): void
109
    {
110
        $this->spreadsheet->addDefinedName(
111
            DefinedName::createInstance('Foo', $this->spreadsheet->getActiveSheet(), '=A1')
112
        );
113
        $this->spreadsheet->addDefinedName(
114
            DefinedName::createInstance('FOO', $this->spreadsheet->getSheetByName('Sheet #2'), '=B1', true)
115
        );
116
117
        $this->spreadsheet->removeDefinedName('Foo', $this->spreadsheet->getSheetByName('Sheet #2'));
118
119
        self::assertCount(1, $this->spreadsheet->getDefinedNames());
120
        self::assertSame(
121
            '=A1',
122
            $this->spreadsheet->getDefinedName('foo')->getValue()
123
        );
124
    }
125
126
    public function testDefinedNameNoWorksheetNoScope(): void
127
    {
128
        $this->expectException(\PhpOffice\PhpSpreadsheet\Exception::class);
129
        new NamedRange('xyz');
130
    }
131
132
    public function testSetAndGetRange(): void
133
    {
134
        $this->spreadsheet->addDefinedName(
135
            DefinedName::createInstance('xyz', $this->spreadsheet->getActiveSheet(), 'A1')
136
        );
137
138
        $namedRange = $this->spreadsheet->getDefinedName('XYZ');
139
        self::assertInstanceOf(NamedRange::class, $namedRange);
140
        self::assertEquals('A1', $namedRange->getRange());
141
        self::assertEquals('A1', $namedRange->getValue());
142
        $namedRange->setRange('A2');
143
        self::assertEquals('A2', $namedRange->getValue());
144
    }
145
146
    public function testChangeWorksheet(): void
147
    {
148
        $sheet1 = $this->spreadsheet->getSheetByName('Sheet #1');
149
        $sheet2 = $this->spreadsheet->getSheetByName('Sheet #2');
150
        $sheet1->getCell('A1')->setValue(1);
151
        $sheet2->getCell('A1')->setValue(2);
152
        $namedRange = new NamedRange('xyz', $sheet2, '$A$1');
153
        $namedRange->setWorksheet($sheet1);
154
        $this->spreadsheet->addNamedRange($namedRange);
155
        $sheet1->getCell('B2')->setValue('=XYZ');
156
        self::assertEquals(1, $sheet1->getCell('B2')->getCalculatedValue());
157
        $sheet2->getCell('B2')->setValue('=XYZ');
158
        self::assertEquals(1, $sheet2->getCell('B2')->getCalculatedValue());
159
    }
160
161
    public function testLocalOnly(): void
162
    {
163
        $sheet1 = $this->spreadsheet->getSheetByName('Sheet #1');
164
        $sheet2 = $this->spreadsheet->getSheetByName('Sheet #2');
165
        $sheet1->getCell('A1')->setValue(1);
166
        $sheet2->getCell('A1')->setValue(2);
167
        $namedRange = new NamedRange('abc', $sheet2, '$A$1');
168
        $namedRange->setWorksheet($sheet1)->setLocalOnly(true);
169
        $this->spreadsheet->addNamedRange($namedRange);
170
        $sheet1->getCell('C2')->setValue('=ABC');
171
        self::assertEquals(1, $sheet1->getCell('C2')->getCalculatedValue());
172
        $sheet2->getCell('C2')->setValue('=ABC');
173
        self::assertEquals('#NAME?', $sheet2->getCell('C2')->getCalculatedValue());
174
    }
175
176
    public function testScope(): void
177
    {
178
        $sheet1 = $this->spreadsheet->getSheetByName('Sheet #1');
179
        $sheet2 = $this->spreadsheet->getSheetByName('Sheet #2');
180
        $sheet1->getCell('A1')->setValue(1);
181
        $sheet2->getCell('A1')->setValue(2);
182
        $namedRange = new NamedRange('abc', $sheet2, '$A$1');
183
        $namedRange->setScope($sheet1);
184
        $this->spreadsheet->addNamedRange($namedRange);
185
        $sheet1->getCell('C2')->setValue('=ABC');
186
        self::assertEquals(2, $sheet1->getCell('C2')->getCalculatedValue());
187
        $sheet2->getCell('C2')->setValue('=ABC');
188
        self::assertEquals('#NAME?', $sheet2->getCell('C2')->getCalculatedValue());
189
    }
190
191
    public function testClone(): void
192
    {
193
        $sheet1 = $this->spreadsheet->getSheetByName('Sheet #1');
194
        $sheet2 = $this->spreadsheet->getSheetByName('Sheet #2');
195
        $sheet1->getCell('A1')->setValue(1);
196
        $sheet2->getCell('A1')->setValue(2);
197
        $namedRange = new NamedRange('abc', $sheet2, '$A$1');
198
        $namedRangeClone = clone $namedRange;
199
        $ss1 = $namedRange->getWorksheet();
200
        $ss2 = $namedRangeClone->getWorksheet();
201
        self::assertNotSame($ss1, $ss2);
202
        self::assertEquals($ss1->getTitle(), $ss2->getTitle());
203
    }
204
}
205