# Testing md5 module

import warnings

warnings.filterwarnings("ignore", "the md5 module is deprecated.*",

                        DeprecationWarning)



import unittest

from md5 import md5

from test import test_support



def hexstr(s):

    import string

    h = string.hexdigits

    r = ''

    for c in s:

        i = ord(c)

        r = r + h[(i >> 4) & 0xF] + h[i & 0xF]

    return r



class MD5_Test(unittest.TestCase):



    def md5test(self, s, expected):

        self.assertEqual(hexstr(md5(s).digest()), expected)

        self.assertEqual(md5(s).hexdigest(), expected)



    def test_basics(self):

        eq = self.md5test

        eq('', 'd41d8cd98f00b204e9800998ecf8427e')

        eq('a', '0cc175b9c0f1b6a831c399e269772661')

        eq('abc', '900150983cd24fb0d6963f7d28e17f72')

        eq('message digest', 'f96b697d7cb7938d525a2f31aaf161d0')

        eq('abcdefghijklmnopqrstuvwxyz', 'c3fcd3d76192e4007dfb496cca67e13b')

        eq('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789',

           'd174ab98d277d9f5a5611c2c9f419d9f')

        eq('12345678901234567890123456789012345678901234567890123456789012345678901234567890',

           '57edf4a22be3c955ac49da2e2107b67a')



    def test_hexdigest(self):

        # hexdigest is new with Python 2.0

        m = md5('testing the hexdigest method')

        h = m.hexdigest()

        self.assertEqual(hexstr(m.digest()), h)



    def test_large_update(self):

        aas = 'a' * 64

        bees = 'b' * 64

        cees = 'c' * 64



        m1 = md5()

        m1.update(aas)

        m1.update(bees)

        m1.update(cees)



        m2 = md5()

        m2.update(aas + bees + cees)

        self.assertEqual(m1.digest(), m2.digest())



def test_main():

    test_support.run_unittest(MD5_Test)



if __name__ == '__main__':

    test_main()

