import pytest
from aclc_ba.tokenizer.tokenize import Tokenize


@pytest.mark.parametrize(
    "text",
    [
        """في استفتاء ضمني علي رئاسة بوش‏:‏
    توقعات باستعادة الديمقراطيين السيطرة علي مجلس النواب بعد‏12‏ عاما
    
    واشنطن ـ وكالات الأنباء 
    

    في استفتاء ضمني علي رئاسة جورج بوش‏,‏ توافد الناخبون الأمريكيون أمس علي لجان الاقتراع للإدلاء بأصواتهم في انتخابات التجديد النصفي للكونجرس الأمريكي‏,‏ وسط توقعات المراقبين واستطلاعات الرأي بأن يستعيد خصومه الديمقراطيون سيطرتهم علي الأغلبية في مجلس النواب للمرة الأولي منذ عام‏1994.‏ وسوف يختار الناخبون في هذه الانتخابات مجلسا جديدا بالكامل للنواب مكونا من‏435‏ عضوا‏,‏ بالإضافة إلي‏33‏ عضوا بمجلس الشيوخ المؤلف من مائة عضو‏,‏ و‏36‏ من حكام الولايات الخمسين‏,‏ وعدد من المسئولين المحليين‏,‏وخيمت علي عملية الاقتراع سلسلة من القضايا الخارجية والمحلية التي تهم الناخب الأمريكي‏,‏ بداية من حرب العراق‏,‏ والحرب ضد الإرهاب عالميا بتأثيراتها المحلية‏,‏ ونهاية بعدة قضايا محلية تتعلق بتشريعات داخل ولايات مختلفة‏,‏ ومنعا لتكرار مشكلة فرز الأصوات في انتخابات الرئاسة عام‏2000‏ بولاية فلوريدا‏,‏ قرر الحزبان الجمهوري والديمقراطي حشد أكثر من عشرة آلاف محام لكشف أي نوع من المخالفات النظامية‏,‏ وحشد الحزب الديمقراطي وحده نحو سبعة آلاف محام في‏19‏ ولاية‏.‏

    وفي آخر جولاتهما الانتخابية قبل بدء عملية الاقتراع‏,‏ قاد الرئيس جورج بوش‏,‏ والرئيس السابق بيل كلينتون الحملة الدعائية لحزبيهما‏.‏ """
    ],
)
class TestTokenize:
    def test_tokenized_with_text_to_tokenize(self, text) -> None:
        expected_tokenized_document = [
            ["/D"],
            ["/T"],
            ["في", "استفتاء", "ضمني", "علي", "رئاسة", "بوش", ":"],
            ["T/"],
            ["/P"],
            [
                "توقعات",
                "باستعادة",
                "الديمقراطيين",
                "السيطرة",
                "علي",
                "مجلس",
                "النواب",
                "بعد",
                "12",
                "عاما",
            ],
            ["P/"],
            ["/P"],
            ["واشنطن", "ـ", "وكالات", "الأنباء"],
            ["P/"],
            ["/P"],
            [
                "في",
                "استفتاء",
                "ضمني",
                "علي",
                "رئاسة",
                "جورج",
                "بوش",
                ",",
                "توافد",
                "الناخبون",
                "الأمريكيون",
                "أمس",
                "علي",
                "لجان",
                "الاقتراع",
                "للإدلاء",
                "بأصواتهم",
                "في",
                "انتخابات",
                "التجديد",
                "النصفي",
                "للكونجرس",
                "الأمريكي",
                ",",
                "وسط",
                "توقعات",
                "المراقبين",
                "واستطلاعات",
                "الرأي",
                "بأن",
                "يستعيد",
                "خصومه",
                "الديمقراطيون",
                "سيطرتهم",
                "علي",
                "الأغلبية",
                "في",
                "مجلس",
                "النواب",
                "للمرة",
                "الأولي",
                "منذ",
                "عام",
                "1994",
                ".",
                "وسوف",
                "يختار",
                "الناخبون",
                "في",
                "هذه",
                "الانتخابات",
                "مجلسا",
                "جديدا",
                "بالكامل",
                "للنواب",
                "مكونا",
                "من",
                "435",
                "عضوا",
                ",",
                "بالإضافة",
                "إلي",
                "33",
                "عضوا",
                "بمجلس",
                "الشيوخ",
                "المؤلف",
                "من",
                "مائة",
                "عضو",
                ",",
                "و",
                "36",
                "من",
                "حكام",
                "الولايات",
                "الخمسين",
                ",",
                "وعدد",
                "من",
                "المسئولين",
                "المحليين",
                ",",
                "وخيمت",
                "علي",
                "عملية",
                "الاقتراع",
                "سلسلة",
                "من",
                "القضايا",
                "الخارجية",
                "والمحلية",
                "التي",
                "تهم",
                "الناخب",
                "الأمريكي",
                ",",
                "بداية",
                "من",
                "حرب",
                "العراق",
                ",",
                "والحرب",
                "ضد",
                "الإرهاب",
                "عالميا",
                "بتأثيراتها",
                "المحلية",
                ",",
                "ونهاية",
                "بعدة",
                "قضايا",
                "محلية",
                "تتعلق",
                "بتشريعات",
                "داخل",
                "ولايات",
                "مختلفة",
                ",",
                "ومنعا",
                "لتكرار",
                "مشكلة",
                "فرز",
                "الأصوات",
                "في",
                "انتخابات",
                "الرئاسة",
                "عام",
                "2000",
                "بولاية",
                "فلوريدا",
                ",",
                "قرر",
                "الحزبان",
                "الجمهوري",
                "والديمقراطي",
                "حشد",
                "أكثر",
                "من",
                "عشرة",
                "آلاف",
                "محام",
                "لكشف",
                "أي",
                "نوع",
                "من",
                "المخالفات",
                "النظامية",
                ",",
                "وحشد",
                "الحزب",
                "الديمقراطي",
                "وحده",
                "نحو",
                "سبعة",
                "آلاف",
                "محام",
                "في",
                "19",
                "ولاية",
                ".",
            ],
            ["P/"],
            ["/P"],
            [
                "وفي",
                "آخر",
                "جولاتهما",
                "الانتخابية",
                "قبل",
                "بدء",
                "عملية",
                "الاقتراع",
                ",",
                "قاد",
                "الرئيس",
                "جورج",
                "بوش",
                ",",
                "والرئيس",
                "السابق",
                "بيل",
                "كلينتون",
                "الحملة",
                "الدعائية",
                "لحزبيهما",
                ".",
            ],
            ["P/"],
            ["D/"],
        ]
        tokenized_document = Tokenize(text_to_tokenize=text)
        result_tokenized_document = tokenized_document.tokenized
        assert result_tokenized_document == expected_tokenized_document


