gaphas/tests/test_view.py

156 lines
4.4 KiB
Python
Raw Normal View History

"""Test cases for the View class."""
import math
import pytest
from gi.repository import Gtk
from gaphas.canvas import Canvas
2020-10-21 15:25:25 +02:00
from gaphas.item import Element as Box
from gaphas.view import GtkView, View
class ViewFixture:
def __init__(self):
self.canvas = Canvas()
self.view = GtkView(self.canvas)
self.window = Gtk.Window.new(Gtk.WindowType.TOPLEVEL)
self.window.add(self.view)
self.window.show_all()
self.box = Box()
self.canvas.add(self.box)
# Process pending (expose) events, which cause the canvas to be drawn.
while Gtk.events_pending():
Gtk.main_iteration()
@pytest.fixture()
def view_fixture():
fixture = ViewFixture()
yield fixture
fixture.window.destroy()
def test_get_item_at_point(view_fixture):
"""Hover tool only reacts on motion-notify events."""
view_fixture.box.width = 50
view_fixture.box.height = 50
assert view_fixture.view.get_item_at_point((10, 10)) is view_fixture.box
assert view_fixture.view.get_item_at_point((60, 10)) is None
def test_get_unselected_item_at_point(view_fixture):
view_fixture.box.width = 50
view_fixture.box.height = 50
view_fixture.view.selection.select_items(view_fixture.box)
assert view_fixture.view.get_item_at_point((10, 10)) is view_fixture.box
assert view_fixture.view.get_item_at_point((10, 10), selected=False) is None
def test_get_handle_at_point(view_fixture):
box = Box()
box.min_width = 20
box.min_height = 30
box.matrix.translate(20, 20)
box.matrix.rotate(math.pi / 1.5)
view_fixture.canvas.add(box)
i, h = view_fixture.view.get_handle_at_point((20, 20))
assert i is box
assert h is box.handles()[0]
def test_get_handle_at_point_at_pi_div_2(view_fixture):
box = Box()
box.min_width = 20
box.min_height = 30
box.matrix.translate(20, 20)
box.matrix.rotate(math.pi / 2)
view_fixture.canvas.add(box)
i, h = view_fixture.view.get_handle_at_point((20, 20))
assert i is box
assert h is box.handles()[0]
def test_item_removal(view_fixture):
assert len(view_fixture.canvas.get_all_items()) == len(view_fixture.view._qtree)
view_fixture.view.selection.set_focused_item(view_fixture.box)
view_fixture.canvas.remove(view_fixture.box)
assert len(view_fixture.canvas.get_all_items()) == 0
assert len(view_fixture.view._qtree) == 0
view_fixture.window.destroy()
def test_view_registration(view_fixture):
canvas = Canvas()
# Simple views do not register on the canvas
2017-05-18 22:13:31 -04:00
view = View(canvas)
assert len(canvas._registered_views) == 0
2017-05-18 22:13:31 -04:00
box = Box()
canvas.add(box)
# GTK view does register for updates though
view = GtkView(canvas)
assert len(canvas._registered_views) == 1
2017-05-18 22:13:31 -04:00
window = Gtk.Window.new(Gtk.WindowType.TOPLEVEL)
window.add(view)
window.show_all()
view.canvas = None
assert len(canvas._registered_views) == 0
view.canvas = canvas
assert len(canvas._registered_views) == 1
def test_view_registration_2(view_fixture):
"""Test view registration and destroy when view is destroyed."""
assert len(view_fixture.canvas._registered_views) == 1
assert view_fixture.view in view_fixture.canvas._registered_views
view_fixture.window.destroy()
assert len(view_fixture.canvas._registered_views) == 0
@pytest.fixture()
def sc_view():
sc = Gtk.ScrolledWindow()
view = GtkView(Canvas())
sc.add(view)
return view, sc
def test_scroll_adjustments_signal(sc_view):
assert sc_view[0].hadjustment
assert sc_view[0].vadjustment
assert sc_view[0].hadjustment.get_value() == 0.0
assert sc_view[0].hadjustment.get_lower() == 0.0
assert sc_view[0].hadjustment.get_upper() == 1.0
assert sc_view[0].hadjustment.get_step_increment() == 0.0
assert sc_view[0].hadjustment.get_page_increment() == 1.0
assert sc_view[0].hadjustment.get_page_size() == 1.0
assert sc_view[0].vadjustment.get_value() == 0.0
assert sc_view[0].vadjustment.get_lower() == 0.0
assert sc_view[0].vadjustment.get_upper() == 1.0
assert sc_view[0].vadjustment.get_step_increment() == 0.0
assert sc_view[0].vadjustment.get_page_increment() == 1.0
assert sc_view[0].vadjustment.get_page_size() == 1.0
def test_scroll_adjustments(sc_view):
assert sc_view[1].get_hadjustment() is sc_view[0].hadjustment
assert sc_view[1].get_vadjustment() is sc_view[0].vadjustment