ILIAS  release_7 Revision v7.30-3-g800a261c036
ilSkinXMLTest.php
Go to the documentation of this file.
1<?php
2/* Copyright (c) 2016 Timon Amstutz <timon.amstutz@ilub.unibe.ch> Extended GPL, see docs/LICENSE */
3
4include_once("./Services/Style/System/classes/Utilities/class.ilSkinStyleXML.php");
5include_once("./Services/Style/System/classes/Utilities/class.ilSkinXML.php");
6include_once("./Services/Style/System/test/fixtures/mocks/ilSystemStyleConfigMock.php");
7include_once("Services/Style/System/classes/Utilities/class.ilSystemStyleSkinContainer.php");
8
9use PHPUnit\Framework\TestCase;
10
16class ilSkinXMLTest extends TestCase
17{
18
19
23 protected $skin;
24
28 protected $style1 = null;
29
33 protected $style2 = null;
34
38 protected $substyle1 = null;
39
43 protected $substyle2 = null;
44
49
50 protected function setUp() : void
51 {
52 $this->skin = new ilSkinXML("skin1", "skin 1");
53
54 $this->style1 = new ilSkinStyleXML("style1", "Style 1");
55 $this->style1->setCssFile("style1css");
56 $this->style1->setImageDirectory("style1image");
57 $this->style1->setSoundDirectory("style1sound");
58 $this->style1->setFontDirectory("style1font");
59
60 $this->style2 = new ilSkinStyleXML("style2", "Style 2");
61 $this->style2->setCssFile("style2css");
62 $this->style2->setImageDirectory("style2image");
63 $this->style2->setSoundDirectory("style2sound");
64 $this->style2->setFontDirectory("style2font");
65
66 $this->substyle1 = new ilSkinStyleXML("substyle1", "Substyle 1");
67 $this->substyle1->setSubstyleOf($this->style1->getId());
68
69 $this->substyle2 = new ilSkinStyleXML("substyle2", "Substyle 2");
70 $this->substyle2->setSubstyleOf($this->style2->getId());
71
72 $this->system_style_config = new ilSystemStyleConfigMock();
73
74 mkdir($this->system_style_config->test_skin_temp_path);
75 ilSystemStyleSkinContainer::xCopy($this->system_style_config->test_skin_original_path, $this->system_style_config->test_skin_temp_path);
76 }
77
78 protected function tearDown() : void
79 {
80 ilSystemStyleSkinContainer::recursiveRemoveDir($this->system_style_config->test_skin_temp_path);
81 }
82
83 public function testSkinNameAndId()
84 {
85 $this->assertEquals("skin1", $this->skin->getId());
86 $this->assertEquals("skin 1", $this->skin->getName());
87 }
88
89 public function testAddStyle()
90 {
91 $this->assertEquals(count($this->skin), 0);
92 $this->assertEquals(count($this->skin->getStyles()), 0);
93 $this->skin->addStyle($this->style1);
94 $this->assertEquals(count($this->skin), 1);
95 $this->assertEquals(count($this->skin->getStyles()), 1);
96 $this->skin->addStyle($this->style1);
97 $this->assertEquals(count($this->skin), 2);
98 $this->assertEquals(count($this->skin->getStyles()), 2);
99 $this->skin->addStyle($this->style2);
100 $this->assertEquals(count($this->skin), 3);
101 $this->assertEquals(count($this->skin->getStyles()), 3);
102 }
103
104 public function testGetStyles()
105 {
106 $this->skin->addStyle($this->style1);
107 $this->skin->addStyle($this->style2);
108
109 $this->assertNotEquals($this->skin->getStyle("style2"), $this->style1);
110 $this->assertEquals($this->skin->getStyle("style2"), $this->style2);
111 }
112
113 public function testAddSubstyle()
114 {
115 $this->skin->addStyle($this->substyle1);
116 $this->assertEquals(count($this->skin->getStyles()), 1);
117 $this->skin->addStyle($this->substyle2);
118 $this->assertEquals(count($this->skin), 2);
119 }
120
121 public function testGetSubStyles()
122 {
123 $this->skin->addStyle($this->substyle1);
124 $this->skin->addStyle($this->substyle2);
125
126 $this->assertNotEquals($this->skin->getStyle("substyle2"), $this->substyle1);
127 $this->assertEquals($this->skin->getStyle("substyle2"), $this->substyle2);
128 }
129
130 public function testGetAllSubStyles()
131 {
132 $this->skin->addStyle($this->style1);
133 $this->skin->addStyle($this->style2);
134 $this->assertEquals($this->skin->getSubstylesOfStyle("style1"), []);
135 $this->skin->addStyle($this->substyle1);
136 $this->skin->addStyle($this->substyle2);
137 $this->assertEquals($this->skin->getSubstylesOfStyle("style1"), [$this->substyle1->getId() => $this->substyle1]);
138 $this->assertEquals($this->skin->getSubstylesOfStyle("style2"), [$this->substyle2->getId() => $this->substyle2]);
139 $this->substyle2->setSubstyleOf($this->style1->getId());
140 $this->assertEquals($this->skin->getSubstylesOfStyle("style1"), [$this->substyle1->getId() => $this->substyle1,$this->substyle2->getId() => $this->substyle2]);
141 }
142
143 public function testUpdateParentOfStyle()
144 {
145 $this->skin->addStyle($this->style1);
146 $this->skin->addStyle($this->style2);
147 $this->skin->addStyle($this->substyle1);
148 $this->skin->addStyle($this->substyle2);
149 $this->assertEquals($this->skin->getSubstylesOfStyle("style1"), [$this->substyle1->getId() => $this->substyle1]);
150 $this->assertEquals($this->skin->getSubstylesOfStyle("style2"), [$this->substyle2->getId() => $this->substyle2]);
151 $this->skin->updateParentStyleOfSubstyles($this->style2->getId(), $this->style1->getId());
152 $this->assertEquals($this->skin->getSubstylesOfStyle("style1"), [$this->substyle1->getId() => $this->substyle1,$this->substyle2->getId() => $this->substyle2]);
153 }
154
155 public function testRemoveStyles()
156 {
157 $this->skin->addStyle($this->style1);
158 $this->skin->addStyle($this->style2);
159 $this->assertEquals(count($this->skin), 2);
160 $this->skin->removeStyle("style1");
161 $this->assertEquals(count($this->skin), 1);
162 $this->skin->removeStyle("style2");
163 $this->assertEquals(count($this->skin), 0);
164 }
165
166 public function testRemoveTestTwice()
167 {
168 $this->skin->addStyle($this->style1);
169 $this->skin->addStyle($this->style2);
170 $this->assertEquals(count($this->skin), 2);
171 $this->skin->removeStyle("style1");
172 $this->assertEquals(count($this->skin), 1);
173 $this->skin->removeStyle("style2");
174 $this->assertEquals(count($this->skin), 0);
175 try {
176 $this->skin->removeStyle("style2");
177 $this->assertTrue(false);
178 } catch (ilSystemStyleException $e) {
179 $this->assertEquals($e->getCode(), ilSystemStyleException::INVALID_ID);
180 }
181 }
182
183 public function testAsXML()
184 {
185 $this->skin->addStyle($this->style1);
186 $this->skin->addStyle($this->style2);
187 $this->assertEquals($this->skin->asXML(), file_get_contents($this->system_style_config->getCustomizingSkinPath() . "skin1/template.xml"));
188 }
189
190 public function testWriteXML()
191 {
192 $this->skin->addStyle($this->style1);
193 $this->skin->addStyle($this->style2);
194 $this->skin->writeToXMLFile($this->system_style_config->getCustomizingSkinPath() . "skin1/template-copy.xml");
195 $this->assertEquals(file_get_contents($this->system_style_config->getCustomizingSkinPath() . "skin1/template-copy.xml"), file_get_contents($this->system_style_config->getCustomizingSkinPath() . "skin1/template.xml"));
196 unlink($this->system_style_config->getCustomizingSkinPath() . "skin1/template-copy.xml");
197 }
198
199 public function testReadXML()
200 {
201 $skin = ilSkinXML::parseFromXML($this->system_style_config->getCustomizingSkinPath() . "skin1/template.xml");
202 $this->assertEquals($skin->asXML(), file_get_contents($this->system_style_config->getCustomizingSkinPath() . "skin1/template.xml"));
203 }
204}
An exception for terminatinating execution or to throw for unit testing.
ilSkinXml holds an manages the basic data of a skin as provide by the template of the skin.
ilSystemStyleConfig wraps all 'constants' to ensure the testability of all classes using those 'const...
Class for advanced editing exception handling in ILIAS.
static recursiveRemoveDir($dir)
Recursive delete of a folder.
static xCopy($src, $dest)
Recursive copy of a folder.