From d081726d1ca487038c52d69fcdf30b20e42d3c5d Mon Sep 17 00:00:00 2001 From: Swapnil <78632212+swapnilpaliwal-sd@users.noreply.github.com> Date: Sat, 10 Oct 2026 14:51:00 -0700 Subject: [PATCH 001/132] web torture: independent oracle, runner and the first seven suites graph/test/web/oracle/ derives the ground truth for every web node and in-web edge kind from parse5, postcss, css-select and acorn (pinned in its package.json; the axiom parser is never imported). run-tests.sh builds each case's graph, normalizes the engine tables onto the oracle's rows (contract in tools/normalize.py) and gates the multiset diff with known-missing support; it fails with "engine not built" until graph/web/engine exists. 51 hand-written cases across nodes, cascade, refs, pages, js and crosslang, two generated scale cases; every expectation was read row by row and agrees with the oracle (--oracle). Refs #1908 --- graph/test/web/.gitattributes | 2 + .../cases/cascade/01-combinators/case.conf | 2 + .../cascade/01-combinators/src/index.html | 10 + .../cases/cascade/01-combinators/src/s.css | 6 + .../cascade/02-attribute-operators/case.conf | 2 + .../02-attribute-operators/src/index.html | 9 + .../cascade/02-attribute-operators/src/s.css | 12 + .../cascade/03-logical-pseudos/case.conf | 2 + .../cascade/03-logical-pseudos/src/index.html | 9 + .../cascade/03-logical-pseudos/src/s.css | 6 + .../cascade/04-structural-pseudos/case.conf | 2 + .../04-structural-pseudos/src/index.html | 9 + .../cascade/04-structural-pseudos/src/s.css | 11 + .../web/cases/cascade/05-nesting/case.conf | 2 + .../cases/cascade/05-nesting/src/index.html | 9 + .../web/cases/cascade/05-nesting/src/s.css | 9 + .../cascade/06-at-rule-conditions/case.conf | 2 + .../06-at-rule-conditions/src/index.html | 7 + .../06-at-rule-conditions/src/narrow.css | 1 + .../06-at-rule-conditions/src/print.css | 1 + .../cascade/06-at-rule-conditions/src/s.css | 5 + .../cases/cascade/07-state-pseudos/case.conf | 2 + .../cascade/07-state-pseudos/src/index.html | 9 + .../cases/cascade/07-state-pseudos/src/s.css | 13 + .../08-specificity-and-order/case.conf | 2 + .../src/framework.css | 3 + .../08-specificity-and-order/src/index.html | 12 + .../08-specificity-and-order/src/reset.css | 1 + .../08-specificity-and-order/src/theme.css | 2 + .../web/cases/cascade/09-layers/case.conf | 2 + .../cases/cascade/09-layers/src/index.html | 7 + .../web/cases/cascade/09-layers/src/s.css | 7 + .../cases/cascade/09-layers/src/vendor.css | 1 + .../cases/cascade/10-quirks-mode/case.conf | 2 + .../cascade/10-quirks-mode/src/quirks.html | 6 + .../cases/cascade/10-quirks-mode/src/s.css | 4 + .../cascade/10-quirks-mode/src/standards.html | 7 + .../11-dynamic-class-and-unmatched/case.conf | 2 + .../src/index.html | 9 + .../11-dynamic-class-and-unmatched/src/s.css | 6 + .../cascade/12-shadow-and-unparsed/case.conf | 2 + .../12-shadow-and-unparsed/src/index.html | 7 + .../cascade/12-shadow-and-unparsed/src/s.css | 6 + .../13-inert-template-noscript/case.conf | 2 + .../13-inert-template-noscript/src/index.html | 9 + .../13-inert-template-noscript/src/s.css | 4 + .../14-svg-case-and-namespaces/case.conf | 2 + .../14-svg-case-and-namespaces/src/index.html | 7 + .../14-svg-case-and-namespaces/src/s.css | 6 + .../cases/cascade/15-root-and-lang/case.conf | 2 + .../cascade/15-root-and-lang/src/bare.html | 3 + .../cascade/15-root-and-lang/src/full.html | 7 + .../cases/cascade/15-root-and-lang/src/s.css | 4 + .../cases/cascade/16-fragment-page/case.conf | 2 + .../16-fragment-page/src/partials/nav.html | 2 + .../cases/cascade/16-fragment-page/src/s.css | 1 + .../web/cases/crosslang/01-guard/case.conf | 3 + .../web/cases/crosslang/01-guard/src/app.js | 2 + .../cases/crosslang/01-guard/src/index.html | 11 + .../web/cases/crosslang/01-guard/src/s.css | 2 + .../js/01-inline-classic-and-module/case.conf | 2 + .../src/index.html | 21 + .../js/02-non-js-script-bodies/case.conf | 2 + .../js/02-non-js-script-bodies/src/index.html | 13 + .../web/cases/js/03-on-handlers/case.conf | 2 + .../cases/js/03-on-handlers/src/index.html | 13 + .../cases/js/04-dom-touch-vanilla/case.conf | 2 + .../js/04-dom-touch-vanilla/src/index.html | 9 + .../js/04-dom-touch-vanilla/src/js/app.js | 20 + .../cases/js/05-dom-touch-jquery/case.conf | 2 + .../js/05-dom-touch-jquery/src/index.html | 9 + .../js/05-dom-touch-jquery/src/js/main.js | 11 + .../05-dom-touch-jquery/src/js/vendor.min.js | 1 + .../js/06-external-js-functions/case.conf | 2 + .../06-external-js-functions/src/index.html | 9 + .../06-external-js-functions/src/js/site.js | 8 + .../src/js/site.min.js | 1 + .../nodes/01-void-and-self-closing/case.conf | 2 + .../01-void-and-self-closing/src/index.html | 10 + .../cases/nodes/02-implied-elements/case.conf | 2 + .../nodes/02-implied-elements/src/index.html | 7 + .../02-implied-elements/src/partial.html | 3 + .../nodes/03-template-svg-math/case.conf | 2 + .../nodes/03-template-svg-math/src/index.html | 8 + .../cases/nodes/04-iframe-srcdoc/case.conf | 2 + .../nodes/04-iframe-srcdoc/src/index.html | 7 + .../nodes/04-iframe-srcdoc/src/other.html | 1 + .../05-conditional-comments-cdata/case.conf | 2 + .../src/css/ie.css | 1 + .../src/index.html | 13 + .../src/js/app.js | 1 + .../src/js/html5shiv.js | 0 .../nodes/06-entities-in-class/case.conf | 2 + .../nodes/06-entities-in-class/src/index.html | 9 + .../cases/nodes/07-duplicate-ids/case.conf | 2 + .../nodes/07-duplicate-ids/src/index.html | 10 + .../nodes/08-uppercase-unquoted/case.conf | 2 + .../08-uppercase-unquoted/src/index.html | 7 + .../web/cases/nodes/09-bom-crlf/case.conf | 2 + .../cases/nodes/09-bom-crlf/src/css/bom.css | 3 + .../cases/nodes/09-bom-crlf/src/index.html | 11 + .../nodes/10-minified-one-line-css/case.conf | 2 + .../10-minified-one-line-css/src/index.html | 1 + .../src/vendor/lib.min.css | 1 + .../11-style-attr-and-style-element/case.conf | 2 + .../src/img/hero.png | 0 .../src/index.html | 13 + .../cases/nodes/12-css-node-kinds/case.conf | 2 + .../cases/nodes/12-css-node-kinds/src/app.css | 11 + .../nodes/12-css-node-kinds/src/index.html | 1 + .../web/cases/nodes/13-script-types/case.conf | 2 + .../nodes/13-script-types/src/index.html | 15 + .../cases/nodes/13-script-types/src/lib.js | 0 .../web/cases/nodes/13-script-types/src/m.js | 1 + .../web/cases/nodes/14-references/case.conf | 2 + .../cases/nodes/14-references/src/favicon.ico | 0 .../nodes/14-references/src/site/img/a.png | 0 .../nodes/14-references/src/site/img/p.jpg | 0 .../nodes/14-references/src/site/index.html | 17 + .../nodes/14-references/src/site/next.html | 1 + .../web/cases/nodes/14-references/src/up.html | 1 + .../nodes/15-template-dialects/case.conf | 2 + .../nodes/15-template-dialects/src/index.html | 9 + .../cases/nodes/16-selector-parts/case.conf | 2 + .../nodes/16-selector-parts/src/index.html | 1 + .../cases/nodes/16-selector-parts/src/s.css | 2 + .../pages/01-shared-stylesheet/case.conf | 2 + .../pages/01-shared-stylesheet/src/about.html | 9 + .../01-shared-stylesheet/src/css/theme.css | 3 + .../pages/01-shared-stylesheet/src/index.html | 9 + .../pages/02-anchors-forms-iframes/case.conf | 2 + .../src/demo/frame.html | 9 + .../src/docs/guide.html | 9 + .../src/docs/index.html | 9 + .../02-anchors-forms-iframes/src/index.html | 18 + .../web/cases/pages/03-import-chain/case.conf | 2 + .../pages/03-import-chain/src/index.html | 9 + .../pages/03-import-chain/src/themes/all.css | 3 + .../pages/03-import-chain/src/themes/base.css | 2 + .../pages/03-import-chain/src/themes/core.css | 1 + .../03-import-chain/src/themes/cycle.css | 2 + .../03-import-chain/src/themes/theme.css | 2 + .../cases/pages/04-include-partials/case.conf | 2 + .../04-include-partials/src/src/css/style.css | 2 + .../04-include-partials/src/src/index.html | 10 + .../src/src/partials/sidebar.html | 1 + .../01-var-chains-and-fallbacks/case.conf | 2 + .../src/index.html | 9 + .../01-var-chains-and-fallbacks/src/s.css | 2 + .../refs/02-var-inheritance-scope/case.conf | 2 + .../02-var-inheritance-scope/src/index.html | 9 + .../refs/02-var-inheritance-scope/src/s.css | 5 + .../web/cases/refs/03-property-rule/case.conf | 2 + .../refs/03-property-rule/src/index.html | 9 + .../web/cases/refs/03-property-rule/src/s.css | 2 + .../refs/04-keyframes-and-vendor/case.conf | 2 + .../04-keyframes-and-vendor/src/index.html | 9 + .../refs/04-keyframes-and-vendor/src/s.css | 6 + .../refs/05-font-face-and-generic/case.conf | 2 + .../src/fonts/brand.woff2 | 0 .../05-font-face-and-generic/src/index.html | 9 + .../refs/05-font-face-and-generic/src/s.css | 5 + .../cases/refs/06-url-resolution/case.conf | 2 + .../refs/06-url-resolution/src/app/css/s.css | 3 + .../06-url-resolution/src/app/img/logo.png | 0 .../src/app/pages/index.html | 10 + .../cases/refs/07-container-names/case.conf | 2 + .../refs/07-container-names/src/index.html | 9 + .../cases/refs/07-container-names/src/s.css | 5 + .../08-loads-unknowns-and-orphans/case.conf | 2 + .../src/css/dark.css | 1 + .../src/css/main.css | 3 + .../src/css/unused.css | 1 + .../src/dist/app.css | 1 + .../src/index.html | 13 + .../scale/01-2k-pages-50k-rules/case.conf | 7 + .../cases/scale/02-styles-200-pages/case.conf | 7 + .../web/expected/cascade/01-combinators.tsv | 15 + .../cascade/02-attribute-operators.tsv | 14 + .../expected/cascade/03-logical-pseudos.tsv | 19 + .../cascade/04-structural-pseudos.tsv | 19 + .../test/web/expected/cascade/05-nesting.tsv | 18 + .../cascade/06-at-rule-conditions.tsv | 15 + .../web/expected/cascade/07-state-pseudos.tsv | 21 + .../cascade/08-specificity-and-order.tsv | 15 + graph/test/web/expected/cascade/09-layers.tsv | 13 + .../web/expected/cascade/10-quirks-mode.tsv | 11 + .../11-dynamic-class-and-unmatched.tsv | 9 + .../cascade/12-shadow-and-unparsed.tsv | 10 + .../cascade/13-inert-template-noscript.tsv | 9 + .../cascade/14-svg-case-and-namespaces.tsv | 7 + .../web/expected/cascade/15-root-and-lang.tsv | 12 + .../web/expected/cascade/16-fragment-page.tsv | 5 + .../test/web/expected/crosslang/01-guard.tsv | 10 + .../js/01-inline-classic-and-module.tsv | 13 + .../expected/js/02-non-js-script-bodies.tsv | 10 + graph/test/web/expected/js/03-on-handlers.tsv | 12 + .../web/expected/js/04-dom-touch-vanilla.tsv | 23 + .../web/expected/js/05-dom-touch-jquery.tsv | 19 + .../expected/js/06-external-js-functions.tsv | 10 + .../nodes/01-void-and-self-closing.tsv | 23 + .../expected/nodes/02-implied-elements.tsv | 25 + .../expected/nodes/03-template-svg-math.tsv | 37 + .../web/expected/nodes/04-iframe-srcdoc.tsv | 12 + .../nodes/05-conditional-comments-cdata.tsv | 12 + .../expected/nodes/06-entities-in-class.tsv | 14 + .../web/expected/nodes/07-duplicate-ids.tsv | 11 + .../expected/nodes/08-uppercase-unquoted.tsv | 15 + graph/test/web/expected/nodes/09-bom-crlf.tsv | 11 + .../nodes/10-minified-one-line-css.tsv | 805 ++++++++++++++++++ .../nodes/11-style-attr-and-style-element.tsv | 16 + .../web/expected/nodes/12-css-node-kinds.tsv | 33 + .../web/expected/nodes/13-script-types.tsv | 12 + .../test/web/expected/nodes/14-references.tsv | 17 + .../expected/nodes/15-template-dialects.tsv | 13 + .../web/expected/nodes/16-selector-parts.tsv | 22 + .../expected/pages/01-shared-stylesheet.tsv | 9 + .../pages/02-anchors-forms-iframes.tsv | 13 + .../web/expected/pages/03-import-chain.tsv | 18 + .../expected/pages/04-include-partials.tsv | 9 + .../refs/01-var-chains-and-fallbacks.tsv | 18 + .../refs/02-var-inheritance-scope.tsv | 6 + .../web/expected/refs/03-property-rule.tsv | 7 + .../expected/refs/04-keyframes-and-vendor.tsv | 17 + .../refs/05-font-face-and-generic.tsv | 13 + .../web/expected/refs/06-url-resolution.tsv | 11 + .../web/expected/refs/07-container-names.tsv | 9 + .../refs/08-loads-unknowns-and-orphans.tsv | 13 + graph/test/web/run-tests.sh | 166 ++++ graph/test/web/tools/crosslang_guard.py | 74 ++ graph/test/web/tools/gate.py | 59 ++ graph/test/web/tools/gen_scale.py | 43 + graph/test/web/tools/normalize.py | 257 ++++++ 233 files changed, 2999 insertions(+) create mode 100644 graph/test/web/.gitattributes create mode 100644 graph/test/web/cases/cascade/01-combinators/case.conf create mode 100644 graph/test/web/cases/cascade/01-combinators/src/index.html create mode 100644 graph/test/web/cases/cascade/01-combinators/src/s.css create mode 100644 graph/test/web/cases/cascade/02-attribute-operators/case.conf create mode 100644 graph/test/web/cases/cascade/02-attribute-operators/src/index.html create mode 100644 graph/test/web/cases/cascade/02-attribute-operators/src/s.css create mode 100644 graph/test/web/cases/cascade/03-logical-pseudos/case.conf create mode 100644 graph/test/web/cases/cascade/03-logical-pseudos/src/index.html create mode 100644 graph/test/web/cases/cascade/03-logical-pseudos/src/s.css create mode 100644 graph/test/web/cases/cascade/04-structural-pseudos/case.conf create mode 100644 graph/test/web/cases/cascade/04-structural-pseudos/src/index.html create mode 100644 graph/test/web/cases/cascade/04-structural-pseudos/src/s.css create mode 100644 graph/test/web/cases/cascade/05-nesting/case.conf create mode 100644 graph/test/web/cases/cascade/05-nesting/src/index.html create mode 100644 graph/test/web/cases/cascade/05-nesting/src/s.css create mode 100644 graph/test/web/cases/cascade/06-at-rule-conditions/case.conf create mode 100644 graph/test/web/cases/cascade/06-at-rule-conditions/src/index.html create mode 100644 graph/test/web/cases/cascade/06-at-rule-conditions/src/narrow.css create mode 100644 graph/test/web/cases/cascade/06-at-rule-conditions/src/print.css create mode 100644 graph/test/web/cases/cascade/06-at-rule-conditions/src/s.css create mode 100644 graph/test/web/cases/cascade/07-state-pseudos/case.conf create mode 100644 graph/test/web/cases/cascade/07-state-pseudos/src/index.html create mode 100644 graph/test/web/cases/cascade/07-state-pseudos/src/s.css create mode 100644 graph/test/web/cases/cascade/08-specificity-and-order/case.conf create mode 100644 graph/test/web/cases/cascade/08-specificity-and-order/src/framework.css create mode 100644 graph/test/web/cases/cascade/08-specificity-and-order/src/index.html create mode 100644 graph/test/web/cases/cascade/08-specificity-and-order/src/reset.css create mode 100644 graph/test/web/cases/cascade/08-specificity-and-order/src/theme.css create mode 100644 graph/test/web/cases/cascade/09-layers/case.conf create mode 100644 graph/test/web/cases/cascade/09-layers/src/index.html create mode 100644 graph/test/web/cases/cascade/09-layers/src/s.css create mode 100644 graph/test/web/cases/cascade/09-layers/src/vendor.css create mode 100644 graph/test/web/cases/cascade/10-quirks-mode/case.conf create mode 100644 graph/test/web/cases/cascade/10-quirks-mode/src/quirks.html create mode 100644 graph/test/web/cases/cascade/10-quirks-mode/src/s.css create mode 100644 graph/test/web/cases/cascade/10-quirks-mode/src/standards.html create mode 100644 graph/test/web/cases/cascade/11-dynamic-class-and-unmatched/case.conf create mode 100644 graph/test/web/cases/cascade/11-dynamic-class-and-unmatched/src/index.html create mode 100644 graph/test/web/cases/cascade/11-dynamic-class-and-unmatched/src/s.css create mode 100644 graph/test/web/cases/cascade/12-shadow-and-unparsed/case.conf create mode 100644 graph/test/web/cases/cascade/12-shadow-and-unparsed/src/index.html create mode 100644 graph/test/web/cases/cascade/12-shadow-and-unparsed/src/s.css create mode 100644 graph/test/web/cases/cascade/13-inert-template-noscript/case.conf create mode 100644 graph/test/web/cases/cascade/13-inert-template-noscript/src/index.html create mode 100644 graph/test/web/cases/cascade/13-inert-template-noscript/src/s.css create mode 100644 graph/test/web/cases/cascade/14-svg-case-and-namespaces/case.conf create mode 100644 graph/test/web/cases/cascade/14-svg-case-and-namespaces/src/index.html create mode 100644 graph/test/web/cases/cascade/14-svg-case-and-namespaces/src/s.css create mode 100644 graph/test/web/cases/cascade/15-root-and-lang/case.conf create mode 100644 graph/test/web/cases/cascade/15-root-and-lang/src/bare.html create mode 100644 graph/test/web/cases/cascade/15-root-and-lang/src/full.html create mode 100644 graph/test/web/cases/cascade/15-root-and-lang/src/s.css create mode 100644 graph/test/web/cases/cascade/16-fragment-page/case.conf create mode 100644 graph/test/web/cases/cascade/16-fragment-page/src/partials/nav.html create mode 100644 graph/test/web/cases/cascade/16-fragment-page/src/s.css create mode 100644 graph/test/web/cases/crosslang/01-guard/case.conf create mode 100644 graph/test/web/cases/crosslang/01-guard/src/app.js create mode 100644 graph/test/web/cases/crosslang/01-guard/src/index.html create mode 100644 graph/test/web/cases/crosslang/01-guard/src/s.css create mode 100644 graph/test/web/cases/js/01-inline-classic-and-module/case.conf create mode 100644 graph/test/web/cases/js/01-inline-classic-and-module/src/index.html create mode 100644 graph/test/web/cases/js/02-non-js-script-bodies/case.conf create mode 100644 graph/test/web/cases/js/02-non-js-script-bodies/src/index.html create mode 100644 graph/test/web/cases/js/03-on-handlers/case.conf create mode 100644 graph/test/web/cases/js/03-on-handlers/src/index.html create mode 100644 graph/test/web/cases/js/04-dom-touch-vanilla/case.conf create mode 100644 graph/test/web/cases/js/04-dom-touch-vanilla/src/index.html create mode 100644 graph/test/web/cases/js/04-dom-touch-vanilla/src/js/app.js create mode 100644 graph/test/web/cases/js/05-dom-touch-jquery/case.conf create mode 100644 graph/test/web/cases/js/05-dom-touch-jquery/src/index.html create mode 100644 graph/test/web/cases/js/05-dom-touch-jquery/src/js/main.js create mode 100644 graph/test/web/cases/js/05-dom-touch-jquery/src/js/vendor.min.js create mode 100644 graph/test/web/cases/js/06-external-js-functions/case.conf create mode 100644 graph/test/web/cases/js/06-external-js-functions/src/index.html create mode 100644 graph/test/web/cases/js/06-external-js-functions/src/js/site.js create mode 100644 graph/test/web/cases/js/06-external-js-functions/src/js/site.min.js create mode 100644 graph/test/web/cases/nodes/01-void-and-self-closing/case.conf create mode 100644 graph/test/web/cases/nodes/01-void-and-self-closing/src/index.html create mode 100644 graph/test/web/cases/nodes/02-implied-elements/case.conf create mode 100644 graph/test/web/cases/nodes/02-implied-elements/src/index.html create mode 100644 graph/test/web/cases/nodes/02-implied-elements/src/partial.html create mode 100644 graph/test/web/cases/nodes/03-template-svg-math/case.conf create mode 100644 graph/test/web/cases/nodes/03-template-svg-math/src/index.html create mode 100644 graph/test/web/cases/nodes/04-iframe-srcdoc/case.conf create mode 100644 graph/test/web/cases/nodes/04-iframe-srcdoc/src/index.html create mode 100644 graph/test/web/cases/nodes/04-iframe-srcdoc/src/other.html create mode 100644 graph/test/web/cases/nodes/05-conditional-comments-cdata/case.conf create mode 100644 graph/test/web/cases/nodes/05-conditional-comments-cdata/src/css/ie.css create mode 100644 graph/test/web/cases/nodes/05-conditional-comments-cdata/src/index.html create mode 100644 graph/test/web/cases/nodes/05-conditional-comments-cdata/src/js/app.js create mode 100644 graph/test/web/cases/nodes/05-conditional-comments-cdata/src/js/html5shiv.js create mode 100644 graph/test/web/cases/nodes/06-entities-in-class/case.conf create mode 100644 graph/test/web/cases/nodes/06-entities-in-class/src/index.html create mode 100644 graph/test/web/cases/nodes/07-duplicate-ids/case.conf create mode 100644 graph/test/web/cases/nodes/07-duplicate-ids/src/index.html create mode 100644 graph/test/web/cases/nodes/08-uppercase-unquoted/case.conf create mode 100644 graph/test/web/cases/nodes/08-uppercase-unquoted/src/index.html create mode 100644 graph/test/web/cases/nodes/09-bom-crlf/case.conf create mode 100644 graph/test/web/cases/nodes/09-bom-crlf/src/css/bom.css create mode 100644 graph/test/web/cases/nodes/09-bom-crlf/src/index.html create mode 100644 graph/test/web/cases/nodes/10-minified-one-line-css/case.conf create mode 100644 graph/test/web/cases/nodes/10-minified-one-line-css/src/index.html create mode 100644 graph/test/web/cases/nodes/10-minified-one-line-css/src/vendor/lib.min.css create mode 100644 graph/test/web/cases/nodes/11-style-attr-and-style-element/case.conf create mode 100644 graph/test/web/cases/nodes/11-style-attr-and-style-element/src/img/hero.png create mode 100644 graph/test/web/cases/nodes/11-style-attr-and-style-element/src/index.html create mode 100644 graph/test/web/cases/nodes/12-css-node-kinds/case.conf create mode 100644 graph/test/web/cases/nodes/12-css-node-kinds/src/app.css create mode 100644 graph/test/web/cases/nodes/12-css-node-kinds/src/index.html create mode 100644 graph/test/web/cases/nodes/13-script-types/case.conf create mode 100644 graph/test/web/cases/nodes/13-script-types/src/index.html create mode 100644 graph/test/web/cases/nodes/13-script-types/src/lib.js create mode 100644 graph/test/web/cases/nodes/13-script-types/src/m.js create mode 100644 graph/test/web/cases/nodes/14-references/case.conf create mode 100644 graph/test/web/cases/nodes/14-references/src/favicon.ico create mode 100644 graph/test/web/cases/nodes/14-references/src/site/img/a.png create mode 100644 graph/test/web/cases/nodes/14-references/src/site/img/p.jpg create mode 100644 graph/test/web/cases/nodes/14-references/src/site/index.html create mode 100644 graph/test/web/cases/nodes/14-references/src/site/next.html create mode 100644 graph/test/web/cases/nodes/14-references/src/up.html create mode 100644 graph/test/web/cases/nodes/15-template-dialects/case.conf create mode 100644 graph/test/web/cases/nodes/15-template-dialects/src/index.html create mode 100644 graph/test/web/cases/nodes/16-selector-parts/case.conf create mode 100644 graph/test/web/cases/nodes/16-selector-parts/src/index.html create mode 100644 graph/test/web/cases/nodes/16-selector-parts/src/s.css create mode 100644 graph/test/web/cases/pages/01-shared-stylesheet/case.conf create mode 100644 graph/test/web/cases/pages/01-shared-stylesheet/src/about.html create mode 100644 graph/test/web/cases/pages/01-shared-stylesheet/src/css/theme.css create mode 100644 graph/test/web/cases/pages/01-shared-stylesheet/src/index.html create mode 100644 graph/test/web/cases/pages/02-anchors-forms-iframes/case.conf create mode 100644 graph/test/web/cases/pages/02-anchors-forms-iframes/src/demo/frame.html create mode 100644 graph/test/web/cases/pages/02-anchors-forms-iframes/src/docs/guide.html create mode 100644 graph/test/web/cases/pages/02-anchors-forms-iframes/src/docs/index.html create mode 100644 graph/test/web/cases/pages/02-anchors-forms-iframes/src/index.html create mode 100644 graph/test/web/cases/pages/03-import-chain/case.conf create mode 100644 graph/test/web/cases/pages/03-import-chain/src/index.html create mode 100644 graph/test/web/cases/pages/03-import-chain/src/themes/all.css create mode 100644 graph/test/web/cases/pages/03-import-chain/src/themes/base.css create mode 100644 graph/test/web/cases/pages/03-import-chain/src/themes/core.css create mode 100644 graph/test/web/cases/pages/03-import-chain/src/themes/cycle.css create mode 100644 graph/test/web/cases/pages/03-import-chain/src/themes/theme.css create mode 100644 graph/test/web/cases/pages/04-include-partials/case.conf create mode 100644 graph/test/web/cases/pages/04-include-partials/src/src/css/style.css create mode 100644 graph/test/web/cases/pages/04-include-partials/src/src/index.html create mode 100644 graph/test/web/cases/pages/04-include-partials/src/src/partials/sidebar.html create mode 100644 graph/test/web/cases/refs/01-var-chains-and-fallbacks/case.conf create mode 100644 graph/test/web/cases/refs/01-var-chains-and-fallbacks/src/index.html create mode 100644 graph/test/web/cases/refs/01-var-chains-and-fallbacks/src/s.css create mode 100644 graph/test/web/cases/refs/02-var-inheritance-scope/case.conf create mode 100644 graph/test/web/cases/refs/02-var-inheritance-scope/src/index.html create mode 100644 graph/test/web/cases/refs/02-var-inheritance-scope/src/s.css create mode 100644 graph/test/web/cases/refs/03-property-rule/case.conf create mode 100644 graph/test/web/cases/refs/03-property-rule/src/index.html create mode 100644 graph/test/web/cases/refs/03-property-rule/src/s.css create mode 100644 graph/test/web/cases/refs/04-keyframes-and-vendor/case.conf create mode 100644 graph/test/web/cases/refs/04-keyframes-and-vendor/src/index.html create mode 100644 graph/test/web/cases/refs/04-keyframes-and-vendor/src/s.css create mode 100644 graph/test/web/cases/refs/05-font-face-and-generic/case.conf create mode 100644 graph/test/web/cases/refs/05-font-face-and-generic/src/fonts/brand.woff2 create mode 100644 graph/test/web/cases/refs/05-font-face-and-generic/src/index.html create mode 100644 graph/test/web/cases/refs/05-font-face-and-generic/src/s.css create mode 100644 graph/test/web/cases/refs/06-url-resolution/case.conf create mode 100644 graph/test/web/cases/refs/06-url-resolution/src/app/css/s.css create mode 100644 graph/test/web/cases/refs/06-url-resolution/src/app/img/logo.png create mode 100644 graph/test/web/cases/refs/06-url-resolution/src/app/pages/index.html create mode 100644 graph/test/web/cases/refs/07-container-names/case.conf create mode 100644 graph/test/web/cases/refs/07-container-names/src/index.html create mode 100644 graph/test/web/cases/refs/07-container-names/src/s.css create mode 100644 graph/test/web/cases/refs/08-loads-unknowns-and-orphans/case.conf create mode 100644 graph/test/web/cases/refs/08-loads-unknowns-and-orphans/src/css/dark.css create mode 100644 graph/test/web/cases/refs/08-loads-unknowns-and-orphans/src/css/main.css create mode 100644 graph/test/web/cases/refs/08-loads-unknowns-and-orphans/src/css/unused.css create mode 100644 graph/test/web/cases/refs/08-loads-unknowns-and-orphans/src/dist/app.css create mode 100644 graph/test/web/cases/refs/08-loads-unknowns-and-orphans/src/index.html create mode 100644 graph/test/web/cases/scale/01-2k-pages-50k-rules/case.conf create mode 100644 graph/test/web/cases/scale/02-styles-200-pages/case.conf create mode 100644 graph/test/web/expected/cascade/01-combinators.tsv create mode 100644 graph/test/web/expected/cascade/02-attribute-operators.tsv create mode 100644 graph/test/web/expected/cascade/03-logical-pseudos.tsv create mode 100644 graph/test/web/expected/cascade/04-structural-pseudos.tsv create mode 100644 graph/test/web/expected/cascade/05-nesting.tsv create mode 100644 graph/test/web/expected/cascade/06-at-rule-conditions.tsv create mode 100644 graph/test/web/expected/cascade/07-state-pseudos.tsv create mode 100644 graph/test/web/expected/cascade/08-specificity-and-order.tsv create mode 100644 graph/test/web/expected/cascade/09-layers.tsv create mode 100644 graph/test/web/expected/cascade/10-quirks-mode.tsv create mode 100644 graph/test/web/expected/cascade/11-dynamic-class-and-unmatched.tsv create mode 100644 graph/test/web/expected/cascade/12-shadow-and-unparsed.tsv create mode 100644 graph/test/web/expected/cascade/13-inert-template-noscript.tsv create mode 100644 graph/test/web/expected/cascade/14-svg-case-and-namespaces.tsv create mode 100644 graph/test/web/expected/cascade/15-root-and-lang.tsv create mode 100644 graph/test/web/expected/cascade/16-fragment-page.tsv create mode 100644 graph/test/web/expected/crosslang/01-guard.tsv create mode 100644 graph/test/web/expected/js/01-inline-classic-and-module.tsv create mode 100644 graph/test/web/expected/js/02-non-js-script-bodies.tsv create mode 100644 graph/test/web/expected/js/03-on-handlers.tsv create mode 100644 graph/test/web/expected/js/04-dom-touch-vanilla.tsv create mode 100644 graph/test/web/expected/js/05-dom-touch-jquery.tsv create mode 100644 graph/test/web/expected/js/06-external-js-functions.tsv create mode 100644 graph/test/web/expected/nodes/01-void-and-self-closing.tsv create mode 100644 graph/test/web/expected/nodes/02-implied-elements.tsv create mode 100644 graph/test/web/expected/nodes/03-template-svg-math.tsv create mode 100644 graph/test/web/expected/nodes/04-iframe-srcdoc.tsv create mode 100644 graph/test/web/expected/nodes/05-conditional-comments-cdata.tsv create mode 100644 graph/test/web/expected/nodes/06-entities-in-class.tsv create mode 100644 graph/test/web/expected/nodes/07-duplicate-ids.tsv create mode 100644 graph/test/web/expected/nodes/08-uppercase-unquoted.tsv create mode 100644 graph/test/web/expected/nodes/09-bom-crlf.tsv create mode 100644 graph/test/web/expected/nodes/10-minified-one-line-css.tsv create mode 100644 graph/test/web/expected/nodes/11-style-attr-and-style-element.tsv create mode 100644 graph/test/web/expected/nodes/12-css-node-kinds.tsv create mode 100644 graph/test/web/expected/nodes/13-script-types.tsv create mode 100644 graph/test/web/expected/nodes/14-references.tsv create mode 100644 graph/test/web/expected/nodes/15-template-dialects.tsv create mode 100644 graph/test/web/expected/nodes/16-selector-parts.tsv create mode 100644 graph/test/web/expected/pages/01-shared-stylesheet.tsv create mode 100644 graph/test/web/expected/pages/02-anchors-forms-iframes.tsv create mode 100644 graph/test/web/expected/pages/03-import-chain.tsv create mode 100644 graph/test/web/expected/pages/04-include-partials.tsv create mode 100644 graph/test/web/expected/refs/01-var-chains-and-fallbacks.tsv create mode 100644 graph/test/web/expected/refs/02-var-inheritance-scope.tsv create mode 100644 graph/test/web/expected/refs/03-property-rule.tsv create mode 100644 graph/test/web/expected/refs/04-keyframes-and-vendor.tsv create mode 100644 graph/test/web/expected/refs/05-font-face-and-generic.tsv create mode 100644 graph/test/web/expected/refs/06-url-resolution.tsv create mode 100644 graph/test/web/expected/refs/07-container-names.tsv create mode 100644 graph/test/web/expected/refs/08-loads-unknowns-and-orphans.tsv create mode 100755 graph/test/web/run-tests.sh create mode 100755 graph/test/web/tools/crosslang_guard.py create mode 100755 graph/test/web/tools/gate.py create mode 100755 graph/test/web/tools/gen_scale.py create mode 100755 graph/test/web/tools/normalize.py diff --git a/graph/test/web/.gitattributes b/graph/test/web/.gitattributes new file mode 100644 index 000000000..85e009c36 --- /dev/null +++ b/graph/test/web/.gitattributes @@ -0,0 +1,2 @@ +# Fixtures whose line endings ARE the test: never normalise them +cases/nodes/09-bom-crlf/src/** -text diff --git a/graph/test/web/cases/cascade/01-combinators/case.conf b/graph/test/web/cases/cascade/01-combinators/case.conf new file mode 100644 index 000000000..ec88cb539 --- /dev/null +++ b/graph/test/web/cases/cascade/01-combinators/case.conf @@ -0,0 +1,2 @@ +# shape: admin layouts styled through descendant, child, adjacent and general-sibling selectors (.sidebar > ul li + li) +kinds=styles,unknown diff --git a/graph/test/web/cases/cascade/01-combinators/src/index.html b/graph/test/web/cases/cascade/01-combinators/src/index.html new file mode 100644 index 000000000..63921be29 --- /dev/null +++ b/graph/test/web/cases/cascade/01-combinators/src/index.html @@ -0,0 +1,10 @@ + + + + +
+ +

