annotate vendor/phpunit/phpunit-mock-objects/src/MockBuilder.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 1fec387a4317
children
rev   line source
Chris@14 1 <?php
Chris@14 2 /*
Chris@14 3 * This file is part of the phpunit-mock-objects package.
Chris@14 4 *
Chris@14 5 * (c) Sebastian Bergmann <sebastian@phpunit.de>
Chris@14 6 *
Chris@14 7 * For the full copyright and license information, please view the LICENSE
Chris@14 8 * file that was distributed with this source code.
Chris@14 9 */
Chris@14 10 namespace PHPUnit\Framework\MockObject;
Chris@14 11
Chris@14 12 use PHPUnit\Framework\TestCase;
Chris@14 13
Chris@14 14 /**
Chris@14 15 * Implementation of the Builder pattern for Mock objects.
Chris@14 16 */
Chris@14 17 class MockBuilder
Chris@14 18 {
Chris@14 19 /**
Chris@14 20 * @var TestCase
Chris@14 21 */
Chris@14 22 private $testCase;
Chris@14 23
Chris@14 24 /**
Chris@14 25 * @var string
Chris@14 26 */
Chris@14 27 private $type;
Chris@14 28
Chris@14 29 /**
Chris@14 30 * @var array
Chris@14 31 */
Chris@14 32 private $methods = [];
Chris@14 33
Chris@14 34 /**
Chris@14 35 * @var array
Chris@14 36 */
Chris@14 37 private $methodsExcept = [];
Chris@14 38
Chris@14 39 /**
Chris@14 40 * @var string
Chris@14 41 */
Chris@14 42 private $mockClassName = '';
Chris@14 43
Chris@14 44 /**
Chris@14 45 * @var array
Chris@14 46 */
Chris@14 47 private $constructorArgs = [];
Chris@14 48
Chris@14 49 /**
Chris@14 50 * @var bool
Chris@14 51 */
Chris@14 52 private $originalConstructor = true;
Chris@14 53
Chris@14 54 /**
Chris@14 55 * @var bool
Chris@14 56 */
Chris@14 57 private $originalClone = true;
Chris@14 58
Chris@14 59 /**
Chris@14 60 * @var bool
Chris@14 61 */
Chris@14 62 private $autoload = true;
Chris@14 63
Chris@14 64 /**
Chris@14 65 * @var bool
Chris@14 66 */
Chris@14 67 private $cloneArguments = false;
Chris@14 68
Chris@14 69 /**
Chris@14 70 * @var bool
Chris@14 71 */
Chris@14 72 private $callOriginalMethods = false;
Chris@14 73
Chris@14 74 /**
Chris@14 75 * @var object
Chris@14 76 */
Chris@14 77 private $proxyTarget = null;
Chris@14 78
Chris@14 79 /**
Chris@14 80 * @var bool
Chris@14 81 */
Chris@14 82 private $allowMockingUnknownTypes = true;
Chris@14 83
Chris@14 84 /**
Chris@14 85 * @var Generator
Chris@14 86 */
Chris@14 87 private $generator;
Chris@14 88
Chris@14 89 /**
Chris@14 90 * @param TestCase $testCase
Chris@14 91 * @param array|string $type
Chris@14 92 */
Chris@14 93 public function __construct(TestCase $testCase, $type)
Chris@14 94 {
Chris@14 95 $this->testCase = $testCase;
Chris@14 96 $this->type = $type;
Chris@14 97 $this->generator = new Generator;
Chris@14 98 }
Chris@14 99
Chris@14 100 /**
Chris@14 101 * Creates a mock object using a fluent interface.
Chris@14 102 *
Chris@14 103 * @return MockObject
Chris@14 104 */
Chris@14 105 public function getMock()
Chris@14 106 {
Chris@14 107 $object = $this->generator->getMock(
Chris@14 108 $this->type,
Chris@14 109 $this->methods,
Chris@14 110 $this->constructorArgs,
Chris@14 111 $this->mockClassName,
Chris@14 112 $this->originalConstructor,
Chris@14 113 $this->originalClone,
Chris@14 114 $this->autoload,
Chris@14 115 $this->cloneArguments,
Chris@14 116 $this->callOriginalMethods,
Chris@14 117 $this->proxyTarget,
Chris@14 118 $this->allowMockingUnknownTypes
Chris@14 119 );
Chris@14 120
Chris@14 121 $this->testCase->registerMockObject($object);
Chris@14 122
Chris@14 123 return $object;
Chris@14 124 }
Chris@14 125
Chris@14 126 /**
Chris@14 127 * Creates a mock object for an abstract class using a fluent interface.
Chris@14 128 *
Chris@14 129 * @return MockObject
Chris@14 130 */
Chris@14 131 public function getMockForAbstractClass()
Chris@14 132 {
Chris@14 133 $object = $this->generator->getMockForAbstractClass(
Chris@14 134 $this->type,
Chris@14 135 $this->constructorArgs,
Chris@14 136 $this->mockClassName,
Chris@14 137 $this->originalConstructor,
Chris@14 138 $this->originalClone,
Chris@14 139 $this->autoload,
Chris@14 140 $this->methods,
Chris@14 141 $this->cloneArguments
Chris@14 142 );
Chris@14 143
Chris@14 144 $this->testCase->registerMockObject($object);
Chris@14 145
Chris@14 146 return $object;
Chris@14 147 }
Chris@14 148
Chris@14 149 /**
Chris@14 150 * Creates a mock object for a trait using a fluent interface.
Chris@14 151 *
Chris@14 152 * @return MockObject
Chris@14 153 */
Chris@14 154 public function getMockForTrait()
Chris@14 155 {
Chris@14 156 $object = $this->generator->getMockForTrait(
Chris@14 157 $this->type,
Chris@14 158 $this->constructorArgs,
Chris@14 159 $this->mockClassName,
Chris@14 160 $this->originalConstructor,
Chris@14 161 $this->originalClone,
Chris@14 162 $this->autoload,
Chris@14 163 $this->methods,
Chris@14 164 $this->cloneArguments
Chris@14 165 );
Chris@14 166
Chris@14 167 $this->testCase->registerMockObject($object);
Chris@14 168
Chris@14 169 return $object;
Chris@14 170 }
Chris@14 171
Chris@14 172 /**
Chris@14 173 * Specifies the subset of methods to mock. Default is to mock none of them.
Chris@14 174 *
Chris@14 175 * @param array|null $methods
Chris@14 176 *
Chris@14 177 * @return MockBuilder
Chris@14 178 */
Chris@14 179 public function setMethods(array $methods = null)
Chris@14 180 {
Chris@14 181 $this->methods = $methods;
Chris@14 182
Chris@14 183 return $this;
Chris@14 184 }
Chris@14 185
Chris@14 186 /**
Chris@14 187 * Specifies the subset of methods to not mock. Default is to mock all of them.
Chris@14 188 *
Chris@14 189 * @param array $methods
Chris@14 190 *
Chris@14 191 * @return MockBuilder
Chris@14 192 */
Chris@14 193 public function setMethodsExcept(array $methods = [])
Chris@14 194 {
Chris@14 195 $this->methodsExcept = $methods;
Chris@14 196
Chris@14 197 $this->setMethods(
Chris@14 198 \array_diff(
Chris@14 199 $this->generator->getClassMethods($this->type),
Chris@14 200 $this->methodsExcept
Chris@14 201 )
Chris@14 202 );
Chris@14 203
Chris@14 204 return $this;
Chris@14 205 }
Chris@14 206
Chris@14 207 /**
Chris@14 208 * Specifies the arguments for the constructor.
Chris@14 209 *
Chris@14 210 * @param array $args
Chris@14 211 *
Chris@14 212 * @return MockBuilder
Chris@14 213 */
Chris@14 214 public function setConstructorArgs(array $args)
Chris@14 215 {
Chris@14 216 $this->constructorArgs = $args;
Chris@14 217
Chris@14 218 return $this;
Chris@14 219 }
Chris@14 220
Chris@14 221 /**
Chris@14 222 * Specifies the name for the mock class.
Chris@14 223 *
Chris@14 224 * @param string $name
Chris@14 225 *
Chris@14 226 * @return MockBuilder
Chris@14 227 */
Chris@14 228 public function setMockClassName($name)
Chris@14 229 {
Chris@14 230 $this->mockClassName = $name;
Chris@14 231
Chris@14 232 return $this;
Chris@14 233 }
Chris@14 234
Chris@14 235 /**
Chris@14 236 * Disables the invocation of the original constructor.
Chris@14 237 *
Chris@14 238 * @return MockBuilder
Chris@14 239 */
Chris@14 240 public function disableOriginalConstructor()
Chris@14 241 {
Chris@14 242 $this->originalConstructor = false;
Chris@14 243
Chris@14 244 return $this;
Chris@14 245 }
Chris@14 246
Chris@14 247 /**
Chris@14 248 * Enables the invocation of the original constructor.
Chris@14 249 *
Chris@14 250 * @return MockBuilder
Chris@14 251 */
Chris@14 252 public function enableOriginalConstructor()
Chris@14 253 {
Chris@14 254 $this->originalConstructor = true;
Chris@14 255
Chris@14 256 return $this;
Chris@14 257 }
Chris@14 258
Chris@14 259 /**
Chris@14 260 * Disables the invocation of the original clone constructor.
Chris@14 261 *
Chris@14 262 * @return MockBuilder
Chris@14 263 */
Chris@14 264 public function disableOriginalClone()
Chris@14 265 {
Chris@14 266 $this->originalClone = false;
Chris@14 267
Chris@14 268 return $this;
Chris@14 269 }
Chris@14 270
Chris@14 271 /**
Chris@14 272 * Enables the invocation of the original clone constructor.
Chris@14 273 *
Chris@14 274 * @return MockBuilder
Chris@14 275 */
Chris@14 276 public function enableOriginalClone()
Chris@14 277 {
Chris@14 278 $this->originalClone = true;
Chris@14 279
Chris@14 280 return $this;
Chris@14 281 }
Chris@14 282
Chris@14 283 /**
Chris@14 284 * Disables the use of class autoloading while creating the mock object.
Chris@14 285 *
Chris@14 286 * @return MockBuilder
Chris@14 287 */
Chris@14 288 public function disableAutoload()
Chris@14 289 {
Chris@14 290 $this->autoload = false;
Chris@14 291
Chris@14 292 return $this;
Chris@14 293 }
Chris@14 294
Chris@14 295 /**
Chris@14 296 * Enables the use of class autoloading while creating the mock object.
Chris@14 297 *
Chris@14 298 * @return MockBuilder
Chris@14 299 */
Chris@14 300 public function enableAutoload()
Chris@14 301 {
Chris@14 302 $this->autoload = true;
Chris@14 303
Chris@14 304 return $this;
Chris@14 305 }
Chris@14 306
Chris@14 307 /**
Chris@14 308 * Disables the cloning of arguments passed to mocked methods.
Chris@14 309 *
Chris@14 310 * @return MockBuilder
Chris@14 311 */
Chris@14 312 public function disableArgumentCloning()
Chris@14 313 {
Chris@14 314 $this->cloneArguments = false;
Chris@14 315
Chris@14 316 return $this;
Chris@14 317 }
Chris@14 318
Chris@14 319 /**
Chris@14 320 * Enables the cloning of arguments passed to mocked methods.
Chris@14 321 *
Chris@14 322 * @return MockBuilder
Chris@14 323 */
Chris@14 324 public function enableArgumentCloning()
Chris@14 325 {
Chris@14 326 $this->cloneArguments = true;
Chris@14 327
Chris@14 328 return $this;
Chris@14 329 }
Chris@14 330
Chris@14 331 /**
Chris@14 332 * Enables the invocation of the original methods.
Chris@14 333 *
Chris@14 334 * @return MockBuilder
Chris@14 335 */
Chris@14 336 public function enableProxyingToOriginalMethods()
Chris@14 337 {
Chris@14 338 $this->callOriginalMethods = true;
Chris@14 339
Chris@14 340 return $this;
Chris@14 341 }
Chris@14 342
Chris@14 343 /**
Chris@14 344 * Disables the invocation of the original methods.
Chris@14 345 *
Chris@14 346 * @return MockBuilder
Chris@14 347 */
Chris@14 348 public function disableProxyingToOriginalMethods()
Chris@14 349 {
Chris@14 350 $this->callOriginalMethods = false;
Chris@14 351 $this->proxyTarget = null;
Chris@14 352
Chris@14 353 return $this;
Chris@14 354 }
Chris@14 355
Chris@14 356 /**
Chris@14 357 * Sets the proxy target.
Chris@14 358 *
Chris@14 359 * @param object $object
Chris@14 360 *
Chris@14 361 * @return MockBuilder
Chris@14 362 */
Chris@14 363 public function setProxyTarget($object)
Chris@14 364 {
Chris@14 365 $this->proxyTarget = $object;
Chris@14 366
Chris@14 367 return $this;
Chris@14 368 }
Chris@14 369
Chris@14 370 /**
Chris@14 371 * @return MockBuilder
Chris@14 372 */
Chris@14 373 public function allowMockingUnknownTypes()
Chris@14 374 {
Chris@14 375 $this->allowMockingUnknownTypes = true;
Chris@14 376
Chris@14 377 return $this;
Chris@14 378 }
Chris@14 379
Chris@14 380 /**
Chris@14 381 * @return MockBuilder
Chris@14 382 */
Chris@14 383 public function disallowMockingUnknownTypes()
Chris@14 384 {
Chris@14 385 $this->allowMockingUnknownTypes = false;
Chris@14 386
Chris@14 387 return $this;
Chris@14 388 }
Chris@14 389 }