Skip to content

test(no-nested-interactive): add composite-widget hierarchy valid cases#62

Closed
johanrd wants to merge 1 commit intomasterfrom
test/composite-widget-nesting
Closed

test(no-nested-interactive): add composite-widget hierarchy valid cases#62
johanrd wants to merge 1 commit intomasterfrom
test/composite-widget-nesting

Conversation

@johanrd
Copy link
Copy Markdown
Owner

@johanrd johanrd commented Apr 27, 2026

Summary

  • Adds 8 GTS + 8 HBS valid test cases covering the canonical ARIA composite-widget nesting patterns: listbox > option, tablist > tab, tree > treeitem, grid > row > gridcell/rowheader/columnheader, treegrid > row > gridcell, radiogroup > radio.
  • These patterns are allowed by COMPOSITE_WIDGET_CHILDREN (already on master in lib/utils/interactive-roles.js, derived from aria-query's requiredOwnedElements). The tests confirm that derivation is wired up correctly in the rule and none of these patterns produce a false positive.

Test plan

  • vitest run tests/lib/rules/template-no-nested-interactive.js — 109 tests pass (was 101 before)

Covers the canonical ARIA composite-widget patterns driven by
COMPOSITE_WIDGET_CHILDREN (aria-query requiredOwnedElements — already on
master via lib/utils/interactive-roles.js): listbox>option, tablist>tab,
tree>treeitem, grid>row>gridcell/rowheader/columnheader, treegrid>row,
radiogroup>radio. Added to both the gts and hbs rule-tester runs.
@github-actions
Copy link
Copy Markdown

🏎️ Benchmark Comparison

Benchmark Control (p50) Experiment (p50) Δ
🟠 js small 13.50 ms 13.80 ms +2.2%
js medium 6.93 ms 6.83 ms -1.4%
js large 2.73 ms 2.72 ms -0.6%
gjs small 1.22 ms 1.21 ms -0.7%
gjs medium 614.00 µs 610.88 µs -0.5%
gjs large 241.74 µs 241.93 µs +0.1%
gts small 1.21 ms 1.21 ms +0.0%
gts medium 613.51 µs 612.81 µs -0.1%
gts large 241.18 µs 240.12 µs -0.4%

🟢 faster · 🔴 slower · 🟠 slightly slower · ⚪ within 2%

Full mitata output
clk: ~2.68 GHz
cpu: AMD EPYC 7763 64-Core Processor
runtime: node 24.15.0 (x64-linux)

benchmark                   avg (min … max) p75 / p99    (min … top 1%)
------------------------------------------- -------------------------------
js small (control)            16.37 ms/iter  17.18 ms █                    
                      (11.99 ms … 28.34 ms)  27.09 ms █▆▆                  
                    (  5.18 mb …  10.39 mb)   7.22 mb ███▆█▄▄▆▄▄▁▁▁▁▁▄▄▆▄▁▆

js small (experiment)         14.33 ms/iter  14.55 ms    █                 
                      (12.65 ms … 19.61 ms)  18.26 ms  █▆█ █               
                    (  6.40 mb …   7.86 mb)   6.83 mb ▄███▄█▄█▁▄█▁▄▆▄▁▁▁▄▁▄

                             ┌                                            ┐
                             ╷ ┌──────────┬─┐                             ╷
          js small (control) ├─┤          │ ├─────────────────────────────┤
                             ╵ └──────────┴─┘                             ╵
                               ╷ ┌──┬┐          ╷
       js small (experiment)   ├─┤  │├──────────┤
                               ╵ └──┴┘          ╵
                             └                                            ┘
                             11.99 ms           19.54 ms           27.09 ms

summary
  js small (experiment)
   1.14x faster than js small (control)

------------------------------------------- -------------------------------
js medium (control)            7.62 ms/iter   7.74 ms  █                   
                       (6.46 ms … 13.10 ms)  12.45 ms ▆█▅                  
                    (  3.05 mb …   4.35 mb)   3.54 mb ███▃▆▄▅▁▂▁▃▂▁▁▃▂▁▁▃▃▂

js medium (experiment)         7.42 ms/iter   7.76 ms  █                   
                       (6.40 ms … 12.90 ms)  12.06 ms ▃█▄                  
                    (  1.90 mb …   5.15 mb)   3.53 mb ███▄▄▃▃▄▃▃▁▂▂▁▂▁▂▁▂▂▂

                             ┌                                            ┐
                              ╷┌──────┬┐                                  ╷
         js medium (control)  ├┤      │├──────────────────────────────────┤
                              ╵└──────┴┘                                  ╵
                             ╷┌──────┬─┐                               ╷
      js medium (experiment) ├┤      │ ├───────────────────────────────┤
                             ╵└──────┴─┘                               ╵
                             └                                            ┘
                             6.40 ms            9.43 ms            12.45 ms

summary
  js medium (experiment)
   1.03x faster than js medium (control)

------------------------------------------- -------------------------------
js large (control)             3.16 ms/iter   2.91 ms  █                   
                       (2.38 ms … 10.52 ms)   8.86 ms ▃█                   
                    (352.59 kb …   3.32 mb)   1.44 mb ██▄▃▂▂▂▂▁▁▂▂▁▁▁▁▁▁▁▁▁

js large (experiment)          2.93 ms/iter   2.82 ms  █                   
                        (2.50 ms … 6.89 ms)   5.94 ms ▃█                   
                    (102.30 kb …   2.36 mb)   1.43 mb ██▇▃▂▃▂▂▁▁▁▁▁▁▁▁▁▁▁▁▁

                             ┌                                            ┐
                             ╷ ┌──┬                                       ╷
          js large (control) ├─┤  │───────────────────────────────────────┤
                             ╵ └──┴                                       ╵
                              ╷┌─┬                    ╷
       js large (experiment)  ├┤ │────────────────────┤
                              ╵└─┴                    ╵
                             └                                            ┘
                             2.38 ms            5.62 ms             8.86 ms

summary
  js large (experiment)
   1.08x faster than js large (control)

------------------------------------------- -------------------------------
gjs small (control)            1.36 ms/iter   1.29 ms █                    
                        (1.18 ms … 5.77 ms)   5.21 ms █                    
                    (479.65 kb …   1.66 mb)   1.06 mb ██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

gjs small (experiment)         1.33 ms/iter   1.24 ms █                    
                        (1.18 ms … 6.49 ms)   5.02 ms █                    
                    (242.63 kb …   1.70 mb)   1.06 mb █▄▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

                             ┌                                            ┐
                             ┌─┬                                          ╷
         gjs small (control) │ │──────────────────────────────────────────┤
                             └─┴                                          ╵
                             ┌─┬                                        ╷
      gjs small (experiment) │ │────────────────────────────────────────┤
                             └─┴                                        ╵
                             └                                            ┘
                             1.18 ms            3.19 ms             5.21 ms

summary
  gjs small (experiment)
   1.02x faster than gjs small (control)

------------------------------------------- -------------------------------
gjs medium (control)         667.21 µs/iter 628.36 µs █                    
                      (584.10 µs … 5.50 ms)   3.45 ms █                    
                    (238.54 kb …   1.07 mb) 542.20 kb █▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

gjs medium (experiment)      656.12 µs/iter 622.66 µs █▂                   
                      (581.61 µs … 4.96 ms)   1.84 ms ██                   
                    ( 74.84 kb …   1.04 mb) 540.10 kb ██▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

                             ┌                                            ┐
                             ┌┬                                           ╷
        gjs medium (control) ││───────────────────────────────────────────┤
                             └┴                                           ╵
                             ┌┬                  ╷
     gjs medium (experiment) ││──────────────────┤
                             └┴                  ╵
                             └                                            ┘
                             581.61 µs           2.02 ms            3.45 ms

summary
  gjs medium (experiment)
   1.02x faster than gjs medium (control)

------------------------------------------- -------------------------------
gjs large (control)          266.69 µs/iter 256.92 µs  █▄                  
                      (230.90 µs … 5.30 ms) 356.81 µs ▅██                  
                    ( 94.95 kb …   1.07 mb) 217.48 kb ███▄█▇▆▂▂▂▁▁▁▁▁▁▁▁▁▁▁

gjs large (experiment)       262.86 µs/iter 256.64 µs  █▆                  
                      (231.17 µs … 4.72 ms) 340.15 µs ▃██  ▂               
                    (192.38 kb … 777.24 kb) 216.51 kb ███▇▃█▆▆▂▂▂▁▁▁▁▁▁▁▁▁▁

                             ┌                                            ┐
                             ╷ ┌──────────┬                               ╷
         gjs large (control) ├─┤          │───────────────────────────────┤
                             ╵ └──────────┴                               ╵
                             ╷ ┌────────┬                           ╷
      gjs large (experiment) ├─┤        │───────────────────────────┤
                             ╵ └────────┴                           ╵
                             └                                            ┘
                             230.90 µs         293.85 µs          356.81 µs

summary
  gjs large (experiment)
   1.01x faster than gjs large (control)

------------------------------------------- -------------------------------
gts small (control)            1.30 ms/iter   1.23 ms █                    
                        (1.17 ms … 5.20 ms)   4.81 ms █                    
                    (538.57 kb …   1.60 mb)   1.06 mb █▃▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

gts small (experiment)         1.29 ms/iter   1.23 ms █                    
                        (1.18 ms … 5.35 ms)   4.91 ms █                    
                    (220.05 kb …   1.49 mb)   1.05 mb █▃▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

                             ┌                                            ┐
                             ┌┬                                          ╷
         gts small (control) ││──────────────────────────────────────────┤
                             └┴                                          ╵
                             ┌┬                                           ╷
      gts small (experiment) ││───────────────────────────────────────────┤
                             └┴                                           ╵
                             └                                            ┘
                             1.17 ms            3.04 ms             4.91 ms

summary
  gts small (experiment)
   1x faster than gts small (control)

------------------------------------------- -------------------------------
gts medium (control)         656.49 µs/iter 628.75 µs  █                   
                      (582.32 µs … 4.75 ms)   1.34 ms  █                   
                    (224.59 kb …   1.29 mb) 542.11 kb ██▄▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

gts medium (experiment)      658.32 µs/iter 633.08 µs  █                   
                      (578.01 µs … 5.22 ms)   1.25 ms  █                   
                    (112.83 kb …   0.99 mb) 540.67 kb ███▃▂▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

                             ┌                                            ┐
                             ╷ ┌──┬                                       ╷
        gts medium (control) ├─┤  │───────────────────────────────────────┤
                             ╵ └──┴                                       ╵
                             ╷┌───┬                                  ╷
     gts medium (experiment) ├┤   │──────────────────────────────────┤
                             ╵└───┴                                  ╵
                             └                                            ┘
                             578.01 µs          957.31 µs           1.34 ms

summary
  gts medium (control)
   1x faster than gts medium (experiment)

------------------------------------------- -------------------------------
gts large (control)          263.18 µs/iter 256.62 µs  █                   
                      (230.64 µs … 4.55 ms) 358.26 µs  █▇                  
                    (216.09 kb …   1.37 mb) 217.16 kb ▇██▄▇▇▄▂▂▂▁▁▁▁▁▁▁▁▁▁▁

gts large (experiment)       263.41 µs/iter 255.76 µs  █                   
                      (229.77 µs … 4.95 ms) 356.62 µs  █▇                  
                    (103.29 kb … 692.73 kb) 216.60 kb ▄██▄▆▇▄▁▂▁▁▁▁▁▁▁▁▁▁▁▁

                             ┌                                            ┐
                             ╷ ┌─────────┬                                ╷
         gts large (control) ├─┤         │────────────────────────────────┤
                             ╵ └─────────┴                                ╵
                             ╷ ┌─────────┬                               ╷
      gts large (experiment) ├─┤         │───────────────────────────────┤
                             ╵ └─────────┴                               ╵
                             └                                            ┘
                             229.77 µs         294.01 µs          358.26 µs

summary
  gts large (control)
   1x faster than gts large (experiment)

@johanrd johanrd closed this Apr 27, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant