xref: /webtrees/tests/app/MenuTest.php (revision fc747c0fe6ab8c4d4d65bbb60eb220a1c792d7f6)
1<?php
2/**
3 * webtrees: online genealogy
4 * Copyright (C) 2018 webtrees development team
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16namespace Fisharebest\Webtrees;
17
18use Fisharebest\Webtrees\Menu;
19
20/**
21 * Test harness for the class Menu
22 */
23class MenuTest extends \Fisharebest\Webtrees\TestCase
24{
25    /**
26     * Prepare the environment for these tests.
27     *
28     * @return void
29     */
30    public function setUp()
31    {
32    }
33
34    /**
35     * Test the constructor with default parameters.
36     *
37     * @return void
38     */
39    public function testConstructorDefaults()
40    {
41        $menu = new Menu('Test!');
42
43        $this->assertSame('Test!', $menu->getLabel());
44        $this->assertSame('#', $menu->getLink());
45        $this->assertSame('', $menu->getClass());
46        $this->assertSame([], $menu->getAttrs());
47        $this->assertSame([], $menu->getSubmenus());
48    }
49
50    /**
51     * Test the constructor with non-default parameters.
52     *
53     * @return void
54     */
55    public function testConstructorNonDefaults()
56    {
57        $submenus = [new Menu('Submenu')];
58        $menu     = new Menu('Test!', 'link.html', 'link-class', ['foo' => 'bar'], $submenus);
59
60        $this->assertSame('Test!', $menu->getLabel());
61        $this->assertSame('link.html', $menu->getLink());
62        $this->assertSame('link-class', $menu->getClass());
63        $this->assertSame(['foo' => 'bar'], $menu->getAttrs());
64        $this->assertSame($submenus, $menu->getSubmenus());
65    }
66
67    /**
68     * Test the getter/setter for the label.
69     *
70     * @return void
71     */
72    public function testGetterSetterLabel()
73    {
74        $menu = new Menu('Test!');
75
76        $return = $menu->setLabel('Label');
77
78        $this->assertSame($return, $menu);
79        $this->assertSame('Label', $menu->getLabel());
80    }
81
82    /**
83     * Test the getter/setter for the link.
84     *
85     * @return void
86     */
87    public function testGetterSetterLink()
88    {
89        $menu = new Menu('Test!');
90
91        $return = $menu->setLink('link.html');
92
93        $this->assertSame($return, $menu);
94        $this->assertSame('link.html', $menu->getLink());
95    }
96
97    /**
98     * Test the getter/setter for the ID.
99     *
100     * @return void
101     */
102    public function testGetterSetterId()
103    {
104        $menu = new Menu('Test!');
105
106        $return = $menu->setClass('link-class');
107
108        $this->assertSame($return, $menu);
109        $this->assertSame('link-class', $menu->getClass());
110    }
111
112    /**
113     * Test the getter/setter for the Attrs event.
114     *
115     * @return void
116     */
117    public function testGetterSetterAttrs()
118    {
119        $menu = new Menu('Test!');
120
121        $return = $menu->setAttrs(['foo' => 'bar']);
122
123        $this->assertSame($return, $menu);
124        $this->assertSame(['foo' => 'bar'], $menu->getAttrs());
125    }
126
127    /**
128     * Test the getter/setter for the submenus.
129     *
130     * @return void
131     */
132    public function testGetterSetterSubmenus()
133    {
134        $menu     = new Menu('Test!');
135        $submenus = [
136            new Menu('Sub1'),
137            new Menu('Sub2'),
138        ];
139
140        $return = $menu->setSubmenus($submenus);
141
142        $this->assertSame($return, $menu);
143        $this->assertSame($submenus, $menu->getSubmenus());
144    }
145
146    /**
147     * Test the list rendering for a simple link.
148     *
149     * @return void
150     */
151    public function testFormatAsList()
152    {
153        $menu = new Menu('Test!', 'link.html');
154
155        $this->assertSame('<li class=""><a href="link.html">Test!</a></li>', $menu->getMenuAsList());
156    }
157
158    /**
159     * Test the list rendering for a simple link with a CSS ID.
160     *
161     * @return void
162     */
163    public function testFormatAsListWithClass()
164    {
165        $menu = new Menu('Test!', 'link.html', 'link-class');
166
167        $this->assertSame('<li class="link-class"><a href="link.html">Test!</a></li>', $menu->getMenuAsList());
168    }
169
170    /**
171     * Test the list rendering for an empty target.
172     *
173     * @return void
174     */
175    public function testFormatAsListWithNoTarget()
176    {
177        $menu = new Menu('Test!', '');
178
179        $this->assertSame('<li class=""><a>Test!</a></li>', $menu->getMenuAsList());
180    }
181
182    /**
183     * Test the list rendering for a default (hash) target.
184     *
185     * @return void
186     */
187    public function testFormatAsListWithHashTarget()
188    {
189        $menu = new Menu('Test!');
190
191        $this->assertSame('<li class=""><a href="#">Test!</a></li>', $menu->getMenuAsList());
192    }
193
194    /**
195     * Test the list rendering for an onclick link.
196     *
197     * @return void
198     */
199    public function testFormatAsListWithAttrs()
200    {
201        $menu = new Menu('Test!', '#', '', ['foo' => 'bar']);
202
203        $this->assertSame('<li class=""><a href="#" foo="bar">Test!</a></li>', $menu->getMenuAsList());
204    }
205
206    /**
207     * Test the list rendering for an onclick link.
208     *
209     * @return void
210     */
211    public function testFormatAsListWithAttrsAndId()
212    {
213        $menu = new Menu('Test!', '#', 'link-class', ['foo' => 'bar']);
214
215        $this->assertSame('<li class="link-class"><a href="#" foo="bar">Test!</a></li>', $menu->getMenuAsList());
216    }
217}
218