From 8220af4bfec8bc913c6c8e440965f6ce9e75cac8 Mon Sep 17 00:00:00 2001 From: Dave Pearson Date: Tue, 14 Mar 2023 14:11:32 +0000 Subject: [PATCH] Add some initial rules to a "mega stylesheet" The start of what will hopefully become a one-stop comprehensive test of all the fun corners of stylesheet parsing. While not intended to replace all the other unit tests for CSS, this test should help to quickly and easily be sure that nothing breaks any valid CSS. Influenced by #1253 and #1836 this code starts the process of implementing the requirement outlined in #1838. Adding more rules -- simple and/or weird -- that are expected and known to parse without a problem is encouraged. --- tests/css/test_mega_stylesheet.css | 227 +++++++++++++++++++++++++++++ tests/css/test_mega_stylesheet.py | 11 ++ 2 files changed, 238 insertions(+) create mode 100644 tests/css/test_mega_stylesheet.css create mode 100644 tests/css/test_mega_stylesheet.py diff --git a/tests/css/test_mega_stylesheet.css b/tests/css/test_mega_stylesheet.css new file mode 100644 index 000000000..13005ead9 --- /dev/null +++ b/tests/css/test_mega_stylesheet.css @@ -0,0 +1,227 @@ +/* + * The idea with this stylesheet is that it should contain as many valid + * ways of styling things as possible. So, as time goes on, feel free to add + * something to here. Be creative. Do the wildest things you can think of. + */ + +* {} +* * {} +* * * {} +* > * {} +* > * > * {} + +/**********************************************************************/ + +A {} +A A {} +A A A {} +A > A {} +A > A > A {} + +A1 {} +A1 A1 {} +A1 A1 A1 {} +A1 > A1 {} +A1 > A1 > A1 {} + +A {} +A A1 {} +A A1 A1 {} +A > A1 {} +A > A1 > A1 {} + +A1 {} +A1 A {} +A1 A A {} +A1 > A {} +A1 > A > A {} + +/**********************************************************************/ + +A {} +A, A {} +A,A {} +A, A, A {} +A,A,A {} +A , A , A {} +A +, +A +, +A +{ + +} + +A1 {} +A1, A1 {} +A1,A1 {} +A1, A1, A1 {} +A1,A1,A1 {} +A1 , A1 , A1 {} +A1 +, +A1 +, +A1 +{ + +} + +/**********************************************************************/ + +.A {} +.A .A {} +.A .A .A {} +.A > .A {} +.A > .A > .A {} + +.A1 {} +.A1 .A1 {} +.A1 .A1 .A1 {} +.A1 > .A1 {} +.A1 > .A1 > .A1 {} + +.A1 {} +.A1 .A {} +.A1 .A .A {} +.A1 > .A {} +.A1 > .A > .A {} + +.A {} +.A .A1 {} +.A .A1 .A1 {} +.A > .A1 {} +.A > .A1 > .A1 {} + +/**********************************************************************/ + +.A {} +.A.A {} +.A.A.A {} + +.A1 {} +.A1.A1 {} +.A1.A1.A1 {} + +.A1 {} +.A1.A {} +.A1.A.A {} + +.A {} +.A.A1 {} +.A.A1.A1 {} + +/**********************************************************************/ + +#A {} +#A #A {} +#A #A #A {} +#A > #A {} +#A > #A > #A {} + +#A1 {} +#A1 #A1 {} +#A1 #A1 #A1 {} +#A1 > #A1 {} +#A1 > #A1 > #A1 {} + +#A1 {} +#A1 #A {} +#A1 #A #A {} +#A1 > #A {} +#A1 > #A > #A {} + +#A {} +#A #A1 {} +#A #A1 #A1 {} +#A > #A1 {} +#A > #A1 > #A1 {} + +/**********************************************************************/ + +A:foo {} +A:foo:bar {} +A +:foo {} +A +:foo:bar {} +A +:foo +:bar {} +A:foo-bar {} +A +:foo-bar {} + +A :foo {} +A :foo :bar {} +A :foo-bar {} + +.A:foo {} +.A:foo:bar {} +.A +:foo {} +.A +:foo:bar {} +.A +:foo +:bar {} +.A:foo-bar {} +.A +:foo-bar {} + +#A:foo {} +#A:foo:bar {} +#A +:foo {} +#A +:foo:bar {} +#A +:foo +:bar {} +#A:foo-bar {} +#A +:foo-bar {} + +A1.A1.A1:foo {} +A1.A1#A1:foo {} +A1:foo.A1:foo#A1:foo {} + +/**********************************************************************/ + +$foo:; +$foo:1; +$fo1:1; +$1:1; +$-:1; +$--:1; +$--------------------------------------------------:1; +$-1:1; +$--1:1; +$--------------------------------------------------1:1; +$_1:1; +$__1:1; +$__________________________________________________1:1; + +/**********************************************************************/ +A{} +A { +} +A {} A {} A {} +A{}A{}A{} +A { +} A {} A { +} +A +{} +A +{ + +} + +/********************************************************************** + * Don't change or remove this. This class is looked for in the unit + * test code to make sure that everything parsed. + */ +.---we-made-it-to-the-end--- { +} diff --git a/tests/css/test_mega_stylesheet.py b/tests/css/test_mega_stylesheet.py new file mode 100644 index 000000000..6cfaf2868 --- /dev/null +++ b/tests/css/test_mega_stylesheet.py @@ -0,0 +1,11 @@ +from pathlib import Path + +from textual.css.stylesheet import Stylesheet + + +def test_mega_stylesheet() -> None: + """It should be possible to load a known-good stylesheet.""" + mega_stylesheet = Stylesheet() + mega_stylesheet.read(Path(__file__).parent / "test_mega_stylesheet.css") + mega_stylesheet.parse() + assert ".---we-made-it-to-the-end---" in mega_stylesheet.css