/kivy/tests/test_uix_modal.py
https://github.com/akshayaurora/kivy · Python · 101 lines · 69 code · 16 blank · 16 comment · 6 complexity · c20f9561177096b32f055f7d05271939 MD5 · raw file
- """ modal view unit tests. """
- from kivy.tests import async_run, UnitKivyApp
- from math import isclose
- def modal_app():
- """ test app factory function. """
- from kivy.app import App
- from kivy.uix.button import Button
- from kivy.uix.modalview import ModalView
- # noinspection PyProtectedMember
- class ModalButton(Button):
- """ button used as root widget to test touch. """
- modal = None
- def on_touch_down(self, touch):
- """ touch down event handler. """
- assert self.modal._window is None
- assert not self.modal._is_open
- return super(ModalButton, self).on_touch_down(touch)
- def on_touch_move(self, touch):
- """ touch move event handler. """
- assert self.modal._window is None
- assert not self.modal._is_open
- return super(ModalButton, self).on_touch_move(touch)
- def on_touch_up(self, touch):
- """ touch up event handler. """
- assert self.modal._window is None
- assert not self.modal._is_open
- return super(ModalButton, self).on_touch_up(touch)
- class TestApp(UnitKivyApp, App):
- """ test app class. """
- def build(self):
- """ build root layout. """
- root = ModalButton()
- root.modal = ModalView(size_hint=(.2, .5))
- return root
- return TestApp()
- @async_run(app_cls_func=modal_app)
- async def test_modal_app(kivy_app):
- await kivy_app.wait_clock_frames(2)
- button = kivy_app.root
- modal = button.modal
- modal._anim_duration = 0
- assert modal._window is None
- assert not modal._is_open
- # just press button
- async for _ in kivy_app.do_touch_down_up(widget=button):
- assert modal._window is None
- assert not modal._is_open
- async for _ in kivy_app.do_touch_drag(widget=button, dx=button.width / 4):
- assert modal._window is None
- assert not modal._is_open
- # open modal
- modal.open()
- await kivy_app.wait_clock_frames(2)
- assert modal._window is not None
- assert modal._is_open
- assert isclose(modal.center_x, button.center_x, abs_tol=.1)
- assert isclose(modal.center_y, button.center_y, abs_tol=.1)
- # press within modal area - should stay open
- async for _ in kivy_app.do_touch_down_up(widget=button):
- pass
- assert modal._window is not None
- assert modal._is_open
- # start in modal but release outside - should stay open
- async for _ in kivy_app.do_touch_drag(widget=button, dx=button.width / 4):
- pass
- assert modal._window is not None
- assert modal._is_open
- # start outside but release in modal - should close
- async for _ in kivy_app.do_touch_drag(
- pos=(button.center_x + button.width / 4, button.center_y),
- target_widget=button):
- pass
- assert modal._window is None
- assert not modal._is_open
- # open modal again
- modal.open()
- await kivy_app.wait_clock_frames(2)
- assert modal._window is not None
- assert modal._is_open
- # press outside modal area - should close
- async for _ in kivy_app.do_touch_down_up(
- pos=(button.center_x + button.width / 4, button.center_y)):
- pass
- assert modal._window is None
- assert not modal._is_open