(self)
| 230 | |
| 231 | |
| 232 | def test_menu(self): |
| 233 | items = ('a', 'b', 'c') |
| 234 | default = 'a' |
| 235 | optmenu = ttk.OptionMenu(self.root, self.textvar, default, *items) |
| 236 | found_default = False |
| 237 | for i in range(len(items)): |
| 238 | value = optmenu['menu'].entrycget(i, 'value') |
| 239 | self.assertEqual(value, items[i]) |
| 240 | if value == default: |
| 241 | found_default = True |
| 242 | self.assertTrue(found_default) |
| 243 | optmenu.destroy() |
| 244 | |
| 245 | # default shouldn't be in menu if it is not part of values |
| 246 | default = 'd' |
| 247 | optmenu = ttk.OptionMenu(self.root, self.textvar, default, *items) |
| 248 | curr = None |
| 249 | i = 0 |
| 250 | while True: |
| 251 | last, curr = curr, optmenu['menu'].entryconfigure(i, 'value') |
| 252 | if last == curr: |
| 253 | # no more menu entries |
| 254 | break |
| 255 | self.assertNotEqual(curr, default) |
| 256 | i += 1 |
| 257 | self.assertEqual(i, len(items)) |
| 258 | |
| 259 | # check that variable is updated correctly |
| 260 | optmenu.pack() |
| 261 | gc_collect() # For PyPy or other GCs. |
| 262 | optmenu['menu'].invoke(0) |
| 263 | self.assertEqual(optmenu._variable.get(), items[0]) |
| 264 | |
| 265 | # changing to an invalid index shouldn't change the variable |
| 266 | self.assertRaises(tkinter.TclError, optmenu['menu'].invoke, -1) |
| 267 | self.assertEqual(optmenu._variable.get(), items[0]) |
| 268 | |
| 269 | optmenu.destroy() |
| 270 | |
| 271 | # specifying a callback |
| 272 | success = [] |
| 273 | def cb_test(item): |
| 274 | self.assertEqual(item, items[1]) |
| 275 | success.append(True) |
| 276 | optmenu = ttk.OptionMenu(self.root, self.textvar, 'a', command=cb_test, |
| 277 | *items) |
| 278 | optmenu['menu'].invoke(1) |
| 279 | if not success: |
| 280 | self.fail("Menu callback not invoked") |
| 281 | |
| 282 | optmenu.destroy() |
| 283 | |
| 284 | def test_unique_radiobuttons(self): |
| 285 | # check that radiobuttons are unique across instances (bpo25684) |
nothing calls this directly
no test coverage detected