import unittest

from chainlib.eth.address import (
        is_address,
        is_checksum_address,
        to_checksum,
        )

from tests.base import TestBase


class TestChain(TestBase):

    def test_chain_spec(self):
        checksum_address = '0xEb3907eCad74a0013c259D5874AE7f22DcBcC95C'
        plain_address = checksum_address.lower()

        self.assertEqual(checksum_address, to_checksum(checksum_address))

        self.assertTrue(is_address(plain_address))
        self.assertFalse(is_checksum_address(plain_address))
        self.assertTrue(is_checksum_address(checksum_address))

        self.assertFalse(is_address(plain_address + "00"))
        self.assertFalse(is_address(plain_address[:len(plain_address)-2]))

        with self.assertRaises(ValueError):
            to_checksum(plain_address + "00")

        with self.assertRaises(ValueError):
            to_checksum(plain_address[:len(plain_address)-2])


if __name__ == '__main__':
    unittest.main()