From 31ab156b94c18649483ab823c959c1055ea93b2b Mon Sep 17 00:00:00 2001 From: Sam Cunliffe Date: Thu, 11 May 2023 15:53:49 +0100 Subject: [PATCH 1/2] Failing test. --- src/napari_matplotlib/tests/test_util.py | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/napari_matplotlib/tests/test_util.py b/src/napari_matplotlib/tests/test_util.py index b8ebaff4..3f27f608 100644 --- a/src/napari_matplotlib/tests/test_util.py +++ b/src/napari_matplotlib/tests/test_util.py @@ -18,17 +18,21 @@ def test_interval(): def test_get_size_from_css(mocker): """Test getting the max-width and max-height from something in css""" + # some weird (but valid) css to check we can skip things correctly test_css = """ Flibble { + padding: 0 0 1px 2px; + color: rgb(3, 4, 555); min-width : 0; max-width : 123px; - min-height : 0px; + min-height : 0%; max-height : 456px; - padding: 0px; } """ mocker.patch("napari.qt.get_current_stylesheet").return_value = test_css - assert from_napari_css_get_size_of("Flibble", (1, 2)) == QSize(123, 456) + assert from_napari_css_get_size_of("Flibble", fallback=(1, 2)) == QSize( + 123, 456 + ) def test_fallback_if_missing_dimensions(mocker): @@ -36,11 +40,15 @@ def test_fallback_if_missing_dimensions(mocker): test_css = " Flobble { background-color: rgb(0, 97, 163); } " mocker.patch("napari.qt.get_current_stylesheet").return_value = test_css with pytest.warns(RuntimeWarning, match="Unable to find DimensionToken"): - assert from_napari_css_get_size_of("Flobble", (1, 2)) == QSize(1, 2) + assert from_napari_css_get_size_of( + "Flobble", fallback=(1, 2) + ) == QSize(1, 2) def test_fallback_if_prelude_not_in_css(): """Test fallback if given something not in the css""" doesntexist = "AQButtonThatDoesntExist" with pytest.warns(RuntimeWarning, match=f"Unable to find {doesntexist}"): - assert from_napari_css_get_size_of(doesntexist, (1, 2)) == QSize(1, 2) + assert from_napari_css_get_size_of( + doesntexist, fallback=(1, 2) + ) == QSize(1, 2) From 50a2acacec5a8797d6b83622f753c67a4f1da23b Mon Sep 17 00:00:00 2001 From: Sam Cunliffe Date: Thu, 11 May 2023 16:46:51 +0100 Subject: [PATCH 2/2] =?UTF-8?q?=F0=9F=9F=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/napari_matplotlib/util.py | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/src/napari_matplotlib/util.py b/src/napari_matplotlib/util.py index 17965caf..ed586816 100644 --- a/src/napari_matplotlib/util.py +++ b/src/napari_matplotlib/util.py @@ -1,4 +1,4 @@ -from typing import List, Optional, Tuple, Union +from typing import Generator, List, Optional, Tuple, Union from warnings import warn import napari.qt @@ -47,6 +47,21 @@ def __contains__(self, val: int) -> bool: return True +def _logical_lines( + nodes: List[tinycss2.ast.Node], +) -> Generator[Tuple[tinycss2.ast.Node, tinycss2.ast.Node], None, None]: + """Generator to provide logical lines (thing: value) of css (terminated by ';')""" + ident, dimension = None, None + for node in nodes: + if node == ";": + yield (ident, dimension) + ident, dimension = None, None + elif node.type == "ident": + ident = node + elif node.type == "dimension": + dimension = node + + def _has_id(nodes: List[tinycss2.ast.Node], id_name: str) -> bool: """ Is `id_name` in IdentTokens in the list of CSS `nodes`? @@ -66,13 +81,8 @@ def _get_dimension( ------- None if no IdentToken is found. """ - cleaned_nodes = [node for node in nodes if node.type != "whitespace"] - for name, _, value, _ in zip(*(iter(cleaned_nodes),) * 4): - if ( - name.type == "ident" - and value.type == "dimension" - and name.value == id_name - ): + for name, value in _logical_lines(nodes): + if name.value == id_name: return value.int_value warn(f"Unable to find DimensionToken for {id_name}", RuntimeWarning) return None pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy