Fix calculator empty input handling and add tests

#4
by Nafris - opened
Files changed (2) hide show
  1. gradio_calculator.py +1 -1
  2. test_calculator.py +49 -0
gradio_calculator.py CHANGED
@@ -20,7 +20,7 @@ def calculate(num1, num2, operation):
20
  return "Invalid operation"
21
 
22
  return result
23
- except ValueError:
24
  return "Please enter valid numbers"
25
 
26
 
 
20
  return "Invalid operation"
21
 
22
  return result
23
+ except (ValueError, TypeError):
24
  return "Please enter valid numbers"
25
 
26
 
test_calculator.py ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import sys
2
+ import unittest
3
+ from unittest.mock import MagicMock
4
+
5
+ # Ensure test can run even if gradio is not installed in the environment
6
+ if "gradio" not in sys.modules:
7
+ sys.modules["gradio"] = MagicMock()
8
+
9
+ from gradio_calculator import calculate
10
+
11
+
12
+ class TestCalculator(unittest.TestCase):
13
+
14
+ def test_arithmetic_operations(self):
15
+ self.assertEqual(calculate(10, 5, "+"), 15.0)
16
+ self.assertEqual(calculate(10, 5, "-"), 5.0)
17
+ self.assertEqual(calculate(10, 5, "*"), 50.0)
18
+ self.assertEqual(calculate(10, 5, "/"), 2.0)
19
+
20
+ def test_division_by_zero(self):
21
+ self.assertEqual(calculate(10, 0, "/"), "Cannot divide by zero")
22
+ self.assertEqual(calculate(10, 0.0, "/"), "Cannot divide by zero")
23
+ self.assertEqual(calculate(10, -0.0, "/"), "Cannot divide by zero")
24
+
25
+ def test_invalid_string_inputs(self):
26
+ self.assertEqual(calculate("abc", 5, "+"), "Please enter valid numbers")
27
+ self.assertEqual(calculate(10, "xyz", "+"), "Please enter valid numbers")
28
+ self.assertEqual(calculate("abc", "xyz", "+"), "Please enter valid numbers")
29
+
30
+ def test_empty_first_input(self):
31
+ # Case 1 from confirmed bug: calculate(None, 5, "+")
32
+ self.assertEqual(calculate(None, 5, "+"), "Please enter valid numbers")
33
+
34
+ def test_empty_second_input(self):
35
+ # Case 2 from confirmed bug: calculate(10, None, "+")
36
+ self.assertEqual(calculate(10, None, "+"), "Please enter valid numbers")
37
+
38
+ def test_both_inputs_empty(self):
39
+ # Case 3 from confirmed bug: calculate(None, None, "+")
40
+ self.assertEqual(calculate(None, None, "+"), "Please enter valid numbers")
41
+
42
+ def test_invalid_operation(self):
43
+ self.assertEqual(calculate(10, 5, "%"), "Invalid operation")
44
+ self.assertEqual(calculate(10, 5, None), "Invalid operation")
45
+
46
+
47
+ if __name__ == "__main__":
48
+ unittest.main()
49
+