19declare(strict_types=1);
23use PHPUnit\Framework\Attributes\DataProvider;
32 return new I\Component\Chart\Bar\Factory();
43 public function listing(): I\Component\Listing\Factory
45 return new I\Component\Listing\Factory(
47 new I\
Component\Listing\CharacteristicValue\Factory(),
58 $c_dimension = $df->dimension()->cardinal();
60 $dataset = $df->dataset([
"Dataset" => $c_dimension]);
61 $dataset = $dataset->withPoint(
"Item", [
"Dataset" => 0]);
70 $c_dimension = $df->dimension()->cardinal();
71 $t_dimension = $df->dimension()->range($c_dimension);
73 $dataset = $df->dataset([
"Dataset 1" => $c_dimension,
"Dataset 2" => $t_dimension]);
74 $dataset = $dataset->withPoint(
"Item 1", [
"Dataset 1" => -1.25,
"Dataset 2" => [-2, -1]]);
75 $dataset = $dataset->withPoint(
"Item 2", [
"Dataset 1" =>
null,
"Dataset 2" => [0, 0.5]]);
84 $this->assertInstanceOf(
"ILIAS\\UI\\Component\\Chart\\Bar\\Factory",
$f);
93 $horizontal =
$f->horizontal(
98 $this->assertInstanceOf(
"ILIAS\\UI\\Component\\Chart\\Bar\\Bar", $horizontal);
99 $this->assertInstanceOf(
"ILIAS\\UI\\Component\\Chart\\Bar\\Horizontal", $horizontal);
101 $vertical =
$f->vertical(
105 $this->assertInstanceOf(
"ILIAS\\UI\\Component\\Chart\\Bar\\Bar", $vertical);
106 $this->assertInstanceOf(
"ILIAS\\UI\\Component\\Chart\\Bar\\Vertical", $vertical);
114 $c_dimension = $df->dimension()->cardinal();
116 $dataset = $df->dataset([
"Dataset" => $c_dimension]);
118 $this->expectException(LogicException::class);
119 $this->expectExceptionMessage(
"Dataset must not be empty.");
120 $horizontal =
$f->horizontal(
152 $horizontal =
$f->horizontal(
156 $horizontal1 = $horizontal->withTitle(
"Alternative title for Horizontal Bar");
158 $this->assertEquals(
"Horizontal Bar", $horizontal->getTitle());
159 $this->assertEquals(
"Alternative title for Horizontal Bar", $horizontal1->getTitle());
168 $horizontal =
$f->horizontal(
172 $horizontal1 = $horizontal->withTitleVisible(
false);
174 $this->assertEquals(
true, $horizontal->isTitleVisible());
175 $this->assertEquals(
false, $horizontal1->isTitleVisible());
184 $horizontal =
$f->horizontal(
188 $horizontal1 = $horizontal->withTooltipsVisible(
false);
190 $this->assertEquals(
true, $horizontal->isTooltipsVisible());
191 $this->assertEquals(
false, $horizontal1->isTooltipsVisible());
200 $horizontal =
$f->horizontal(
204 $horizontal1 = $horizontal->withLegendVisible(
false);
206 $this->assertEquals(
true, $horizontal->isLegendVisible());
207 $this->assertEquals(
false, $horizontal1->isLegendVisible());
216 $horizontal =
$f->horizontal(
220 $horizontal1 = $horizontal->withLegendPosition(
"left");
222 $this->assertEquals(
"top", $horizontal->getLegendPosition());
223 $this->assertEquals(
"left", $horizontal1->getLegendPosition());
232 $horizontal =
$f->horizontal(
237 $this->expectException(InvalidArgumentException::class);
238 $this->expectExceptionMessage(
"Position must be 'bottom', 'top', 'left' or 'right'.");
240 $horizontal = $horizontal->withLegendPosition(
"middle");
250 $horizontal =
$f->horizontal(
254 $horizontal1 = $horizontal->withDataset($e_dataset);
256 $this->assertEquals($s_dataset, $horizontal->getDataset());
257 $this->assertEquals($e_dataset, $horizontal1->getDataset());
267 $bc =
new C\Chart\Bar\BarConfig();
268 $bc = $bc->withColor($df->color(
"#d38000"));
274 $horizontal =
$f->horizontal(
278 $horizontal1 = $horizontal->withBarConfigs($bars);
280 $this->assertEquals([], $horizontal->getBarConfigs());
281 $this->assertEquals($bars, $horizontal1->getBarConfigs());
291 $gc =
new C\Chart\Bar\GroupConfig();
292 $gc = $gc->withStacked();
298 $horizontal =
$f->horizontal(
302 $horizontal1 = $horizontal->withGroupConfigs($groups);
304 $this->assertEquals([], $horizontal->getGroupConfigs());
305 $this->assertEquals($groups, $horizontal1->getGroupConfigs());
315 $horizontal =
$f->horizontal(
320 $this->assertEquals(
"y", $horizontal->getIndexAxis());
322 $vertical =
$f->vertical(
327 $this->assertEquals(
"x", $vertical->getIndexAxis());
332 $r = $this->getDefaultRenderer();
337 $horizontal =
$f->horizontal(
342 $html = $r->render($horizontal);
344 $expected_html = <<<EOT
345<div
class=
"il-chart-bar-horizontal">
346 <canvas
id=
"id_1" height=
"150" aria-label=
"bar123" role=
"img"></canvas>
360 $this->assertHTMLEquals(
"<div>" . $expected_html .
"</div>",
"<div>" . $html .
"</div>");
365 $r = $this->getDefaultRenderer();
370 $vertical =
$f->vertical(
375 $html = $r->render($vertical);
377 $expected_html = <<<EOT
378<div
class=
"il-chart-bar-vertical">
379 <canvas
id=
"id_1" height=
"165" aria-label=
"bar123" role=
"img"></canvas>
386 <li>Item 1: -1.25</li>
393 <li>Item 1: -2 - -1</li>
394 <li>Item 2: 0 - 0.5</li>
401 $this->assertHTMLEquals(
"<div>" . $expected_html .
"</div>",
"<div>" . $html .
"</div>");
407 "ampersand" => [
"this&that",
"this&that"],
408 "single quote" => [
"it's a kind of magic",
"it's a kind of magic"],
409 "double quote" => [
'Dwayne "The Rock" Johnson',
'Dwayne "The Rock" Johnson'],
410 "tags" => [
'<script>alert("XSS")</script>',
'<script>alert("XSS")</script>'],
414 #[DataProvider('provideRiskyData')]
417 string $expected_in_html
419 $r = $this->getDefaultRenderer();
423 $c_dimension = $df->dimension()->cardinal();
425 $dataset = $df->dataset([$risky_datum => $c_dimension]);
426 $dataset = $dataset->withPoint(
"Item", [$risky_datum => 123]);
428 $vertical =
$f->vertical(
433 $html = $r->render($vertical);
435 $expected_html = <<<EOT
436<div
class=
"il-chart-bar-vertical">
437 <canvas
id=
"id_1" height=
"150" aria-label=
"bar123" role=
"img"></canvas>
441 <dt>$expected_in_html</dt>
451 $this->assertHTMLEquals(
"<div>" . $expected_html .
"</div>",
"<div>" . $html .
"</div>");
454 #[DataProvider('provideRiskyData')]
457 string $expected_in_html
459 $r = $this->getDefaultRenderer();
460 $f = $this->getFactory();
463 $c_dimension = $df->dimension()->cardinal();
465 $dataset = $df->dataset([
"Dataset" => $c_dimension]);
466 $dataset = $dataset->withPoint($risky_datum, [
"Dataset" => 123]);
468 $vertical =
$f->vertical(
473 $html = $r->render($vertical);
475 $expected_html = <<<EOT
476<div
class=
"il-chart-bar-vertical">
477 <canvas
id=
"id_1" height=
"150" aria-label=
"bar123" role=
"img"></canvas>
484 <li>$expected_in_html: 123</li>
491 $this->assertHTMLEquals(
"<div>" . $expected_html .
"</div>",
"<div>" . $html .
"</div>");
Test on Bar Chart implementation.
testWithLegendInvisible()
static provideRiskyData()
testRenderConvertSpecialCharactersInItemLabel(string $risky_datum, string $expected_in_html)
testRenderConvertSpecialCharactersInDatasetLabel(string $risky_datum, string $expected_in_html)
testWithTooltipsInvisible()
testWithInvalidLegendPosition()
testImplementsFactoryInterface()
Provides common functionality for UI tests.
Interface Observer \BackgroundTasks Contains several chained tasks and infos about them.