ILIAS  trunk Revision v12.0_alpha-1227-g7ff6d300864
PlayerVideoTest.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
21require_once(__DIR__ . "/../../../../../../vendor/composer/vendor/autoload.php");
22require_once(__DIR__ . "/../../Base.php");
23
27
32{
33 public function getUIFactory(): NoUIFactory
34 {
35 return new class (
36 $this->createMock(I\Component\Modal\InterruptiveItem\Factory::class),
37 $this->createMock(FieldFactory::class),
38 ) extends NoUIFactory {
39 public function __construct(
40 protected I\Component\Modal\InterruptiveItem\Factory $interruptive_item_factory,
41 protected FieldFactory $field_factory,
42 ) {
43 }
44
45 public function modal(): I\Component\Modal\Factory
46 {
47 return new I\Component\Modal\Factory(
48 new I\Component\SignalGenerator(),
49 $this->interruptive_item_factory,
50 $this->field_factory,
51 );
52 }
53 public function button(): I\Component\Button\Factory
54 {
55 return new I\Component\Button\Factory();
56 }
57 };
58 }
59
60 public function getFactory(): C\Player\Factory
61 {
62 return new I\Component\Player\Factory();
63 }
64
65 public function testImplementsFactoryInterface(): void
66 {
67 $f = $this->getFactory();
68
69 $video = $f->video("/foo");
70
71 $this->assertInstanceOf("ILIAS\\UI\\Component\\Player\\Video", $video);
72 }
73
74 public function testGetTitleGetSource(): void
75 {
76 $f = $this->getFactory();
77
78 $video = $f->video("/foo");
79
80 $this->assertEquals("/foo", $video->getSource());
81 }
82
83 public function testGetTitleGetPoster(): void
84 {
85 $f = $this->getFactory();
86
87 $video = $f->video("/foo")->withPoster("bar.jpg");
88
89 $this->assertEquals("bar.jpg", $video->getPoster());
90 }
91
92 public function testGetTitleGetSubtitleFile(): void
93 {
94 $f = $this->getFactory();
95
96 $video = $f->video("/foo")->withAdditionalSubtitleFile("en", "subtitles.vtt");
97
98 $this->assertEquals(["en" => "subtitles.vtt"], $video->getSubtitleFiles());
99 }
100
101 public function testRenderVideo(): void
102 {
103 $f = $this->getFactory();
104 $r = $this->getDefaultRenderer();
105
106 $video = $f->video("/foo");
107
108 $html = $r->render($video);
109 $expected = <<<EOT
110<div class="il-video-container">
111 <video controls="controls" class="il-video-player" id="id_1" src="/foo" preload="metadata" >
112 </video>
113</div>
114EOT;
115 $this->assertHTMLEquals(
116 $this->brutallyTrimHTML($expected),
117 $this->brutallyTrimHTML($html)
118 );
119 }
120
121 public function testRenderWithPoster(): void
122 {
123 $f = $this->getFactory();
124 $r = $this->getDefaultRenderer();
125
126 $video = $f->video("/foo")->withPoster("bar.jpg");
127
128 $html = $r->render($video);
129 $expected = <<<EOT
130<div class="il-video-container">
131 <video controls="controls" class="il-video-player" id="id_1" src="/foo" preload="metadata" poster="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" style="background-image:url('bar.jpg')">
132 </video>
133</div>
134EOT;
135 $this->assertHTMLEquals(
136 $this->brutallyTrimHTML($expected),
137 $this->brutallyTrimHTML($html)
138 );
139 }
140
141 public function testRenderWithSubtitles(): void
142 {
143 $f = $this->getFactory();
144 $r = $this->getDefaultRenderer();
145
146 $video = $f->video("/foo")->withAdditionalSubtitleFile("en", "subtitles.vtt");
147
148 $html = $r->render($video);
149 $expected = <<<EOT
150<div class="il-video-container">
151 <video controls="controls" class="il-video-player" id="id_1" src="/foo" preload="metadata" >
152 <track kind="subtitles" src="subtitles.vtt" srclang="en" />
153 </video>
154</div>
155EOT;
156 $this->assertHTMLEquals(
157 $this->brutallyTrimHTML($expected),
158 $this->brutallyTrimHTML($html)
159 );
160 }
161
162 public function testRenderYoutube(): void
163 {
164 $f = $this->getFactory();
165 $r = $this->getDefaultRenderer();
166
167 $video = $f->video("https://www.youtube.com/embed/YSN2osYbshQ");
168
169 $html = $r->render($video);
170
171 $expected = <<<EOT
172<div class="il-video-container">
173 <iframe id="id_1" src="https://www.youtube.com/embed/YSN2osYbshQ" allow="fullscreen; autoplay; picture-in-picture;" referrerpolicy="strict-origin-when-cross-origin"></iframe>
174</div>
175EOT;
176 $this->assertHTMLEquals(
177 $this->brutallyTrimHTML($expected),
178 $this->brutallyTrimHTML($html)
179 );
180 }
181
182 public function testRenderVimeo(): void
183 {
184 $f = $this->getFactory();
185 $r = $this->getDefaultRenderer();
186
187 $video = $f->video("https://player.vimeo.com/video/669475821");
188
189 $html = $r->render($video);
190
191 $expected = <<<EOT
192<div class="il-video-container">
193 <iframe id="id_1" src="https://player.vimeo.com/video/669475821" allow="fullscreen; autoplay; picture-in-picture;" referrerpolicy="strict-origin-when-cross-origin"></iframe>
194</div>
195EOT;
196 $this->assertHTMLEquals(
197 $this->brutallyTrimHTML($expected),
198 $this->brutallyTrimHTML($html)
199 );
200 }
201}
Factory for Date Formats.
Definition: Factory.php:27
Provides common functionality for UI tests.
Definition: Base.php:337
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc
modal(string $title="", string $cancel_label="")
button(string $caption, string $cmd)