bpo-37902: IDLE: Add scrolling for IDLE browsers. (#15368)

Modify the wheel event handler so it can also be used for module, path, and stack browsers.
Patch by George Zhang.
This commit is contained in:
GeeTransit 2019-09-04 21:33:34 -04:00 committed by Terry Jan Reedy
parent 87bd2071c7
commit 2cd9025858
7 changed files with 78 additions and 21 deletions

View file

@ -4,7 +4,7 @@ from idlelib import tree
import unittest
from test.support import requires
requires('gui')
from tkinter import Tk
from tkinter import Tk, EventType, SCROLL
class TreeTest(unittest.TestCase):
@ -29,5 +29,32 @@ class TreeTest(unittest.TestCase):
node.expand()
class TestScrollEvent(unittest.TestCase):
def test_wheel_event(self):
# Fake widget class containing `yview` only.
class _Widget:
def __init__(widget, *expected):
widget.expected = expected
def yview(widget, *args):
self.assertTupleEqual(widget.expected, args)
# Fake event class
class _Event:
pass
# (type, delta, num, amount)
tests = ((EventType.MouseWheel, 120, -1, -5),
(EventType.MouseWheel, -120, -1, 5),
(EventType.ButtonPress, -1, 4, -5),
(EventType.ButtonPress, -1, 5, 5))
event = _Event()
for ty, delta, num, amount in tests:
event.type = ty
event.delta = delta
event.num = num
res = tree.wheel_event(event, _Widget(SCROLL, amount, "units"))
self.assertEqual(res, "break")
if __name__ == '__main__':
unittest.main(verbosity=2)