Completed
Pull Request — master (#52)
by Wilmer
01:35
created

MenuTest::testEncodeLabel()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 43
Code Lines 28

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 28
c 1
b 0
f 0
dl 0
loc 43
rs 9.472
cc 1
nc 1
nop 0
1
<?php
2
3
namespace Yiisoft\Widget\Tests;
4
5
use Yiisoft\Tests\TestCase;
6
use Yiisoft\Widget\Menu;
7
8
/**
9
 * @group widgets
10
 */
11
class MenuTest extends TestCase
12
{
13
    public function testEncodeLabel()
14
    {
15
        $output = Menu::widget()
16
            ->encodeLabels(true)
17
            ->items([
18
                [
19
                    'encode' => false,
20
                    'label'  => '<span class="glyphicon glyphicon-user"></span> Users',
21
                    'url'    => '#',
22
                ],
23
                [
24
                    'encode' => true,
25
                    'label'  => 'Authors & Publications',
26
                    'url'    => '#',
27
                ],
28
            ]);
29
30
        $expected = <<<'HTML'
31
<ul><li><a href="#"><span class="glyphicon glyphicon-user"></span> Users</a></li>
32
<li><a href="#">Authors &amp; Publications</a></li></ul>
33
HTML;
34
        $this->assertEqualsWithoutLE($expected, $output);
35
36
        $output = Menu::widget()
37
            ->encodeLabels(false)
38
            ->items([
39
                [
40
                    'encode' => false,
41
                    'label'  => '<span class="glyphicon glyphicon-user"></span> Users',
42
                    'url'    => '#',
43
                ],
44
                [
45
                    'encode' => true,
46
                    'label'  => 'Authors & Publications',
47
                    'url'    => '#',
48
                ],
49
            ]);
50
51
        $expected = <<<'HTML'
52
<ul><li><a href="#"><span class="glyphicon glyphicon-user"></span> Users</a></li>
53
<li><a href="#">Authors &amp; Publications</a></li></ul>
54
HTML;
55
        $this->assertEqualsWithoutLE($expected, $output);
56
    }
57
58
    /**
59
     * @see https://github.com/yiisoft/yii2/issues/8064
60
     */
61
    public function testTagOption()
62
    {
63
        $output = Menu::widget()
64
            ->encodeLabels(true)
65
            ->options([
66
                'tag' => false,
67
            ])
68
            ->items([
69
                [
70
                    'label'   => 'item1',
71
                    'url'     => '#',
72
                    'options' => ['tag' => 'div'],
73
                ],
74
                [
75
                    'label'   => 'item2',
76
                    'url'     => '#',
77
                    'options' => ['tag' => false],
78
                ],
79
            ]);
80
81
        $expected = <<<'HTML'
82
<div><a href="#">item1</a></div>
83
<a href="#">item2</a>
84
HTML;
85
        $this->assertEqualsWithoutLE($expected, $output);
86
87
        $output = Menu::widget()
88
            ->encodeLabels(true)
89
            ->options([
90
                'tag' => false,
91
            ])
92
            ->items([
93
                [
94
                    'label' => 'item1',
95
                    'url'   => '#',
96
                ],
97
                [
98
                    'label' => 'item2',
99
                    'url'   => '#',
100
                ],
101
            ])
102
            ->itemOptions(['tag' => false]);
103
104
        $expected = <<<'HTML'
105
<a href="#">item1</a>
106
<a href="#">item2</a>
107
HTML;
108
109
        $this->assertEqualsWithoutLE($expected, $output);
110
    }
111
112
    public function testItemTemplate()
113
    {
114
        $output = Menu::widget()
115
            ->labelTemplate('')
116
            ->linkTemplate('')
117
            ->items([
118
                [
119
                    'label'    => 'item1',
120
                    'url'      => '#',
121
                    'template' => 'label: {label}; url: {url}',
122
                ],
123
                [
124
                    'label'    => 'item2',
125
                    'template' => 'label: {label}',
126
                ],
127
                [
128
                    'label' => 'item3 (no template)',
129
                ],
130
            ]);
131
132
        $expected = <<<'HTML'
133
<ul><li>label: item1; url: #</li>
134
<li>label: item2</li>
135
<li></li></ul>
136
HTML;
137
138
        $this->assertEqualsWithoutLE($expected, $output);
139
    }
140
141
    public function testActiveItemClosure()
142
    {
143
        $output = Menu::widget()
144
            ->linkTemplate('')
145
            ->labelTemplate('')
146
            ->items([
147
                [
148
                    'label'    => 'item1',
149
                    'url'      => '#',
150
                    'template' => 'label: {label}; url: {url}',
151
                    'active'   => function ($item, $hasActiveChild, $isItemActive, $widget) {
152
                        return isset($item, $hasActiveChild, $isItemActive, $widget);
153
                    },
154
                ],
155
                [
156
                    'label'    => 'item2',
157
                    'template' => 'label: {label}',
158
                    'active'   => false,
159
                ],
160
                [
161
                    'label'  => 'item3 (no template)',
162
                    'active' => 'somestring',
163
                ],
164
            ]);
165
166
        $expected = <<<'HTML'
167
<ul><li class="active">label: item1; url: #</li>
168
<li>label: item2</li>
169
<li class="active"></li></ul>
170
HTML;
171
172
        $this->assertEqualsWithoutLE($expected, $output);
173
    }
174
175
    public function testItemClassAsArray()
176
    {
177
        $output = Menu::widget()
178
            ->encodeLabels(true)
179
            ->activeCssClass('item-active')
180
            ->items([
181
                [
182
                    'label'   => 'item1',
183
                    'url'     => '#',
184
                    'active'  => true,
185
                    'options' => [
186
                        'class' => [
187
                            'someclass',
188
                        ],
189
                    ],
190
                ],
191
                [
192
                    'label'   => 'item2',
193
                    'url'     => '#',
194
                    'options' => [
195
                        'class' => [
196
                            'another-class',
197
                            'other--class',
198
                            'two classes',
199
                        ],
200
                    ],
201
                ],
202
                [
203
                    'label' => 'item3',
204
                    'url'   => '#',
205
                ],
206
                [
207
                    'label'   => 'item4',
208
                    'url'     => '#',
209
                    'options' => [
210
                        'class' => [
211
                            'some-other-class',
212
                            'foo_bar_baz_class',
213
                        ],
214
                    ],
215
                ],
216
            ]);
217
218
        $expected = <<<'HTML'
219
<ul><li class="someclass item-active"><a href="#">item1</a></li>
220
<li class="another-class other--class two classes"><a href="#">item2</a></li>
221
<li><a href="#">item3</a></li>
222
<li class="some-other-class foo_bar_baz_class"><a href="#">item4</a></li></ul>
223
HTML;
224
        $this->assertEqualsWithoutLE($expected, $output);
225
    }
226
227
    public function testItemClassAsString()
228
    {
229
        $output = Menu::widget()
230
            ->encodeLabels(true)
231
            ->activeCssClass('item-active')
232
            ->items([
233
                [
234
                    'label'   => 'item1',
235
                    'url'     => '#',
236
                    'options' => [
237
                        'class' => 'someclass',
238
                    ],
239
                ],
240
                [
241
                    'label' => 'item2',
242
                    'url'   => '#',
243
                ],
244
                [
245
                    'label'   => 'item3',
246
                    'url'     => '#',
247
                    'options' => [
248
                        'class' => 'some classes',
249
                    ],
250
                ],
251
                [
252
                    'label'   => 'item4',
253
                    'url'     => '#',
254
                    'active'  => true,
255
                    'options' => [
256
                        'class' => 'another-class other--class two classes',
257
                    ],
258
                ],
259
            ]);
260
261
        $expected = <<<'HTML'
262
<ul><li class="someclass"><a href="#">item1</a></li>
263
<li><a href="#">item2</a></li>
264
<li class="some classes"><a href="#">item3</a></li>
265
<li class="another-class other--class two classes item-active"><a href="#">item4</a></li></ul>
266
HTML;
267
        $this->assertEqualsWithoutLE($expected, $output);
268
    }
269
}
270