1--TEST--
2PHPUnit_Framework_MockObject_Generator::generate('Foo', array(), 'MockFoo', true, true, true)
3--FILE--
4<?php
5class Foo
6{
7    public function bar(Foo $foo)
8    {
9    }
10
11    public function baz(Foo $foo)
12    {
13    }
14}
15
16require __DIR__ . '/../../../vendor/autoload.php';
17
18$generator = new PHPUnit_Framework_MockObject_Generator;
19
20$mock = $generator->generate(
21    'Foo',
22    array(),
23    'MockFoo',
24    true,
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', 'baz'];
37
38    public function __clone()
39    {
40        $this->__phpunit_invocationMocker = clone $this->__phpunit_getInvocationMocker();
41    }
42
43    public function bar(Foo $foo)
44    {
45        $arguments = array($foo);
46        $count     = func_num_args();
47
48        if ($count > 1) {
49            $_arguments = func_get_args();
50
51            for ($i = 1; $i < $count; $i++) {
52                $arguments[] = $_arguments[$i];
53            }
54        }
55
56        $result = $this->__phpunit_getInvocationMocker()->invoke(
57            new PHPUnit_Framework_MockObject_Invocation_Object(
58                'Foo', 'bar', $arguments, '', $this, true
59            )
60        );
61
62        return $result;
63    }
64
65    public function baz(Foo $foo)
66    {
67        $arguments = array($foo);
68        $count     = func_num_args();
69
70        if ($count > 1) {
71            $_arguments = func_get_args();
72
73            for ($i = 1; $i < $count; $i++) {
74                $arguments[] = $_arguments[$i];
75            }
76        }
77
78        $result = $this->__phpunit_getInvocationMocker()->invoke(
79            new PHPUnit_Framework_MockObject_Invocation_Object(
80                'Foo', 'baz', $arguments, '', $this, true
81            )
82        );
83
84        return $result;
85    }
86
87    public function expects(PHPUnit_Framework_MockObject_Matcher_Invocation $matcher)
88    {
89        return $this->__phpunit_getInvocationMocker()->expects($matcher);
90    }
91
92    public function method()
93    {
94        $any = new PHPUnit_Framework_MockObject_Matcher_AnyInvokedCount;
95        $expects = $this->expects($any);
96        return call_user_func_array(array($expects, 'method'), func_get_args());
97    }
98
99    public function __phpunit_setOriginalObject($originalObject)
100    {
101        $this->__phpunit_originalObject = $originalObject;
102    }
103
104    public function __phpunit_getInvocationMocker()
105    {
106        if ($this->__phpunit_invocationMocker === null) {
107            $this->__phpunit_invocationMocker = new PHPUnit_Framework_MockObject_InvocationMocker($this->__phpunit_configurable);
108        }
109
110        return $this->__phpunit_invocationMocker;
111    }
112
113    public function __phpunit_hasMatchers()
114    {
115        return $this->__phpunit_getInvocationMocker()->hasMatchers();
116    }
117
118    public function __phpunit_verify($unsetInvocationMocker = true)
119    {
120        $this->__phpunit_getInvocationMocker()->verify();
121
122        if ($unsetInvocationMocker) {
123            $this->__phpunit_invocationMocker = null;
124        }
125    }
126}
127