"""Test suite untuk seluruh function pada example_package."""

from example_package import hitung_kata, ringkas, slugify


class TestSlugify:
    def test_teks_biasa_dengan_tanda_baca(self):
        assert slugify("Belajar Python Dasar!") == "belajar-python-dasar"

    def test_spasi_berulang_dipadatkan(self):
        assert slugify("  Halo,   Dunia!  ") == "halo-dunia"

    def test_karakter_diakritik_dinormalisasi(self):
        assert slugify("Café Résumé") == "cafe-resume"

    def test_angka_dan_titik(self):
        assert slugify("Python 3.12") == "python-3-12"

    def test_teks_kosong(self):
        assert slugify("") == ""

    def test_tanpa_karakter_alfanumerik(self):
        assert slugify("!!! ???") == ""


class TestHitungKata:
    def test_teks_biasa(self):
        assert hitung_kata("Belajar Python sambil praktik") == 4

    def test_whitespace_campuran(self):
        assert hitung_kata("  spasi\ttab\ndua\n\nkata  ") == 4

    def test_teks_kosong(self):
        assert hitung_kata("") == 0


class TestRingkas:
    def test_teks_pendek_tidak_berubah(self):
        teks = "Belajar Python"
        assert ringkas(teks, 50) == teks

    def test_panjang_sama_dengan_teks(self):
        assert ringkas("Python", 6) == "Python"

    def test_teks_panjang_dipotong(self):
        teks = "Belajar Python di Course ini sampai tuntas"
        assert ringkas(teks, 20) == "Belajar Python di..."

    def test_akhir_kustom(self):
        teks = "Belajar Python di Course ini sampai tuntas"
        assert ringkas(teks, 25, akhir="…") == "Belajar Python di Course…"

    def test_panjang_lebih_kecil_dari_akhir(self):
        assert ringkas("abcdefghij", 2) == "ab"
