markTestSkipped('End-to-End QR-Code test temporarily disabled'); // Abhängigkeiten aufbauen $encoder = new QrCodeEncoder(); $renderer = new QrCodeRenderer(new QrCodeMasker(), new ReedSolomon()); $generator = new QrCodeGenerator($encoder, $renderer); // Test-Daten $data = 'https://example.com'; $errorLevel = ErrorCorrectionLevel::M; $version = 2; // Fixe Version für Test-Vorhersagbarkeit // QR-Code generieren $qrCode = new QrCode($data, $errorLevel, new QrCodeVersion($version)); $matrix = $generator->generate($qrCode); // Prüfungen expect($matrix)->toBeInstanceOf(QrCodeMatrix::class); // Prüfe die Größe (Version 2 = 25x25) $expectedSize = 25; // 21 + (2-1)*4 = 25 expect($matrix->getSize())->toBe($expectedSize); // Prüfe, ob Finder-Patterns vorhanden sind (3 Ecken haben spezifische Muster) $topLeft = hasFinderPattern($matrix->getMatrix(), 0, 0); $topRight = hasFinderPattern($matrix->getMatrix(), 0, $expectedSize - 7); $bottomLeft = hasFinderPattern($matrix->getMatrix(), $expectedSize - 7, 0); expect($topLeft)->toBeTrue('Finder Pattern oben links fehlt'); expect($topRight)->toBeTrue('Finder Pattern oben rechts fehlt'); expect($bottomLeft)->toBeTrue('Finder Pattern unten links fehlt'); }); // Hilfsfunktion zur Prüfung von Finder-Patterns function hasFinderPattern(array $matrix, int $startRow, int $startCol): bool { // Prüfe das 7x7 Finder-Pattern-Muster // Das äußere Quadrat sollte 7x7 sein und vollständig dunkel for ($i = 0; $i < 7; $i++) { for ($j = 0; $j < 7; $j++) { if ($i === 0 || $i === 6 || $j === 0 || $j === 6) { if ($matrix[$startRow + $i][$startCol + $j] !== true) { return false; } } } } // Das mittlere Quadrat sollte 5x5 sein und weiß (false) for ($i = 1; $i < 6; $i++) { for ($j = 1; $j < 6; $j++) { if ($i === 1 || $i === 5 || $j === 1 || $j === 5) { if ($matrix[$startRow + $i][$startCol + $j] !== false) { return false; } } } } // Das innerste Quadrat sollte 3x3 sein und dunkel (true) for ($i = 2; $i < 5; $i++) { for ($j = 2; $j < 5; $j++) { if ($matrix[$startRow + $i][$startCol + $j] !== true) { return false; } } } return true; }