You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
55 lines
2.9 KiB
55 lines
2.9 KiB
#testsupport/discovery.tcl - test-file discovery for runtests.tcl |
|
#added 2026-07-19, reworked to directory-oriented pass-through 2026-07-20 (agent, G-093) |
|
# |
|
#Discovery contract: -include-paths/-exclude-paths patterns are handed to |
|
#punk::path::treefilenames unchanged and carry ITS directory-oriented semantics - |
|
#patterns match the DIRECTORY containing test files (tailbase-relative, forward |
|
#slashes), with the deliberately separable forms: |
|
# X files directly in X only |
|
# X/* files in folders exactly one below X |
|
# X/** files in the subtrees strictly below X (not files directly in X) |
|
# X/*** files in X and everything below it <- the common subtree form |
|
#File-tail globs (the runtests trailing arguments, default *.test) select FILENAMES |
|
#within the contributing directories - the directory and filename axes are independent. |
|
#-exclude-paths uses the same syntax; **|***-tail patterns prune the matched subtree, |
|
#other matches exclude just that folder's files; exclusion wins over inclusion. |
|
# |
|
#History (G-093): the 2026-07-19 increment instead filtered tailbase-relative FILE |
|
#paths at the runtests layer, which fixed the X/** boundary miss but gave |
|
#-include-paths a different meaning here than in treefilenames. Reworked at user |
|
#direction 2026-07-20: punk::path 0.4.0 gained *** (zero or more segments) plus |
|
#include/exclude separability fixes, so the runner passes patterns through and the |
|
#pathglob semantics are identical everywhere. |
|
# |
|
#Sourced by runtests.tcl (parent side - discovery happens once, before any child |
|
#processes) and by the runner-targeting regression suite |
|
#(runner/testsuites/discovery/pathdiscovery.test). Callers need module paths |
|
#established before sourcing: bootsupport for the runner - which therefore needs the |
|
#punk::path 0.4.0 snapshot for *** support - and the generated payload for suite |
|
#child processes. |
|
|
|
package require punk::path 0.4.0- |
|
|
|
namespace eval ::runtests_discovery {} |
|
|
|
proc ::runtests_discovery::discover_testfiles {base include_patterns exclude_patterns tailglobs exclude_files} { |
|
return [punk::path::treefilenames -directory $base -tailbase $base -include-paths $include_patterns -exclude-paths $exclude_patterns -exclude-files $exclude_files {*}$tailglobs] |
|
} |
|
|
|
proc ::runtests_discovery::dir_matches_any {patterns filepath} { |
|
#directory-of-file matching for post-discovery classification (-serial-paths and the |
|
#per-pattern zero-match advisory): true when the directory containing filepath matches |
|
#any pattern - the same directory-oriented reading the discovery patterns use. |
|
set dir [file dirname $filepath] |
|
if {$dir eq "."} { |
|
#a file directly at the discovery base - its tailbase-relative directory is the |
|
#empty string (matched by e.g bare *, ** and ***) |
|
set dir "" |
|
} |
|
foreach pat $patterns { |
|
if {[punk::path::globmatchpath $pat $dir]} { |
|
return 1 |
|
} |
|
} |
|
return 0 |
|
}
|
|
|