Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 33 additions & 37 deletions tests/PHPStan/Type/Constant/ConstantArrayTypeTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -1626,31 +1626,47 @@ public function testSealedness(): void

public static function dataGetArraySize(): iterable
{
// Accumulate into one array and return it (no `yield`), so the toggle is never held
// across a suspension point and cannot leak into other tests.
$bleedingEdgeBackup = BleedingEdgeToggle::isBleedingEdge();

$cases = [];
foreach ([false, true] as $bleedingEdge) {
BleedingEdgeToggle::setBleedingEdge($bleedingEdge);

$cases[] = [
new ConstantArrayType([], []),
new ConstantIntegerType(0),
];
BleedingEdgeToggle::withBleedingEdge($bleedingEdge, static function () use (&$cases) {
$cases[] = [
new ConstantArrayType([], []),
new ConstantIntegerType(0),
];

$builder = ConstantArrayTypeBuilder::createEmpty();
$cases[] = [
$builder->getArray(),
new ConstantIntegerType(0),
];

$builder->makeUnsealed(new IntegerType(), new ObjectType(stdClass::class));
$cases[] = [
$builder->getArray(),
IntegerRangeType::createAllGreaterThanOrEqualTo(0),
];

$builder->setOffsetValueType(new ConstantIntegerType(0), new ObjectType(stdClass::class));
$cases[] = [
$builder->getArray(),
IntegerRangeType::createAllGreaterThanOrEqualTo(1),
];

$builder->setOffsetValueType(new ConstantIntegerType(1), new ObjectType(stdClass::class), true);
$cases[] = [
$builder->getArray(),
IntegerRangeType::createAllGreaterThanOrEqualTo(1),
];
});
}

BleedingEdgeToggle::withBleedingEdge(true, static function () use (&$cases) {
$builder = ConstantArrayTypeBuilder::createEmpty();
$cases[] = [
$builder->getArray(),
new ConstantIntegerType(0),
];

$builder->makeUnsealed(new IntegerType(), new ObjectType(stdClass::class));
$cases[] = [
$builder->getArray(),
IntegerRangeType::createAllGreaterThanOrEqualTo(0),
];

$builder->setOffsetValueType(new ConstantIntegerType(0), new ObjectType(stdClass::class));
$cases[] = [
$builder->getArray(),
Expand All @@ -1662,27 +1678,7 @@ public static function dataGetArraySize(): iterable
$builder->getArray(),
IntegerRangeType::createAllGreaterThanOrEqualTo(1),
];
}

$builder = ConstantArrayTypeBuilder::createEmpty();
$builder->makeUnsealed(new IntegerType(), new ObjectType(stdClass::class));
$cases[] = [
$builder->getArray(),
IntegerRangeType::createAllGreaterThanOrEqualTo(0),
];
$builder->setOffsetValueType(new ConstantIntegerType(0), new ObjectType(stdClass::class));
$cases[] = [
$builder->getArray(),
IntegerRangeType::createAllGreaterThanOrEqualTo(1),
];

$builder->setOffsetValueType(new ConstantIntegerType(1), new ObjectType(stdClass::class), true);
$cases[] = [
$builder->getArray(),
IntegerRangeType::createAllGreaterThanOrEqualTo(1),
];

BleedingEdgeToggle::setBleedingEdge($bleedingEdgeBackup);

@staabm staabm Jun 25, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this test missed try/catch wrapping, so could theoretically miss to re-store the toggle in case of exceptions

});

return $cases;
}
Expand Down
Loading