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.
This commit is contained in:
Dave Pearson 2023-03-14 14:11:32 +00:00
parent cfb8219e44
commit 8220af4bfe
No known key found for this signature in database
GPG key ID: B413E0EF113D4ABF
2 changed files with 238 additions and 0 deletions

View file

@ -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--- {
}

View file

@ -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