h

a

b

c

+
+ + diff --git a/graph/test/web/cases/cascade/01-combinators/src/s.css b/graph/test/web/cases/cascade/01-combinators/src/s.css new file mode 100644 index 000000000..d4fb2cc2f --- /dev/null +++ b/graph/test/web/cases/cascade/01-combinators/src/s.css @@ -0,0 +1,6 @@ +.side .i { color: red } +.side > .menu > .i { color: blue } +.i + .i { margin: 0 } +h3 ~ p { color: green } +h3 + p { color: gray } +.menu > li > .i { x: 1 } diff --git a/graph/test/web/cases/cascade/02-attribute-operators/case.conf b/graph/test/web/cases/cascade/02-attribute-operators/case.conf new file mode 100644 index 000000000..82e7db4c9 --- /dev/null +++ b/graph/test/web/cases/cascade/02-attribute-operators/case.conf @@ -0,0 +1,2 @@ +# shape: form and icon styling with every attribute operator, including the i and s flags +kinds=styles,unknown diff --git a/graph/test/web/cases/cascade/02-attribute-operators/src/index.html b/graph/test/web/cases/cascade/02-attribute-operators/src/index.html new file mode 100644 index 000000000..038e6a483 --- /dev/null +++ b/graph/test/web/cases/cascade/02-attribute-operators/src/index.html @@ -0,0 +1,9 @@ + + + + + +pdf +empty + + diff --git a/graph/test/web/cases/cascade/02-attribute-operators/src/s.css b/graph/test/web/cases/cascade/02-attribute-operators/src/s.css new file mode 100644 index 000000000..acf44cf1c --- /dev/null +++ b/graph/test/web/cases/cascade/02-attribute-operators/src/s.css @@ -0,0 +1,12 @@ +[data-k] { a: 1 } +[data-k=""] { a: 2 } +[type="text"] { a: 3 } +[type="text" s] { a: 4 } +[data-k="alpha beta" i] { a: 5 } +[rel~="nofollow"] { a: 6 } +[lang|="en"] { a: 7 } +[href^="https"] { a: 8 } +[href$=".pdf" i] { a: 9 } +[href$=".pdf"] { a: 10 } +[name*="st-na"] { a: 11 } +[class~="b"] { a: 12 } diff --git a/graph/test/web/cases/cascade/03-logical-pseudos/case.conf b/graph/test/web/cases/cascade/03-logical-pseudos/case.conf new file mode 100644 index 000000000..86366dd44 --- /dev/null +++ b/graph/test/web/cases/cascade/03-logical-pseudos/case.conf @@ -0,0 +1,2 @@ +# shape: modern sheets using :is(), :where(), :not() and :has() for card and form states +kinds=styles,unknown,cascade diff --git a/graph/test/web/cases/cascade/03-logical-pseudos/src/index.html b/graph/test/web/cases/cascade/03-logical-pseudos/src/index.html new file mode 100644 index 000000000..d0dce633b --- /dev/null +++ b/graph/test/web/cases/cascade/03-logical-pseudos/src/index.html @@ -0,0 +1,9 @@ + + + + +

