From 5c1395c3c7bdaf8741eda975541fab5f15052538 Mon Sep 17 00:00:00 2001 From: Arjan Molenaar Date: Tue, 1 Dec 2020 18:48:44 +0100 Subject: [PATCH 1/2] Fix test discovery issue in VSCode By not loading in image at module level, but via a memoized function. --- gaphor/ui/diagrampage.py | 10 +++++++--- gaphor/ui/tests/test_diagrampage.py | 10 +++++++++- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/gaphor/ui/diagrampage.py b/gaphor/ui/diagrampage.py index c4975ed8c9..7cb167ab17 100644 --- a/gaphor/ui/diagrampage.py +++ b/gaphor/ui/diagrampage.py @@ -41,8 +41,12 @@ def tooliter(toolbox_actions: Sequence[Tuple[str, Sequence[ToolDef]]]): yield from section -with importlib.resources.path("gaphor.ui", "placement-icon-base.png") as f: - PLACEMENT_BASE = GdkPixbuf.Pixbuf.new_from_file_at_scale(str(f), 64, 64, True) +@functools.lru_cache(maxsize=1) +def placement_icon_base(): + with importlib.resources.path("gaphor.ui", "placement-icon-base.png") as f: + print(str(f)) + return GdkPixbuf.Pixbuf.new_from_file_at_scale(str(f), 64, 64, True) + GtkView.set_css_name("diagramview") @@ -62,7 +66,7 @@ def get_placement_cursor(display, icon_name): if icon_name in _placement_pixbuf_map: pixbuf = _placement_pixbuf_map[icon_name] else: - pixbuf = PLACEMENT_BASE.copy() + pixbuf = placement_icon_base().copy() icon = Gtk.IconTheme.get_default().load_icon(icon_name, 24, 0) icon.copy_area( 0, diff --git a/gaphor/ui/tests/test_diagrampage.py b/gaphor/ui/tests/test_diagrampage.py index 09d7e01103..688c6ccc91 100644 --- a/gaphor/ui/tests/test_diagrampage.py +++ b/gaphor/ui/tests/test_diagrampage.py @@ -3,7 +3,7 @@ from gaphor.core.modeling import Comment, Diagram, StyleSheet from gaphor.diagram.general import Box from gaphor.diagram.general.comment import CommentItem -from gaphor.ui.diagrams import DiagramPage +from gaphor.ui.diagrampage import DiagramPage, placement_icon_base from gaphor.UML.modelinglanguage import UMLModelingLanguage @@ -31,3 +31,11 @@ def test_placement(diagram, page, element_factory): diagram.create(CommentItem, subject=element_factory.create(Comment)) assert len(element_factory.lselect()) == 3 + + +@pytest.mark.skip(reason="This test cases a Segmentation Fault when run from VSCode") +def test_placement_icon_base_is_loaded_once(): + icon1 = placement_icon_base() + icon2 = placement_icon_base() + + assert icon1 is icon2 \ No newline at end of file From d7aef775825fb9ea234b9735795cbc47aa047c66 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 1 Dec 2020 18:07:45 +0000 Subject: [PATCH 2/2] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- gaphor/ui/tests/test_diagrampage.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gaphor/ui/tests/test_diagrampage.py b/gaphor/ui/tests/test_diagrampage.py index 688c6ccc91..d1a866d3e6 100644 --- a/gaphor/ui/tests/test_diagrampage.py +++ b/gaphor/ui/tests/test_diagrampage.py @@ -38,4 +38,4 @@ def test_placement_icon_base_is_loaded_once(): icon1 = placement_icon_base() icon2 = placement_icon_base() - assert icon1 is icon2 \ No newline at end of file + assert icon1 is icon2