|null) $probe */ private function step(Closure $probe): Closure { return ProbeStep::extra('probe', 'Prüfung', 'Prüfung (nichts zu prüfen)', $probe); } public function testASkippedStepWithARedManifestThatNeverRunsTheProbe(): void { $ran = false; $steps = $this->step(static function () use (&$ran): array { $ran = true; return []; })(false); self::assertCount(1, $steps); self::assertSame('probe', $steps[0]->key); self::assertTrue($steps[0]->skipped); self::assertFalse($steps[0]->green()); self::assertSame('Prüfung', $steps[0]->label()); self::assertFalse($ran); } /** Nothing to probe is no red step: a skipped or red one would lock the plugin on a site that has nothing yet. */ public function testNullIsAGreenStepWithTheHintLabel(): void { $steps = $this->step(static fn (): ?array => null)(true); self::assertCount(1, $steps); self::assertTrue($steps[0]->green()); self::assertSame('Prüfung (nichts zu prüfen)', $steps[0]->label()); } public function testGreenKeepsTheNormalLabel(): void { $steps = $this->step(static fn (): array => [])(true); self::assertTrue($steps[0]->green()); self::assertSame('Prüfung', $steps[0]->label()); } public function testProblemsArePassedThrough(): void { $steps = $this->step(static fn (): array => ['rot', 'gelb'])(true); self::assertSame(['rot', 'gelb'], $steps[0]->problems); self::assertFalse($steps[0]->skipped); self::assertSame('Prüfung', $steps[0]->label()); } public function testAThrowingProbeIsOneFixedProblem(): void { $log = (string) tempnam(sys_get_temp_dir(), 'lit-mcp-log'); $previous = ini_set('error_log', $log); try { $steps = $this->step(static function (): never { throw new RuntimeException('innen'); })(true); } finally { ini_set('error_log', (string) $previous); unlink($log); } self::assertSame(['Prüfschritt abgebrochen (Details im PHP-Error-Log).'], $steps[0]->problems); self::assertSame('Prüfung', $steps[0]->label()); } }