t

+

u

+
+ + diff --git a/graph/test/web/cases/cascade/03-logical-pseudos/src/s.css b/graph/test/web/cases/cascade/03-logical-pseudos/src/s.css new file mode 100644 index 000000000..733b1834f --- /dev/null +++ b/graph/test/web/cases/cascade/03-logical-pseudos/src/s.css @@ -0,0 +1,6 @@ +:is(.card, .none) h2 { a: 1 } +:where(.card) h2 { a: 2 } +.card:not(.plain) { a: 3 } +.card:has(> img) { a: 4 } +.card:has(img):not(:has(video)) h2 { a: 5 } +form :not(.req, .x) { a: 6 } diff --git a/graph/test/web/cases/cascade/04-structural-pseudos/case.conf b/graph/test/web/cases/cascade/04-structural-pseudos/case.conf new file mode 100644 index 000000000..bf60b8b2e --- /dev/null +++ b/graph/test/web/cases/cascade/04-structural-pseudos/case.conf @@ -0,0 +1,2 @@ +# shape: table striping and list styling with nth-child formulas, nth-child(of S), and the -of-type family +kinds=styles diff --git a/graph/test/web/cases/cascade/04-structural-pseudos/src/index.html b/graph/test/web/cases/cascade/04-structural-pseudos/src/index.html new file mode 100644 index 000000000..9446b2d4d --- /dev/null +++ b/graph/test/web/cases/cascade/04-structural-pseudos/src/index.html @@ -0,0 +1,9 @@ + + + + + +

