1--TEST--
2PHPUnit_Framework_MockObject_Generator::generate('NS\Foo', array('bar'), 'MockFoo', true, true)
3--FILE--
4<?php
5namespace NS;
6
7class Foo
8{
9    public function bar(Foo $foo)
10    {
11    }
12
13    public function baz(Foo $foo)
14    {
15    }
16}
17
18require __DIR__ . '/../../../vendor/autoload.php';
19
20$generator = new \PHPUnit_Framework_MockObject_Generator;
21
22$mock = $generator->generate(
23    'NS\Foo',
24    array('bar'),
25    'MockFoo',
26    true,
27    true
28);
29
30print $mock['code'];
31?>
32--EXPECTF--
33class MockFoo extends NS\Foo implements PHPUnit_Framework_MockObject_MockObject
34{
35    private $__phpunit_invocationMocker;
36    private $__phpunit_originalObject;
37    private $__phpunit_configurable = ['bar'];
38
39    public function __clone()
40    {
41        $this->__phpunit_invocationMocker = clone $this->__phpunit_getInvocationMocker();
42    }
43
44    public function bar(NS\Foo $foo)
45    {
46        $arguments = array($foo);
47        $count     = func_num_args();
48
49        if ($count > 1) {
50            $_arguments = func_get_args();
51
52            for ($i = 1; $i < $count; $i++) {
53                $arguments[] = $_arguments[$i];
54            }
55        }
56
57        $result = $this->__phpunit_getInvocationMocker()->invoke(
58            new PHPUnit_Framework_MockObject_Invocation_Object(
59                'NS\Foo', 'bar', $arguments, '', $this, true
60            )
61        );
62
63        return $result;
64    }
65
66    public function expects(PHPUnit_Framework_MockObject_Matcher_Invocation $matcher)
67    {
68        return $this->__phpunit_getInvocationMocker()->expects($matcher);
69    }
70
71    public function method()
72    {
73        $any = new PHPUnit_Framework_MockObject_Matcher_AnyInvokedCount;
74        $expects = $this->expects($any);
75        return call_user_func_array(array($expects, 'method'), func_get_args());
76    }
77
78    public function __phpunit_setOriginalObject($originalObject)
79    {
80        $this->__phpunit_originalObject = $originalObject;
81    }
82
83    public function __phpunit_getInvocationMocker()
84    {
85        if ($this->__phpunit_invocationMocker === null) {
86            $this->__phpunit_invocationMocker = new PHPUnit_Framework_MockObject_InvocationMocker($this->__phpunit_configurable);
87        }
88
89        return $this->__phpunit_invocationMocker;
90    }
91
92    public function __phpunit_hasMatchers()
93    {
94        return $this->__phpunit_getInvocationMocker()->hasMatchers();
95    }
96
97    public function __phpunit_verify($unsetInvocationMocker = true)
98    {
99        $this->__phpunit_getInvocationMocker()->verify();
100
101        if ($unsetInvocationMocker) {
102            $this->__phpunit_invocationMocker = null;
103        }
104    }
105}
106