#!/usr/bin/env python3

from __future__ import division

import unittest

from count import count_words


class CountTests(unittest.TestCase):
    """
    Tests for count words.
    """

    def test_simple_text(self):
        text = "toto tata titi titi toto"
        words = count_words(text)
        self.assertEqual(words, {"toto": 2, "tata": 1, "titi": 2})

    # Comment out this line to enable test for this bonus
    @unittest.expectedFailure
    def test_bonus1(self):
        text = "tOto Tata titI tiTi tOtO"
        words = count_words(text)
        self.assertEqual(words, {"toto": 2, "tata": 1, "titi": 2})

    # Comment out this line to enable test for this bonus
    @unittest.expectedFailure
    def test_bonus2(self):
        text = "tOto, Tata; titI. tiTi! tOtO?"
        words = count_words(text)
        self.assertEqual(words, {"toto": 2, "tata": 1, "titi": 2})

    # Comment out this line to enable test for this bonus
    @unittest.expectedFailure
    def test_big_text(self):
        # LETTRES DE MON MOULIN
        # Alphonse DAUDET
        text = """
            Ce sont les lapins qui ont ete etonnes !...
            Depuis si longtemps qu'ils voyaient la porte du moulin
            fermee, les murs et la plate-forme envahis par les herbes,
            ils avaient fini par croire que la race des meuniers etait
            eteinte, et, trouvant la place bonne, ils en avaient fait
            quelque chose comme un quartier general, un centre
            d'operations strategiques : le moulin de Jemmapes des
            lapins...
            La nuit de mon arrivee, il y en avait bien, sans mentir,
            une vingtaine assis en rond sur la plate-forme, en train
            de se chauffer les pattes a un rayon de lune...
            Le temps d'entrouvrir une lucarne, frrt !
        """  # noqa
        words = count_words(text)
        expected_words = {
            'la': 6, 'les': 4, 'en': 4, 'de': 4, 'ils': 3, 'un': 3,
            'lapins': 2, 'moulin': 2, 'et': 2, 'plate-forme': 2, 'par': 2,
            'avaient': 2, 'des': 2, 'd': 2, 'le': 2, 'une': 2, 'ce': 1,
            'sont': 1, 'qui': 1, 'ont': 1, 'ete': 1, 'etonnes': 1, 'depuis': 1,
            'si': 1, 'longtemps': 1, 'qu': 1, 'voyaient': 1, 'porte': 1,
            'du': 1, 'fermee': 1, 'murs': 1, 'envahis': 1, 'herbes': 1,
            'fini': 1, 'croire': 1, 'que': 1, 'race': 1, 'meuniers': 1,
            'etait': 1, 'eteinte': 1, 'trouvant': 1, 'place': 1, 'bonne': 1,
            'fait': 1, 'quelque': 1, 'chose': 1, 'comme': 1, 'quartier': 1,
            'general': 1, 'centre': 1, 'operations': 1, 'strategiques': 1,
            'jemmapes': 1, 'nuit': 1, 'mon': 1, 'arrivee': 1, 'il': 1, 'y': 1,
            'avait': 1, 'bien': 1, 'sans': 1, 'mentir': 1, 'vingtaine': 1,
            'assis': 1, 'rond': 1, 'sur': 1, 'train': 1, 'se': 1,
            'chauffer': 1, 'pattes': 1, 'a': 1, 'rayon': 1, 'lune': 1,
            'temps': 1, 'entrouvrir': 1, 'lucarne': 1, 'frrt': 1
        }
        self.assertEqual(words, expected_words)


if __name__ == "__main__":
    unittest.main(verbosity=2)