a

b

c

+
only
+ + diff --git a/graph/test/web/cases/cascade/04-structural-pseudos/src/s.css b/graph/test/web/cases/cascade/04-structural-pseudos/src/s.css new file mode 100644 index 000000000..077257e39 --- /dev/null +++ b/graph/test/web/cases/cascade/04-structural-pseudos/src/s.css @@ -0,0 +1,11 @@ +li:nth-child(2n+1) { a: 1 } +li:nth-child(even) { a: 2 } +li:nth-last-child(2) { a: 3 } +li:nth-child(2 of .x) { a: 4 } +li:first-child, li:last-child { a: 5 } +p:first-of-type { a: 6 } +p:last-of-type { a: 7 } +p:nth-of-type(2) { a: 8 } +em:only-child { a: 9 } +span:only-of-type { a: 10 } +li:nth-child(-n+2) { a: 11 } diff --git a/graph/test/web/cases/cascade/05-nesting/case.conf b/graph/test/web/cases/cascade/05-nesting/case.conf new file mode 100644 index 000000000..0c117cf98 --- /dev/null +++ b/graph/test/web/cases/cascade/05-nesting/case.conf @@ -0,0 +1,2 @@ +# shape: native CSS nesting in component sheets: &-suffix, & as descendant, implicit nesting, nesting inside @media, and a nested selector list +kinds=styles,unknown diff --git a/graph/test/web/cases/cascade/05-nesting/src/index.html b/graph/test/web/cases/cascade/05-nesting/src/index.html new file mode 100644 index 000000000..7ba264507 --- /dev/null +++ b/graph/test/web/cases/cascade/05-nesting/src/index.html @@ -0,0 +1,9 @@ + + + + +
i
+
x
+
in card
+ + diff --git a/graph/test/web/cases/cascade/05-nesting/src/s.css b/graph/test/web/cases/cascade/05-nesting/src/s.css new file mode 100644 index 000000000..3f672dc9c --- /dev/null +++ b/graph/test/web/cases/cascade/05-nesting/src/s.css @@ -0,0 +1,9 @@ +.btn { + &.primary { a: 1 } + & .icon { a: 2 } + b { a: 3 } + > b { a: 4 } + .card & { a: 5 } + @media (min-width: 1px) { & { a: 6 } } +} +.card, .btn.primary { .icon, & > .btn { a: 7 } } diff --git a/graph/test/web/cases/cascade/06-at-rule-conditions/case.conf b/graph/test/web/cases/cascade/06-at-rule-conditions/case.conf new file mode 100644 index 000000000..b1f3299f6 --- /dev/null +++ b/graph/test/web/cases/cascade/06-at-rule-conditions/case.conf @@ -0,0 +1,2 @@ +# shape: responsive frameworks: rules under @media (incl. print), @supports, @container, a sheet and @import with a media list +kinds=styles,cascade diff --git a/graph/test/web/cases/cascade/06-at-rule-conditions/src/index.html b/graph/test/web/cases/cascade/06-at-rule-conditions/src/index.html new file mode 100644 index 000000000..f5a59bec8 --- /dev/null +++ b/graph/test/web/cases/cascade/06-at-rule-conditions/src/index.html @@ -0,0 +1,7 @@ + + + + +

