import org.junit.jupiter.api.Test;
// import static org.junit.Assert.assertNull;
import static org.junit.jupiter.api.Assertions.*;

import java.io.*;

public class Test_Passwort_Check_Konsole {
 
    @Test
    public void testMain() {
        // Simulierte Benutzereingaben (1. Versuch unsicher, 2. Versuch sicher)
        String simulatedInput = String.join("\n",
                "kurz123", // zu kurz
                "PasswortMit2BUCHSTABEN", // kein Sonderzeichen, keine Ziffern
                "AbcAbcAbc123!@#", // zu kurz
                "abcABC123!@#abcABC123!@#", // gültiges Passwort
                ""
        );

        // Eingabe simulieren
        ByteArrayInputStream in = new ByteArrayInputStream(simulatedInput.getBytes());
        System.setIn(in);

        // Ausgabe abfangen
        ByteArrayOutputStream outContent = new ByteArrayOutputStream();
        PrintStream originalOut = System.out;
        System.setOut(new PrintStream(outContent));

        // Main-Methode ausführen
        Passwort_Check.main(new String[]{});

        // Wiederherstellen der Originalstreams
        System.setOut(originalOut);
        System.setIn(System.in);

        String output = outContent.toString();

        // Wichtige Ausgaben überprüfen
        assertTrue(output.contains("Passwort ist zu kurz!"));
        assertTrue(output.contains("Es fehlen Ziffern!") || output.contains("Es fehlen Sonderzeichen!"));
        assertTrue(output.contains("Passwort ist sicher."));
        assertTrue(output.contains("...und Tschüss"));
    }
}

