Add wip test for user over widget css, use type alias

This commit is contained in:
Darren Burns
2022-06-28 13:52:58 +01:00
parent b9b499fdc2
commit 7ebac6b860
4 changed files with 46 additions and 1 deletions

View File

@@ -0,0 +1,11 @@
Screen {
layout: dock;
height: 100%;
}
#box {
height: 50%;
width: 50%;
align: center middle;
background: green;
}

View File

@@ -0,0 +1,12 @@
from textual.app import App, ComposeResult
from textual.widgets import Static
class JustABox(App):
def compose(self) -> ComposeResult:
yield Static("Hello, World!", id="box")
if __name__ == "__main__":
app = JustABox(css_path="just_a_box.css", watch_css=True)
app.run()

View File

@@ -7,6 +7,7 @@ from typing import Iterator, Iterable
from rich import print from rich import print
from textual.css.errors import UnresolvedVariableError from textual.css.errors import UnresolvedVariableError
from textual.css.types import Specificity3
from ._styles_builder import StylesBuilder, DeclarationError from ._styles_builder import StylesBuilder, DeclarationError
from .model import ( from .model import (
Declaration, Declaration,
@@ -20,7 +21,7 @@ from .styles import Styles
from .tokenize import tokenize, tokenize_declarations, Token, tokenize_values from .tokenize import tokenize, tokenize_declarations, Token, tokenize_values
from .tokenizer import EOFError, ReferencedBy from .tokenizer import EOFError, ReferencedBy
SELECTOR_MAP: dict[str, tuple[SelectorType, tuple[int, int, int]]] = { SELECTOR_MAP: dict[str, tuple[SelectorType, Specificity3]] = {
"selector": (SelectorType.TYPE, (0, 0, 1)), "selector": (SelectorType.TYPE, (0, 0, 1)),
"selector_start": (SelectorType.TYPE, (0, 0, 1)), "selector_start": (SelectorType.TYPE, (0, 0, 1)),
"selector_class": (SelectorType.CLASS, (0, 1, 0)), "selector_class": (SelectorType.CLASS, (0, 1, 0)),

View File

@@ -3,12 +3,15 @@ from typing import Any
import pytest import pytest
from tests.utilities.test_app import AppTest
from textual.app import App, ComposeResult
from textual.color import Color from textual.color import Color
from textual.css._help_renderables import HelpText from textual.css._help_renderables import HelpText
from textual.css.stylesheet import Stylesheet, StylesheetParseError from textual.css.stylesheet import Stylesheet, StylesheetParseError
from textual.css.tokenizer import TokenizeError from textual.css.tokenizer import TokenizeError
from textual.dom import DOMNode from textual.dom import DOMNode
from textual.geometry import Spacing from textual.geometry import Spacing
from textual.widget import Widget
def _make_stylesheet(css: str) -> Stylesheet: def _make_stylesheet(css: str) -> Stylesheet:
@@ -101,6 +104,24 @@ def test_stylesheet_apply_empty_rulesets():
stylesheet.apply(node) stylesheet.apply(node)
@pytest.mark.xfail(reason="wip")
def test_stylesheet_apply_user_css_over_widget_css():
user_css = ".a {color: red;}"
class MyWidget(Widget):
CSS = ".a {color: blue;}"
node = MyWidget()
node.add_class("a")
print(node.styles.color)
stylesheet = _make_stylesheet(user_css)
stylesheet.apply(node)
assert node.styles.background == Color(0, 0, 255)
# TODO: On Tuesday - writing the tests for prioritising user CSS above widget CSS.
@pytest.mark.parametrize( @pytest.mark.parametrize(
"css_value,expectation,expected_color", "css_value,expectation,expected_color",
[ [