import pytest

from spacy.lang.ta import Tamil
from spacy.symbols import ORTH

TA_BASIC_TOKENIZATION_TESTS = [
    (
        "கிறிஸ்துமஸ் மற்றும் இனிய புத்தாண்டு வாழ்த்துக்கள்",
        ["கிறிஸ்துமஸ்", "மற்றும்", "இனிய", "புத்தாண்டு", "வாழ்த்துக்கள்"],
    ),
    (
        "எனக்கு என் குழந்தைப் பருவம் நினைவிருக்கிறது",
        ["எனக்கு", "என்", "குழந்தைப்", "பருவம்", "நினைவிருக்கிறது"],
    ),
    ("உங்கள் பெயர் என்ன?", ["உங்கள்", "பெயர்", "என்ன", "?"]),
    (
        "ஏறத்தாழ இலங்கைத் தமிழரில் மூன்றிலொரு பங்கினர் இலங்கையை விட்டு வெளியேறிப் பிற நாடுகளில் வாழ்கின்றனர்",
        [
            "ஏறத்தாழ",
            "இலங்கைத்",
            "தமிழரில்",
            "மூன்றிலொரு",
            "பங்கினர்",
            "இலங்கையை",
            "விட்டு",
            "வெளியேறிப்",
            "பிற",
            "நாடுகளில்",
            "வாழ்கின்றனர்",
        ],
    ),
    (
        "இந்த ஃபோனுடன் சுமார் ரூ.2,990 மதிப்புள்ள போட் ராக்கர்ஸ் நிறுவனத்தின் ஸ்போர்ட் புளூடூத் ஹெட்போன்ஸ் இலவசமாக வழங்கப்படவுள்ளது.",
        [
            "இந்த",
            "ஃபோனுடன்",
            "சுமார்",
            "ரூ.2,990",
            "மதிப்புள்ள",
            "போட்",
            "ராக்கர்ஸ்",
            "நிறுவனத்தின்",
            "ஸ்போர்ட்",
            "புளூடூத்",
            "ஹெட்போன்ஸ்",
            "இலவசமாக",
            "வழங்கப்படவுள்ளது",
            ".",
        ],
    ),
    (
        "மட்டக்களப்பில் பல இடங்களில் வீட்டுத் திட்டங்களுக்கு இன்று அடிக்கல் நாட்டல்",
        [
            "மட்டக்களப்பில்",
            "பல",
            "இடங்களில்",
            "வீட்டுத்",
            "திட்டங்களுக்கு",
            "இன்று",
            "அடிக்கல்",
            "நாட்டல்",
        ],
    ),
    (
        "ஐ போன்க்கு முகத்தை வைத்து அன்லாக் செய்யும் முறை மற்றும் விரலால் தொட்டு அன்லாக் செய்யும் முறையை வாட்ஸ் ஆப் நிறுவனம் இதற்கு முன் கண்டுபிடித்தது",
        [
            "ஐ",
            "போன்க்கு",
            "முகத்தை",
            "வைத்து",
            "அன்லாக்",
            "செய்யும்",
            "முறை",
            "மற்றும்",
            "விரலால்",
            "தொட்டு",
            "அன்லாக்",
            "செய்யும்",
            "முறையை",
            "வாட்ஸ்",
            "ஆப்",
            "நிறுவனம்",
            "இதற்கு",
            "முன்",
            "கண்டுபிடித்தது",
        ],
    ),
    (
        "இது ஒரு வாக்கியம்.",
        [
            "இது",
            "ஒரு",
            "வாக்கியம்",
            ".",
        ],
    ),
    (
        "தன்னாட்சி கார்கள் காப்பீட்டு பொறுப்பை உற்பத்தியாளரிடம் மாற்றுகின்றன",
        [
            "தன்னாட்சி",
            "கார்கள்",
            "காப்பீட்டு",
            "பொறுப்பை",
            "உற்பத்தியாளரிடம்",
            "மாற்றுகின்றன",
        ],
    ),
    (
        "நடைபாதை விநியோக ரோபோக்களை தடை செய்வதை சான் பிரான்சிஸ்கோ கருதுகிறது",
        [
            "நடைபாதை",
            "விநியோக",
            "ரோபோக்களை",
            "தடை",
            "செய்வதை",
            "சான்",
            "பிரான்சிஸ்கோ",
            "கருதுகிறது",
        ],
    ),
    (
        "லண்டன் ஐக்கிய இராச்சியத்தில் ஒரு பெரிய நகரம்.",
        [
            "லண்டன்",
            "ஐக்கிய",
            "இராச்சியத்தில்",
            "ஒரு",
            "பெரிய",
            "நகரம்",
            ".",
        ],
    ),
    (
        "என்ன வேலை செய்கிறீர்கள்?",
        [
            "என்ன",
            "வேலை",
            "செய்கிறீர்கள்",
            "?",
        ],
    ),
    (
        "எந்த கல்லூரியில் படிக்கிறாய்?",
        [
            "எந்த",
            "கல்லூரியில்",
            "படிக்கிறாய்",
            "?",
        ],
    ),
]


@pytest.mark.parametrize("text,expected_tokens", TA_BASIC_TOKENIZATION_TESTS)
def test_ta_tokenizer_basic(ta_tokenizer, text, expected_tokens):
    tokens = ta_tokenizer(text)
    token_list = [token.text for token in tokens]
    assert expected_tokens == token_list


@pytest.mark.parametrize(
    "text,expected_tokens",
    [
        (
            "ஆப்பிள் நிறுவனம் யு.கே. தொடக்க நிறுவனத்தை ஒரு லட்சம் கோடிக்கு வாங்கப் பார்க்கிறது",
            [
                "ஆப்பிள்",
                "நிறுவனம்",
                "யு.கே.",
                "தொடக்க",
                "நிறுவனத்தை",
                "ஒரு",
                "லட்சம்",
                "கோடிக்கு",
                "வாங்கப்",
                "பார்க்கிறது",
            ],
        )
    ],
)
def test_ta_tokenizer_special_case(text, expected_tokens):
    # Add a special rule to tokenize the initialism "யு.கே." (U.K., as
    # in the country) as a single token.
    nlp = Tamil()
    nlp.tokenizer.add_special_case("யு.கே.", [{ORTH: "யு.கே."}])
    tokens = nlp(text)

    token_list = [token.text for token in tokens]
    assert expected_tokens == token_list
