Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
100.00% |
1 / 1 |
|
100.00% |
3 / 3 |
CRAP | |
100.00% |
19 / 19 |
| AbstractExpectation | |
100.00% |
1 / 1 |
|
100.00% |
3 / 3 |
14 | |
100.00% |
19 / 19 |
| filterDefinition | |
100.00% |
1 / 1 |
11 | |
100.00% |
14 / 14 |
|||
| fromDefinition | |
100.00% |
1 / 1 |
2 | |
100.00% |
4 / 4 |
|||
| jsonSerialize | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
| <?php | |
| /** | |
| * Copyright (c) Tony Bogdanov <tonybogdanov@gmail.com> | |
| * | |
| * For the full copyright and license information, please view the LICENSE | |
| * file that was distributed with this source code. | |
| */ | |
| namespace DataExpectation; | |
| use DataExpectation\Exceptions\InvalidExpectationDefinitionException; | |
| use DataExpectation\Exceptions\InvalidExpectationNameException; | |
| /** | |
| * Class AbstractExpectation | |
| * | |
| * @package DataExpectation | |
| * @author Tony Bogdanov <tonybogdanov@gmail.com> | |
| */ | |
| abstract class AbstractExpectation implements ExpectationInterface { | |
| /** | |
| * @var string | |
| */ | |
| protected static $namespace; | |
| /** | |
| * @param $data | |
| * | |
| * @return mixed | |
| * @throws InvalidExpectationNameException | |
| */ | |
| protected static function filterDefinition( $data ) { | |
| if ( | |
| ! is_array( $data ) || 2 !== count( $data ) || | |
| ! isset( $data['expectationName'] ) || ! is_string( $data['expectationName'] ) || | |
| ! isset( $data['expectationArguments'] ) || ! is_array( $data['expectationArguments'] ) | |
| ) { | |
| if ( is_array( $data ) ) { | |
| return array_combine( array_keys( $data ), array_map( function ( $argument ) { | |
| return static::filterDefinition( $argument ); | |
| }, $data ) ); | |
| } | |
| return $data; | |
| } | |
| if ( ! isset( static::$namespace ) ) { | |
| static::$namespace = implode( '\\', array_slice( explode( '\\', static::class ), 0, -1 ) ); | |
| } | |
| $className = static::$namespace . '\\' . $data['expectationName']; | |
| if ( ! class_exists( $className ) || ! is_a( $className, ExpectationInterface::class, true ) ) { | |
| throw new InvalidExpectationNameException( $data['expectationName'] ); | |
| } | |
| return new $className( ...array_map( function ( $argument ) { | |
| return static::filterDefinition( $argument ); | |
| }, $data['expectationArguments'] ) ); | |
| } | |
| /** | |
| * @param array $definition | |
| * | |
| * @return ExpectationInterface | |
| * @throws InvalidExpectationDefinitionException | |
| * @throws InvalidExpectationNameException | |
| */ | |
| public static function fromDefinition( array $definition ): ExpectationInterface { | |
| $expectation = static::filterDefinition( $definition ); | |
| if ( ! ( $expectation instanceof ExpectationInterface ) ) { | |
| throw new InvalidExpectationDefinitionException( $expectation ); | |
| } | |
| return $expectation; | |
| } | |
| /** | |
| * @return array | |
| */ | |
| public function jsonSerialize(): array { | |
| return [ | |
| 'expectationName' => array_slice( explode( '\\', static::class ), -1 )[0], | |
| 'expectationArguments' => [], | |
| ]; | |
| } | |
| } |