|
9 | 9 | import unittest |
10 | 10 | from unittest import mock |
11 | 11 | from idlelib.idle_test.mock_idle import Func |
12 | | -from tkinter import Tk, Frame, IntVar, BooleanVar, DISABLED, NORMAL |
| 12 | +from tkinter import Tk, Frame, StringVar, IntVar, BooleanVar, DISABLED, NORMAL |
13 | 13 | from idlelib import config |
14 | 14 | from idlelib.configdialog import idleConf, changes, tracers |
15 | 15 |
|
@@ -41,6 +41,8 @@ def tearDownModule(): |
41 | 41 | global root, dialog |
42 | 42 | idleConf.userCfg = usercfg |
43 | 43 | tracers.detach() |
| 44 | + tracers.clear() |
| 45 | + changes.clear() |
44 | 46 | del dialog |
45 | 47 | root.update_idletasks() |
46 | 48 | root.destroy() |
@@ -442,97 +444,105 @@ def test_update_help_changes(self): |
442 | 444 |
|
443 | 445 | class VarTraceTest(unittest.TestCase): |
444 | 446 |
|
| 447 | + @classmethod |
| 448 | + def setUpClass(cls): |
| 449 | + cls.tracers = configdialog.VarTrace() |
| 450 | + cls.iv = IntVar(root) |
| 451 | + cls.bv = BooleanVar(root) |
| 452 | + |
| 453 | + @classmethod |
| 454 | + def tearDownClass(cls): |
| 455 | + del cls.tracers, cls.iv, cls.bv |
| 456 | + |
445 | 457 | def setUp(self): |
446 | | - changes.clear() |
447 | | - tracers.clear() |
448 | | - self.v1 = IntVar(root) |
449 | | - self.v2 = BooleanVar(root) |
| 458 | + self.tracers.clear() |
450 | 459 | self.called = 0 |
451 | 460 |
|
452 | | - def tearDown(self): |
453 | | - del self.v1, self.v2 |
454 | | - |
455 | 461 | def var_changed_increment(self, *params): |
456 | 462 | self.called += 13 |
457 | 463 |
|
458 | 464 | def var_changed_boolean(self, *params): |
459 | 465 | pass |
460 | 466 |
|
461 | 467 | def test_init(self): |
462 | | - tracers.__init__() |
463 | | - self.assertEqual(tracers.untraced, []) |
464 | | - self.assertEqual(tracers.traced, []) |
| 468 | + tr = self.tracers |
| 469 | + tr.__init__() |
| 470 | + self.assertEqual(tr.untraced, []) |
| 471 | + self.assertEqual(tr.traced, []) |
465 | 472 |
|
466 | 473 | def test_clear(self): |
467 | | - tracers.untraced.append(0) |
468 | | - tracers.traced.append(1) |
469 | | - tracers.clear() |
470 | | - self.assertEqual(tracers.untraced, []) |
471 | | - self.assertEqual(tracers.traced, []) |
| 474 | + tr = self.tracers |
| 475 | + tr.untraced.append(0) |
| 476 | + tr.traced.append(1) |
| 477 | + tr.clear() |
| 478 | + self.assertEqual(tr.untraced, []) |
| 479 | + self.assertEqual(tr.traced, []) |
472 | 480 |
|
473 | 481 | def test_add(self): |
474 | | - tr = tracers |
| 482 | + tr = self.tracers |
475 | 483 | func = Func() |
476 | 484 | cb = tr.make_callback = mock.Mock(return_value=func) |
477 | 485 |
|
478 | | - v1 = tr.add(self.v1, self.var_changed_increment) |
479 | | - self.assertIsInstance(v1, IntVar) |
480 | | - v2 = tr.add(self.v2, self.var_changed_boolean) |
481 | | - self.assertIsInstance(v2, BooleanVar) |
| 486 | + iv = tr.add(self.iv, self.var_changed_increment) |
| 487 | + self.assertIs(iv, self.iv) |
| 488 | + bv = tr.add(self.bv, self.var_changed_boolean) |
| 489 | + self.assertIs(bv, self.bv) |
482 | 490 |
|
483 | | - v3 = IntVar(root) |
484 | | - v3 = tr.add(v3, ('main', 'section', 'option')) |
| 491 | + sv = StringVar(root) |
| 492 | + sv2 = tr.add(sv, ('main', 'section', 'option')) |
| 493 | + self.assertIs(sv2, sv) |
485 | 494 | cb.assert_called_once() |
486 | | - cb.assert_called_with(v3, ('main', 'section', 'option')) |
| 495 | + cb.assert_called_with(sv, ('main', 'section', 'option')) |
487 | 496 |
|
488 | | - expected = [(v1, self.var_changed_increment), |
489 | | - (v2, self.var_changed_boolean), |
490 | | - (v3, func)] |
| 497 | + expected = [(iv, self.var_changed_increment), |
| 498 | + (bv, self.var_changed_boolean), |
| 499 | + (sv, func)] |
491 | 500 | self.assertEqual(tr.traced, []) |
492 | 501 | self.assertEqual(tr.untraced, expected) |
493 | 502 |
|
494 | 503 | del tr.make_callback |
495 | 504 |
|
496 | 505 | def test_make_callback(self): |
497 | | - cb = tracers.make_callback(self.v1, ('main', 'section', 'option')) |
| 506 | + cb = self.tracers.make_callback(self.iv, ('main', 'section', 'option')) |
498 | 507 | self.assertTrue(callable(cb)) |
499 | | - self.v1.set(42) |
| 508 | + self.iv.set(42) |
500 | 509 | # Not attached, so set didn't invoke the callback. |
501 | 510 | self.assertNotIn('section', changes['main']) |
502 | 511 | # Invoke callback manually. |
503 | 512 | cb() |
504 | 513 | self.assertIn('section', changes['main']) |
505 | 514 | self.assertEqual(changes['main']['section']['option'], '42') |
| 515 | + changes.clear() |
506 | 516 |
|
507 | 517 | def test_attach_detach(self): |
508 | | - tr = tracers |
509 | | - v1 = tr.add(self.v1, self.var_changed_increment) |
510 | | - v2 = tr.add(self.v2, self.var_changed_boolean) |
511 | | - expected = [(v1, self.var_changed_increment), |
512 | | - (v2, self.var_changed_boolean)] |
| 518 | + tr = self.tracers |
| 519 | + iv = tr.add(self.iv, self.var_changed_increment) |
| 520 | + bv = tr.add(self.bv, self.var_changed_boolean) |
| 521 | + expected = [(iv, self.var_changed_increment), |
| 522 | + (bv, self.var_changed_boolean)] |
513 | 523 |
|
514 | 524 | # Attach callbacks and test call increment. |
515 | 525 | tr.attach() |
516 | 526 | self.assertEqual(tr.untraced, []) |
517 | 527 | self.assertCountEqual(tr.traced, expected) |
518 | | - v1.set(1) |
519 | | - self.assertEqual(v1.get(), 1) |
| 528 | + iv.set(1) |
| 529 | + self.assertEqual(iv.get(), 1) |
520 | 530 | self.assertEqual(self.called, 13) |
521 | 531 |
|
522 | 532 | # Check that only one callback is attached to a variable. |
523 | 533 | # If more than one callback were attached, then var_changed_increment |
524 | 534 | # would be called twice and the counter would be 2. |
525 | 535 | self.called = 0 |
526 | 536 | tr.attach() |
527 | | - v1.set(1) |
| 537 | + iv.set(1) |
528 | 538 | self.assertEqual(self.called, 13) |
529 | 539 |
|
530 | 540 | # Detach callbacks. |
531 | 541 | self.called = 0 |
532 | 542 | tr.detach() |
533 | 543 | self.assertEqual(tr.traced, []) |
534 | 544 | self.assertCountEqual(tr.untraced, expected) |
535 | | - v1.set(1) |
| 545 | + iv.set(1) |
536 | 546 | self.assertEqual(self.called, 0) |
537 | 547 |
|
538 | 548 |
|
|
0 commit comments