ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
ComponentRendererLoaderCachingWrapperTest.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
21use PHPUnit\Framework\TestCase;
28
30{
31 public function testForwardsFromUnderlying(): void
32 {
33 $underlying = $this->getMockBuilder(Loader::class)
34 ->onlyMethods(["getRendererFor", "getRendererFactoryFor"])
35 ->getMock();
36
37 $renderer = $this->createMock(ComponentRenderer::class);
38 $component = $this->getMockBuilder(Component::class)->getMock();
39 $context = [new TestComponent("foo")];
40 $underlying
41 ->expects($this->once())
42 ->method("getRendererFor")
43 ->with($component, $context)
44 ->willReturn($renderer);
45
46 $l = new LoaderCachingWrapper($underlying);
47 $r = $l->getRendererFor($component, $context);
48
49 $this->assertSame($renderer, $r);
50 }
51
52 public function testCaches(): void
53 {
54 $underlying = $this->getMockBuilder(\ILIAS\UI\Implementation\Render\Loader::class)
55 ->onlyMethods(["getRendererFor", "getRendererFactoryFor"])
56 ->getMock();
57
58 $renderer = $this->createMock(ComponentRenderer::class);
59 $component = $this->getMockBuilder(Component::class)->getMock();
60 $underlying
61 ->expects($this->once())
62 ->method("getRendererFor")
63 ->with($component, [])
64 ->willReturn($renderer);
65
66 $l = new LoaderCachingWrapper($underlying);
67 $r1 = $l->getRendererFor($component, []);
68 $r2 = $l->getRendererFor($component, []);
69
70 $this->assertSame($renderer, $r1);
71 $this->assertSame($renderer, $r2);
72 }
73
74 public function testCachingRespectsContexts(): void
75 {
76 $underlying = $this->getMockBuilder(\ILIAS\UI\Implementation\Render\Loader::class)
77 ->onlyMethods(["getRendererFor", "getRendererFactoryFor"])
78 ->getMock();
79
80 $renderer1 = $this->createMock(ComponentRenderer::class);
81 $renderer2 = $this->createMock(ComponentRenderer::class);
82 $c1 = $this->getMockBuilder(Component::class)->getMock();
83 $c2 = new TestComponent("foo");
84 $consecutive = [
85 [$c1, [], $renderer1],
86 [$c1, [$c2], $renderer2]
87 ];
88 $underlying
89 ->expects($this->exactly(2))
90 ->method("getRendererFor")
91 ->willReturnCallback(
92 function ($component, $contexts) use (&$consecutive) {
93 list($expected_component, $expected_contexts, $return) = array_shift($consecutive);
94 $this->assertEquals($expected_component, $component);
95 $this->assertEquals($expected_contexts, $contexts);
96 return $return;
97 }
98 );
99
100 $l = new LoaderCachingWrapper($underlying);
101 $r1 = $l->getRendererFor($c1, []);
102 $r2 = $l->getRendererFor($c1, [$c2]);
103 $r3 = $l->getRendererFor($c1, [$c2]);
104 $r4 = $l->getRendererFor($c1, []);
105
106 $this->assertSame($renderer1, $r1);
107 $this->assertSame($renderer2, $r2);
108 $this->assertSame($renderer2, $r3);
109 $this->assertSame($renderer1, $r4);
110 }
111
112 public function testPassthroughGetRendererFactory(): void
113 {
114 $underlying = $this->getMockBuilder(\ILIAS\UI\Implementation\Render\Loader::class)
115 ->onlyMethods(["getRendererFor", "getRendererFactoryFor"])
116 ->getMock();
117
118 $c1 = $this->createMock(Component::class);
119
120 $factory = $this->createMock(RendererFactory::class);
121 $underlying
122 ->expects($this->exactly(1))
123 ->method("getRendererFactoryFor")
124 ->with($c1)
125 ->willReturn($factory);
126
127 $l = new LoaderCachingWrapper($underlying);
128
129 $this->assertSame($factory, $l->getRendererFactoryFor($c1));
130 }
131}
$renderer
Caches renderers loaded by another loader.
A component is the most general form of an entity in the UI.
Definition: Component.php:28
An entity that renders components to a string output.
Loads renderers for components.
Definition: Loader.php:30
This is the interface that components should use if they want to load specific renderers.
Interface Observer \BackgroundTasks Contains several chained tasks and infos about them.
$context
Definition: webdav.php:31