forTest = true; return $compiler; } public function enterPreparePhase(): void { $this->enterCompilerPhase(self::PHASE_PREPARE); } public function enterConvertPhase(): void { $this->enterCompilerPhase(self::PHASE_CONVERT); } public function probePropertyAccessResolver(): bool { return $this->canAccessProtectedProperty('ProbeClass', 'ProbeClass'); } } class CompilerPhaseTest extends \PHPUnit\Framework\TestCase { public function testPropertyAccessResolverCannotBeUsedOutsideConvertPhase(): void { $compiler = CompilerPhaseProbe::createProbe(ROOT_PATH); $this->expectException(TestError::class); $this->expectExceptionMessage('PropertyAccessResolver can only be used during convert phase'); $compiler->probePropertyAccessResolver(); } public function testPropertyAccessResolverCannotBeUsedDuringPreparePhase(): void { $compiler = CompilerPhaseProbe::createProbe(ROOT_PATH); $compiler->enterPreparePhase(); $this->expectException(TestError::class); $this->expectExceptionMessage('PropertyAccessResolver can only be used during convert phase'); $compiler->probePropertyAccessResolver(); } public function testPropertyAccessResolverCanBeUsedDuringConvertPhase(): void { $compiler = CompilerPhaseProbe::createProbe(ROOT_PATH); $compiler->enterConvertPhase(); $this->assertTrue($compiler->probePropertyAccessResolver()); } }