ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
ExamplesTest.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
21require_once("vendor/composer/vendor/autoload.php");
22require_once(__DIR__ . "/../Base.php");
23
28
33{
38 protected const MAY_NOT_HAVE_EXAMPLES = [
39 \ILIAS\UI\Help\Topic::class,
40 \ILIAS\UI\Component\Progress\State\Bar\State::class,
41 \ILIAS\UI\Component\Input\Field\Node\Node::class,
42 \ILIAS\UI\Component\Input\Field\Node\Async::class,
43 \ILIAS\UI\Component\Input\Field\Node\Leaf::class,
44 ];
45
46 protected static string $path_to_base_factory = "components/ILIAS/UI/src/Factory.php";
47 protected Container $dic;
49
50 public function setUp(): void
51 {
52 //This avoids various index not set warnings, which are only relevant in test context.
53 $_SERVER["REQUEST_SCHEME"] = "http";
54 $_SERVER["SERVER_NAME"] = "localhost";
55 $_SERVER["SERVER_PORT"] = "80";
56 $_SERVER["REQUEST_URI"] = "";
57 $_SERVER['SCRIPT_NAME'] = "";
58 $_SERVER['QUERY_STRING'] = "param=1";
59
60 //This avoids Undefined index: ilfilehash for the moment
61 $_POST["ilfilehash"] = "";
62 $this->setUpMockDependencies();
63 $this->example_parser = new Crawler\ExamplesYamlParser();
64 }
65
71 protected function setUpMockDependencies(): void
72 {
73 $this->dic = new Container();
74 $this->dic["tpl"] = $this->getTemplateFactory()->getTemplate("tpl.main.html", false, false);
75 $this->dic["lng"] = $this->getLanguage();
76 $this->dic["refinery"] = new \ILIAS\Refinery\Factory(
77 new ILIAS\Data\Factory(),
78 $this->getLanguage()
79 );
80
81 (new InitUIFramework())->init($this->dic);
82
83 $this->dic["ui.template_factory"] = $this->getTemplateFactory();
84
85 $this->dic["ilCtrl"] = $this->getMockBuilder(\ilCtrl::class)->disableOriginalConstructor()->onlyMethods([
86 "getFormActionByClass","setParameterByClass","saveParameterByClass","getLinkTargetByClass", "isAsynch"
87 ])->getMock();
88 $this->dic["ilCtrl"]->method("getFormActionByClass")->willReturn("Testing");
89 $this->dic["ilCtrl"]->method("getLinkTargetByClass")->willReturn("2");
90 $this->dic["ilCtrl"]->method("isAsynch")->willReturn(false);
91
92 $this->dic["upload"] = $this->getMockBuilder(FileUpload::class)->getMock();
93
94 $this->dic["tree"] = $this->getMockBuilder(ilTree::class)
95 ->disableOriginalConstructor()
96 ->onlyMethods(["getNodeData"])->getMock();
97
98 $this->dic["tree"]->method("getNodeData")->willReturn([
99 "ref_id" => "1",
100 "title" => "mock root node",
101 "type" => "crs"
102 ]);
103
104 $component_factory = $this->createMock(ilComponentFactory::class);
105 $component_factory->method("getActivePluginsInSlot")->willReturn(new ArrayIterator());
106 $this->dic["component.factory"] = $component_factory;
107
108 $this->dic["help.text_retriever"] = new ILIAS\UI\Help\TextRetriever\Echoing();
109
110 (new InitHttpServices())->init($this->dic);
111 }
112
117 {
118 global $DIC;
120
121 foreach ($this->getEntriesFromCrawler() as $entry) {
122 if (in_array(trim($entry->getNamespace(), '\\'), self::MAY_NOT_HAVE_EXAMPLES, true)) {
123 continue;
124 }
125 if (!$entry->isAbstract()) {
126 $this->assertGreaterThan(
127 0,
128 count($entry->getExamples()),
129 "Non abstract Component " . $entry->getNamespace()
130 . " does not provide any example. Please provide at least one in " . $entry->getExamplesNamespace() . " at " . $entry->getExamplesPath()
131 );
132 }
133 }
134 }
135
136 #[\PHPUnit\Framework\Attributes\DataProvider('getFullFunctionNamesAndPathExample')]
137 public function testAllExamplesRenderAString(string $example_function_name, string $example_path): void
138 {
139 global $DIC;
141
142 include_once $example_path;
143 try {
144 $this->assertIsString($example_function_name(), " Example $example_function_name does not render a string");
145 } catch (NotImplementedException $e) {
146 $this->assertTrue(true);
147 }
148 }
149
150 #[\PHPUnit\Framework\Attributes\DataProvider('getFullFunctionNamesAndPathExample')]
151 public function testAllExamplesHaveExpectedOutcomeInDocs(string $example_function_name, string $example_path)
152 {
153 $docs = $this->example_parser->parseYamlStringArrayFromFile($example_path);
154 $this->assertArrayHasKey('expected output', $docs);
155 }
156
160 protected static function getEntriesFromCrawler(): Crawler\Entry\ComponentEntries
161 {
162 $crawler = new Crawler\FactoriesCrawler();
163 return $crawler->crawlFactory(self::$path_to_base_factory);
164 }
165
166 public static function getFullFunctionNamesAndPathExample(): array
167 {
168 $function_names = [];
169 foreach (static::getEntriesFromCrawler() as $entry) {
170 foreach ($entry->getExamples() as $name => $example_path) {
171 $function_names[$entry->getExamplesNamespace() . "\\" . $name] = [
172 $entry->getExamplesNamespace() . "\\" . $name,
173 $example_path
174 ];
175 }
176 }
177 return $function_names;
178 }
179
180 #[\PHPUnit\Framework\Attributes\DataProvider('getListOfFullscreenExamples')]
181 public function testFullscreenModeExamples(string $example_function_name, string $example_path): void
182 {
183 global $DIC;
185
186 include_once $example_path;
187 try {
188 $this->assertIsString($example_function_name($DIC), " Example $example_function_name does not render a string");
189 } catch (NotImplementedException $e) {
190 $this->assertTrue(true);
191 }
192 }
193
194 public static function getListOfFullscreenExamples(): array
195 {
196 return [
197 ['ILIAS\UI\examples\MainControls\Footer\base', "components/ILIAS/UI/src/examples/MainControls/Footer/base.php"],
198 ['ILIAS\UI\examples\MainControls\MetaBar\renderMetaBarInFullscreenMode', "components/ILIAS/UI/src/examples/MainControls/MetaBar/base_metabar.php"],
199 ['ILIAS\UI\examples\Layout\Page\Standard\getUIMainbarExampleCondensed', "components/ILIAS/UI/src/examples/Layout/Page/Standard/ui_mainbar.php"],
200 ['ILIAS\UI\examples\Layout\Page\Standard\getUIMainbarExampleFull', "components/ILIAS/UI/src/examples/Layout/Page/Standard/ui_mainbar.php"],
201 ['ILIAS\UI\examples\Layout\Page\Standard\ui', "components/ILIAS/UI/src/examples/Layout/Page/Standard/ui.php"],
202 ['ILIAS\UI\examples\MainControls\ModeInfo\renderModeInfoFullscreenMode', "components/ILIAS/UI/src/examples/MainControls/ModeInfo/modeinfo.php"]
203 ];
204 }
205}
Class ExamplesTest Checks if all examples are implemented and properly returning strings.
static getFullFunctionNamesAndPathExample()
static getListOfFullscreenExamples()
const MAY_NOT_HAVE_EXAMPLES
testAllNonAbstractComponentsShowcaseExamples()
testAllExamplesRenderAString(string $example_function_name, string $example_path)
static string $path_to_base_factory
Crawler ExamplesYamlParser $example_parser
testAllExamplesHaveExpectedOutcomeInDocs(string $example_function_name, string $example_path)
testFullscreenModeExamples(string $example_function_name, string $example_path)
Container $dic
setUpMockDependencies()
Some wiring up of dependencies to get all the examples running.
static getEntriesFromCrawler()
Customizing of pimple-DIC for ILIAS.
Definition: Container.php:36
This HelpTextRetriever simply echo the purpose and the topics for debugging and development purpose.
Definition: Echoing.php:31
This exception indicates that an UI component was accepted by the JF but is not backed by a real impl...
Provides common functionality for UI tests.
Definition: Base.php:337
Responsible for loading the HTTP Service into the dependency injection container of ILIAS.
This is more or less a copy of the removed InitUIFramework file inside the Init component.
$_POST['cmd']
Definition: lti.php:27
Interface Observer \BackgroundTasks Contains several chained tasks and infos about them.
$_SERVER['HTTP_HOST']
Definition: raiseError.php:26
global $DIC
Definition: shib_login.php:26
getLanguage()