#
import pytest
from load_one_data import dump_diff, dump_diff_text, dump_same_and_not_same, one_dump_test_no_labels

from ArWikiCats import resolve_arabic_category_label

data_0 = {
    "Category:American science and technology awards": "",
    "Category:Appropriate technology": "",
    "Category:Assistive technology": "",
    "Category:Banking technology": "",
    "Category:British science and technology awards": "",
    "Category:Building technology": "",
    "Category:Canadian science and technology awards": "",
    "Category:Cleanroom technology": "",
    "Category:Digital technology": "",
    "Category:Display technology": "",
    "Category:Display technology companies": "",
    "Category:DNA nanotechnology": "",
    "Category:Drilling technology": "",
    "Category:Dutch science and technology awards": "",
    "Category:Electronic paper technology": "",
    "Category:European Union technology policy": "",
    "Category:Fiction about nanotechnology": "",
    "Category:Fictional technology": "",
    "Category:Film and video technology templates": "",
    "Category:Financial technology": "",
    "Category:Flavor technology": "",
    "Category:Food technology": "",
    "Category:French science and technology awards": "",
    "Category:German science and technology awards": "",
    "Category:High-technology business districts": "",
    "Category:Hypothetical technology": "",
    "Category:Indian science and technology awards": "",
    "Category:Information technology companies": "",
    "Category:Information technology companies by country": "",
    "Category:Information technology places": "",
    "Category:Internet technology companies": "",
    "Category:Missile technology": "",
    "Category:Nanotechnology": "",
    "Category:Nanotechnology and the environment": "",
    "Category:Nanotechnology companies": "",
    "Category:Nanotechnology templates": "",
    "Category:Neurotechnology": "",
    "Category:Nuclear technology companies of the United States": "",
    "Category:Nuclear technology organizations of Japan": "",
    "Category:Power station technology": "",
    "Category:Radio technology templates": "",
    "Category:Russian science and technology awards": "",
    "Category:Science, technology, and engineering WikiProjects": "",
    "Category:Science and technology in Prayagraj": "",
    "Category:Sound production technology": "",
    "Category:Sound recording technology": "",
    "Category:Swedish science and technology awards": "",
    "Category:Travel technology": "",
    "Category:Waste treatment technology": "",
    "Category:Water technology": "",
    "Category:Web technology": "",
}

