Skip to content

Commit

Permalink
adjusting typehinting
Browse files Browse the repository at this point in the history
  • Loading branch information
SignpostMarv committed Feb 22, 2020
1 parent 87ee4f4 commit 2a9b585
Show file tree
Hide file tree
Showing 5 changed files with 28 additions and 28 deletions.
28 changes: 13 additions & 15 deletions Tests/DaftTypedObjectRepositoryTest.php
Expand Up @@ -6,7 +6,6 @@

namespace SignpostMarv\DaftTypedObject;

use DaftFramework\RelaxedObjectRepository\ConvertingRepository;
use Exception;
use PHPUnit\Framework\TestCase as Base;
use function random_bytes;
Expand All @@ -15,15 +14,17 @@
/**
* @template S as array{id:int, name:string}
* @template S2 as array{id:int|string, name:string}
* @template S3 as array{name:string}
* @template T as array<string, scalar|array|object|null>
* @template T1 as Fixtures\MutableForRepository
* @template T2 as Fixtures\DaftTypedObjectMemoryRepository
*/
class DaftTypedObjectRepositoryTest extends Base
{
/**
* @return list<
* array{
* 0:class-string<AppendableTypedObjectRepository>,
* 0:class-string<T2>,
* 1:array{type:class-string<T1>},
* 2:list<S>,
* 3:list<S2>
Expand All @@ -35,7 +36,7 @@ public function dataProviderAppendTypedObject() : array
/**
* @var list<
* array{
* 0:class-string<AppendableTypedObjectRepository>,
* 0:class-string<T2>,
* 1:array{type:class-string<T1>},
* 2:list<S>,
* 3:list<S2>
Expand Down Expand Up @@ -69,7 +70,7 @@ public function dataProviderAppendTypedObject() : array
*
* @dataProvider dataProviderAppendTypedObject
*
* @param class-string<AppendableTypedObjectRepository> $repo_type
* @param class-string<T2> $repo_type
* @param array{type:class-string<T1>} $repo_args
* @param list<S> $append_these
* @param list<S2> $expect_these
Expand Down Expand Up @@ -142,7 +143,7 @@ public function test_append_typed_object(
*
* @depends test_append_typed_object
*
* @param class-string<AppendableTypedObjectRepository> $repo_type
* @param class-string<T2> $repo_type
* @param array{type:class-string<T1>} $repo_args
* @param list<S> $_append_these
* @param list<S2> $expect_these
Expand Down Expand Up @@ -206,7 +207,7 @@ static function ($property, $value) use ($object_type) {
*
* @depends test_append_typed_object
*
* @param class-string<AppendableTypedObjectRepository> $repo_type
* @param class-string<T2> $repo_type
* @param array{type:class-string<T1>} $repo_args
* @param list<S> $_append_these
* @param list<S2> $expect_these
Expand Down Expand Up @@ -266,10 +267,10 @@ static function ($property, $value) use ($object_type) {
/**
* @return list<
* array{
* 0:class-string<AppendableTypedObjectRepository&PatchableObjectRepository&ConvertingRepository>,
* 0:class-string<T2>,
* 1:array{type:class-string<T1>},
* 2:array<string, scalar|null>,
* 3:array<string, scalar|null>,
* 3:S3,
* 4:array<string, scalar|null>
* }
* >
Expand All @@ -279,10 +280,10 @@ public function dataProviderPatchObject() : array
/**
* @var list<
* array{
* 0:class-string<AppendableTypedObjectRepository&PatchableObjectRepository&ConvertingRepository>,
* 0:class-string<T2>,
* 1:array{type:class-string<T1>},
* 2:array<string, scalar|null>,
* 3:array<string, scalar|null>,
* 3:S3,
* 4:array<string, scalar|null>
* }
* >
Expand Down Expand Up @@ -315,10 +316,10 @@ public function dataProviderPatchObject() : array
*
* @depends test_append_typed_object
*
* @param class-string<AppendableTypedObjectRepository&PatchableObjectRepository&ConvertingRepository> $repo_type
* @param class-string<T2> $repo_type
* @param array{type:class-string<T1>} $repo_args
* @param array<string, scalar|null> $append_this
* @param array<string, scalar|null> $patch_this
* @param S3 $patch_this
* @param array<string, scalar|null> $expect_this
*/
public function test_patch_object(
Expand All @@ -336,10 +337,8 @@ public function test_patch_object(

$object = $object_type::__fromArray($append_this);

/** @var Fixtures\MutableForRepository */
$fresh = $repo->AppendTypedObject($object);

/** @var array{id:int} */
$id = $repo->ObtainIdFromObject($fresh);

$repo->PatchTypedObjectData($id, $patch_this);
Expand All @@ -355,7 +354,6 @@ public function test_patch_object(

$repo->ForgetTypedObject($repo->ObtainIdFromObject($fresh));

/** @var Fixtures\MutableForRepository */
$fresh2 = $repo->RecallTypedObject($repo->ObtainIdFromObject($fresh));

static::assertNotSame($fresh, $fresh2);
Expand Down
18 changes: 7 additions & 11 deletions Tests/Fixtures/DaftTypedObjectMemoryRepository.php
Expand Up @@ -15,17 +15,17 @@
use Throwable;

/**
* @template T1 as MutableForRepository
* @template T2 as array{id:int}
* @template S1 as array{name:string}
* @template S2 as array{id:int, name:string}
* @template T3 as array{type:class-string<DaftTypedObjectForRepository>}
* @psalm-type T1 = MutableForRepository
* @psalm-type T2 = array{id:int}
* @psalm-type S1 = array{name:string}
* @psalm-type S2 = array{id:int, name:string}
* @psalm-type T3 = array{type:class-string<MutableForRepository>}
*
* @template-extends AbstractDaftTypedObjectRepository<T1, T2, T3>
*
* @template-implements AppendableTypedObjectRepository<T1, T2, S1>
* @template-implements AppendableTypedObjectRepository<T1, T2, S1, T3>
* @template-implements ConvertingRepository<T1, S2, T2, T3>
* @template-implements PatchableObjectRepository<T1, T2, S1>
* @template-implements PatchableObjectRepository<T1, T2, S1, T3>
*/
class DaftTypedObjectMemoryRepository extends AbstractDaftTypedObjectRepository implements
AppendableTypedObjectRepository,
Expand Down Expand Up @@ -67,7 +67,6 @@ public function AppendTypedObjectFromArray(
) : DaftTypedObjectForRepository {
$new_id = max(self::MIN_BASE_ID, count($this->data)) + self::INCREMENT_NEW_ID_BY;

/** @var S2 */
$data = [
'id' => $new_id,
'name' => $data['name'],
Expand All @@ -90,9 +89,6 @@ public function AppendTypedObjectFromArray(
public function UpdateTypedObject(
DaftTypedObjectForRepository $object
) : void {
/**
* @var T2
*/
$id = $object->ObtainId();

$hash = static::RelaxedObjectHash($id);
Expand Down
3 changes: 2 additions & 1 deletion src/AppendableTypedObjectRepository.php
Expand Up @@ -10,8 +10,9 @@
* @template T1 as DaftTypedObjectForRepository
* @template T2 as array<string, scalar>
* @template S1 as array<string, scalar|null>
* @template T3 as array{type:class-string<DaftTypedObjectForRepository>}
*
* @template-extends DaftTypedObjectRepository<T1, T2>
* @template-extends DaftTypedObjectRepository<T1, T2, T3>
*/
interface AppendableTypedObjectRepository extends DaftTypedObjectRepository
{
Expand Down
4 changes: 4 additions & 0 deletions src/DaftTypedObjectRepository.php
Expand Up @@ -45,6 +45,8 @@ public function RemoveTypedObject(

/**
* @param T2 $id
*
* @return T1
*/
public function RecallTypedObject(
array $id,
Expand All @@ -53,6 +55,8 @@ public function RecallTypedObject(

/**
* @param T2 $id
*
* @return T1|null
*/
public function MaybeRecallTypedObject(
array $id
Expand Down
3 changes: 2 additions & 1 deletion src/PatchableObjectRepository.php
Expand Up @@ -10,8 +10,9 @@
* @template T1 as DaftTypedObjectForRepository
* @template T2 as array<string, scalar>
* @template T3 as array<string, scalar|null>
* @template T4 as array{type:class-string<DaftTypedObjectForRepository>}
*
* @template-extends DaftTypedObjectRepository<T1, T2>
* @template-extends DaftTypedObjectRepository<T1, T2, T4>
*/
interface PatchableObjectRepository extends DaftTypedObjectRepository
{
Expand Down

0 comments on commit 2a9b585

Please sign in to comment.