1--TEST--
2PHPUnit_Framework_MockObject_Generator::generate('Foo', array(), 'MockFoo', true, true)
3--SKIPIF--
4<?php
5if (!version_compare(PHP_VERSION, '7.0', '>=')) print 'skip: PHP >= 7.0 required';
6?>
7--FILE--
8<?php
9class Foo
10{
11    public static function bar(string $baz): Bar
12    {
13        return 'test';
14    }
15}
16
17require __DIR__ . '/../../../vendor/autoload.php';
18
19$generator = new PHPUnit_Framework_MockObject_Generator;
20
21$mock = $generator->generate(
22    'Foo',
23    array(),
24    'MockFoo',
25    true,
26    true
27);
28
29print $mock['code'];
30?>
31--EXPECTF--
32class MockFoo extends Foo implements PHPUnit_Framework_MockObject_MockObject
33{
34    private $__phpunit_invocationMocker;
35    private $__phpunit_originalObject;
36    private $__phpunit_configurable = ['bar'];
37
38    public function __clone()
39    {
40        $this->__phpunit_invocationMocker = clone $this->__phpunit_getInvocationMocker();
41    }
42
43    public static function bar(string $baz): Bar
44    {
45        throw new PHPUnit_Framework_MockObject_BadMethodCallException('Static method "bar" cannot be invoked on mock object');
46    }
47
48    public function expects(PHPUnit_Framework_MockObject_Matcher_Invocation $matcher)
49    {
50        return $this->__phpunit_getInvocationMocker()->expects($matcher);
51    }
52
53    public function method()
54    {
55        $any = new PHPUnit_Framework_MockObject_Matcher_AnyInvokedCount;
56        $expects = $this->expects($any);
57        return call_user_func_array(array($expects, 'method'), func_get_args());
58    }
59
60    public function __phpunit_setOriginalObject($originalObject)
61    {
62        $this->__phpunit_originalObject = $originalObject;
63    }
64
65    public function __phpunit_getInvocationMocker()
66    {
67        if ($this->__phpunit_invocationMocker === null) {
68            $this->__phpunit_invocationMocker = new PHPUnit_Framework_MockObject_InvocationMocker($this->__phpunit_configurable);
69        }
70
71        return $this->__phpunit_invocationMocker;
72    }
73
74    public function __phpunit_hasMatchers()
75    {
76        return $this->__phpunit_getInvocationMocker()->hasMatchers();
77    }
78
79    public function __phpunit_verify($unsetInvocationMocker = true)
80    {
81        $this->__phpunit_getInvocationMocker()->verify();
82
83        if ($unsetInvocationMocker) {
84            $this->__phpunit_invocationMocker = null;
85        }
86    }
87}
88