data_fast = {
    "Category:American technology journalists": "تصنيف:صحفيو تقانة أمريكيون",
    "Category:American technology writers": "تصنيف:كتاب تقانة أمريكيون",
    "Category:Australian technology writers": "تصنيف:كتاب تقانة أستراليون",
    "Category:Austrian technology writers": "تصنيف:كتاب تقانة نمساويون",
    "Category:British technology journalists": "تصنيف:صحفيو تقانة بريطانيون",
    "Category:Chinese technology writers": "تصنيف:كتاب تقانة صينيون",
    "Category:Environmental technology": "تصنيف:تقانة بيئية",
    "Category:Films by technology": "تصنيف:أفلام حسب التقانة",
    "Category:French technology writers": "تصنيف:كتاب تقانة فرنسيون",
    "Category:Greek technology writers": "تصنيف:كتاب تقانة يونانيون",
    "Category:Information technology by country": "تصنيف:تقانة المعلومات حسب البلد",
    "Category:Information technology companies of Africa": "تصنيف:شركات تقانة المعلومات في إفريقيا",
    "Category:Information technology companies of Africa by country": "تصنيف:شركات تقانة المعلومات في إفريقيا حسب البلد",
    "Category:Information technology companies of Australia": "تصنيف:شركات تقانة المعلومات في أستراليا",
    "Category:Information technology companies of Egypt": "تصنيف:شركات تقانة المعلومات في مصر",
    "Category:Information technology companies of France": "تصنيف:شركات تقانة المعلومات في فرنسا",
    "Category:Information technology companies of India": "تصنيف:شركات تقانة المعلومات في الهند",
    "Category:Information technology companies of Japan": "تصنيف:شركات تقانة المعلومات في اليابان",
    "Category:Information technology companies of Russia": "تصنيف:شركات تقانة المعلومات في روسيا",
    "Category:Information technology companies of South Korea": "تصنيف:شركات تقانة المعلومات في كوريا الجنوبية",
    "Category:Information technology companies of the United States": "تصنيف:شركات تقانة المعلومات في الولايات المتحدة",
    "Category:Information technology in Australia": "تصنيف:تقانة المعلومات في أستراليا",
    "Category:Information technology in Brazil": "تصنيف:تقانة المعلومات في البرازيل",
    "Category:Information technology in Bulgaria": "تصنيف:تقانة المعلومات في بلغاريا",
    "Category:Information technology in Canada": "تصنيف:تقانة المعلومات في كندا",
    "Category:Information technology in Chile": "تصنيف:تقانة المعلومات في تشيلي",
    "Category:Information technology in China": "تصنيف:تقانة المعلومات في الصين",
    "Category:Information technology in Denmark": "تصنيف:تقانة المعلومات في الدنمارك",
    "Category:Information technology in France": "تصنيف:تقانة المعلومات في فرنسا",
    "Category:Information technology in Germany": "تصنيف:تقانة المعلومات في ألمانيا",
    "Category:Information technology in India": "تصنيف:تقانة المعلومات في الهند",
    "Category:Information technology in Israel": "تصنيف:تقانة المعلومات في إسرائيل",
    "Category:Information technology in Japan": "تصنيف:تقانة المعلومات في اليابان",
    "Category:Information technology in Kazakhstan": "تصنيف:تقانة المعلومات في كازاخستان",
    "Category:Information technology in Mali": "تصنيف:تقانة المعلومات في مالي",
    "Category:Information technology in Mauritius": "تصنيف:تقانة المعلومات في موريشيوس",
    "Category:Information technology in Mexico": "تصنيف:تقانة المعلومات في المكسيك",
    "Category:Information technology in New Zealand": "تصنيف:تقانة المعلومات في نيوزيلندا",
    "Category:Information technology in Nigeria": "تصنيف:تقانة المعلومات في نيجيريا",
    "Category:Information technology in North Korea": "تصنيف:تقانة المعلومات في كوريا الشمالية",
    "Category:Information technology in Norway": "تصنيف:تقانة المعلومات في النرويج",
    "Category:Information technology in Pakistan": "تصنيف:تقانة المعلومات في باكستان",
    "Category:Information technology in Russia": "تصنيف:تقانة المعلومات في روسيا",
    "Category:Information technology in South Korea": "تصنيف:تقانة المعلومات في كوريا الجنوبية",
    "Category:Information technology in Sri Lanka": "تصنيف:تقانة المعلومات في سريلانكا",
    "Category:Information technology in Sweden": "تصنيف:تقانة المعلومات في السويد",
    "Category:Information technology in Switzerland": "تصنيف:تقانة المعلومات في سويسرا",
    "Category:Information technology in Syria": "تصنيف:تقانة المعلومات في سوريا",
    "Category:Information technology in Thailand": "تصنيف:تقانة المعلومات في تايلاند",
    "Category:Information technology in the Netherlands": "تصنيف:تقانة المعلومات في هولندا",
    "Category:Information technology in the Philippines": "تصنيف:تقانة المعلومات في الفلبين",
    "Category:Information technology in the United Arab Emirates": "تصنيف:تقانة المعلومات في الإمارات العربية المتحدة",
    "Category:Information technology in the United Kingdom": "تصنيف:تقانة المعلومات في المملكة المتحدة",
    "Category:Information technology in the United States": "تصنيف:تقانة المعلومات في الولايات المتحدة",
    "Category:Information technology in Tokelau": "تصنيف:تقانة المعلومات في توكيلاو",
    "Category:Information technology in Ukraine": "تصنيف:تقانة المعلومات في أوكرانيا",
    "Category:Irish technology writers": "تصنيف:كتاب تقانة أيرلنديون",
    "Category:Military technology": "تصنيف:تقانة عسكرية",
    "Category:Non-profit technology": "تصنيف:تقانة العمل الخيري",
    "Category:Nuclear technology in Argentina": "تصنيف:تقانة نووية في الأرجنتين",
    "Category:Nuclear technology in Australia": "تصنيف:تقانة نووية في أستراليا",
    "Category:Nuclear technology in Austria": "تصنيف:تقانة نووية في النمسا",
    "Category:Nuclear technology in Brazil": "تصنيف:تقانة نووية في البرازيل",
    "Category:Nuclear technology in China": "تصنيف:تقانة نووية في الصين",
    "Category:Nuclear technology in Denmark": "تصنيف:تقانة نووية في الدنمارك",
    "Category:Nuclear technology in Egypt": "تصنيف:تقانة نووية في مصر",
    "Category:Nuclear technology in Finland": "تصنيف:تقانة نووية في فنلندا",
    "Category:Nuclear technology in France": "تصنيف:تقانة نووية في فرنسا",
    "Category:Nuclear technology in Germany": "تصنيف:تقانة نووية في ألمانيا",
    "Category:Nuclear technology in India": "تصنيف:تقانة نووية في الهند",
    "Category:Nuclear technology in Iran": "تصنيف:تقانة نووية في إيران",
    "Category:Nuclear technology in Iraq": "تصنيف:تقانة نووية في العراق",
    "Category:Nuclear technology in Israel": "تصنيف:تقانة نووية في إسرائيل",
    "Category:Nuclear technology in Italy": "تصنيف:تقانة نووية في إيطاليا",
    "Category:Nuclear technology in Japan": "تصنيف:تقانة نووية في اليابان",
    "Category:Nuclear technology in Jordan": "تصنيف:تقانة نووية في الأردن",
    "Category:Nuclear technology in Libya": "تصنيف:تقانة نووية في ليبيا",
    "Category:Nuclear technology in New Zealand": "تصنيف:تقانة نووية في نيوزيلندا",
    "Category:Nuclear technology in North Korea": "تصنيف:تقانة نووية في كوريا الشمالية",
    "Category:Nuclear technology in Pakistan": "تصنيف:تقانة نووية في باكستان",
    "Category:Nuclear technology in Saudi Arabia": "تصنيف:تقانة نووية في السعودية",
    "Category:Nuclear technology in South Korea": "تصنيف:تقانة نووية في كوريا الجنوبية",
    "Category:Nuclear technology in Sweden": "تصنيف:تقانة نووية في السويد",
    "Category:Nuclear technology in Taiwan": "تصنيف:تقانة نووية في تايوان",
    "Category:Nuclear technology in Thailand": "تصنيف:تقانة نووية في تايلاند",
    "Category:Nuclear technology in the Czech Republic": "تصنيف:تقانة نووية في التشيك",
    "Category:Nuclear technology in the Netherlands": "تصنيف:تقانة نووية في هولندا",
    "Category:Nuclear technology in the United Kingdom": "تصنيف:تقانة نووية في المملكة المتحدة",
    "Category:Nuclear technology in the United States": "تصنيف:تقانة نووية في الولايات المتحدة",
    "Category:Nuclear technology in Turkey": "تصنيف:تقانة نووية في تركيا",
    "Category:Nuclear technology in Ukraine": "تصنيف:تقانة نووية في أوكرانيا",
    "Category:Nuclear technology organizations by country": "تصنيف:منظمات تقانة نووية حسب البلد",
    "Category:Pakistani technology writers": "تصنيف:كتاب تقانة باكستانيون",
    "Category:People in information technology": "تصنيف:أشخاص في تقانة المعلومات",
    "Category:Stealth technology": "تصنيف:تقانة التخفي",
    "Category:Video games about nuclear technology": "تصنيف:ألعاب فيديو عن تقانة نووية",
    "Category:Women technology writers": "تصنيف:كاتبات تقانة",
    "Category:Works about technology": "تصنيف:أعمال عن التقانة",
}

