5 require_once(__DIR__ .
"/../../../../libs/composer/vendor/autoload.php");
6 require_once(__DIR__ .
"/../../Base.php");
8 use \ILIAS\UI\Component as
C;
9 use \ILIAS\UI\Implementation\Component\Signal;
20 return new \ILIAS\UI\Implementation\Component\Button\Factory();
24 ,
"primary" =>
"btn btn-default btn-primary" 25 ,
"shy" =>
"btn btn-link" 26 ,
"tag" =>
"btn btn-tag btn-tag-relevance-veryhigh" 33 $this->assertInstanceOf(
"ILIAS\\UI\\Component\\Button\\Factory",
$f);
34 $this->assertInstanceOf(
35 "ILIAS\\UI\\Component\\Button\\Standard",
36 $f->standard(
"label",
"http://www.ilias.de")
38 $this->assertInstanceOf(
39 "ILIAS\\UI\\Component\\Button\\Primary",
40 $f->primary(
"label",
"http://www.ilias.de")
42 $this->assertInstanceOf(
43 "ILIAS\\UI\\Component\\Button\\Close",
46 $this->assertInstanceOf(
47 "ILIAS\\UI\\Component\\Button\\Shy",
48 $f->shy(
"label",
"http://www.ilias.de")
57 $this->expectException(\InvalidArgumentException::class);
59 $f->$factory_method($this,
"http://www.ilias.de");
67 $this->expectException(\InvalidArgumentException::class);
69 $f->$factory_method(
"label", $this);
78 $b =
$f->$factory_method(
"label",
"http://www.ilias.de");
80 $this->assertEquals(
"label",
$b->getLabel());
89 $b =
$f->$factory_method(
"label",
"http://www.ilias.de");
91 $b2 =
$b->withLabel(
"label2");
93 $this->assertEquals(
"label",
$b->getLabel());
94 $this->assertEquals(
"label2", $b2->getLabel());
103 $b =
$f->$factory_method(
"label",
"http://www.ilias.de");
105 $this->assertEquals(
"http://www.ilias.de",
$b->getAction());
114 $b =
$f->$factory_method(
"label",
"http://www.ilias.de");
116 $this->assertTrue(
$b->isActive());
125 $b =
$f->$factory_method(
"label",
"http://www.ilias.de")
126 ->withUnavailableAction();
128 $this->assertFalse(
$b->isActive());
129 $this->assertEquals(
"http://www.ilias.de",
$b->getAction());
138 foreach ([
"standard",
"primary"] as $method) {
139 $b =
$f->$method(
"label",
"http://www.ilias.de");
141 $this->assertFalse(
$b->hasLoadingAnimationOnClick());
143 $b = $b->withLoadingAnimationOnClick(
true);
145 $this->assertTrue($b->hasLoadingAnimationOnClick());
154 $ln =
"http://www.ilias.de";
156 $b =
$f->$factory_method(
"label", $ln);
161 $css_classes = self::$canonical_css_classes[$factory_method];
162 $expected =
"<button class=\"$css_classes\" data-action=\"$ln\" id=\"id_1\">" .
173 $ln =
"http://www.ilias.de";
175 $b =
$f->$factory_method(
"label", $ln)
176 ->withUnavailableAction();
181 $css_classes = self::$canonical_css_classes[$factory_method];
182 $expected =
"<button class=\"$css_classes\" data-action=\"$ln\" disabled=\"disabled\">" .
196 $expected =
"<button type=\"button\" class=\"close\" data-dismiss=\"modal\">" .
197 " <span aria-hidden=\"true\">×</span>" .
198 " <span class=\"sr-only\">Close</span>" .
200 $this->assertEquals($expected, $html);
208 $ln =
"http://www.ilias.de";
212 $b =
$f->$factory_method(
"label", $ln)
213 ->withOnLoadCode(
function ($id) use (&$ids) {
220 $this->assertCount(1, $ids);
223 $css_classes = self::$canonical_css_classes[$factory_method];
224 $expected =
"<button class=\"$css_classes\" data-action=\"$ln\" id=\"$id\">" .
236 ->withOnLoadCode(
function ($id) use (&$ids) {
243 $this->assertCount(1, $ids);
246 $expected =
"<button type=\"button\" class=\"close\" data-dismiss=\"modal\" id=\"$id\">" .
247 " <span aria-hidden=\"true\">×</span>" .
248 " <span class=\"sr-only\">Close</span>" .
250 $this->assertEquals($expected, $html);
256 $b =
$f->tag(
'tag',
'#');
258 $b->withRelevance(0);
259 $this->assertFalse(
"This should not happen");
261 $this->assertTrue(
true);
264 $b->withRelevance(
'notsoimportant');
265 $this->assertFalse(
"This should not happen");
267 $this->assertTrue(
true);
273 $expectations = array(
274 '<button class="btn btn-tag btn-tag-relevance-verylow" data-action="#" id="id_1">tag</button>',
275 '<button class="btn btn-tag btn-tag-relevance-low" data-action="#" id="id_2">tag</button>',
276 '<button class="btn btn-tag btn-tag-relevance-middle" data-action="#" id="id_3">tag</button>',
277 '<button class="btn btn-tag btn-tag-relevance-high" data-action="#" id="id_4">tag</button>',
278 '<button class="btn btn-tag btn-tag-relevance-veryhigh" data-action="#" id="id_5">tag</button>' 283 $t =
$f->tag(
'tag',
'#');
284 $possible_relevances = array(
291 foreach ($possible_relevances as $w) {
293 $r->render($t->withRelevance($w))
295 $expected = $expectations[array_search($w, $possible_relevances)];
296 $this->assertEquals($expected, $html);
304 $df = new \ILIAS\Data\Factory;
306 $bgcol = $df->color(
'#00ff00');
308 $b =
$f->tag(
'tag',
'#')
309 ->withBackgroundColor($bgcol);
311 $expected =
'<button class="btn btn-tag btn-tag-relevance-veryhigh" style="background-color: #00ff00; color: #000000;" data-action="#" id="id_1">tag</button>';
312 $this->assertEquals($expected, $html);
314 $fcol = $df->color(
'#ddd');
315 $b =
$b->withForegroundColor($fcol);
317 $expected =
'<button class="btn btn-tag btn-tag-relevance-veryhigh" style="background-color: #00ff00; color: #dddddd;" data-action="#" id="id_2">tag</button>';
318 $this->assertEquals($expected, $html);
325 $df = new \ILIAS\Data\Factory;
327 $classes = array(
'cl1',
'cl2');
328 $b =
$f->tag(
'tag',
'#')
329 ->withClasses($classes);
330 $this->assertEquals($classes,
$b->getClasses());
333 $expected =
'<button class="btn btn-tag btn-tag-relevance-veryhigh cl1 cl2" data-action="#" id="id_1">tag</button>';
334 $this->assertEquals($expected, $html);
342 $b =
$f->$factory_method(
"label",
"http://www.ilias.de")->withAriaLabel(
"ariatext");
343 $this->assertEquals(
"ariatext",
$b->getAriaLabel());
352 $b =
$f->$factory_method(
"label",
"http://www.ilias.de");
354 $this->assertEquals(
false,
$b->isEngageable());
355 $b2 =
$f->$factory_method(
"label",
"http://www.ilias.de")->withEngagedState(
false);
356 $this->assertEquals(
true, $b2->isEngageable());
358 $this->assertTrue(self::NOT_APPLICABLE);
368 $b =
$f->$factory_method(
"label",
"http://www.ilias.de");
370 $b =
$b->withEngagedState(
false);
371 $this->assertEquals(
false,
$b->isEngaged());
372 $b2 =
$f->$factory_method(
"label",
"http://www.ilias.de")->withEngagedState(
true);
373 $this->assertEquals(
true, $b2->isEngaged());
375 $this->assertTrue(self::NOT_APPLICABLE);
384 $ln =
"http://www.ilias.de";
387 $b =
$f->$factory_method(
"label", $ln)->withAriaLabel(
"aria label text");
388 $aria_label =
$b->getAriaLabel();
391 $css_classes = self::$canonical_css_classes[$factory_method];
392 $expected =
"<button class=\"$css_classes\" aria-label=\"$aria_label\" data-action=\"$ln\" id=\"id_1\">" .
403 $ln =
"http://www.ilias.de";
406 $b =
$f->$factory_method(
"label", $ln);
408 $b =
$b->withEngagedState(
true);
411 $css_classes = self::$canonical_css_classes[$factory_method];
412 $css_classes .=
' engaged';
413 $expected =
"<button class=\"$css_classes\" aria-pressed=\"true\" data-action=\"$ln\" id=\"id_1\">" .
418 $this->assertTrue(self::NOT_APPLICABLE);
428 $signal = $this->createMock(
C\Signal::class);
429 $button =
$f->$factory_method(
"label",
"http://www.example.com");
430 $this->assertEquals(
"http://www.example.com", $button->getAction());
432 $button = $button->withOnClick($signal);
434 $this->assertEquals([$signal], $button->getAction());
443 $signal1 = $this->createMock(
C\Signal::class);
444 $signal2 = $this->createMock(
C\Signal::class);
445 $button =
$f->$factory_method(
"label",
"http://www.example.com");
447 $button = $button->withOnClick($signal1)->appendOnClick($signal2);
449 $this->assertEquals([$signal1, $signal2], $button->getAction());
457 $ln =
"http://www.ilias.de";
459 $signal = $this->createMock(Signal::class);
460 $signal->method(
"__toString")
461 ->willReturn(
"MOCK_SIGNAL");
463 $b =
$f->$factory_method(
"label", $ln)
464 ->withOnClick($signal);
469 $css_classes = self::$canonical_css_classes[$factory_method];
470 $expected =
"<button class=\"$css_classes\" id=\"id_1\">" .
481 foreach ([
"primary",
"standard"] as $method) {
482 $ln =
"http://www.ilias.de";
485 $b =
$f->$method(
"label", $ln)
486 ->withLoadingAnimationOnClick(
true);
490 $css_classes = self::$canonical_css_classes[$method];
491 $expected =
"<button class=\"$css_classes\" data-action=\"$ln\" id=\"id_1\">" .
508 $signal = $this->createMock(
C\Signal::class);
510 $button =
$f->$factory_method(
"label", $signal);
512 $this->assertEquals([$signal], $button->getAction());
517 return array( array(
"standard")
getDefaultRenderer(JavaScriptBinding $js_binding=null)
Provides common functionality for UI tests.
assertHTMLEquals($expected_html_as_string, $html_as_string)