diff vendor/phpunit/phpunit-mock-objects/tests/GeneratorTest.php @ 14:1fec387a4317

Update Drupal core to 8.5.2 via Composer
author Chris Cannam
date Mon, 23 Apr 2018 09:46:53 +0100
parents 4c8ae668cc8c
children
line wrap: on
line diff
--- a/vendor/phpunit/phpunit-mock-objects/tests/GeneratorTest.php	Mon Apr 23 09:33:26 2018 +0100
+++ b/vendor/phpunit/phpunit-mock-objects/tests/GeneratorTest.php	Mon Apr 23 09:46:53 2018 +0100
@@ -1,87 +1,108 @@
 <?php
-class Framework_MockObject_GeneratorTest extends PHPUnit_Framework_TestCase
+/*
+ * This file is part of the phpunit-mock-objects package.
+ *
+ * (c) Sebastian Bergmann <sebastian@phpunit.de>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+use PHPUnit\Framework\MockObject\Generator;
+use PHPUnit\Framework\MockObject\MockObject;
+use PHPUnit\Framework\TestCase;
+
+/**
+ * @covers \PHPUnit\Framework\MockObject\Generator
+ *
+ * @uses \PHPUnit\Framework\MockObject\InvocationMocker
+ * @uses \PHPUnit\Framework\MockObject\Builder\InvocationMocker
+ * @uses \PHPUnit\Framework\MockObject\Invocation\ObjectInvocation
+ * @uses \PHPUnit\Framework\MockObject\Invocation\StaticInvocation
+ * @uses \PHPUnit\Framework\MockObject\Matcher
+ * @uses \PHPUnit\Framework\MockObject\Matcher\InvokedRecorder
+ * @uses \PHPUnit\Framework\MockObject\Matcher\MethodName
+ * @uses \PHPUnit\Framework\MockObject\Stub\ReturnStub
+ * @uses \PHPUnit\Framework\MockObject\Matcher\InvokedCount
+ */
+class GeneratorTest extends TestCase
 {
     /**
-     * @var PHPUnit_Framework_MockObject_Generator
+     * @var Generator
      */
-    protected $generator;
+    private $generator;
 
     protected function setUp()
     {
-        $this->generator = new PHPUnit_Framework_MockObject_Generator;
+        $this->generator = new Generator;
+    }
+
+    public function testGetMockFailsWhenInvalidFunctionNameIsPassedInAsAFunctionToMock()
+    {
+        $this->expectException(\PHPUnit\Framework\MockObject\RuntimeException::class);
+
+        $this->generator->getMock(stdClass::class, [0]);
+    }
+
+    public function testGetMockCanCreateNonExistingFunctions()
+    {
+        $mock = $this->generator->getMock(stdClass::class, ['testFunction']);
+
+        $this->assertTrue(method_exists($mock, 'testFunction'));
+    }
+
+    public function testGetMockGeneratorFails()
+    {
+        $this->expectException(\PHPUnit\Framework\MockObject\RuntimeException::class);
+        $this->expectExceptionMessage('duplicates: "foo, bar, foo" (duplicate: "foo")');
+
+        $this->generator->getMock(stdClass::class, ['foo', 'bar', 'foo']);
     }
 
     /**
-     * @covers PHPUnit_Framework_MockObject_Generator::getMock
-     * @expectedException PHPUnit_Framework_Exception
+     * @requires PHP 7
      */
-    public function testGetMockFailsWhenInvalidFunctionNameIsPassedInAsAFunctionToMock()
+    public function testGetMockBlacklistedMethodNamesPhp7()
     {
-        $this->generator->getMock('StdClass', array(0));
+        $mock = $this->generator->getMock(InterfaceWithSemiReservedMethodName::class);
+
+        $this->assertTrue(method_exists($mock, 'unset'));
+        $this->assertInstanceOf(InterfaceWithSemiReservedMethodName::class, $mock);
     }
 
-    /**
-     * @covers PHPUnit_Framework_MockObject_Generator::getMock
-     */
-    public function testGetMockCanCreateNonExistingFunctions()
-    {
-        $mock = $this->generator->getMock('StdClass', array('testFunction'));
-        $this->assertTrue(method_exists($mock, 'testFunction'));
-    }
-
-    /**
-     * @covers PHPUnit_Framework_MockObject_Generator::getMock
-     * @expectedException PHPUnit_Framework_MockObject_RuntimeException
-     * @expectedExceptionMessage duplicates: "foo, foo"
-     */
-    public function testGetMockGeneratorFails()
-    {
-        $mock = $this->generator->getMock('StdClass', array('foo', 'foo'));
-    }
-
-    /**
-     * @covers PHPUnit_Framework_MockObject_Generator::getMockForAbstractClass
-     */
     public function testGetMockForAbstractClassDoesNotFailWhenFakingInterfaces()
     {
-        $mock = $this->generator->getMockForAbstractClass('Countable');
+        $mock = $this->generator->getMockForAbstractClass(Countable::class);
+
         $this->assertTrue(method_exists($mock, 'count'));
     }
 
-    /**
-     * @covers PHPUnit_Framework_MockObject_Generator::getMockForAbstractClass
-     */
     public function testGetMockForAbstractClassStubbingAbstractClass()
     {
-        $mock = $this->generator->getMockForAbstractClass('AbstractMockTestClass');
+        $mock = $this->generator->getMockForAbstractClass(AbstractMockTestClass::class);
+
         $this->assertTrue(method_exists($mock, 'doSomething'));
     }
 
-    /**
-     * @covers PHPUnit_Framework_MockObject_Generator::getMockForAbstractClass
-     */
     public function testGetMockForAbstractClassWithNonExistentMethods()
     {
         $mock = $this->generator->getMockForAbstractClass(
-            'AbstractMockTestClass',
-            array(),
+            AbstractMockTestClass::class,
+            [],
             '',
             true,
             true,
             true,
-            array('nonexistentMethod')
+            ['nonexistentMethod']
         );
 
         $this->assertTrue(method_exists($mock, 'nonexistentMethod'));
         $this->assertTrue(method_exists($mock, 'doSomething'));
     }
 
-    /**
-     * @covers PHPUnit_Framework_MockObject_Generator::getMockForAbstractClass
-     */
     public function testGetMockForAbstractClassShouldCreateStubsOnlyForAbstractMethodWhenNoMethodsWereInformed()
     {
-        $mock = $this->generator->getMockForAbstractClass('AbstractMockTestClass');
+        $mock = $this->generator->getMockForAbstractClass(AbstractMockTestClass::class);
 
         $mock->expects($this->any())
              ->method('doSomething')
@@ -93,48 +114,39 @@
 
     /**
      * @dataProvider getMockForAbstractClassExpectsInvalidArgumentExceptionDataprovider
-     * @covers PHPUnit_Framework_MockObject_Generator::getMockForAbstractClass
-     * @expectedException PHPUnit_Framework_Exception
      */
     public function testGetMockForAbstractClassExpectingInvalidArgumentException($className, $mockClassName)
     {
-        $mock = $this->generator->getMockForAbstractClass($className, array(), $mockClassName);
+        $this->expectException(PHPUnit\Framework\Exception::class);
+
+        $this->generator->getMockForAbstractClass($className, [], $mockClassName);
     }
 
-    /**
-     * @covers PHPUnit_Framework_MockObject_Generator::getMockForAbstractClass
-     * @expectedException PHPUnit_Framework_MockObject_RuntimeException
-     */
     public function testGetMockForAbstractClassAbstractClassDoesNotExist()
     {
-        $mock = $this->generator->getMockForAbstractClass('Tux');
+        $this->expectException(\PHPUnit\Framework\MockObject\RuntimeException::class);
+
+        $this->generator->getMockForAbstractClass('Tux');
     }
 
-    /**
-     * Dataprovider for test "testGetMockForAbstractClassExpectingInvalidArgumentException"
-     */
-    public static function getMockForAbstractClassExpectsInvalidArgumentExceptionDataprovider()
+    public function getMockForAbstractClassExpectsInvalidArgumentExceptionDataprovider()
     {
-        return array(
-            'className not a string' => array(array(), ''),
-            'mockClassName not a string' => array('Countable', new StdClass),
-        );
+        return [
+            'className not a string'     => [[], ''],
+            'mockClassName not a string' => [Countable::class, new stdClass],
+        ];
     }
 
-    /**
-     * @covers PHPUnit_Framework_MockObject_Generator::getMockForTrait
-     * @requires PHP 5.4.0
-     */
     public function testGetMockForTraitWithNonExistentMethodsAndNonAbstractMethods()
     {
         $mock = $this->generator->getMockForTrait(
-            'AbstractTrait',
-            array(),
+            AbstractTrait::class,
+            [],
             '',
             true,
             true,
             true,
-            array('nonexistentMethod')
+            ['nonexistentMethod']
         );
 
         $this->assertTrue(method_exists($mock, 'nonexistentMethod'));
@@ -143,58 +155,56 @@
         $this->assertTrue($mock->anotherMockableMethod());
     }
 
-    /**
-     * @covers   PHPUnit_Framework_MockObject_Generator::getMockForTrait
-     * @requires PHP 5.4.0
-     */
     public function testGetMockForTraitStubbingAbstractMethod()
     {
-        $mock = $this->generator->getMockForTrait('AbstractTrait');
+        $mock = $this->generator->getMockForTrait(AbstractTrait::class);
+
         $this->assertTrue(method_exists($mock, 'doSomething'));
     }
 
-    /**
-     * @requires PHP 5.4.0
-     */
     public function testGetMockForSingletonWithReflectionSuccess()
     {
-        // Probably, this should be moved to tests/autoload.php
-        require_once __DIR__ . '/_fixture/SingletonClass.php';
+        $mock = $this->generator->getMock(SingletonClass::class, ['doSomething'], [], '', false);
 
-        $mock = $this->generator->getMock('SingletonClass', array('doSomething'), array(), '', false);
         $this->assertInstanceOf('SingletonClass', $mock);
     }
 
-    /**
-     * Same as "testGetMockForSingletonWithReflectionSuccess", but we expect
-     * warning for PHP < 5.4.0 since PHPUnit will try to execute private __wakeup
-     * on unserialize
-     */
-    public function testGetMockForSingletonWithUnserializeFail()
+    public function testExceptionIsRaisedForMutuallyExclusiveOptions()
     {
-        if (version_compare(PHP_VERSION, '5.4.0', '>=')) {
-            $this->markTestSkipped('Only for PHP < 5.4.0');
-        }
+        $this->expectException(\PHPUnit\Framework\MockObject\RuntimeException::class);
 
-        $this->setExpectedException('PHPUnit_Framework_MockObject_RuntimeException');
-
-        // Probably, this should be moved to tests/autoload.php
-        require_once __DIR__ . '/_fixture/SingletonClass.php';
-
-        $mock = $this->generator->getMock('SingletonClass', array('doSomething'), array(), '', false);
+        $this->generator->getMock(stdClass::class, [], [], '', false, true, true, true, true);
     }
 
     /**
-     * ReflectionClass::getMethods for SoapClient on PHP 5.3 produces PHP Fatal Error
-     * @runInSeparateProcess
+     * @requires PHP 7
      */
-    public function testGetMockForSoapClientReflectionMethodsDuplication()
+    public function testCanImplementInterfacesThatHaveMethodsWithReturnTypes()
     {
-        if (version_compare(PHP_VERSION, '5.4.0', '>=')) {
-            $this->markTestSkipped('Only for PHP < 5.4.0');
-        }
+        $stub = $this->generator->getMock([AnInterfaceWithReturnType::class, AnInterface::class]);
 
-        $mock = $this->generator->getMock('SoapClient', array(), array(), '', false);
-        $this->assertInstanceOf('SoapClient', $mock);
+        $this->assertInstanceOf(AnInterfaceWithReturnType::class, $stub);
+        $this->assertInstanceOf(AnInterface::class, $stub);
+        $this->assertInstanceOf(MockObject::class, $stub);
+    }
+
+    public function testCanConfigureMethodsForDoubleOfNonExistentClass()
+    {
+        $className = 'X' . md5(microtime());
+
+        $mock = $this->generator->getMock($className, ['someMethod']);
+
+        $this->assertInstanceOf($className, $mock);
+    }
+
+    public function testCanInvokeMethodsOfNonExistentClass()
+    {
+        $className = 'X' . md5(microtime());
+
+        $mock = $this->generator->getMock($className, ['someMethod']);
+
+        $mock->expects($this->once())->method('someMethod');
+
+        $this->assertNull($mock->someMethod());
     }
 }