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