3
from tkinter import Variable, StringVar, IntVar, DoubleVar, BooleanVar, Tk
12
self.side_effect = True
16
class TestBase(unittest.TestCase):
25
class TestVariable(TestBase):
27
def test_default(self):
28
v = Variable(self.root)
29
self.assertEqual("", v.get())
30
self.assertRegex(str(v), r"^PY_VAR(\d+)$")
32
def test_name_and_value(self):
33
v = Variable(self.root, "sample string", "varname")
34
self.assertEqual("sample string", v.get())
35
self.assertEqual("varname", str(v))
37
def test___del__(self):
38
self.assertFalse(self.root.call("info", "exists", "varname"))
39
v = Variable(self.root, "sample string", "varname")
40
self.assertTrue(self.root.call("info", "exists", "varname"))
42
self.assertFalse(self.root.call("info", "exists", "varname"))
44
def test_dont_unset_not_existing(self):
45
self.assertFalse(self.root.call("info", "exists", "varname"))
46
v1 = Variable(self.root, name="name")
47
v2 = Variable(self.root, name="name")
49
self.assertFalse(self.root.call("info", "exists", "name"))
50
# shouldn't raise exception
52
self.assertFalse(self.root.call("info", "exists", "name"))
54
def test___eq__(self):
55
# values doesn't matter, only class and name are checked
56
v1 = Variable(self.root, name="abc")
57
v2 = Variable(self.root, name="abc")
58
self.assertEqual(v1, v2)
60
v3 = Variable(self.root, name="abc")
61
v4 = StringVar(self.root, name="abc")
62
self.assertNotEqual(v3, v4)
64
def test_invalid_name(self):
65
with self.assertRaises(TypeError):
66
Variable(self.root, name=123)
68
def test_initialize(self):
70
self.assertFalse(v.side_effect)
72
self.assertTrue(v.side_effect)
75
class TestStringVar(TestBase):
77
def test_default(self):
78
v = StringVar(self.root)
79
self.assertEqual("", v.get())
82
v = StringVar(self.root, "abc", "name")
83
self.assertEqual("abc", v.get())
84
self.root.globalsetvar("name", "value")
85
self.assertEqual("value", v.get())
88
class TestIntVar(TestBase):
90
def test_default(self):
92
self.assertEqual(0, v.get())
95
v = IntVar(self.root, 123, "name")
96
self.assertEqual(123, v.get())
97
self.root.globalsetvar("name", "345")
98
self.assertEqual(345, v.get())
100
def test_invalid_value(self):
101
v = IntVar(self.root, name="name")
102
self.root.globalsetvar("name", "value")
103
with self.assertRaises(ValueError):
105
self.root.globalsetvar("name", "345.0")
106
with self.assertRaises(ValueError):
110
class TestDoubleVar(TestBase):
112
def test_default(self):
113
v = DoubleVar(self.root)
114
self.assertEqual(0.0, v.get())
117
v = DoubleVar(self.root, 1.23, "name")
118
self.assertAlmostEqual(1.23, v.get())
119
self.root.globalsetvar("name", "3.45")
120
self.assertAlmostEqual(3.45, v.get())
122
def test_get_from_int(self):
123
v = DoubleVar(self.root, 1.23, "name")
124
self.assertAlmostEqual(1.23, v.get())
125
self.root.globalsetvar("name", "3.45")
126
self.assertAlmostEqual(3.45, v.get())
127
self.root.globalsetvar("name", "456")
128
self.assertAlmostEqual(456, v.get())
130
def test_invalid_value(self):
131
v = DoubleVar(self.root, name="name")
132
self.root.globalsetvar("name", "value")
133
with self.assertRaises(ValueError):
137
class TestBooleanVar(TestBase):
139
def test_default(self):
140
v = BooleanVar(self.root)
141
self.assertEqual(False, v.get())
144
v = BooleanVar(self.root, True, "name")
145
self.assertAlmostEqual(True, v.get())
146
self.root.globalsetvar("name", "0")
147
self.assertAlmostEqual(False, v.get())
149
def test_invalid_value_domain(self):
150
v = BooleanVar(self.root, name="name")
151
self.root.globalsetvar("name", "value")
152
with self.assertRaises(ValueError):
154
self.root.globalsetvar("name", "1.0")
155
with self.assertRaises(ValueError):
159
tests_gui = (TestVariable, TestStringVar, TestIntVar,
160
TestDoubleVar, TestBooleanVar)
163
if __name__ == "__main__":
164
from test.support import run_unittest
165
run_unittest(*tests_gui)