This repository has been archived on 2024-12-22. You can view files and clone it, but cannot push or open issues or pull requests.
PyBitmessage-2024-12-22/mockenv/lib/python3.6/site-packages/kivy/tests/test_uix_slider.py
2022-07-22 16:13:59 +05:30

167 lines
4.9 KiB
Python

from kivy.tests.common import GraphicUnitTest
from kivy.input.motionevent import MotionEvent
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.slider import Slider
from kivy.base import EventLoop
class UTMotionEvent(MotionEvent):
def depack(self, args):
self.is_touch = True
self.sx = args['x']
self.sy = args['y']
self.profile = ['pos']
super(UTMotionEvent, self).depack(args)
class _TestSliderHandle(Slider):
def __init__(self, **kwargs):
super(_TestSliderHandle, self).__init__(**kwargs)
self.sensitivity = 'handle'
class _TestSliderAll(Slider):
def __init__(self, **kwargs):
super(_TestSliderAll, self).__init__(**kwargs)
self.sensitivity = 'all'
class SliderMoveTestCase(GraphicUnitTest):
framecount = 0
def setUp(self):
# kill KV lang logging (too long test)
import kivy.lang.builder as builder
if not hasattr(self, '_trace'):
self._trace = builder.trace
self.builder = builder
builder.trace = lambda *_, **__: None
super(SliderMoveTestCase, self).setUp()
def tearDown(self):
# add the logging back
import kivy.lang.builder as builder
builder.trace = self._trace
super(SliderMoveTestCase, self).tearDown()
def test_slider_move(self):
EventLoop.ensure_window()
win = EventLoop.window
layout = BoxLayout(orientation='vertical')
s_handle = _TestSliderHandle()
s_all = _TestSliderAll()
layout.add_widget(s_handle)
layout.add_widget(s_all)
win.add_widget(layout)
# get widgets ready
EventLoop.idle()
cur1 = s_handle.children[0]
cur2 = s_all.children[0]
h1 = cur1.to_window(*cur1.center)[1]
h2 = h1 - s_handle.cursor_height
h3 = cur2.to_window(*cur2.center)[1]
h4 = h3 - s_all.cursor_height
w1 = cur1.to_window(*cur1.center)[0]
w2 = cur2.to_window(*cur2.center)[0]
wh = win.width / 2.0
dt = 2
# default pos, new pos, slider ID
points = [
[w1, h1, wh, h1, 'handle'],
[w1, h2, wh, h2, 'handle'],
[w2, h3, wh, h3, 'all'],
[w2, h4, wh, h4, 'all'],
]
for point in points:
x, y, nx, ny, id = point
# custom touch
touch = UTMotionEvent("unittest", 1, {
"x": x / float(win.width),
"y": y / float(win.height),
})
# touch down
EventLoop.post_dispatch_input("begin", touch)
if id == 'handle':
# touch on handle
if x == w1 and y == h1:
self.assertAlmostEqual(
s_handle.value, 0.0,
delta=dt
)
# touch in widget area (ignored, previous value)
elif x == w1 and y == h2:
self.assertAlmostEqual(
s_handle.value, 50.0,
delta=dt
)
elif id == 'all':
# touch on handle:
if x == w1 and y == h3:
self.assertAlmostEqual(
s_all.value, 0.0,
delta=dt
)
# touch in widget area
elif x == w1 and y == h4:
self.assertAlmostEqual(
s_all.value, 0.0,
delta=dt
)
# move from default to new pos
touch.move({
"x": nx / float(win.width),
"y": ny / float(win.height)
})
EventLoop.post_dispatch_input("update", touch)
if id == 'handle':
# move from handle to center
if nx == wh and ny == h1:
self.assertAlmostEqual(
s_handle.value, 50.0,
delta=dt
)
# move to center (ignored, previous value)
elif nx == wh and ny == h2:
self.assertAlmostEqual(
s_handle.value, 50.0,
delta=dt
)
elif id == 'all':
# touch on handle:
if nx == wh and ny == h3:
self.assertAlmostEqual(
s_all.value, 50.0,
delta=dt
)
# touch in widget area
elif nx == wh and ny == h4:
self.assertAlmostEqual(
s_all.value, 50.0,
delta=dt
)
# touch up
EventLoop.post_dispatch_input("end", touch)
self.render(layout)
if __name__ == '__main__':
import unittest
unittest.main()