ILIAS  release_9 Revision v9.13-25-g2c18ec4c24f
ilSkinStyleContainerTest.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
21 require_once('libs/composer/vendor/autoload.php');
22 
24 {
25  protected ilSkin $skin;
26  protected ilSkinStyle $style1;
27  protected ilSkinStyle $style2;
29 
30  protected function setUp(): void
31  {
32  parent::setUp();
33 
34  if (!defined('PATH_TO_SCSS')) {
35  if (file_exists('ilias.ini.php')) {
36  $ini = parse_ini_file('ilias.ini.php', true);
37  define('PATH_TO_SCSS', $ini['tools']['lessc'] ?? '');
38  } else {
39  define('PATH_TO_SCSS', '');
40  }
41  }
42 
43  $this->skin = new ilSkin('skin1', 'skin 1');
44 
45  $this->style1 = new ilSkinStyle('style1', 'Style 1');
46  $this->style1->setCssFile('style1css');
47  $this->style1->setImageDirectory('style1image');
48  $this->style1->setSoundDirectory('style1sound');
49  $this->style1->setFontDirectory('style1font');
50 
51  $this->style2 = new ilSkinStyle('style2', 'Style 2');
52  $this->style2->setCssFile('style2css');
53  $this->style2->setImageDirectory('style2image');
54  $this->style2->setSoundDirectory('style2sound');
55  $this->style2->setFontDirectory('style2font');
56 
57  $this->factory = new ilSkinFactory($this->lng, $this->system_style_config);
58 
59  $this->skin_directory = $this->system_style_config->getCustomizingSkinPath() . $this->skin->getId();
60  }
61 
62  public function testCreateDelete(): void
63  {
64  $container = $this->factory->skinStyleContainerFromId($this->skin->getId(), $this->message_stack);
65 
66  $container->getSkin()->setId('newSkin');
67  $container->create($this->message_stack);
68 
69  $this->assertTrue(is_dir($this->system_style_config->getCustomizingSkinPath() . 'newSkin'));
70  $container->delete();
71  $this->assertFalse(is_dir($this->system_style_config->getCustomizingSkinPath() . 'newSkin'));
72  }
73 
74  public function testUpdateSkinNoIdChange(): void
75  {
76  $container = $this->factory->skinStyleContainerFromId($this->skin->getId(), $this->message_stack);
78  $this->assertTrue(is_dir($this->skin_directory));
79  }
80 
81  public function testUpdateSkinWithChangedID(): void
82  {
83  $container = $this->factory->skinStyleContainerFromId($this->skin->getId(), $this->message_stack);
84  $old_skin = clone $container->getSkin();
85  $container->getSkin()->setId('newSkin2');
86  $container->updateSkin($old_skin);
87  $this->assertTrue(is_dir($this->system_style_config->getCustomizingSkinPath() . 'newSkin2'));
88  $old_skin = clone $container->getSkin();
89  $container->getSkin()->setId($this->skin->getId());
90  $container->updateSkin($old_skin);
91  $this->assertFalse(is_dir($this->system_style_config->getCustomizingSkinPath() . 'newSkin2'));
92  }
93 
94  public function testAddStyle(): void
95  {
96  $new_style = new ilSkinStyle('style1new', 'new Style');
97  $new_style->setCssFile('newcss');
98  $new_style->setImageDirectory('newimage');
99  $new_style->setSoundDirectory('newsound');
100  $new_style->setFontDirectory('newfont');
101 
102  $container = $this->factory->skinStyleContainerFromId($this->skin->getId(), $this->message_stack);
103 
104  $this->assertTrue(is_dir($this->skin_directory. '/style1/style1image'));
105  $this->assertTrue(is_dir($this->skin_directory . '/style1/style1sound'));
106  $this->assertTrue(is_dir($this->skin_directory . '/style1/style1font'));
107  $this->assertTrue(is_file($this->skin_directory . '/style1/style1.css'));
108  $this->assertTrue(is_file($this->skin_directory . '/style1/style1.scss'));
109  $this->assertTrue(is_file($this->skin_directory . '/style1/010-settings/variables1.scss'));
110  $this->assertTrue(is_file($this->skin_directory . '/style1/010-settings/variables2.scss'));
111 
112  $this->assertFalse(is_dir($this->skin_directory . '/style1new/newimage'));
113  $this->assertFalse(is_dir($this->skin_directory . '/style1new/newsound'));
114  $this->assertFalse(is_dir($this->skin_directory . '/style1new/newfont'));
115  $this->assertFalse(is_file($this->skin_directory . '/style1new/newcss.css'));
116  $this->assertFalse(is_file($this->skin_directory . '/style1new/newcss.scss'));
117  $this->assertFalse(is_file($this->skin_directory . '/style1new/010-settings/variables1.scss'));
118  $this->assertFalse(is_file($this->skin_directory . '/style1new/010-settings/variables2.scss'));
119 
120  $container->addStyle($new_style);
121 
122  $this->assertTrue(is_dir($this->skin_directory . '/style1/style1image'));
123  $this->assertTrue(is_dir($this->skin_directory . '/style1/style1sound'));
124  $this->assertTrue(is_dir($this->skin_directory . '/style1/style1font'));
125  $this->assertTrue(is_file($this->skin_directory . '/style1/style1.css'));
126  $this->assertTrue(is_file($this->skin_directory . '/style1/style1.scss'));
127  $this->assertTrue(is_file($this->skin_directory . '/style1/010-settings/variables1.scss'));
128  $this->assertTrue(is_file($this->skin_directory . '/style1/010-settings/variables2.scss'));
129 
130  $this->assertTrue(is_dir($this->skin_directory . '/style1new/newimage'));
131  $this->assertTrue(is_dir($this->skin_directory . '/style1new/newsound'));
132  $this->assertTrue(is_dir($this->skin_directory . '/style1new/newfont'));
133  $this->assertTrue(is_file($this->skin_directory . '/style1new/newcss.css'));
134  $this->assertTrue(is_file($this->skin_directory . '/style1new/newcss.scss'));
135  $this->assertTrue(is_file($this->skin_directory . '/style1new/010-settings/variables1.scss'));
136  $this->assertTrue(is_file($this->skin_directory . '/style1new/010-settings/variables2.scss'));
137  }
138 
139  public function testDeleteStyle(): void
140  {
141  $container = $this->factory->skinStyleContainerFromId($this->skin->getId(), $this->message_stack);
142 
143  $this->assertTrue(is_dir($this->skin_directory . '/style1/style1image'));
144  $this->assertTrue(is_dir($this->skin_directory . '/style1/style1sound'));
145  $this->assertTrue(is_dir($this->skin_directory . '/style1/style1font'));
146  $this->assertTrue(is_file($this->skin_directory . '/style1/style1.css'));
147  $this->assertTrue(is_file($this->skin_directory . '/style1/style1.scss'));
148  $this->assertTrue(is_file($this->skin_directory . '/style1/010-settings/variables1.scss'));
149  $this->assertTrue(is_file($this->skin_directory . '/style1/010-settings/variables2.scss'));
150 
151  $this->assertTrue(is_dir($this->skin_directory . '/style2/style2image'));
152  $this->assertTrue(is_dir($this->skin_directory . '/style2/style2sound'));
153  $this->assertTrue(is_dir($this->skin_directory . '/style2/style2font'));
154  $this->assertTrue(is_file($this->skin_directory . '/style2/style2.css'));
155  $this->assertTrue(is_file($this->skin_directory . '/style2/style2.scss'));
156  $this->assertTrue(is_file($this->skin_directory . '/style2/010-settings/variables1.scss'));
157  $this->assertTrue(is_file($this->skin_directory . '/style2/010-settings/variables2.scss'));
158 
159  $container->deleteStyle($this->style1);
160 
161  $this->assertFalse(is_dir($this->skin_directory . '/style1/style1image'));
162  $this->assertFalse(is_dir($this->skin_directory . '/style1/style1sound'));
163  $this->assertFalse(is_dir($this->skin_directory . '/style1/style1font'));
164  $this->assertFalse(is_file($this->skin_directory . '/style1/style1.css'));
165  $this->assertFalse(is_file($this->skin_directory . '/style1/style1.scss'));
166  $this->assertFalse(is_file($this->skin_directory . '/style1/010-settings/variables1.scss'));
167  $this->assertFalse(is_file($this->skin_directory . '/style1/010-settings/variables2.scss'));
168 
169  $this->assertTrue(is_dir($this->skin_directory . '/style2/style2image'));
170  $this->assertTrue(is_dir($this->skin_directory . '/style2/style2sound'));
171  $this->assertTrue(is_dir($this->skin_directory . '/style2/style2font'));
172  $this->assertTrue(is_file($this->skin_directory . '/style2/style2.css'));
173  $this->assertTrue(is_file($this->skin_directory . '/style2/style2.scss'));
174  $this->assertTrue(is_file($this->skin_directory . '/style2/010-settings/variables1.scss'));
175  $this->assertTrue(is_file($this->skin_directory . '/style2/010-settings/variables2.scss'));
176  }
177 
178  public function testUpdateStyle(): void
179  {
180  $container = $this->factory->skinStyleContainerFromId($this->skin->getId(), $this->message_stack);
181  $skin = $container->getSkin();
182 
183  $old_style = clone $skin->getStyle($this->style1->getId());
184  $new_style = $skin->getStyle($this->style1->getId());
185 
186  $new_style->setId('style1new');
187  $new_style->setName('new Style');
188  $new_style->setCssFile('style1new');
189  $new_style->setImageDirectory('style1newimage');
190  $new_style->setSoundDirectory('style1newsound');
191  $new_style->setFontDirectory('style1newfont');
192 
193  $this->assertTrue(is_dir($this->skin_directory . '/style1/style1image'));
194  $this->assertTrue(is_dir($this->skin_directory . '/style1/style1sound'));
195  $this->assertTrue(is_dir($this->skin_directory . '/style1/style1font'));
196  $this->assertTrue(is_file($this->skin_directory . '/style1/style1.css'));
197  $this->assertTrue(is_file($this->skin_directory . '/style1/style1.scss'));
198  $this->assertTrue(is_file($this->skin_directory . '/style1/010-settings/variables1.scss'));
199  $this->assertTrue(is_file($this->skin_directory . '/style1/010-settings/variables2.scss'));
200 
201  $container->updateStyle($new_style->getId(), $old_style);
202 
203  $this->assertFalse(is_dir($this->skin_directory . '/style1/style1image'));
204  $this->assertFalse(is_dir($this->skin_directory . '/style1/style1sound'));
205  $this->assertFalse(is_dir($this->skin_directory . '/style1/style1font'));
206  $this->assertFalse(is_file($this->skin_directory . '/style1/style1.css'));
207  $this->assertFalse(is_file($this->skin_directory . '/style1/style1.scss'));
208  $this->assertFalse(is_file($this->skin_directory . '/style1/010-settings/variables1.scss'));
209  $this->assertFalse(is_file($this->skin_directory . '/style1/010-settings/variables2.scss'));
210 
211  $this->assertTrue(is_dir($this->skin_directory . '/style1new/style1newimage'));
212  $this->assertTrue(is_dir($this->skin_directory . '/style1new/style1newsound'));
213  $this->assertTrue(is_dir($this->skin_directory . '/style1new/style1newfont'));
214  $this->assertTrue(is_file($this->skin_directory . '/style1new/style1new.css'));
215  $this->assertTrue(is_file($this->skin_directory . '/style1new/010-settings/variables1.scss'));
216  $this->assertTrue(is_file($this->skin_directory . '/style1new/010-settings/variables2.scss'));
217  }
218 
219  public function testDeleteSkin(): void
220  {
221  $container = $this->factory->skinStyleContainerFromId($this->skin->getId(), $this->message_stack);
222  $skin = $container->getSkin();
223 
224  $this->assertTrue(is_dir($this->system_style_config->getCustomizingSkinPath() . $skin->getId()));
225  $container->delete();
226  $this->assertFalse(is_dir($this->system_style_config->getCustomizingSkinPath() . $skin->getId()));
227  }
228 
229  public function testAddSubstyle(): void
230  {
231  $container = $this->factory->skinStyleContainerFromId($this->skin->getId(), $this->message_stack);
232 
233  $new_sub_style = new ilSkinStyle('substyle1new', 'new Style');
234  $new_sub_style->setCssFile('subnewcss');
235  $new_sub_style->setImageDirectory('subnewimage');
236  $new_sub_style->setSoundDirectory('subnewsound');
237  $new_sub_style->setFontDirectory('subnewfont');
238 
239  $new_sub_style->setSubstyleOf("style1");
240 
241  $this->assertTrue(is_dir($this->skin_directory. '/style1/style1image'));
242  $this->assertTrue(is_dir($this->skin_directory . '/style1/style1sound'));
243  $this->assertTrue(is_dir($this->skin_directory . '/style1/style1font'));
244  $this->assertTrue(is_file($this->skin_directory . '/style1/style1.css'));
245  $this->assertTrue(is_file($this->skin_directory . '/style1/style1.scss'));
246  $this->assertTrue(is_file($this->skin_directory . '/style1/010-settings/variables1.scss'));
247  $this->assertTrue(is_file($this->skin_directory . '/style1/010-settings/variables2.scss'));
248 
249  $this->assertFalse(is_dir($this->skin_directory . '/substyle1new/subnewimage'));
250  $this->assertFalse(is_dir($this->skin_directory . '/substyle1new/subnewsound'));
251  $this->assertFalse(is_dir($this->skin_directory . '/substyle1new/subnewfont'));
252  $this->assertFalse(is_file($this->skin_directory . '/substyle1new/newcss.css'));
253  $this->assertFalse(is_file($this->skin_directory . '/substyle1new/newcss.scss'));
254  $this->assertFalse(is_file($this->skin_directory . '/substyle1new/010-settings/variables1.scss'));
255  $this->assertFalse(is_file($this->skin_directory . '/substyle1new/010-settings/variables2.scss'));
256 
257  $this->assertCount(0, $container->getSkin()->getSubstylesOfStyle('style1'));
258  $container->addStyle($new_sub_style);
259  $this->assertCount(1, $container->getSkin()->getSubstylesOfStyle('style1'));
260 
261 
262  $this->assertTrue(is_dir($this->skin_directory. '/style1/style1image'));
263  $this->assertTrue(is_dir($this->skin_directory . '/style1/style1sound'));
264  $this->assertTrue(is_dir($this->skin_directory . '/style1/style1font'));
265  $this->assertTrue(is_file($this->skin_directory . '/style1/style1.css'));
266  $this->assertTrue(is_file($this->skin_directory . '/style1/style1.scss'));
267  $this->assertTrue(is_file($this->skin_directory . '/style1/010-settings/variables1.scss'));
268  $this->assertTrue(is_file($this->skin_directory . '/style1/010-settings/variables2.scss'));
269 
270  $this->assertTrue(is_dir($this->skin_directory . '/substyle1new/subnewimage'));
271  $this->assertTrue(is_dir($this->skin_directory . '/substyle1new/subnewsound'));
272  $this->assertTrue(is_dir($this->skin_directory . '/substyle1new/subnewfont'));
273  $this->assertTrue(is_file($this->skin_directory . '/substyle1new/subnewcss.css'));
274  $this->assertTrue(is_file($this->skin_directory . '/substyle1new/subnewcss.scss'));
275  $this->assertTrue(is_file($this->skin_directory . '/substyle1new/010-settings/variables1.scss'));
276  $this->assertTrue(is_file($this->skin_directory . '/substyle1new/010-settings/variables2.scss'));
277 
278  $sub_style = $container->getSkin()->getStyle('substyle1new');
279  $this->assertEquals("subnewcss", $sub_style->getCssFile());
280  $this->assertEquals("subnewimage", $sub_style->getImageDirectory());
281  $this->assertEquals("subnewsound", $sub_style->getSoundDirectory());
282  $this->assertEquals("subnewfont", $sub_style->getFontDirectory());
283  $this->assertEquals("style1", $sub_style->getSubstyleOf());
284  }
285 }
delete()
Deletes the container of a skin completely.
Factory to create Skin classes holds an manages the basic data of a skin as provide by the template o...
getStyle(string $id)
ilSystemStyleMessageStack $message_stack
deleteStyle(ilSkinStyle $style)
Deletes a style completely.
updateStyle(string $style_id, ilSkinStyle $old_style)
Updates one single style.
ilSkinStyleContainer $container
create(ilSystemStyleMessageStack $message_stack)
Creates a new skin.
updateSkin(ilSkin $old_skin=null)
Updates the skin.
$ini
Definition: raiseError.php:4
ilSkin holds an manages the basic data of a skin as provide by the template of the skin...