Verzeichnisstruktur phpBB-3.2.0


Veröffentlicht
06.01.2017

So funktioniert es


Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück

Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis.
Auf den Verzeichnisnamen klicken, dies zeigt nur das Verzeichnis mit Inhalt an

(Beispiel Datei-Icons)

Auf das Icon klicken um den Quellcode anzuzeigen

RemoteObjectFunctionalTest.php

Zuletzt modifiziert: 09.10.2024, 12:58 - Dateigröße: 7.29 KiB


001  <?php
002  /*
003   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
004   * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
005   * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
006   * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
007   * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
008   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
009   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
010   * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
011   * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
012   * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
013   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
014   *
015   * This software consists of voluntary contributions made by many individuals
016   * and is licensed under the MIT license.
017   */
018   
019  namespace ProxyManagerTest\Functional;
020   
021  use PHPUnit_Framework_TestCase;
022  use ProxyManager\Factory\RemoteObject\Adapter\JsonRpc as JsonRpcAdapter;
023  use ProxyManager\Factory\RemoteObject\Adapter\XmlRpc as XmlRpcAdapter;
024  use ProxyManager\Generator\ClassGenerator;
025  use ProxyManager\Generator\Util\UniqueIdentifierGenerator;
026  use ProxyManager\GeneratorStrategy\EvaluatingGeneratorStrategy;
027  use ProxyManager\ProxyGenerator\RemoteObjectGenerator;
028  use ProxyManagerTestAsset\ClassWithSelfHint;
029  use ProxyManagerTestAsset\RemoteProxy\Foo;
030  use ReflectionClass;
031   
032  /**
033   * Tests for {@see \ProxyManager\ProxyGenerator\RemoteObjectGenerator} produced objects
034   *
035   * @author Vincent Blanchon <blanchon.vincent@gmail.com>
036   * @license MIT
037   *
038   * @group Functional
039   * @coversNothing
040   */
041  class RemoteObjectFunctionalTest extends PHPUnit_Framework_TestCase
042  {
043      /**
044       * @param mixed  $expectedValue
045       * @param string $method
046       * @param array  $params
047       *
048       * @return XmlRpcAdapter
049       */
050      protected function getXmlRpcAdapter($expectedValue, $method, array $params)
051      {
052          $client = $this
053              ->getMockBuilder('Zend\Server\Client')
054              ->setMethods(array('call'))
055              ->getMock();
056   
057          $client
058              ->expects($this->any())
059              ->method('call')
060              ->with($this->stringEndsWith($method), $params)
061              ->will($this->returnValue($expectedValue));
062   
063          $adapter = new XmlRpcAdapter(
064              $client,
065              array(
066                   'ProxyManagerTestAsset\RemoteProxy\Foo.foo'
067                       => 'ProxyManagerTestAsset\RemoteProxy\FooServiceInterface.foo'
068              )
069          );
070   
071          return $adapter;
072      }
073   
074      /**
075       * @param mixed  $expectedValue
076       * @param string $method
077       * @param array  $params
078       *
079       * @return JsonRpcAdapter
080       */
081      protected function getJsonRpcAdapter($expectedValue, $method, array $params)
082      {
083          $client = $this
084              ->getMockBuilder('Zend\Server\Client')
085              ->setMethods(array('call'))
086              ->getMock();
087   
088          $client
089              ->expects($this->any())
090              ->method('call')
091              ->with($this->stringEndsWith($method), $params)
092              ->will($this->returnValue($expectedValue));
093   
094          $adapter = new JsonRpcAdapter(
095              $client,
096              array(
097                   'ProxyManagerTestAsset\RemoteProxy\Foo.foo'
098                      => 'ProxyManagerTestAsset\RemoteProxy\FooServiceInterface.foo'
099              )
100          );
101   
102          return $adapter;
103      }
104   
105      /**
106       * @dataProvider getProxyMethods
107       */
108      public function testXmlRpcMethodCalls($instanceOrClassname, $method, $params, $expectedValue)
109      {
110          $proxyName = $this->generateProxy($instanceOrClassname);
111   
112          /* @var $proxy \ProxyManager\Proxy\RemoteObjectInterface */
113          $proxy     = new $proxyName($this->getXmlRpcAdapter($expectedValue, $method, $params));
114   
115          $this->assertSame($expectedValue, call_user_func_array(array($proxy, $method), $params));
116      }
117   
118      /**
119       * @dataProvider getProxyMethods
120       */
121      public function testJsonRpcMethodCalls($instanceOrClassname, $method, $params, $expectedValue)
122      {
123          $proxyName = $this->generateProxy($instanceOrClassname);
124   
125          /* @var $proxy \ProxyManager\Proxy\RemoteObjectInterface */
126          $proxy     = new $proxyName($this->getJsonRpcAdapter($expectedValue, $method, $params));
127   
128          $this->assertSame($expectedValue, call_user_func_array(array($proxy, $method), $params));
129      }
130   
131      /**
132       * @dataProvider getPropertyAccessProxies
133       */
134      public function testJsonRpcPropertyReadAccess($instanceOrClassname, $publicProperty, $propertyValue)
135      {
136          $proxyName = $this->generateProxy($instanceOrClassname);
137   
138          /* @var $proxy \ProxyManager\Proxy\RemoteObjectInterface */
139          $proxy     = new $proxyName(
140              $this->getJsonRpcAdapter($propertyValue, '__get', array($publicProperty))
141          );
142   
143          /* @var $proxy \ProxyManager\Proxy\NullObjectInterface */
144          $this->assertSame($propertyValue, $proxy->$publicProperty);
145      }
146   
147      /**
148       * Generates a proxy for the given class name, and retrieves its class name
149       *
150       * @param string $parentClassName
151       *
152       * @return string
153       */
154      private function generateProxy($parentClassName)
155      {
156          $generatedClassName = __NAMESPACE__ . '\\' . UniqueIdentifierGenerator::getIdentifier('Foo');
157          $generator          = new RemoteObjectGenerator();
158          $generatedClass     = new ClassGenerator($generatedClassName);
159          $strategy           = new EvaluatingGeneratorStrategy();
160   
161          $generator->generate(new ReflectionClass($parentClassName), $generatedClass);
162          $strategy->generate($generatedClass);
163   
164          return $generatedClassName;
165      }
166   
167      /**
168       * Generates a list of object | invoked method | parameters | expected result
169       *
170       * @return array
171       */
172      public function getProxyMethods()
173      {
174          $selfHintParam = new ClassWithSelfHint();
175   
176          $data = array(
177              array(
178                  'ProxyManagerTestAsset\RemoteProxy\FooServiceInterface',
179                  'foo',
180                  array(),
181                  'bar remote'
182              ),
183              array(
184                  'ProxyManagerTestAsset\RemoteProxy\Foo',
185                  'foo',
186                  array(),
187                  'bar remote'
188              ),
189              array(
190                  new Foo(),
191                  'foo',
192                  array(),
193                  'bar remote'
194              ),
195              array(
196                  'ProxyManagerTestAsset\RemoteProxy\BazServiceInterface',
197                  'baz',
198                  array('baz'),
199                  'baz remote'
200              ),
201          );
202   
203          if (PHP_VERSION_ID >= 50401) {
204              // PHP < 5.4.1 misbehaves, throwing strict standards, see https://bugs.php.net/bug.php?id=60573
205              $data[] = array(
206                  new ClassWithSelfHint(),
207                  'selfHintMethod',
208                  array($selfHintParam),
209                  $selfHintParam
210              );
211          }
212   
213          return $data;
214      }
215   
216      /**
217       * Generates proxies and instances with a public property to feed to the property accessor methods
218       *
219       * @return array
220       */
221      public function getPropertyAccessProxies()
222      {
223          return array(
224              array(
225                  'ProxyManagerTestAsset\RemoteProxy\FooServiceInterface',
226                  'publicProperty',
227                  'publicProperty remote',
228              ),
229          );
230      }
231  }
232