x

+ + diff --git a/graph/test/web/cases/cascade/06-at-rule-conditions/src/narrow.css b/graph/test/web/cases/cascade/06-at-rule-conditions/src/narrow.css new file mode 100644 index 000000000..575564059 --- /dev/null +++ b/graph/test/web/cases/cascade/06-at-rule-conditions/src/narrow.css @@ -0,0 +1 @@ +.p { a: 4 } diff --git a/graph/test/web/cases/cascade/06-at-rule-conditions/src/print.css b/graph/test/web/cases/cascade/06-at-rule-conditions/src/print.css new file mode 100644 index 000000000..569c195d8 --- /dev/null +++ b/graph/test/web/cases/cascade/06-at-rule-conditions/src/print.css @@ -0,0 +1 @@ +.p { a: 5 } diff --git a/graph/test/web/cases/cascade/06-at-rule-conditions/src/s.css b/graph/test/web/cases/cascade/06-at-rule-conditions/src/s.css new file mode 100644 index 000000000..6b1816c4e --- /dev/null +++ b/graph/test/web/cases/cascade/06-at-rule-conditions/src/s.css @@ -0,0 +1,5 @@ +@import url("narrow.css") screen and (max-width: 600px); +.p { a: 0 } +@media print { .p { a: 1 } } +@media screen { @supports (display: grid) { .p { a: 2 } } } +@container (min-width: 10em) { .p { a: 3 } } diff --git a/graph/test/web/cases/cascade/07-state-pseudos/case.conf b/graph/test/web/cases/cascade/07-state-pseudos/case.conf new file mode 100644 index 000000000..02cacdc33 --- /dev/null +++ b/graph/test/web/cases/cascade/07-state-pseudos/case.conf @@ -0,0 +1,2 @@ +# shape: buttons and inputs styled by :hover/:focus-visible/:active, initial form state (:checked, :disabled, :placeholder-shown), ::before/::after, legacy :after and vendor ::-webkit- pseudos +kinds=styles diff --git a/graph/test/web/cases/cascade/07-state-pseudos/src/index.html b/graph/test/web/cases/cascade/07-state-pseudos/src/index.html new file mode 100644 index 000000000..42db92a30 --- /dev/null +++ b/graph/test/web/cases/cascade/07-state-pseudos/src/index.html @@ -0,0 +1,9 @@ + + + + + + +lno href + + diff --git a/graph/test/web/cases/cascade/07-state-pseudos/src/s.css b/graph/test/web/cases/cascade/07-state-pseudos/src/s.css new file mode 100644 index 000000000..ddaa4a257 --- /dev/null +++ b/graph/test/web/cases/cascade/07-state-pseudos/src/s.css @@ -0,0 +1,13 @@ +.b:hover { a: 1 } +.b:focus-visible::before { a: 2 } +.b:disabled { a: 3 } +.b:enabled:active { a: 4 } +.c:checked { a: 5 } +.c:not(:checked) { a: 6 } +.t:placeholder-shown { a: 7 } +.t::-webkit-input-placeholder { a: 8 } +.l:link { a: 9 } +.l:visited { a: 10 } +.l:after { a: 11 } +.b:-moz-focusring { a: 12 } +.b:not(:hover) { a: 13 } diff --git a/graph/test/web/cases/cascade/08-specificity-and-order/case.conf b/graph/test/web/cases/cascade/08-specificity-and-order/case.conf new file mode 100644 index 000000000..7bf9ef23a --- /dev/null +++ b/graph/test/web/cases/cascade/08-specificity-and-order/case.conf @@ -0,0 +1,2 @@ +# shape: a page loading a framework sheet, a theme that @imports a reset, and an inline + + + + + +

