Skip to content

Commit ecb779e

Browse files
Use template for BaseRangeTestCase
1 parent 6a4ab35 commit ecb779e

File tree

8 files changed

+41
-38
lines changed

8 files changed

+41
-38
lines changed

src/MartinGeorgiev/Doctrine/DBAL/Types/BaseRangeType.php

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,17 @@
1212
/**
1313
* Base class for PostgreSQL range types.
1414
*
15-
* @template T of Range
15+
* @template R of Range
1616
*
1717
* @since 3.3
1818
*
1919
* @author Martin Georgiev <martin.georgiev@gmail.com>
2020
*/
2121
abstract class BaseRangeType extends BaseType
2222
{
23+
/**
24+
* @param R|null $value
25+
*/
2326
public function convertToDatabaseValue($value, AbstractPlatform $platform): ?string
2427
{
2528
if ($value === null) {
@@ -34,9 +37,9 @@ public function convertToDatabaseValue($value, AbstractPlatform $platform): ?str
3437
}
3538

3639
/**
37-
* @param mixed $value
40+
* @param string|null $value
3841
*
39-
* @return T|null
42+
* @return R|null
4043
*/
4144
public function convertToPHPValue($value, AbstractPlatform $platform): ?Range
4245
{
@@ -60,7 +63,7 @@ public function convertToPHPValue($value, AbstractPlatform $platform): ?Range
6063
}
6164

6265
/**
63-
* @return T
66+
* @return R
6467
*/
6568
abstract protected function createFromString(string $value): Range;
6669
}

tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/BaseRangeTestCase.php

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,21 +5,26 @@
55
namespace Tests\Unit\MartinGeorgiev\Doctrine\DBAL\Types;
66

77
use Doctrine\DBAL\Platforms\AbstractPlatform;
8-
use Doctrine\DBAL\Types\Type;
98
use MartinGeorgiev\Doctrine\DBAL\Types\BaseRangeType;
109
use MartinGeorgiev\Doctrine\DBAL\Types\ValueObject\Range;
1110
use PHPUnit\Framework\Attributes\DataProvider;
1211
use PHPUnit\Framework\Attributes\Test;
1312
use PHPUnit\Framework\MockObject\MockObject;
1413
use PHPUnit\Framework\TestCase;
1514

15+
/**
16+
* @template R of Range
17+
*/
1618
abstract class BaseRangeTestCase extends TestCase
1719
{
1820
/**
1921
* @var AbstractPlatform&MockObject
2022
*/
2123
protected MockObject $platform;
2224

25+
/**
26+
* @var BaseRangeType<R>
27+
*/
2328
protected BaseRangeType $fixture;
2429

2530
protected function setUp(): void
@@ -34,13 +39,19 @@ public function has_name(): void
3439
self::assertEquals($this->getExpectedTypeName(), $this->fixture->getName());
3540
}
3641

42+
/**
43+
* @param R|null $range
44+
*/
3745
#[DataProvider('provideValidTransformations')]
3846
#[Test]
3947
public function can_transform_from_php_value(?Range $range, ?string $postgresValue): void
4048
{
4149
self::assertEquals($postgresValue, $this->fixture->convertToDatabaseValue($range, $this->platform));
4250
}
4351

52+
/**
53+
* @param R|null $range
54+
*/
4455
#[DataProvider('provideValidTransformations')]
4556
#[Test]
4657
public function can_transform_to_php_value(?Range $range, ?string $postgresValue): void
@@ -87,6 +98,9 @@ public function can_handle_postgres_empty_range(): void
8798
*/
8899
abstract public static function provideValidTransformations(): \Generator;
89100

101+
/**
102+
* @return BaseRangeType<R>
103+
*/
90104
abstract protected function createRangeType(): BaseRangeType;
91105

92106
/**
@@ -95,9 +109,7 @@ abstract protected function createRangeType(): BaseRangeType;
95109
abstract protected function getExpectedTypeName(): string;
96110

97111
/**
98-
* Returns the expected SQL declaration (e.g., 'NUMRANGE', 'INT4RANGE').
112+
* @return class-string<R>
99113
*/
100-
abstract protected function getExpectedSqlDeclaration(): string;
101-
102114
abstract protected function getExpectedValueObjectClass(): string;
103115
}

tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/DateRangeTest.php

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
use MartinGeorgiev\Doctrine\DBAL\Types\DateRange;
88
use MartinGeorgiev\Doctrine\DBAL\Types\ValueObject\DateRange as DateRangeValueObject;
99

