1<?php 2 3/* Copyright (c) 2017 Alex Killing <killing@leifos.de> Extended GPL, see docs/LICENSE */ 4 5require_once(__DIR__ . "/../../../../libs/composer/vendor/autoload.php"); 6require_once(__DIR__ . "/../../Base.php"); 7 8use \ILIAS\UI\Component as C; 9use \ILIAS\UI\Implementation as I; 10 11/** 12 * Test items 13 */ 14class ItemTest extends ILIAS_UI_TestBase 15{ 16 17 /** 18 * @return \ILIAS\UI\Implementation\Factory 19 */ 20 public function getFactory() 21 { 22 return new I\Component\Item\Factory(); 23 } 24 25 public function test_implements_factory_interface() 26 { 27 $f = $this->getFactory(); 28 29 $this->assertInstanceOf("ILIAS\\UI\\Component\\Item\\Standard", $f->standard("title")); 30 } 31 32 public function test_get_title() 33 { 34 $f = $this->getFactory(); 35 $c = $f->standard("title"); 36 37 $this->assertEquals($c->getTitle(), "title"); 38 } 39 40 public function test_with_description() 41 { 42 $f = $this->getFactory(); 43 44 $c = $f->standard("title")->withDescription("description"); 45 46 $this->assertEquals($c->getDescription(), "description"); 47 } 48 49 public function test_with_properties() 50 { 51 $f = $this->getFactory(); 52 53 $props = array("prop1" => "val1", "prop2" => "val2"); 54 $c = $f->standard("title")->withProperties($props); 55 56 $this->assertEquals($c->getProperties(), $props); 57 } 58 59 public function test_with_actions() 60 { 61 $f = $this->getFactory(); 62 63 $actions = new I\Component\Dropdown\Standard(array( 64 new I\Component\Button\Shy("ILIAS", "https://www.ilias.de"), 65 new I\Component\Button\Shy("GitHub", "https://www.github.com") 66 )); 67 $c = $f->standard("title")->withActions($actions); 68 69 $this->assertEquals($c->getActions(), $actions); 70 } 71 72 public function test_with_color() 73 { 74 $f = $this->getFactory(); 75 $df = new \ILIAS\Data\Factory(); 76 77 $color = $df->color('#ff00ff'); 78 79 $c = $f->standard("title")->withColor($color); 80 81 $this->assertEquals($c->getColor(), $color); 82 } 83 84 public function test_with_lead_image() 85 { 86 $f = $this->getFactory(); 87 88 $image = new I\Component\Image\Image("standard", "src", "str"); 89 90 $c = $f->standard("title")->withLeadImage($image); 91 92 $this->assertEquals($c->getLead(), $image); 93 } 94 95 public function test_with_lead_icon() 96 { 97 $f = $this->getFactory(); 98 99 $icon = new I\Component\Symbol\Icon\Standard("name", "aria_label", "small", false); 100 101 $c = $f->standard("title")->withLeadIcon($icon); 102 103 $this->assertEquals($c->getLead(), $icon); 104 } 105 106 public function test_with_lead_text() 107 { 108 $f = $this->getFactory(); 109 110 $c = $f->standard("title")->withLeadText("text"); 111 112 $this->assertEquals($c->getLead(), "text"); 113 } 114 115 public function test_with_no_lead() 116 { 117 $f = $this->getFactory(); 118 119 $c = $f->standard("title")->withLeadText("text")->withNoLead(); 120 121 $this->assertEquals($c->getLead(), null); 122 } 123 124 public function test_render_base() 125 { 126 $f = $this->getFactory(); 127 $r = $this->getDefaultRenderer(); 128 129 $actions = new I\Component\Dropdown\Standard(array( 130 new I\Component\Button\Shy("ILIAS", "https://www.ilias.de"), 131 new I\Component\Button\Shy("GitHub", "https://www.github.com") 132 )); 133 $c = $f->standard("Item Title") 134 ->withActions($actions) 135 ->withProperties(array( 136 "Origin" => "Course Title 1", 137 "Last Update" => "24.11.2011", 138 "Location" => "Room 123, Main Street 44, 3012 Bern")) 139 ->withDescription("Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua."); 140 141 $html = $r->render($c); 142 143 $expected = <<<EOT 144<div class="il-item il-std-item "> 145 <div class="il-item-title">Item Title</div> 146 <div class="dropdown"><button class="btn btn-default dropdown-toggle" type="button" data-toggle="dropdown" aria-label="actions" aria-haspopup="true" aria-expanded="false" > <span class="caret"></span></button> 147<ul class="dropdown-menu"> 148 <li><button class="btn btn-link" data-action="https://www.ilias.de" id="id_1" >ILIAS</button> 149</li> 150 <li><button class="btn btn-link" data-action="https://www.github.com" id="id_2" >GitHub</button> 151</li> 152</ul> 153</div> 154 <div class="il-item-description">Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.</div> 155 <hr class="il-item-divider" /> 156 <div class="row"> 157 <div class="col-md-6"> 158 <div class="row"> 159 <div class="col-sm-5 col-lg-4 il-item-property-name">Origin</div> 160 <div class="col-sm-7 col-lg-8 il-item-property-value il-multi-line-cap-3">Course Title 1</div> 161 </div> 162 </div> 163 <div class="col-md-6"> 164 <div class="row"> 165 <div class="col-sm-5 col-lg-4 il-item-property-name">Last Update</div> 166 <div class="col-sm-7 col-lg-8 il-item-property-value il-multi-line-cap-3">24.11.2011</div> 167 </div> 168 </div> 169 </div> 170 <div class="row"> 171 <div class="col-md-6"> 172 <div class="row"> 173 <div class="col-sm-5 col-lg-4 il-item-property-name">Location</div> 174 <div class="col-sm-7 col-lg-8 il-item-property-value il-multi-line-cap-3">Room 123, Main Street 44, 3012 Bern</div> 175 </div> 176 </div> 177 <div class="col-md-6"> 178 <div class="row"> 179 <div class="col-sm-5 col-lg-4 il-item-property-name"></div> 180 <div class="col-sm-7 col-lg-8 il-item-property-value il-multi-line-cap-3"></div> 181 </div> 182 </div> 183 </div> 184</div> 185EOT; 186 187 $this->assertHTMLEquals( 188 $this->brutallyTrimHTML($expected), 189 $this->brutallyTrimHTML($html) 190 ); 191 } 192 193 public function test_render_lead_image() 194 { 195 $f = $this->getFactory(); 196 $r = $this->getDefaultRenderer(); 197 198 $image = new I\Component\Image\Image("standard", "src", "str"); 199 200 $c = $f->standard("title")->withLeadImage($image); 201 202 $html = $r->render($c); 203 $expected = <<<EOT 204<div class="il-item il-std-item "> 205 <div class="row"> 206 <div class="col-sm-3"> 207 <img src="src" class="img-standard" alt="str" /> 208 </div> 209 <div class="col-sm-9"> 210 <div class="il-item-title">title</div> 211 </div> 212 </div> 213</div> 214EOT; 215 216 $this->assertHTMLEquals( 217 $this->brutallyTrimHTML($expected), 218 $this->brutallyTrimHTML($html) 219 ); 220 } 221 222 public function test_render_lead_icon() 223 { 224 $f = $this->getFactory(); 225 $r = $this->getDefaultRenderer(); 226 227 $icon = new I\Component\Symbol\Icon\Standard("name", "aria_label", "small", false); 228 229 $c = $f->standard("title")->withLeadIcon($icon); 230 231 $html = $r->render($c); 232 $expected = <<<EOT 233<div class="il-item il-std-item "> 234 <div class="media"> 235 <div class="media-left"> 236 <div class="icon name small" aria-label="aria_label"></div></div> 237 <div class="media-body"> 238 <div class="il-item-title">title</div> 239 </div> 240 </div> 241</div> 242EOT; 243 244 $this->assertHTMLEquals( 245 $this->brutallyTrimHTML($expected), 246 $this->brutallyTrimHTML($html) 247 ); 248 } 249 250 public function test_render_lead_text_and_color() 251 { 252 $f = $this->getFactory(); 253 $r = $this->getDefaultRenderer(); 254 $df = new \ILIAS\Data\Factory(); 255 256 $color = $df->color('#ff00ff'); 257 258 $c = $f->standard("title")->withColor($color)->withLeadText("lead"); 259 260 $html = $r->render($c); 261 262 $expected = <<<EOT 263<div class="il-item il-std-item il-item-marker " style="border-color:#ff00ff"> 264 <div class="row"> 265 <div class="col-sm-3"> 266 lead 267 </div> 268 <div class="col-sm-9"> 269 <div class="il-item-title">title</div> 270 </div> 271 </div> 272</div> 273EOT; 274 275 $this->assertHTMLEquals( 276 $this->brutallyTrimHTML($expected), 277 $this->brutallyTrimHTML($html) 278 ); 279 } 280 281 public function test_shy_title_and_property() 282 { 283 $f = $this->getFactory(); 284 $r = $this->getDefaultRenderer(); 285 $df = new \ILIAS\Data\Factory(); 286 287 $color = $df->color('#ff00ff'); 288 289 $c = $f->standard(new I\Component\Button\Shy("ILIAS", "https://www.ilias.de")) 290 ->withProperties(array("test" => new I\Component\Button\Shy("GitHub", "https://www.github.com"))); 291 292 $html = $r->render($c); 293 $expected = <<<EOT 294<div class="il-item il-std-item "> 295 <div class="il-item-title"><button class="btn btn-link" data-action="https://www.ilias.de" id="id_1" >ILIAS</button></div> 296 297 <hr class="il-item-divider" /> 298 <div class="row"> 299 <div class="col-md-6"> 300 <div class="row"> 301 <div class="col-sm-5 col-lg-4 il-item-property-name">test</div> 302 <div class="col-sm-7 col-lg-8 il-item-property-value il-multi-line-cap-3"><button class="btn btn-link" data-action="https://www.github.com" id="id_2" >GitHub</button></div> 303 </div> 304 </div> 305 <div class="col-md-6"> 306 <div class="row"> 307 <div class="col-sm-5 col-lg-4 il-item-property-name"></div> 308 <div class="col-sm-7 col-lg-8 il-item-property-value il-multi-line-cap-3"></div> 309 </div> 310 </div> 311 </div> 312</div> 313EOT; 314 315 $this->assertHTMLEquals($expected, $html); 316 } 317 318 public function test_link_title() 319 { 320 $f = $this->getFactory(); 321 $r = $this->getDefaultRenderer(); 322 323 $c = $f->standard(new I\Component\Link\Standard("ILIAS", "https://www.ilias.de")); 324 $html = $r->render($c); 325 326 $expected = <<<EOT 327<div class="il-item il-std-item "><div class="il-item-title"><a href="https://www.ilias.de">ILIAS</a></div></div> 328EOT; 329 330 $this->assertHTMLEquals($expected, $html); 331 } 332} 333