x

+ + diff --git a/graph/test/web/cases/cascade/08-specificity-and-order/src/reset.css b/graph/test/web/cases/cascade/08-specificity-and-order/src/reset.css new file mode 100644 index 000000000..fceb89dc1 --- /dev/null +++ b/graph/test/web/cases/cascade/08-specificity-and-order/src/reset.css @@ -0,0 +1 @@ +p { a: 5 } diff --git a/graph/test/web/cases/cascade/08-specificity-and-order/src/theme.css b/graph/test/web/cases/cascade/08-specificity-and-order/src/theme.css new file mode 100644 index 000000000..732509422 --- /dev/null +++ b/graph/test/web/cases/cascade/08-specificity-and-order/src/theme.css @@ -0,0 +1,2 @@ +@import "reset.css"; +.k { a: 4 } diff --git a/graph/test/web/cases/cascade/09-layers/case.conf b/graph/test/web/cases/cascade/09-layers/case.conf new file mode 100644 index 000000000..b58bb338d --- /dev/null +++ b/graph/test/web/cases/cascade/09-layers/case.conf @@ -0,0 +1,2 @@ +# shape: a design-system sheet declaring @layer order up front, layered blocks, nested layers, @import layer() and unlayered overrides +kinds=cascade,layer diff --git a/graph/test/web/cases/cascade/09-layers/src/index.html b/graph/test/web/cases/cascade/09-layers/src/index.html new file mode 100644 index 000000000..5e7534188 --- /dev/null +++ b/graph/test/web/cases/cascade/09-layers/src/index.html @@ -0,0 +1,7 @@ + + + + +