10+
/**
11+
* @extends BaseRangeTestCase<DateRangeValueObject>
12+
*/
1013
final class DateRangeTest extends BaseRangeTestCase
1114
{
1215
protected function createRangeType(): DateRange
@@ -19,11 +22,6 @@ protected function getExpectedTypeName(): string
1922
return 'daterange';
2023
}
2124

22-
protected function getExpectedSqlDeclaration(): string
23-
{
24-
return 'daterange';
25-
}
26-
2725
protected function getExpectedValueObjectClass(): string
2826
{
2927
return DateRangeValueObject::class;

tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/Int4RangeTest.php

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
use MartinGeorgiev\Doctrine\DBAL\Types\Int4Range;
88
use MartinGeorgiev\Doctrine\DBAL\Types\ValueObject\Int4Range as Int4RangeValueObject;
99

10+
/**
11+
* @extends BaseRangeTestCase<Int4RangeValueObject>
12+
*/
1013
final class Int4RangeTest extends BaseRangeTestCase
1114
{
1215
protected function createRangeType(): Int4Range
@@ -19,11 +22,6 @@ protected function getExpectedTypeName(): string
1922
return 'int4range';
2023
}
2124

22-
protected function getExpectedSqlDeclaration(): string
23-
{
24-
return 'int4range';
25-
}
26-
2725
protected function getExpectedValueObjectClass(): string
2826
{
2927
return Int4RangeValueObject::class;

tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/Int8RangeTest.php

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
use MartinGeorgiev\Doctrine\DBAL\Types\Int8Range;
88
use MartinGeorgiev\Doctrine\DBAL\Types\ValueObject\Int8Range as Int8RangeValueObject;
99

10+
/**
11+
* @extends BaseRangeTestCase<Int8RangeValueObject>
12+
*/
1013
final class Int8RangeTest extends BaseRangeTestCase
1114
{
1215
protected function createRangeType(): Int8Range
@@ -19,11 +22,6 @@ protected function getExpectedTypeName(): string
1922
return 'int8range';
2023
}
2124

22-
protected function getExpectedSqlDeclaration(): string
23-
{
24-
return 'int8range';
25-
}
26-
2725
protected function getExpectedValueObjectClass(): string
2826
{
2927
return Int8RangeValueObject::class;

tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/NumRangeTest.php

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
use MartinGeorgiev\Doctrine\DBAL\Types\NumRange;
88
use MartinGeorgiev\Doctrine\DBAL\Types\ValueObject\NumericRange;
99

10+
/**
11+
* @extends BaseRangeTestCase<NumericRange>
12+
*/
1013
final class NumRangeTest extends BaseRangeTestCase
1114
{
1215
protected function createRangeType(): NumRange
@@ -19,11 +22,6 @@ protected function getExpectedTypeName(): string
1922
return 'numrange';
2023
}
2124

22-
protected function getExpectedSqlDeclaration(): string
23-
{
24-
return 'numrange';
25-
}
26-
2725
protected function getExpectedValueObjectClass(): string
2826
{
2927
return NumericRange::class;

tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/TsRangeTest.php

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
use MartinGeorgiev\Doctrine\DBAL\Types\TsRange;
88
use MartinGeorgiev\Doctrine\DBAL\Types\ValueObject\TsRange as TsRangeValueObject;
99

10+
/**
11+
* @extends BaseRangeTestCase<TsRangeValueObject>
12+
*/
1013
final class TsRangeTest extends BaseRangeTestCase
1114
{
1215
protected function createRangeType(): TsRange
@@ -19,11 +22,6 @@ protected function getExpectedTypeName(): string
1922
return 'tsrange';
2023
}
2124

22-
protected function getExpectedSqlDeclaration(): string
23-
{
24-
return 'tsrange';
25-
}
26-
2725
protected function getExpectedValueObjectClass(): string
2826
{
2927
return TsRangeValueObject::class;

tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/TstzRangeTest.php

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
use MartinGeorgiev\Doctrine\DBAL\Types\TstzRange;
88
use MartinGeorgiev\Doctrine\DBAL\Types\ValueObject\TstzRange as TstzRangeValueObject;
99

10+
/**
11+
* @extends BaseRangeTestCase<TstzRangeValueObject>
12+
*/
1013
final class TstzRangeTest extends BaseRangeTestCase
1114
{
1215
protected function createRangeType(): TstzRange
@@ -19,11 +22,6 @@ protected function getExpectedTypeName(): string
1922
return 'tstzrange';
2023
}
2124

22-
protected function getExpectedSqlDeclaration(): string
23-
{
24-
return 'tstzrange';
25-
}
26-
2725
protected function getExpectedValueObjectClass(): string
2826
{
2927
return TstzRangeValueObject::class;

0 commit comments

Comments
 (0)