ILIAS  trunk Revision v11.0_alpha-2638-g80c1d007f79
ToggleButtonTest.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
21 require_once(__DIR__ . "/../../../../../../vendor/composer/vendor/autoload.php");
22 require_once(__DIR__ . "/../../Base.php");
23 
27 
32 {
34  {
35  return new Factory();
36  }
37 
38  public function testImplementsFactoryInterface(): 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 
48  public function testConstructionActionOnTypeWrong(): void
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 
59  public function testConstructionActionOffTypeWrong(): void
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 testSetOnOnDefault(): 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 testAppendOnAction(): 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 testAppendOffAction(): 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 testRenderWithLabel(): void
104  {
105  $r = $this->getDefaultRenderer();
106  $button = $this->getFactory()->toggle("label", "action_on_string", "action_off_string");
107 
108  $expected = <<<EOT
109  <div class="il-toggle-item">
110  <label>label</label>
111  <button class="il-toggle-button off" id="id_1" aria-pressed="false">
112  <span class="il-toggle-label-on">toggle_on</span>
113  <span class="il-toggle-label-off">toggle_off</span>
114  <span class="il-toggle-switch"></span>
115  </button>
116  </div>
117  EOT;
118 
119  $this->assertHTMLEquals("<div>" . $expected . "</div>", "<div>" . $r->render($button) . "</div>");
120  }
121 
122  public function testRenderSetOnOnDefault(): Toggle
123  {
124  $r = $this->getDefaultRenderer();
125  $button = $this->getFactory()->toggle("", "action_on_string", "action_off_string", true);
126 
127  $expected = ''
128  . '<div class="il-toggle-item">'
129  . ' <button class="il-toggle-button on" id="id_1" aria-pressed="false">' //aria-pressed is set to "true" by JS
130  . ' <span class="il-toggle-label-on">toggle_on</span>'
131  . ' <span class="il-toggle-label-off">toggle_off</span>'
132  . ' <span class="il-toggle-switch"></span>'
133  . ' </button>'
134  . '</div>';
135 
136  $this->assertHTMLEquals($expected, $r->render($button));
137  return $button;
138  }
139 
140  public function testRenderWithSignals(): void
141  {
142  $r = $this->getDefaultRenderer();
143  $signal_on = $this->createMock(Signal::class);
144  $signal_on->method("__toString")
145  ->willReturn("MOCK_SIGNAL");
146  $signal_off = $this->createMock(Signal::class);
147  $signal_off->method("__toString")
148  ->willReturn("MOCK_SIGNAL");
149  $button = $this->getFactory()->toggle("label", $signal_on, $signal_off);
150 
151  $expected = <<<EOT
152  <div class="il-toggle-item">
153  <label>label</label>
154  <button class="il-toggle-button off" id="id_1" aria-pressed="false">
155  <span class="il-toggle-label-on">toggle_on</span>
156  <span class="il-toggle-label-off">toggle_off</span>
157  <span class="il-toggle-switch"></span>
158  </button>
159  </div>
160 EOT;
161 
162  $this->assertHTMLEquals("<div>" . $expected . "</div>", "<div>" . $r->render($button) . "</div>");
163  }
164 
165  #[\PHPUnit\Framework\Attributes\Depends('testRenderSetOnOnDefault')]
166  public function testAppendUnavailAction(Toggle $button): void
167  {
168  $r = $this->getDefaultRenderer();
169  $button = $button->withUnavailableAction();
170 
171  $html = $r->render($button);
172 
173  $expected = ''
174  . '<div class="il-toggle-item">'
175  . ' <button class="il-toggle-button unavailable" aria-pressed="false" disabled="disabled">'
176  . ' <span class="il-toggle-switch"></span>'
177  . ' </button>'
178  . '</div>';
179 
180  $this->assertHTMLEquals(
181  $expected,
182  $html
183  );
184  }
185 }
button(string $caption, string $cmd)
Test Toggle Button.
Interface Observer Contains several chained tasks and infos about them.
This describes a toggle button.
Definition: Toggle.php:28
withUnavailableAction(bool $flag=true)
Get a button like this, but action should be unavailable atm.
testAppendUnavailAction(Toggle $button)
$r