x

+ + diff --git a/graph/test/web/cases/cascade/09-layers/src/s.css b/graph/test/web/cases/cascade/09-layers/src/s.css new file mode 100644 index 000000000..5c601a3c7 --- /dev/null +++ b/graph/test/web/cases/cascade/09-layers/src/s.css @@ -0,0 +1,7 @@ +@layer reset, components; +@import url("vendor.css") layer(vendor); +@layer components { .p { a: 1 } } +@layer reset { p { a: 2 } } +@layer components.buttons { .p { a: 3 } } +@layer { .p { a: 4 } } +.p { a: 5 } diff --git a/graph/test/web/cases/cascade/09-layers/src/vendor.css b/graph/test/web/cases/cascade/09-layers/src/vendor.css new file mode 100644 index 000000000..1440fefe2 --- /dev/null +++ b/graph/test/web/cases/cascade/09-layers/src/vendor.css @@ -0,0 +1 @@ +.p { a: 6 } diff --git a/graph/test/web/cases/cascade/10-quirks-mode/case.conf b/graph/test/web/cases/cascade/10-quirks-mode/case.conf new file mode 100644 index 000000000..6fce2df42 --- /dev/null +++ b/graph/test/web/cases/cascade/10-quirks-mode/case.conf @@ -0,0 +1,2 @@ +# shape: legacy pages without a doctype (quirks mode: class and id selectors match case-insensitively) next to a standards page +kinds=styles,unknown diff --git a/graph/test/web/cases/cascade/10-quirks-mode/src/quirks.html b/graph/test/web/cases/cascade/10-quirks-mode/src/quirks.html new file mode 100644 index 000000000..126b75223 --- /dev/null +++ b/graph/test/web/cases/cascade/10-quirks-mode/src/quirks.html @@ -0,0 +1,6 @@ + + + + + + diff --git a/graph/test/web/cases/cascade/10-quirks-mode/src/s.css b/graph/test/web/cases/cascade/10-quirks-mode/src/s.css new file mode 100644 index 000000000..fb7a88784 --- /dev/null +++ b/graph/test/web/cases/cascade/10-quirks-mode/src/s.css @@ -0,0 +1,4 @@ +.nav { a: 1 } +#main { a: 2 } +.Nav { a: 3 } +P { a: 4 } diff --git a/graph/test/web/cases/cascade/10-quirks-mode/src/standards.html b/graph/test/web/cases/cascade/10-quirks-mode/src/standards.html new file mode 100644 index 000000000..a4b232834 --- /dev/null +++ b/graph/test/web/cases/cascade/10-quirks-mode/src/standards.html @@ -0,0 +1,7 @@ + + + + + + + diff --git a/graph/test/web/cases/cascade/11-dynamic-class-and-unmatched/case.conf b/graph/test/web/cases/cascade/11-dynamic-class-and-unmatched/case.conf new file mode 100644 index 000000000..11bd8f406 --- /dev/null +++ b/graph/test/web/cases/cascade/11-dynamic-class-and-unmatched/case.conf @@ -0,0 +1,2 @@ +# shape: Alpine/Vue dashboards toggling classes through :class / x-bind:class, and utility classes that only JavaScript adds +kinds=styles,unknown diff --git a/graph/test/web/cases/cascade/11-dynamic-class-and-unmatched/src/index.html b/graph/test/web/cases/cascade/11-dynamic-class-and-unmatched/src/index.html new file mode 100644 index 000000000..cb08ed5a9 --- /dev/null +++ b/graph/test/web/cases/cascade/11-dynamic-class-and-unmatched/src/index.html @@ -0,0 +1,9 @@ + + + + + +
p
+
s
+ + diff --git a/graph/test/web/cases/cascade/11-dynamic-class-and-unmatched/src/s.css b/graph/test/web/cases/cascade/11-dynamic-class-and-unmatched/src/s.css new file mode 100644 index 000000000..ece392ecb --- /dev/null +++ b/graph/test/web/cases/cascade/11-dynamic-class-and-unmatched/src/s.css @@ -0,0 +1,6 @@ +.menu.open { a: 1 } +.menu.open .item { a: 2 } +.panel.shown { a: 3 } +.static.added-by-js { a: 4 } +.never-anywhere { a: 5 } +.menu { a: 6 } diff --git a/graph/test/web/cases/cascade/12-shadow-and-unparsed/case.conf b/graph/test/web/cases/cascade/12-shadow-and-unparsed/case.conf new file mode 100644 index 000000000..b58a952a9 --- /dev/null +++ b/graph/test/web/cases/cascade/12-shadow-and-unparsed/case.conf @@ -0,0 +1,2 @@ +# shape: component sheets with ::part/::slotted/:host, a column combinator, and selectors a browser would drop +kinds=styles,unknown diff --git a/graph/test/web/cases/cascade/12-shadow-and-unparsed/src/index.html b/graph/test/web/cases/cascade/12-shadow-and-unparsed/src/index.html new file mode 100644 index 000000000..199823c59 --- /dev/null +++ b/graph/test/web/cases/cascade/12-shadow-and-unparsed/src/index.html @@ -0,0 +1,7 @@ + + + + +

p

+ + diff --git a/graph/test/web/cases/cascade/12-shadow-and-unparsed/src/s.css b/graph/test/web/cases/cascade/12-shadow-and-unparsed/src/s.css new file mode 100644 index 000000000..9a6ddc5d7 --- /dev/null +++ b/graph/test/web/cases/cascade/12-shadow-and-unparsed/src/s.css @@ -0,0 +1,6 @@ +my-el::part(label) { a: 1 } +:host(.w) { a: 2 } +::slotted(p) { a: 3 } +col.selected || td { a: 4 } +.w:unknown-thing { a: 5 } +p.w { a: 6 } diff --git a/graph/test/web/cases/cascade/13-inert-template-noscript/case.conf b/graph/test/web/cases/cascade/13-inert-template-noscript/case.conf new file mode 100644 index 000000000..f61e8c54e --- /dev/null +++ b/graph/test/web/cases/cascade/13-inert-template-noscript/case.conf @@ -0,0 +1,2 @@ +# shape: pages keeping row templates in