ILIAS  release_8 Revision v8.19
All Data Structures Namespaces Files Functions Variables Modules Pages
ToggleButtonTest.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
21 require_once(__DIR__ . "/../../../../libs/composer/vendor/autoload.php");
22 require_once(__DIR__ . "/../../Base.php");
23 
27 
32 {
34  {
35  return new Factory();
36  }
37 
38  public function test_implements_factory_interface(): void
39  {
40  $f = $this->getFactory();
41 
42  $this->assertInstanceOf(
43  "ILIAS\\UI\\Component\\Button\\Toggle",
44  $f->toggle("label", "action_on_string", "action_off_string")
45  );
46  }
47 
49  {
50  $f = $this->getFactory();
51  try {
52  $f->toggle("label", 1, "action_off_string");
53  $this->assertFalse("This should not happen");
54  } catch (\InvalidArgumentException $e) {
55  $this->assertTrue(true);
56  }
57  }
58 
60  {
61  $f = $this->getFactory();
62  try {
63  $f->toggle("label", "action_on_string", 2);
64  $this->assertFalse("This should not happen");
65  } catch (\InvalidArgumentException $e) {
66  $this->assertTrue(true);
67  }
68  }
69 
70  public function test_setOn_on_default(): void
71  {
72  $f = $this->getFactory();
73  $button = $f->toggle("label", "action_on_string", "action_off_string", true);
74 
75  $this->assertTrue($button->isEngaged());
76  }
77 
78  public function test_append_OnAction(): void
79  {
80  $f = $this->getFactory();
81  $signal_on1 = $this->createMock(Signal::class);
82  $signal_on2 = $this->createMock(Signal::class);
83  $signal_off = $this->createMock(Signal::class);
84  $button = $f->toggle("label", $signal_on1, $signal_off);
85  $this->assertEquals([$signal_on1], $button->getActionOn());
86 
87  $button = $button->withAdditionalToggleOnSignal($signal_on2);
88  $this->assertEquals([$signal_on1, $signal_on2], $button->getActionOn());
89  }
90 
91  public function test_append_OffAction(): void
92  {
93  $f = $this->getFactory();
94  $signal_off1 = $this->createMock(Signal::class);
95  $signal_off2 = $this->createMock(Signal::class);
96  $button = $f->toggle("label", "action_on", $signal_off1);
97  $this->assertEquals([$signal_off1], $button->getActionOff());
98 
99  $button = $button->withAdditionalToggleOffSignal($signal_off2);
100  $this->assertEquals([$signal_off1, $signal_off2], $button->getActionOff());
101  }
102 
103  public function test_render_with_label(): void
104  {
105  $r = $this->getDefaultRenderer();
106  $button = $this->getFactory()->toggle("label", "action_on_string", "action_off_string");
107 
108  $expected = <<<EOT
109  <label>label</label>
110 <button class="il-toggle-button off" id="id_1" aria-pressed="false">
111  <span class="il-toggle-label-on">toggle_on</span>
112  <span class="il-toggle-label-off">toggle_off</span>
113  <span class="il-toggle-switch"></span>
114 </button>
115 EOT;
116 
117  $this->assertHTMLEquals("<div>" . $expected . "</div>", "<div>" . $r->render($button) . "</div>");
118  }
119 
121  {
122  $r = $this->getDefaultRenderer();
123  $button = $this->getFactory()->toggle("", "action_on_string", "action_off_string", true);
124 
125  $expected = ''
126  . '<button class="il-toggle-button on" id="id_1" aria-pressed="false">' //aria-pressed is set to "true" by JS
127  . ' <span class="il-toggle-label-on">toggle_on</span>'
128  . ' <span class="il-toggle-label-off">toggle_off</span>'
129  . ' <span class="il-toggle-switch"></span>'
130  . '</button>';
131 
132  $this->assertHTMLEquals($expected, $r->render($button));
133  return $button;
134  }
135 
136  public function test_render_with_signals(): void
137  {
138  $r = $this->getDefaultRenderer();
139  $signal_on = $this->createMock(Signal::class);
140  $signal_on->method("__toString")
141  ->willReturn("MOCK_SIGNAL");
142  $signal_off = $this->createMock(Signal::class);
143  $signal_off->method("__toString")
144  ->willReturn("MOCK_SIGNAL");
145  $button = $this->getFactory()->toggle("label", $signal_on, $signal_off);
146 
147  $expected = <<<EOT
148  <label>label</label>
149 <button class="il-toggle-button off" id="id_1" aria-pressed="false">
150  <span class="il-toggle-label-on">toggle_on</span>
151  <span class="il-toggle-label-off">toggle_off</span>
152  <span class="il-toggle-switch"></span>
153 </button>
154 EOT;
155 
156  $this->assertHTMLEquals("<div>" . $expected . "</div>", "<div>" . $r->render($button) . "</div>");
157  }
158 
162  public function test_append_UnavailAction(Toggle $button): void
163  {
164  $r = $this->getDefaultRenderer();
165  $button = $button->withUnavailableAction();
166 
167  $html = $r->render($button);
168 
169  $expected = ''
170  . '<button class="il-toggle-button unavailable" aria-pressed="false" disabled="disabled">'
171  . ' <span class="il-toggle-switch"></span>'
172  . '</button>';
173 
174  $this->assertHTMLEquals(
175  $expected,
176  $html
177  );
178  }
179 }
getDefaultRenderer(JavaScriptBinding $js_binding=null, array $with_stub_renderings=[])
Definition: Base.php:355
Class Factory.
withUnavailableAction()
Get a button like this, but action should be unavailable atm.
Test Toggle Button.
Class ChatMainBarProvider .
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Definition: Bulky.php:21
assertHTMLEquals(string $expected_html_as_string, string $html_as_string)
Definition: Base.php:427
test_construction_action_off_type_wrong()
Provides common functionality for UI tests.
Definition: Base.php:298
This describes a toggle button.
Definition: Toggle.php:28
test_construction_action_on_type_wrong()
test_append_UnavailAction(Toggle $button)
test_render_setOn_on_default