data_slow = {
    "Category:Aviation technology": "تصنيف:تقانة طيران",
    "Category:Businesspeople in information technology": "تصنيف:شخصيات أعمال في تقانة المعلومات",
    "Category:Businesspeople in technology": "تصنيف:شخصيات أعمال في التقانة",
    "Category:Defunct technology companies": "تصنيف:شركات تقانة سابقة",
    "Category:Defunct technology companies of the United Kingdom": "تصنيف:شركات تقانة سابقة في المملكة المتحدة",
    "Category:Documentary films about technology": "تصنيف:أفلام وثائقية عن التقانة",
    "Category:Historians of technology": "تصنيف:مؤرخو التقانة",
    "Category:History of science and technology in China": "تصنيف:تاريخ العلوم والتقانة في الصين",
    "Category:History of science and technology in England": "تصنيف:تاريخ العلوم والتقانة في إنجلترا",
    "Category:Information technology in Uruguay": "تصنيف:تقانة المعلومات في أوروغواي",
    "Category:Music technology": "تصنيف:تقانة موسيقية",
    "Category:Nuclear technology by former country": "تصنيف:تقانة نووية حسب البلد السابق",
    "Category:Nuclear technology in Kazakhstan": "تصنيف:تقانة نووية في كازاخستان",
    "Category:Nuclear technology in Russia": "تصنيف:تقانة نووية في روسيا",
    "Category:Nuclear technology in the Soviet Union": "تصنيف:تقانة نووية في الاتحاد السوفيتي",
    "Category:People associated with technology": "تصنيف:أشخاص مرتبطون مع التقانة",
    "Category:Philosophers of technology": "تصنيف:فلاسفة من التقانة",
    "Category:Politics and technology": "تصنيف:السياسة والتقانة",
    "Category:Science and technology by continent": "تصنيف:العلوم والتقانة حسب القارة",
    "Category:Science and technology by country": "تصنيف:العلوم والتقانة حسب البلد",
    "Category:Science and technology by location": "تصنيف:العلوم والتقانة حسب الموقع",
    "Category:Science and technology in Algeria": "تصنيف:العلوم والتقانة في الجزائر",
    "Category:Science and technology in Asia": "تصنيف:العلوم والتقانة في آسيا",
    "Category:Science and technology in Australia": "تصنيف:العلوم والتقانة في أستراليا",
    "Category:Science and technology in Australia by state or territory": "تصنيف:العلوم والتقانة في أستراليا حسب الولاية أو الإقليم",
    "Category:Science and technology in Austria": "تصنيف:العلوم والتقانة في النمسا",
    "Category:Science and technology in Azerbaijan": "تصنيف:العلوم والتقانة في أذربيجان",
    "Category:Science and technology in Bahrain": "تصنيف:العلوم والتقانة في البحرين",
    "Category:Science and technology in Bosnia and Herzegovina": "تصنيف:العلوم والتقانة في البوسنة والهرسك",
    "Category:Science and technology in Brazil": "تصنيف:العلوم والتقانة في البرازيل",
    "Category:Science and technology in California": "تصنيف:العلوم والتقانة في كاليفورنيا",
    "Category:Science and technology in Cambridgeshire": "تصنيف:العلوم والتقانة في كامبريدجشير",
    "Category:Science and technology in Canada": "تصنيف:العلوم والتقانة في كندا",
    "Category:Science and technology in China": "تصنيف:العلوم والتقانة في الصين",
    "Category:Science and technology in Colombia": "تصنيف:العلوم والتقانة في كولومبيا",
    "Category:Science and technology in Denmark": "تصنيف:العلوم والتقانة في الدنمارك",
    "Category:Science and technology in Devon": "تصنيف:العلوم والتقانة في ديفون",
    "Category:Science and technology in East Asia": "تصنيف:العلوم والتقانة في شرق آسيا",
    "Category:Science and technology in Egypt": "تصنيف:العلوم والتقانة في مصر",
    "Category:Science and technology in El Salvador": "تصنيف:العلوم والتقانة في السلفادور",
    "Category:Science and technology in England": "تصنيف:العلوم والتقانة في إنجلترا",
    "Category:Science and technology in Essex": "تصنيف:العلوم والتقانة في إسكس",
    "Category:Science and technology in Estonia": "تصنيف:العلوم والتقانة في إستونيا",
    "Category:Science and technology in Finland": "تصنيف:العلوم والتقانة في فنلندا",
    "Category:Science and technology in France": "تصنيف:العلوم والتقانة في فرنسا",
    "Category:Science and technology in Germany": "تصنيف:العلوم والتقانة في ألمانيا",
    "Category:Science and technology in Greater Manchester": "تصنيف:العلوم والتقانة في مانشستر الكبرى",
    "Category:Science and technology in Hampshire": "تصنيف:العلوم والتقانة في هامبشاير",
    "Category:Science and technology in Hertfordshire": "تصنيف:العلوم والتقانة في هيرتفوردشاير",
    "Category:Science and technology in India": "تصنيف:العلوم والتقانة في الهند",
    "Category:Science and technology in Iran": "تصنيف:العلوم والتقانة في إيران",
    "Category:Science and technology in Iraq": "تصنيف:العلوم والتقانة في العراق",
    "Category:Science and technology in Israel": "تصنيف:العلوم والتقانة في إسرائيل",
    "Category:Science and technology in Italy": "تصنيف:العلوم والتقانة في إيطاليا",
    "Category:Science and technology in Japan": "تصنيف:العلوم والتقانة في اليابان",
    "Category:Science and technology in Jordan": "تصنيف:العلوم والتقانة في الأردن",
    "Category:Science and technology in Korea": "تصنيف:العلوم والتقانة في كوريا",
    "Category:Science and technology in Kuwait": "تصنيف:العلوم والتقانة في الكويت",
    "Category:Science and technology in Lebanon": "تصنيف:العلوم والتقانة في لبنان",
    "Category:Science and technology in Leicestershire": "تصنيف:العلوم والتقانة في ليسترشير",
    "Category:Science and technology in London": "تصنيف:العلوم والتقانة في لندن",
    "Category:Science and technology in Merseyside": "تصنيف:العلوم والتقانة في مرزيسايد",
    "Category:Science and technology in Morocco": "تصنيف:العلوم والتقانة في المغرب",
    "Category:Science and technology in New South Wales": "تصنيف:العلوم والتقانة في نيوساوث ويلز",
    "Category:Science and technology in New York (state)": "تصنيف:العلوم والتقانة في ولاية نيويورك",
    "Category:Science and technology in North America": "تصنيف:العلوم والتقانة في أمريكا الشمالية",
    "Category:Science and technology in North Korea": "تصنيف:العلوم والتقانة في كوريا الشمالية",
    "Category:Science and technology in Norway": "تصنيف:العلوم والتقانة في النرويج",
    "Category:Science and technology in Oceania": "تصنيف:العلوم والتقانة في أوقيانوسيا",
    "Category:Science and technology in Oxfordshire": "تصنيف:العلوم والتقانة في أوكسفوردشاير",
    "Category:Science and technology in Pakistan": "تصنيف:العلوم والتقانة في باكستان",
    "Category:Science and technology in Palestine": "تصنيف:العلوم والتقانة في فلسطين",
    "Category:Science and technology in Poland": "تصنيف:العلوم والتقانة في بولندا",
    "Category:Science and technology in Qatar": "تصنيف:العلوم والتقانة في قطر",
    "Category:Science and technology in Russia": "تصنيف:العلوم والتقانة في روسيا",
    "Category:Science and technology in Saudi Arabia": "تصنيف:العلوم والتقانة في السعودية",
    "Category:Science and technology in Scotland": "تصنيف:العلوم والتقانة في إسكتلندا",
    "Category:Science and technology in Sierra Leone": "تصنيف:العلوم والتقانة في سيراليون",
    "Category:Science and technology in Slovenia": "تصنيف:العلوم والتقانة في سلوفينيا",
    "Category:Science and technology in Somerset": "تصنيف:العلوم والتقانة في سومرست",
    "Category:Science and technology in South America": "تصنيف:العلوم والتقانة في أمريكا الجنوبية",
    "Category:Science and technology in South Korea": "تصنيف:العلوم والتقانة في كوريا الجنوبية",
    "Category:Science and technology in Spain": "تصنيف:العلوم والتقانة في إسبانيا",
    "Category:Science and technology in Sudan": "تصنيف:العلوم والتقانة في السودان",
    "Category:Science and technology in Sweden": "تصنيف:العلوم والتقانة في السويد",
    "Category:Science and technology in Switzerland": "تصنيف:العلوم والتقانة في سويسرا",
    "Category:Science and technology in Syria": "تصنيف:العلوم والتقانة في سوريا",
    "Category:Science and technology in the Caribbean": "تصنيف:العلوم والتقانة في الكاريبي",
    "Category:Science and technology in the East Riding of Yorkshire": "تصنيف:العلوم والتقانة في إيست رايدينج أوف يوركشير",
    "Category:Science and technology in the Netherlands": "تصنيف:العلوم والتقانة في هولندا",
    "Category:Science and technology in the Ottoman Empire": "تصنيف:العلوم والتقانة في الدولة العثمانية",
    "Category:Science and technology in the San Francisco Bay Area": "تصنيف:العلوم والتقانة في منطقة خليج سان فرانسيسكو",
    "Category:Science and technology in the Soviet Union": "تصنيف:العلوم والتقانة في الاتحاد السوفيتي",
    "Category:Science and technology in the United Arab Emirates": "تصنيف:العلوم والتقانة في الإمارات العربية المتحدة",
    "Category:Science and technology in the United Kingdom": "تصنيف:العلوم والتقانة في المملكة المتحدة",
    "Category:Science and technology in the United States": "تصنيف:العلوم والتقانة في الولايات المتحدة",
    "Category:Science and technology in the United States by state or territory": "تصنيف:العلوم والتقانة في الولايات المتحدة حسب الولاية أو الإقليم",
    "Category:Science and technology in the West Midlands (county)": "تصنيف:العلوم والتقانة في مقاطعة ميدلاند الغربية",
    "Category:Science and technology in Tunisia": "تصنيف:العلوم والتقانة في تونس",
    "Category:Science and technology in Uruguay": "تصنيف:العلوم والتقانة في أوروغواي",
    "Category:Science and technology in Wales": "تصنيف:العلوم والتقانة في ويلز",
    "Category:Science and technology in Warwickshire": "تصنيف:العلوم والتقانة في وركشير",
    "Category:Science and technology in West Sussex": "تصنيف:العلوم والتقانة في غرب ساسكس",
    "Category:Science and technology in West Yorkshire": "تصنيف:العلوم والتقانة في غرب يوركشاير",
    "Category:Science and technology in Yemen": "تصنيف:العلوم والتقانة في اليمن",
    "Category:Sports technology": "تصنيف:تقانة رياضية",
}

to_test = [
    ("test_technology_1", data_fast),
    ("test_technology_slow", data_slow),
]


@pytest.mark.parametrize("category, expected", data_fast.items(), ids=data_fast.keys())
@pytest.mark.fast
def test_technology_1(category: str, expected: str) -> None:
    assert resolve_arabic_category_label(category) == expected


@pytest.mark.parametrize("category, expected", data_slow.items(), ids=data_slow.keys())
@pytest.mark.slow
def test_technology_slow(category: str, expected: str) -> None:
    assert resolve_arabic_category_label(category) == expected


@pytest.mark.parametrize("name,data", to_test)
@pytest.mark.dump
def test_dump_it(name: str, data: dict[str, str]) -> None:
    expected, diff_result, no_labels = one_dump_test_no_labels(data, resolve_arabic_category_label)
    dump_diff(diff_result, name)
    # dump_diff_text(expected, diff_result, name)
    # dump_same_and_not_same(data, diff_result, name, just_dump=True)
    assert (
        diff_result == expected
    ), f"Differences found: {len(diff_result):,}, len all :{len(data):,}, len no_labels: {len(no_labels):,}"
