|
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