$types * * @return void */ public function testValidTypeCombination($expected, $types) { foreach ($types as $k => $type) { $types[$k] = self::getAtomic($type); } /** @psalm-suppress PossiblyInvalidArgument */ $this->assertSame( $expected, (string) Type::combineTypes($types) ); } /** * @return array */ public function providerFileCheckerValidCodeParse() { return [ 'multipleValuedArray' => [ ' [ 'int|string', [ 'int', 'string', ], ], 'falseTrueToBool' => [ 'bool', [ 'false', 'true', ], ], 'trueFalseToBool' => [ 'bool', [ 'true', 'false', ], ], 'trueBoolToBool' => [ 'bool', [ 'true', 'bool', ], ], 'boolTrueToBool' => [ 'bool', [ 'bool', 'true', ], ], 'intOrTrueOrFalseToBool' => [ 'int|bool', [ 'int', 'false', 'true', ], ], 'intOrBoolOrTrueToBool' => [ 'int|bool', [ 'int', 'bool', 'true', ], ], 'intOrTrueOrBoolToBool' => [ 'int|bool', [ 'int', 'true', 'bool', ], ], 'arrayOfIntOrString' => [ 'array', [ 'array', 'array', ], ], 'arrayOfIntOrAlsoString' => [ 'array|string', [ 'array', 'string', ], ], 'emptyArrays' => [ 'array', [ 'array', 'array', ], ], 'arrayStringOrEmptyArray' => [ 'array', [ 'array', 'array', ], ], 'arrayMixedOrString' => [ 'array', [ 'array', 'array', ], ], 'arrayMixedOrStringKeys' => [ 'array', [ 'array', 'array', ], ], 'arrayMixedOrEmpty' => [ 'array', [ 'array', 'array', ], ], 'arrayBigCombination' => [ 'array', [ 'array', 'array', ], ], 'falseDestruction' => [ 'bool', [ 'false', 'bool', ], ], 'onlyFalse' => [ 'false', [ 'false', ], ], 'onlyTrue' => [ 'true', [ 'true', ], ], 'falseFalseDestruction' => [ 'false', [ 'false', 'false', ], ], 'aAndAOfB' => [ 'A', [ 'A', 'A', ], ], 'combineObjectType1' => [ 'array{a:int, b:string}', [ 'array{a:int}', 'array{b:string}', ], ], 'combineObjectType2' => [ 'array{a:int|string, b:string}', [ 'array{a:int}', 'array{a:string,b:string}', ], ], 'combineObjectTypeWithIntKeyedArray' => [ 'array', [ 'array{a:int}', 'array', ], ], 'combineNestedObjectTypeWithObjectLikeIntKeyedArray' => [ 'array{a:array}', [ 'array{a:array{a:int}}', 'array{a:array}', ], ], 'combineIntKeyedObjectTypeWithNestedIntKeyedArray' => [ 'array>', [ 'array', 'array>', ], ], 'combineNestedObjectTypeWithNestedIntKeyedArray' => [ 'array>', [ 'array{a:array{a:int}}', 'array>', ], ], ]; } /** * @param string $string * * @return Type\Atomic */ private static function getAtomic($string) { return array_values(Type::parseString($string)->types)[0]; } }