This commit is contained in:
2020-10-06 14:27:47 +07:00
commit 586be80cf6
16613 changed files with 3274099 additions and 0 deletions

View File

@@ -0,0 +1,50 @@
## Codeception\Specify\Config
Global Specify configuration. Should be set in bootstrap.
```php
<?php
// disable deep cloning of properties inside specify block
\Codeception\Specify\Config::setDeepClone(false);
?>
```
#### *public* propertyIgnored($property)
#### *public* classIgnored($value)
#### *public* propertyIsShallowCloned($property)
#### *public* propertyIsDeeplyCloned($property)
#### *public static* setDeepClone($deepClone)
Enable or disable using of deep cloning for objects by default.
Deep cloning is the default.
* `param boolean` $deepClone
#### *public static* setIgnoredClasses($ignoredClasses)
#### *public static* setIgnoredProperties($ignoredProperties)
Globally set class properties are going to be ignored for cloning in specify blocks.
```php
<?php
\Codeception\Specify\Config::setIgnoredProperties(['users', 'repository']);
```
* `param array` $ignoredProperties
#### *public static* addIgnoredClasses($ignoredClasses)
Add specific classes to cloning ignore list. Instances of those classes won't be cloned for specify blocks.
```php
<?php
\Codeception\Specify\Config::addIgnoredClasses(['\Acme\Domain\UserRepo', '\Acme\Domain\PostRepo']);
?>
```
* `param` $ignoredClasses
#### *public static* create()
@return Config

View File

@@ -0,0 +1,110 @@
## Codeception\Specify\ConfigBuilder
Configure Specify usage.
Specify copies properties of object and restores them for each specify block.
Objects can be cloned deeply or using standard `clone` operator.
Specify can be configured to prevent specific properties in specify blocks, to choose default cloning method,
or cloning method for specific properties.
```php
<?php
$this->specifyConfig()
->ignore('user') // do not clone
?>
```
#### *public* __construct($config = null)
#### *public* ignore($properties = null)
Ignore cloning specific object properties in specify blocks.
```php
<?php
$this->user = new User;
$this->specifyConfig()->ignore('user');
$this->specify('change user name', function() {
$this->user->name = 'davert';
});
$this->user->name == 'davert'; // name changed
?>
```
* `param array` $properties
* `return` $this
#### *public* ignoreClasses($classes = null)
Adds specific class to ignore list, if property is an instance of class it will not be cloned for specify block.
* `param array` $classes
* `return` $this
#### *public* deepClone($properties = null)
Turn on/off deep cloning mode.
Deep cloning mode can also be specified for specific properties.
```php
<?php
$this->user = new User;
$this->post = new Post;
$this->tag = new Tag;
// turn on deep cloning by default
$this->specifyConfig()->deepClone();
// turn off deep cloning by default
$this->specifyConfig()->deepClone(false);
// deep clone only user and tag property
$this->specifyConfig()->deepClone('user', 'tag');
// alternatively
$this->specifyConfig()->deepClone(['user', 'tag']);
?>
```
* `param bool` $properties
* `return` $this
#### *public* shallowClone($properties = null)
Disable deep cloning mode, use shallow cloning by default, which is faster.
Deep cloning mode can also be disabled for specific properties.
```php
<?php
$this->user = new User;
$this->post = new Post;
$this->tag = new Tag;
// turn off deep cloning by default
$this->specifyConfig()->shallowClone();
// turn on deep cloning by default
$this->specifyConfig()->shallowClone(false);
// shallow clone only user and tag property
$this->specifyConfig()->shallowClone('user', 'tag');
// alternatively
$this->specifyConfig()->shallowClone(['user', 'tag']);
?>
```
* `param bool` $properties
* `return` $this
#### *public* cloneOnly($properties)
Clone only specific properties
```php
<?php
$this->specifyConfig()->cloneOnly('user', 'post');
?>
```
* `param` $properties
* `return` $this