ILIAS  trunk Revision v11.0_alpha-2638-g80c1d007f79
LightboxTest.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
21 require_once(__DIR__ . '/ModalBase.php');
22 
23 use ILIAS\UI\Component as C;
25 
31 class LightboxTest extends ModalBase
32 {
33  public function testGetSinglePage(): void
34  {
35  $page = $this->getLightboxPage();
36  $lightbox = $this->getModalFactory()->lightbox($page);
37  $this->assertEquals([$page], $lightbox->getPages());
38  }
39 
40  public function testGetMultiplePage(): void
41  {
42  $pages = [$this->getLightboxPage(), $this->getLightboxPage()];
43  $lightbox = $this->getModalFactory()->lightbox($pages);
44  $this->assertEquals($pages, $lightbox->getPages());
45  }
46 
47  #[\PHPUnit\Framework\Attributes\DataProvider('getPageProvider')]
48  public function testSimplePageRendering(string $method, array $args, string $expected_html): void
49  {
50  $lightbox = $this->getModalFactory()->lightbox($this->getModalFactory()->$method(...$args));
51  $expected = $this->normalizeHTML($expected_html);
52  $actual = $this->normalizeHTML($this->getDefaultRenderer()->render($lightbox));
53  $this->assertEquals($expected, $actual);
54  }
55 
56  public static function getPageProvider(): array
57  {
58  $image = new I\Component\Image\Image("responsive", 'src/fake/image.jpg', 'description');
59  $card = new I\Component\Card\Card('foo');
60 
61  return [
62  'Render image page' => ['lightboxImagePage', [$image, 'title'], self::getExpectedImagePageHTML()],
63  'Render text page' => ['lightboxTextPage', ['HelloWorld', 'title'], self::getExpectedTextPageHTML()],
64  'Render card page' => ['lightboxCardPage', [$card], self::getExpectedCardPageHTML()],
65  ];
66  }
67 
68  public function testDifferentPageTypeRendering(): void
69  {
70  $image1 = new I\Component\Image\Image("responsive", 'src/fake/image.jpg', 'description');
71 
72  $pages = [
73  $this->getModalFactory()->lightboxTextPage('HelloWorld', 'title'),
74  $this->getModalFactory()->lightboxImagePage($image1, 'title'),
75  ];
76 
77  $lightbox = $this->getModalFactory()->lightbox($pages);
78  $expected = $this->normalizeHTML($this->getExpectedMixedPagesHTML());
79  $actual = $this->normalizeHTML($this->getDefaultRenderer()->render($lightbox));
80  $this->assertEquals($expected, $actual);
81  }
82 
83  protected function getLightboxPage(): LightboxMockPage
84  {
85  return new LightboxMockPage();
86  }
87 
88  protected static function getExpectedTextPageHTML(): string
89  {
90  return <<<EOT
91 <dialog class="c-modal c-modal--lightbox il-modal-lightbox il-modal-lightbox-bright" tabindex="-1" id="id_1">
92  <div class="modal-dialog modal-lg" role="document">
93  <div class="modal-content il-modal-lightbox-page">
94  <div class="modal-header">
95  <form><button formmethod="dialog" class="close" aria-label="close"><span aria-hidden="true"></span></button></form>
96  <h1 class="modal-title">title</h1>
97  </div>
98  <div class="modal-body">
99  <div id="id_1_carousel" class="carousel slide" data-ride="carousel" data-interval="false">
100 
101  <div class="carousel-inner" role="listbox">
102  <div class="item active text-only" data-title="title">
103  <div class="item-content ">
104  HelloWorld
105  </div>
106  </div>
107  </div>
108 
109  </div>
110  </div>
111  </div>
112  </div>
113 </dialog>
114 EOT;
115  }
117  protected static function getExpectedImagePageHTML(): string
118  {
119  return <<<EOT
120 <dialog class="c-modal c-modal--lightbox il-modal-lightbox il-modal-lightbox-dark" tabindex="-1" id="id_1">
121  <div class="modal-dialog modal-lg" role="document">
122  <div class="modal-content il-modal-lightbox-page">
123  <div class="modal-header">
124  <form><button formmethod="dialog" class="close" aria-label="close"><span aria-hidden="true"></span></button></form>
125  <h1 class="modal-title">title</h1>
126  </div>
127  <div class="modal-body">
128  <div id="id_1_carousel" class="carousel slide" data-ride="carousel" data-interval="false">
129 
130  <div class="carousel-inner" role="listbox">
131 
132  <div class="item active" data-title="title">
133  <div class="item-content ">
134  <img src="src/fake/image.jpg" class="img-responsive" alt="description" />
135  </div>
136  <div class="carousel-caption">
137  description
138  </div>
139  </div>
140 
141  </div>
142 
143  </div>
144  </div>
145  </div>
146  </div>
147 </dialog>
148 EOT;
149  }
150 
151  protected static function getExpectedMixedPagesHTML(): string
152  {
153  return <<<EOT
154 <dialog class="c-modal c-modal--lightbox il-modal-lightbox il-modal-lightbox-dark" tabindex="-1" id="id_1">
155  <div class="modal-dialog modal-lg" role="document">
156  <div class="modal-content il-modal-lightbox-page">
157  <div class="modal-header">
158  <form><button formmethod="dialog" class="close" aria-label="close"><span aria-hidden="true"></span></button></form>
159  <h1 class="modal-title">title</h1>
160  </div>
161  <div class="modal-body">
162  <div id="id_1_carousel" class="carousel slide" data-ride="carousel" data-interval="false">
163 
164  <ol class="carousel-indicators">
165  <li data-target="#id_1_carousel" data-slide-to="0" class="active"></li>
166  <li data-target="#id_1_carousel" data-slide-to="1" class=""></li>
167  </ol>
168 
169  <div class="carousel-inner" role="listbox">
170  <div class="item active text-only" data-title="title">
171  <div class="item-content ">
172  HelloWorld
173  </div>
174  </div>
175 
176  <div class="item " data-title="title">
177  <div class="item-content ">
178  <img src="src/fake/image.jpg" class="img-responsive" alt="description" />
179  </div>
180  <div class="carousel-caption">
181  description
182  </div>
183  </div>
184  </div>
185 
186  <button class="left carousel-control btn-link" href="#id_1_carousel" role="button" data-slide="prev">
187  <span class="glyphicon glyphicon-chevron-left" aria-hidden="true"></span>
188  <span class="sr-only">Previous</span>
189  </button>
190  <button class="right carousel-control btn-link" href="#id_1_carousel" role="button" data-slide="next">
191  <span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span>
192  <span class="sr-only">Next</span>
193  </button>
194 
195  </div>
196  </div>
197  </div>
198  </div>
199 </dialog>
200 EOT;
201  }
202 
203  private static function getExpectedCardPageHTML(): string
204  {
205  return <<<EOT
206 <dialog class="c-modal c-modal--lightbox il-modal-lightbox il-modal-lightbox-bright" tabindex="-1" id="id_1">
207  <div class="modal-dialog modal-lg" role="document">
208  <div class="modal-content il-modal-lightbox-page">
209  <div class="modal-header">
210  <form><button formmethod="dialog" class="close" aria-label="close"><span aria-hidden="true"></span></button></form>
211  <h1 class="modal-title">foo</h1>
212  </div>
213  <div class="modal-body">
214  <div id="id_1_carousel" class="carousel slide" data-ride="carousel" data-interval="false">
215  <div class="carousel-inner" role="listbox">
216  <div class="item active" data-title="foo">
217  <div class="item-content item-vertical"></div>
218  </div>
219  </div>
220  </div>
221  </div>
222  </div>
223  </div>
224 </dialog>
225 EOT;
226  }
227 }
228 
229 class LightboxMockPage implements C\Modal\LightboxPage
230 {
231  public function getTitle(): string
232  {
233  return 'title';
234  }
235 
236  public function getComponent(): C\Component
237  {
238  return new ComponentDummy();
239  }
240 }
button(string $caption, string $cmd)
static getExpectedImagePageHTML()
testSimplePageRendering(string $method, array $args, string $expected_html)
static getExpectedMixedPagesHTML()
static getExpectedTextPageHTML()
static getExpectedCardPageHTML()
static getPageProvider()
Base class for modal tests.
Definition: ModalBase.php:34
normalizeHTML(string $html)
Definition: ModalBase.php:75
getModalFactory()
Definition: ModalBase.php:50
Tests on implementation for the lightbox modal.
testDifferentPageTypeRendering()
form( $class_path, string $cmd, string $submit_caption="")
Some very basic component implementation.
Definition: HelloWorld.php:26
to(\GdImage $image, ?int $quality=null)
Currently this is the only way to make a FileStream from a GD image resource.