class TestIntValidator(unittest.TestCase):
    """ TestCase for checking the int validator
    """
    def setUp(self):
        """ setUp function, resets nb_objects
        and creates a rectangle
        """
        Base.nbreset()
        self.rect = Rectangle(2, 2, 2, 2)

    def testStdUsage(self):
        """ standard usage
        """
        self.rect.width = 4
        self.assertEqual(self.rect.width, 4)

    def testNegID(self):
        """ negative as ID
        """
        self.rect.id = -5
        self.assertEqual(self.rect.id, -5)

    def testValidateType(self):
        """ tries to validate a float
        """
        with self.assertRaises(TypeError):
            self.rect.int_validator("x", 3.719)

    def testValidateTypeWidth(self):
        """ tries to validate a string as width
        """
        with self.assertRaises(TypeError):
            self.rect.width = "seven"

    def testValidateTypeHeight(self):
        """ tries to validate a list as height
        """
        with self.assertRaises(TypeError):
            self.rect.height = [1, 2, 3]

    def testValidateTypeX(self):
        """ tries to validate a dict as x
        """
        with self.assertRaises(TypeError):
            self.rect.x = {'key': 'value'}

    def testValidateTypeY(self):
        """ tries to validate a single character as y
        """
        with self.assertRaises(TypeError):
            self.rect.y = 'c'

    def testValidateNegWidth(self):
        """ tries a negative as width
        """
        with self.assertRaises(ValueError):
            self.rect.width = -50

    def testValidateNegHeight(self):
        """ negative height
        """
        with self.assertRaises(ValueError):
            self.rect.height = -5

    def testValidateZeroWidth(self):
        """ 0 as width
        """
        with self.assertRaises(ValueError):
            self.rect.width = 0

    def testValidateZeroHeight(self):
        """ 0 as height
        """
        with self.assertRaises(ValueError):
            self.rect.height = 0

    def testValidateZeroX(self):
        """ 0 as x
        """
        self.rect.x = 0
        self.assertEqual(self.rect.x, 0)

    def testValidateNegX(self):
        """ negative as x
        """
        with self.assertRaises(ValueError):
            self.rect.x = -15

    def testValidateZeroY(self):
        """ 0 as y
        """
        self.rect.y = 0
        self.assertEqual(self.rect.y, 0)

    def testValidateNegY(self):
        """ negative as y
        """
        with self.assertRaises(ValueError):
            self.rect.y = -1