class TddInPyhton(unittest.TestCase):
    def setUp(self):
        self.calc = Calculator()
        self.values = range(10)

    def test_add_method_return_correct_result(self):
        result = self.calc.add(2, 2)
        self.assertEqual(4, result)

    def test_sub_method_return_correct_result(self):
        result = self.calc.sub(4, 2)
        self.assertEqual(2, result)

    def test_multy_return_correct_result(self):
        result = self.calc.multy(2, 3)
        self.assertEqual(6, result)

    def test_divi_return_correct_result(self):
        result = self.calc.divi(6, 3)
        self.assertEqual(2, result)

    def test_isLegal_add_random(self):
        result = self.calc.isLegal("add")
        self.assertTrue(result)

    def test_isLegal_addSign_random(self):
        result = self.calc.isLegal("+")
        self.assertTrue(result)

    def test_isLegal_subSign_random(self):
        result = self.calc.isLegal("-")
        self.assertTrue(result)

    def test_isLegal_sub_true(self):
        result = self.calc.isLegal("sub")
        self.assertTrue(result)

    def test_isLegal_divi_true(self):
        result = self.calc.isLegal("divi")
        self.assertTrue(result)

    def test_isLegal_subSign_random(self):
        result = self.calc.isLegal("/")
        self.assertTrue(result)

    def test_isLegal_multy_true(self):
        result = self.calc.isLegal("multy")
        self.assertTrue(result)

    def test_isLegal_random_false(self):
        result = self.calc.isLegal("false")
        self.assertFalse(result)

    def test_divi_return_error_result(self):
        self.assertRaises(ValueError, self.calc.cantBeZero, 0)
        self.assertRaises(ValueError, self.calc.divi, 5, 0)

    def test_error_message(self):
        self.assertRaises(ValueError, self.calc.validateNumber, "two", "three")
        self.assertRaises(ValueError, self.calc.validateNumber, 1, "three")
        self.assertRaises(ValueError, self.calc.validateNumber, "1", "three")
        self.assertRaises(ValueError, self.calc.validateNumber, "1", "6")

    def test_none_error_message(self):
        try:
            self.calc.validateNumber(2, 3)
            self.calc.validateNumber(0, 3)
            self.calc.validateNumber(0, 0)
        except ValueError:
            self.fail("validateNumber() raised ValueError unexpectedly!")