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

NullObjectFunctionalTest.php

Zuletzt modifiziert: 09.10.2024, 12:58 - Dateigröße: 7.25 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\GeneratorStrategy\EvaluatingGeneratorStrategy;
023  use ProxyManager\ProxyGenerator\NullObjectGenerator;
024  use ProxyManagerTestAsset\BaseClass;
025  use ProxyManagerTestAsset\ClassWithSelfHint;
026  use ReflectionClass;
027  use ProxyManager\Generator\ClassGenerator;
028  use ProxyManager\Generator\Util\UniqueIdentifierGenerator;
029   
030  /**
031   * Tests for {@see \ProxyManager\ProxyGenerator\NullObjectGenerator} produced objects
032   *
033   * @author Vincent Blanchon <blanchon.vincent@gmail.com>
034   * @license MIT
035   *
036   * @group Functional
037   * @coversNothing
038   */
039  class NullObjectFunctionalTest extends PHPUnit_Framework_TestCase
040  {
041      /**
042       * @dataProvider getProxyMethods
043       */
044      public function testMethodCalls($className, $instance, $method, $params, $expectedValue)
045      {
046          $proxyName = $this->generateProxy($className);
047   
048          /* @var $proxy \ProxyManager\Proxy\NullObjectInterface */
049          $proxy     = new $proxyName();
050   
051          $this->assertSame(null, call_user_func_array(array($proxy, $method), $params));
052      }
053   
054      /**
055       * @dataProvider getProxyMethods
056       */
057      public function testMethodCallsAfterUnSerialization($className, $instance, $method, $params, $expectedValue)
058      {
059          $proxyName = $this->generateProxy($className);
060          /* @var $proxy \ProxyManager\Proxy\NullObjectInterface */
061          $proxy     = unserialize(serialize(new $proxyName()));
062   
063          $this->assertSame(null, call_user_func_array(array($proxy, $method), $params));
064      }
065   
066      /**
067       * @dataProvider getProxyMethods
068       */
069      public function testMethodCallsAfterCloning($className, $instance, $method, $params, $expectedValue)
070      {
071          $proxyName = $this->generateProxy($className);
072   
073          /* @var $proxy \ProxyManager\Proxy\NullObjectInterface */
074          $proxy     = new $proxyName();
075          $cloned    = clone $proxy;
076   
077          $this->assertSame(null, call_user_func_array(array($cloned, $method), $params));
078      }
079   
080      /**
081       * @dataProvider getPropertyAccessProxies
082       */
083      public function testPropertyReadAccess($instance, $proxy, $publicProperty, $propertyValue)
084      {
085          /* @var $proxy \ProxyManager\Proxy\NullObjectInterface */
086          $this->assertSame(null, $proxy->$publicProperty);
087      }
088   
089      /**
090       * @dataProvider getPropertyAccessProxies
091       */
092      public function testPropertyWriteAccess($instance, $proxy, $publicProperty)
093      {
094          /* @var $proxy \ProxyManager\Proxy\NullObjectInterface */
095          $newValue               = uniqid();
096          $proxy->$publicProperty = $newValue;
097   
098          $this->assertSame($newValue, $proxy->$publicProperty);
099      }
100   
101      /**
102       * @dataProvider getPropertyAccessProxies
103       */
104      public function testPropertyExistence($instance, $proxy, $publicProperty)
105      {
106          /* @var $proxy \ProxyManager\Proxy\NullObjectInterface */
107          $this->assertSame(null, $proxy->$publicProperty);
108      }
109   
110      /**
111       * @dataProvider getPropertyAccessProxies
112       */
113      public function testPropertyUnset($instance, $proxy, $publicProperty)
114      {
115          /* @var $proxy \ProxyManager\Proxy\NullObjectInterface */
116          unset($proxy->$publicProperty);
117   
118          $this->assertTrue(isset($instance->$publicProperty));
119          $this->assertFalse(isset($proxy->$publicProperty));
120      }
121   
122      /**
123       * Generates a proxy for the given class name, and retrieves its class name
124       *
125       * @param string $parentClassName
126       *
127       * @return string
128       */
129      private function generateProxy($parentClassName)
130      {
131          $generatedClassName = __NAMESPACE__ . '\\' . UniqueIdentifierGenerator::getIdentifier('Foo');
132          $generator          = new NullObjectGenerator();
133          $generatedClass     = new ClassGenerator($generatedClassName);
134          $strategy           = new EvaluatingGeneratorStrategy();
135   
136          $generator->generate(new ReflectionClass($parentClassName), $generatedClass);
137          $strategy->generate($generatedClass);
138   
139          return $generatedClassName;
140      }
141   
142      /**
143       * Generates a list of object | invoked method | parameters | expected result
144       *
145       * @return array
146       */
147      public function getProxyMethods()
148      {
149          $selfHintParam = new ClassWithSelfHint();
150   
151          $data = array(
152              array(
153                  'ProxyManagerTestAsset\\BaseClass',
154                  new BaseClass(),
155                  'publicMethod',
156                  array(),
157                  'publicMethodDefault'
158              ),
159              array(
160                  'ProxyManagerTestAsset\\BaseClass',
161                  new BaseClass(),
162                  'publicTypeHintedMethod',
163                  array('param' => new \stdClass()),
164                  'publicTypeHintedMethodDefault'
165              ),
166              array(
167                  'ProxyManagerTestAsset\\BaseClass',
168                  new BaseClass(),
169                  'publicByReferenceMethod',
170                  array(),
171                  'publicByReferenceMethodDefault'
172              ),
173              array(
174                  'ProxyManagerTestAsset\\BaseInterface',
175                  new BaseClass(),
176                  'publicMethod',
177                  array(),
178                  'publicMethodDefault'
179              ),
180          );
181   
182          if (PHP_VERSION_ID >= 50401) {
183              // PHP < 5.4.1 misbehaves, throwing strict standards, see https://bugs.php.net/bug.php?id=60573
184              $data[] = array(
185                  'ProxyManagerTestAsset\\ClassWithSelfHint',
186                  new ClassWithSelfHint(),
187                  'selfHintMethod',
188                  array('parameter' => $selfHintParam),
189                  $selfHintParam
190              );
191          }
192   
193          return $data;
194      }
195   
196      /**
197       * Generates proxies and instances with a public property to feed to the property accessor methods
198       *
199       * @return array
200       */
201      public function getPropertyAccessProxies()
202      {
203          $instance1  = new BaseClass();
204          $proxyName1 = $this->generateProxy(get_class($instance1));
205          $instance2  = new BaseClass();
206          $proxyName2 = $this->generateProxy(get_class($instance2));
207   
208          return array(
209              array(
210                  $instance1,
211                  new $proxyName1($instance1),
212                  'publicProperty',
213                  'publicPropertyDefault',
214              ),
215              array(
216                  $instance2,
217                  unserialize(serialize(new $proxyName2($instance2))),
218                  'publicProperty',
219                  'publicPropertyDefault',
220              ),
221          );
222      }
223  }
224