def test_tokenized_with_list_to_tokenize() -> None:
    segmented_text = [
        "/D",
        "/T",
        "في استفتاء ضمني علي رئاسة بوش\u200f : \u200f",
        "T/",
        "/P",
        "توقعات باستعادة الديمقراطيين السيطرة علي مجلس النواب بعد\u200f12\u200f عاما",
        "P/",
        "/P",
        "واشنطن ـ وكالات الأنباء ",
        "P/",
        "/P",
        "في استفتاء ضمني علي رئاسة جورج بوش\u200f , \u200f توافد الناخبون الأمريكيون أمس علي لجان الاقتراع للإدلاء بأصواتهم في انتخابات التجديد النصفي للكونجرس الأمريكي\u200f , \u200f وسط توقعات المراقبين واستطلاعات الرأي بأن يستعيد خصومه الديمقراطيون سيطرتهم علي الأغلبية في مجلس النواب للمرة الأولي منذ عام\u200f1994 . \u200f وسوف يختار الناخبون في هذه الانتخابات مجلسا جديدا بالكامل للنواب مكونا من\u200f435\u200f عضوا\u200f , \u200f بالإضافة إلي\u200f33\u200f عضوا بمجلس الشيوخ المؤلف من مائة عضو\u200f , \u200f و\u200f36\u200f من حكام الولايات الخمسين\u200f , \u200f وعدد من المسئولين المحليين\u200f , \u200fوخيمت علي عملية الاقتراع سلسلة من القضايا الخارجية والمحلية التي تهم الناخب الأمريكي\u200f , \u200f بداية من حرب العراق\u200f , \u200f والحرب ضد الإرهاب عالميا بتأثيراتها المحلية\u200f , \u200f ونهاية بعدة قضايا محلية تتعلق بتشريعات داخل ولايات مختلفة\u200f , \u200f ومنعا لتكرار مشكلة فرز الأصوات في انتخابات الرئاسة عام\u200f2000\u200f بولاية فلوريدا\u200f , \u200f قرر الحزبان الجمهوري والديمقراطي حشد أكثر من عشرة آلاف محام لكشف أي نوع من المخالفات النظامية\u200f , \u200f وحشد الحزب الديمقراطي وحده نحو سبعة آلاف محام في\u200f19\u200f ولاية\u200f . \u200f",
        "P/",
        "/P",
        "وفي آخر جولاتهما الانتخابية قبل بدء عملية الاقتراع\u200f , \u200f قاد الرئيس جورج بوش\u200f , \u200f والرئيس السابق بيل كلينتون الحملة الدعائية لحزبيهما\u200f . \u200f ",
        "P/",
        "D/",
    ]
    expected_tokenized_document = [
        ["/D"],
        ["/T"],
        ["في", "استفتاء", "ضمني", "علي", "رئاسة", "بوش", ":"],
        ["T/"],
        ["/P"],
        [
            "توقعات",
            "باستعادة",
            "الديمقراطيين",
            "السيطرة",
            "علي",
            "مجلس",
            "النواب",
            "بعد",
            "12",
            "عاما",
        ],
        ["P/"],
        ["/P"],
        ["واشنطن", "ـ", "وكالات", "الأنباء"],
        ["P/"],
        ["/P"],
        [
            "في",
            "استفتاء",
            "ضمني",
            "علي",
            "رئاسة",
            "جورج",
            "بوش",
            ",",
            "توافد",
            "الناخبون",
            "الأمريكيون",
            "أمس",
            "علي",
            "لجان",
            "الاقتراع",
            "للإدلاء",
            "بأصواتهم",
            "في",
            "انتخابات",
            "التجديد",
            "النصفي",
            "للكونجرس",
            "الأمريكي",
            ",",
            "وسط",
            "توقعات",
            "المراقبين",
            "واستطلاعات",
            "الرأي",
            "بأن",
            "يستعيد",
            "خصومه",
            "الديمقراطيون",
            "سيطرتهم",
            "علي",
            "الأغلبية",
            "في",
            "مجلس",
            "النواب",
            "للمرة",
            "الأولي",
            "منذ",
            "عام",
            "1994",
            ".",
            "وسوف",
            "يختار",
            "الناخبون",
            "في",
            "هذه",
            "الانتخابات",
            "مجلسا",
            "جديدا",
            "بالكامل",
            "للنواب",
            "مكونا",
            "من",
            "435",
            "عضوا",
            ",",
            "بالإضافة",
            "إلي",
            "33",
            "عضوا",
            "بمجلس",
            "الشيوخ",
            "المؤلف",
            "من",
            "مائة",
            "عضو",
            ",",
            "و",
            "36",
            "من",
            "حكام",
            "الولايات",
            "الخمسين",
            ",",
            "وعدد",
            "من",
            "المسئولين",
            "المحليين",
            ",",
            "وخيمت",
            "علي",
            "عملية",
            "الاقتراع",
            "سلسلة",
            "من",
            "القضايا",
            "الخارجية",
            "والمحلية",
            "التي",
            "تهم",
            "الناخب",
            "الأمريكي",
            ",",
            "بداية",
            "من",
            "حرب",
            "العراق",
            ",",
            "والحرب",
            "ضد",
            "الإرهاب",
            "عالميا",
            "بتأثيراتها",
            "المحلية",
            ",",
            "ونهاية",
            "بعدة",
            "قضايا",
            "محلية",
            "تتعلق",
            "بتشريعات",
            "داخل",
            "ولايات",
            "مختلفة",
            ",",
            "ومنعا",
            "لتكرار",
            "مشكلة",
            "فرز",
            "الأصوات",
            "في",
            "انتخابات",
            "الرئاسة",
            "عام",
            "2000",
            "بولاية",
            "فلوريدا",
            ",",
            "قرر",
            "الحزبان",
            "الجمهوري",
            "والديمقراطي",
            "حشد",
            "أكثر",
            "من",
            "عشرة",
            "آلاف",
            "محام",
            "لكشف",
            "أي",
            "نوع",
            "من",
            "المخالفات",
            "النظامية",
            ",",
            "وحشد",
            "الحزب",
            "الديمقراطي",
            "وحده",
            "نحو",
            "سبعة",
            "آلاف",
            "محام",
            "في",
            "19",
            "ولاية",
            ".",
        ],
        ["P/"],
        ["/P"],
        [
            "وفي",
            "آخر",
            "جولاتهما",
            "الانتخابية",
            "قبل",
            "بدء",
            "عملية",
            "الاقتراع",
            ",",
            "قاد",
            "الرئيس",
            "جورج",
            "بوش",
            ",",
            "والرئيس",
            "السابق",
            "بيل",
            "كلينتون",
            "الحملة",
            "الدعائية",
            "لحزبيهما",
            ".",
        ],
        ["P/"],
        ["D/"],
    ]
    tokenized_document = Tokenize(list_to_tokenize=segmented_text)
    result_tokenized_document = tokenized_document.tokenized
    assert result_tokenized_document == expected_tokenized_document


def test_tokenized_with_list_to_check_main_tokenization() -> None:
    passed_tokenized_list = [
        "10مساء",
        "يسميHostingSite",
        "الانتاج261.5",
        "متقدما1/صفر",
        "موقعwww.arabia.msn.com",
        "0/5محرزا",
        "سعره6%",
        "الجبلين;",
        "محاولة)",
        "كابوس2001/9/11",
    ]
    expected_tokenized_list = [
        ["10", "مساء"],
        ["يسمي", "HostingSite"],
        ["الانتاج", "261.5"],
        ["متقدما", "1/", "صفر"],
        ["موقع", "www.arabia.msn.com"],
        ["0/5", "محرزا"],
        ["سعره", "6%"],
        ["الجبلين ;"],
        ["محاولة )"],
        ["كابوس", "2001/9/11"],
    ]
    tokenized_list = Tokenize(list_to_tokenize=passed_tokenized_list)
    result_tokenized_list = tokenized_list.tokenized
    assert result_tokenized_list == expected_tokenized_list
