Browse Source

punk::path tests

master
Julian Noble 20 hours ago
parent
commit
d6fbf475d0
  1. 886
      src/tests/modules/punk/path/testsuites/tests/path.test

886
src/tests/modules/punk/path/testsuites/tests/path.test

@ -1,410 +1,478 @@
package require tcltest package require tcltest
tcltest::configure {*}$::argv tcltest::configure {*}$::argv
package require punk::lib package require punk::lib
package require punk::path package require punk::path
namespace eval ::testspace { namespace eval ::testspace {
namespace import ::tcltest::* namespace import ::tcltest::*
variable common { variable common {
set result "" set result ""
} }
variable subfolders_tree { variable subfolders_tree {
set sub_prevdir [pwd] set sub_prevdir [pwd]
set sub_newbase [punk::lib::tempdir_newfolder -prefix punk_path_subfolders] set sub_newbase [punk::lib::tempdir_newfolder -prefix punk_path_subfolders]
cd $sub_newbase cd $sub_newbase
set sub_tree_tail __punk_path_subfolders_test__ set sub_tree_tail __punk_path_subfolders_test__
set sub_tree_root [file join $sub_newbase $sub_tree_tail] set sub_tree_root [file join $sub_newbase $sub_tree_tail]
file mkdir [file join $sub_tree_root keep] file mkdir [file join $sub_tree_root keep]
file mkdir [file join $sub_tree_root src vfs deep] file mkdir [file join $sub_tree_root src vfs deep]
file mkdir [file join $sub_tree_root aside child grandchild] file mkdir [file join $sub_tree_root aside child grandchild]
} }
variable subfolders_cleanup { variable subfolders_cleanup {
cd $sub_prevdir cd $sub_prevdir
file delete -force $sub_newbase file delete -force $sub_newbase
} }
variable repeated_subfolders_tree { variable repeated_subfolders_tree {
set rep_prevdir [pwd] set rep_prevdir [pwd]
set rep_newbase [punk::lib::tempdir_newfolder -prefix punk_path_repeated_subfolders] set rep_newbase [punk::lib::tempdir_newfolder -prefix punk_path_repeated_subfolders]
cd $rep_newbase cd $rep_newbase
set rep_tree_tail __punk_path_repeated_subfolders_test__ set rep_tree_tail __punk_path_repeated_subfolders_test__
set rep_tree_root [file join $rep_newbase $rep_tree_tail] set rep_tree_root [file join $rep_newbase $rep_tree_tail]
file mkdir [file join $rep_tree_root alpha a a leaf deeper] file mkdir [file join $rep_tree_root alpha a a leaf deeper]
file mkdir [file join $rep_tree_root alpha a x a leaf deeper] file mkdir [file join $rep_tree_root alpha a x a leaf deeper]
file mkdir [file join $rep_tree_root alpha a xx a leaf deeper] file mkdir [file join $rep_tree_root alpha a xx a leaf deeper]
file mkdir [file join $rep_tree_root alpha a x y a leaf deeper] file mkdir [file join $rep_tree_root alpha a x y a leaf deeper]
file mkdir [file join $rep_tree_root alpha a x y z a leaf deeper] file mkdir [file join $rep_tree_root alpha a x y z a leaf deeper]
file mkdir [file join $rep_tree_root alpha a x y z keep] file mkdir [file join $rep_tree_root alpha a x y z keep]
file mkdir [file join $rep_tree_root alpha a q aa leaf deeper] file mkdir [file join $rep_tree_root alpha a q aa leaf deeper]
file mkdir [file join $rep_tree_root alpha aa x a leaf deeper] file mkdir [file join $rep_tree_root alpha aa x a leaf deeper]
} }
variable repeated_subfolders_cleanup { variable repeated_subfolders_cleanup {
cd $rep_prevdir cd $rep_prevdir
file delete -force $rep_newbase file delete -force $rep_newbase
} }
variable treefilenames_tree { variable treefilenames_tree {
set tf_prevdir [pwd] set tf_prevdir [pwd]
set tf_newbase [punk::lib::tempdir_newfolder -prefix punk_path_treefilenames] set tf_newbase [punk::lib::tempdir_newfolder -prefix punk_path_treefilenames]
cd $tf_newbase cd $tf_newbase
set tf_tree_tail __punk_path_treefilenames_test__ set tf_tree_tail __punk_path_treefilenames_test__
set tf_tree_root [file join $tf_newbase $tf_tree_tail] set tf_tree_root [file join $tf_newbase $tf_tree_tail]
file mkdir [file join $tf_tree_root keep] file mkdir [file join $tf_tree_root keep]
file mkdir [file join $tf_tree_root src vfs deep] file mkdir [file join $tf_tree_root src vfs deep]
file mkdir [file join $tf_tree_root aside child grandchild] file mkdir [file join $tf_tree_root aside child grandchild]
foreach relpath { foreach relpath {
keep/keep.txt keep/keep.txt
src/srcroot.txt src/srcroot.txt
src/vfs/vfs.txt src/vfs/vfs.txt
src/vfs/deep/deep.txt src/vfs/deep/deep.txt
aside/aside.txt aside/aside.txt
aside/child/child.txt aside/child/child.txt
aside/child/grandchild/grandchild.txt aside/child/grandchild/grandchild.txt
b/other/other.txt b/other/other.txt
} { alpha/subdir/direct.txt
set filepath [file join $tf_tree_root $relpath] alpha/subdir/deep/deep.txt
file mkdir [file dirname $filepath] } {
set channel [open $filepath w] set filepath [file join $tf_tree_root $relpath]
puts $channel $relpath file mkdir [file dirname $filepath]
close $channel set channel [open $filepath w]
} puts $channel $relpath
} close $channel
}
variable treefilenames_cleanup { }
cd $tf_prevdir
file delete -force $tf_newbase variable treefilenames_cleanup {
} cd $tf_prevdir
file delete -force $tf_newbase
test globmatchpath_basic {Test single star between slashes pathglob argument will match exactly a single level} \ }
-setup $common -body {
set result [list \ test globmatchpath_basic {Test single star between slashes pathglob argument will match exactly a single level} \
[punk::path::globmatchpath /etc/*/*.doc /etc/A/test.doc] \ -setup $common -body {
[punk::path::globmatchpath /etc/*/*.doc /etc/A/B/test.doc] \ set result [list \
[punk::path::globmatchpath /etc/*/*.doc /etc/test.doc] \ [punk::path::globmatchpath /etc/*/*.doc /etc/A/test.doc] \
] [punk::path::globmatchpath /etc/*/*.doc /etc/A/B/test.doc] \
} \ [punk::path::globmatchpath /etc/*/*.doc /etc/test.doc] \
-cleanup { ]
} \ } \
-result {1 0 0} -cleanup {
} \
test subfolders_exclude_trailing_doublestar {Trailing /** prunes descendants but keeps the matching base directory} \ -result {1 0 0}
-setup $subfolders_tree -body {
set result [lsort [punk::path::subfolders -recursive -exclude-paths {**/src/**} .]] test subfolders_exclude_trailing_doublestar {Trailing /** prunes descendants but keeps the matching base directory} \
set expected [lsort [list \ -setup $subfolders_tree -body {
[file join . $sub_tree_tail] \ set result [lsort [punk::path::subfolders -recursive -exclude-paths {**/src/**} .]]
[file join . $sub_tree_tail aside] \ set expected [lsort [list \
[file join . $sub_tree_tail aside child] \ [file join . $sub_tree_tail] \
[file join . $sub_tree_tail aside child grandchild] \ [file join . $sub_tree_tail aside] \
[file join . $sub_tree_tail keep] \ [file join . $sub_tree_tail aside child] \
[file join . $sub_tree_tail src] \ [file join . $sub_tree_tail aside child grandchild] \
]] [file join . $sub_tree_tail keep] \
expr {$result eq $expected} [file join . $sub_tree_tail src] \
} \ ]]
-cleanup $subfolders_cleanup \ expr {$result eq $expected}
-result 1 } \
-cleanup $subfolders_cleanup \
test subfolders_exclude_single_segment {Single-level excludes omit the node but still recurse into it} \ -result 1
-setup $subfolders_tree -body {
set result [lsort [punk::path::subfolders -recursive -exclude-paths {**/aside/*} .]] test subfolders_exclude_single_segment {Single-level excludes omit the node but still recurse into it} \
set expected [lsort [list \ -setup $subfolders_tree -body {
[file join . $sub_tree_tail] \ set result [lsort [punk::path::subfolders -recursive -exclude-paths {**/aside/*} .]]
[file join . $sub_tree_tail aside] \ set expected [lsort [list \
[file join . $sub_tree_tail aside child grandchild] \ [file join . $sub_tree_tail] \
[file join . $sub_tree_tail keep] \ [file join . $sub_tree_tail aside] \
[file join . $sub_tree_tail src] \ [file join . $sub_tree_tail aside child grandchild] \
[file join . $sub_tree_tail src vfs] \ [file join . $sub_tree_tail keep] \
[file join . $sub_tree_tail src vfs deep] \ [file join . $sub_tree_tail src] \
]] [file join . $sub_tree_tail src vfs] \
expr {$result eq $expected} [file join . $sub_tree_tail src vfs deep] \
} \ ]]
-cleanup $subfolders_cleanup \ expr {$result eq $expected}
-result 1 } \
-cleanup $subfolders_cleanup \
test subfolders_exclude_exact_segment {Exact segment excludes omit the node but still traverse below it} \ -result 1
-setup $subfolders_tree -body {
set result [lsort [punk::path::subfolders -recursive -exclude-paths {**/aside} .]] test subfolders_exclude_exact_segment {Exact segment excludes omit the node but still traverse below it} \
set expected [lsort [list \ -setup $subfolders_tree -body {
[file join . $sub_tree_tail] \ set result [lsort [punk::path::subfolders -recursive -exclude-paths {**/aside} .]]
[file join . $sub_tree_tail aside child] \ set expected [lsort [list \
[file join . $sub_tree_tail aside child grandchild] \ [file join . $sub_tree_tail] \
[file join . $sub_tree_tail keep] \ [file join . $sub_tree_tail aside child] \
[file join . $sub_tree_tail src] \ [file join . $sub_tree_tail aside child grandchild] \
[file join . $sub_tree_tail src vfs] \ [file join . $sub_tree_tail keep] \
[file join . $sub_tree_tail src vfs deep] \ [file join . $sub_tree_tail src] \
]] [file join . $sub_tree_tail src vfs] \
expr {$result eq $expected} [file join . $sub_tree_tail src vfs deep] \
} \ ]]
-cleanup $subfolders_cleanup \ expr {$result eq $expected}
-result 1 } \
-cleanup $subfolders_cleanup \
test subfolders_exclude_combined_patterns {Subtree and exact excludes compose correctly in recursive traversal} \ -result 1
-setup $subfolders_tree -body {
set result [lsort [punk::path::subfolders -recursive -exclude-paths {**/src/** **/aside} .]] test subfolders_exclude_combined_patterns {Subtree and exact excludes compose correctly in recursive traversal} \
set expected [lsort [list \ -setup $subfolders_tree -body {
[file join . $sub_tree_tail] \ set result [lsort [punk::path::subfolders -recursive -exclude-paths {**/src/** **/aside} .]]
[file join . $sub_tree_tail aside child] \ set expected [lsort [list \
[file join . $sub_tree_tail aside child grandchild] \ [file join . $sub_tree_tail] \
[file join . $sub_tree_tail keep] \ [file join . $sub_tree_tail aside child] \
[file join . $sub_tree_tail src] \ [file join . $sub_tree_tail aside child grandchild] \
]] [file join . $sub_tree_tail keep] \
expr {$result eq $expected} [file join . $sub_tree_tail src] \
} \ ]]
-cleanup $subfolders_cleanup \ expr {$result eq $expected}
-result 1 } \
-cleanup $subfolders_cleanup \
test subfolders_repeated_segments_single_star {Repeated segment exclude with one wildcard segment prunes only that shape} \ -result 1
-setup $repeated_subfolders_tree -body {
set result [punk::path::subfolders -recursive -exclude-paths {**/a/*/a/**} .] test subfolders_repeated_segments_single_star {Repeated segment exclude with one wildcard segment prunes only that shape} \
expr { \ -setup $repeated_subfolders_tree -body {
[file join . $rep_tree_tail alpha a x a] in $result \ set result [punk::path::subfolders -recursive -exclude-paths {**/a/*/a/**} .]
&& [file join . $rep_tree_tail alpha a x a leaf] ni $result \ expr { \
&& [file join . $rep_tree_tail alpha a x a leaf deeper] ni $result \ [file join . $rep_tree_tail alpha a x a] in $result \
&& [file join . $rep_tree_tail alpha a x y a leaf] in $result \ && [file join . $rep_tree_tail alpha a x a leaf] ni $result \
&& [file join . $rep_tree_tail alpha a x y z keep] in $result \ && [file join . $rep_tree_tail alpha a x a leaf deeper] ni $result \
} && [file join . $rep_tree_tail alpha a x y a leaf] in $result \
} \ && [file join . $rep_tree_tail alpha a x y z keep] in $result \
-cleanup $repeated_subfolders_cleanup \ }
-result 1 } \
-cleanup $repeated_subfolders_cleanup \
test subfolders_repeated_segments_two_single_stars {Repeated segment exclude with two wildcard segments prunes only that shape} \ -result 1
-setup $repeated_subfolders_tree -body {
set result [punk::path::subfolders -recursive -exclude-paths {**/a/*/*/a/**} .] test subfolders_repeated_segments_two_single_stars {Repeated segment exclude with two wildcard segments prunes only that shape} \
expr { \ -setup $repeated_subfolders_tree -body {
[file join . $rep_tree_tail alpha a x y a] in $result \ set result [punk::path::subfolders -recursive -exclude-paths {**/a/*/*/a/**} .]
&& [file join . $rep_tree_tail alpha a x y a leaf] ni $result \ expr { \
&& [file join . $rep_tree_tail alpha a x y a leaf deeper] ni $result \ [file join . $rep_tree_tail alpha a x y a] in $result \
&& [file join . $rep_tree_tail alpha a x a leaf] in $result \ && [file join . $rep_tree_tail alpha a x y a leaf] ni $result \
&& [file join . $rep_tree_tail alpha a x y z a leaf] in $result \ && [file join . $rep_tree_tail alpha a x y a leaf deeper] ni $result \
} && [file join . $rep_tree_tail alpha a x a leaf] in $result \
} \ && [file join . $rep_tree_tail alpha a x y z a leaf] in $result \
-cleanup $repeated_subfolders_cleanup \ }
-result 1 } \
-cleanup $repeated_subfolders_cleanup \
test subfolders_repeated_segments_middle_doublestar {Repeated segment exclude with middle doublestar prunes repeated a descendants at multiple depths} \ -result 1
-setup $repeated_subfolders_tree -body {
set result [punk::path::subfolders -recursive -exclude-paths {**/a/**/a/**} .] test subfolders_repeated_segments_middle_doublestar {Repeated segment exclude with middle doublestar prunes repeated a descendants at multiple depths} \
expr { \ -setup $repeated_subfolders_tree -body {
[file join . $rep_tree_tail alpha a x a] in $result \ set result [punk::path::subfolders -recursive -exclude-paths {**/a/**/a/**} .]
&& [file join . $rep_tree_tail alpha a x y a] in $result \ expr { \
&& [file join . $rep_tree_tail alpha a x y z a] in $result \ [file join . $rep_tree_tail alpha a x a] in $result \
&& [file join . $rep_tree_tail alpha a x a leaf] ni $result \ && [file join . $rep_tree_tail alpha a x y a] in $result \
&& [file join . $rep_tree_tail alpha a x y a leaf] ni $result \ && [file join . $rep_tree_tail alpha a x y z a] in $result \
&& [file join . $rep_tree_tail alpha a x y z a leaf] ni $result \ && [file join . $rep_tree_tail alpha a x a leaf] ni $result \
} && [file join . $rep_tree_tail alpha a x y a leaf] ni $result \
} \ && [file join . $rep_tree_tail alpha a x y z a leaf] ni $result \
-cleanup $repeated_subfolders_cleanup \ }
-result 1 } \
-cleanup $repeated_subfolders_cleanup \
test subfolders_repeated_segments_nonmatching_pattern {Repeated path segments are retained when pattern literals do not match} \ -result 1
-setup $repeated_subfolders_tree -body {
set result [punk::path::subfolders -recursive -exclude-paths {**/a/*/b/**} .] test subfolders_repeated_segments_nonmatching_pattern {Repeated path segments are retained when pattern literals do not match} \
expr { \ -setup $repeated_subfolders_tree -body {
[file join . $rep_tree_tail alpha a x a leaf] in $result \ set result [punk::path::subfolders -recursive -exclude-paths {**/a/*/b/**} .]
&& [file join . $rep_tree_tail alpha a x y a leaf] in $result \ expr { \
&& [file join . $rep_tree_tail alpha a x y z a leaf] in $result \ [file join . $rep_tree_tail alpha a x a leaf] in $result \
} && [file join . $rep_tree_tail alpha a x y a leaf] in $result \
} \ && [file join . $rep_tree_tail alpha a x y z a leaf] in $result \
-cleanup $repeated_subfolders_cleanup \ }
-result 1 } \
-cleanup $repeated_subfolders_cleanup \
test subfolders_repeated_segments_exact_boundary {Exact repeated segment excludes boundary node but still traverses below it} \ -result 1
-setup $repeated_subfolders_tree -body {
set result [punk::path::subfolders -recursive -exclude-paths {**/a/*/a} .] test subfolders_repeated_segments_exact_boundary {Exact repeated segment excludes boundary node but still traverses below it} \
expr { \ -setup $repeated_subfolders_tree -body {
[file join . $rep_tree_tail alpha a x a] ni $result \ set result [punk::path::subfolders -recursive -exclude-paths {**/a/*/a} .]
&& [file join . $rep_tree_tail alpha a x a leaf] in $result \ expr { \
&& [file join . $rep_tree_tail alpha a x y a] in $result \ [file join . $rep_tree_tail alpha a x a] ni $result \
} && [file join . $rep_tree_tail alpha a x a leaf] in $result \
} \ && [file join . $rep_tree_tail alpha a x y a] in $result \
-cleanup $repeated_subfolders_cleanup \ }
-result 1 } \
-cleanup $repeated_subfolders_cleanup \
test subfolders_repeated_segments_adjacent_literals {Adjacent repeated literals match only adjacent path segments} \ -result 1
-setup $repeated_subfolders_tree -body {
set result [punk::path::subfolders -recursive -exclude-paths {**/a/a/**} .] test subfolders_repeated_segments_adjacent_literals {Adjacent repeated literals match only adjacent path segments} \
expr { \ -setup $repeated_subfolders_tree -body {
[file join . $rep_tree_tail alpha a a] in $result \ set result [punk::path::subfolders -recursive -exclude-paths {**/a/a/**} .]
&& [file join . $rep_tree_tail alpha a a leaf] ni $result \ expr { \
&& [file join . $rep_tree_tail alpha a x a leaf] in $result \ [file join . $rep_tree_tail alpha a a] in $result \
} && [file join . $rep_tree_tail alpha a a leaf] ni $result \
} \ && [file join . $rep_tree_tail alpha a x a leaf] in $result \
-cleanup $repeated_subfolders_cleanup \ }
-result 1 } \
-cleanup $repeated_subfolders_cleanup \
test subfolders_repeated_segments_question_segment {Question mark wildcard matches exactly one character within one segment} \ -result 1
-setup $repeated_subfolders_tree -body {
set result [punk::path::subfolders -recursive -exclude-paths {**/a/?/a/**} .] test subfolders_repeated_segments_question_segment {Question mark wildcard matches exactly one character within one segment} \
expr { \ -setup $repeated_subfolders_tree -body {
[file join . $rep_tree_tail alpha a x a] in $result \ set result [punk::path::subfolders -recursive -exclude-paths {**/a/?/a/**} .]
&& [file join . $rep_tree_tail alpha a x a leaf] ni $result \ expr { \
&& [file join . $rep_tree_tail alpha a xx a leaf] in $result \ [file join . $rep_tree_tail alpha a x a] in $result \
} && [file join . $rep_tree_tail alpha a x a leaf] ni $result \
} \ && [file join . $rep_tree_tail alpha a xx a leaf] in $result \
-cleanup $repeated_subfolders_cleanup \ }
-result 1 } \
-cleanup $repeated_subfolders_cleanup \
test subfolders_repeated_segments_similar_names {Similar segment names do not match repeated literal a patterns accidentally} \ -result 1
-setup $repeated_subfolders_tree -body {
set result [punk::path::subfolders -recursive -exclude-paths {**/a/*/a/**} .] test subfolders_repeated_segments_similar_names {Similar segment names do not match repeated literal a patterns accidentally} \
expr { \ -setup $repeated_subfolders_tree -body {
[file join . $rep_tree_tail alpha a q aa leaf] in $result \ set result [punk::path::subfolders -recursive -exclude-paths {**/a/*/a/**} .]
&& [file join . $rep_tree_tail alpha aa x a leaf] in $result \ expr { \
} [file join . $rep_tree_tail alpha a q aa leaf] in $result \
} \ && [file join . $rep_tree_tail alpha aa x a leaf] in $result \
-cleanup $repeated_subfolders_cleanup \ }
-result 1 } \
-cleanup $repeated_subfolders_cleanup \
test subfolders_repeated_segments_similar_name_patterns {Similar literal aa patterns match only their own segment shapes} \ -result 1
-setup $repeated_subfolders_tree -body {
set result [punk::path::subfolders -recursive -exclude-paths {**/a/*/aa/** **/aa/*/a/**} .] test subfolders_repeated_segments_similar_name_patterns {Similar literal aa patterns match only their own segment shapes} \
expr { \ -setup $repeated_subfolders_tree -body {
[file join . $rep_tree_tail alpha a q aa] in $result \ set result [punk::path::subfolders -recursive -exclude-paths {**/a/*/aa/** **/aa/*/a/**} .]
&& [file join . $rep_tree_tail alpha a q aa leaf] ni $result \ expr { \
&& [file join . $rep_tree_tail alpha aa x a] in $result \ [file join . $rep_tree_tail alpha a q aa] in $result \
&& [file join . $rep_tree_tail alpha aa x a leaf] ni $result \ && [file join . $rep_tree_tail alpha a q aa leaf] ni $result \
&& [file join . $rep_tree_tail alpha a x a leaf] in $result \ && [file join . $rep_tree_tail alpha aa x a] in $result \
} && [file join . $rep_tree_tail alpha aa x a leaf] ni $result \
} \ && [file join . $rep_tree_tail alpha a x a leaf] in $result \
-cleanup $repeated_subfolders_cleanup \ }
-result 1 } \
-cleanup $repeated_subfolders_cleanup \
test subfolders_repeated_segments_overlapping_patterns {Overlapping repeated segment excludes prune each matching shape independently} \ -result 1
-setup $repeated_subfolders_tree -body {
set result [punk::path::subfolders -recursive -exclude-paths {**/a/*/a/** **/a/*/*/a/**} .] test subfolders_repeated_segments_overlapping_patterns {Overlapping repeated segment excludes prune each matching shape independently} \
expr { \ -setup $repeated_subfolders_tree -body {
[file join . $rep_tree_tail alpha a x a leaf] ni $result \ set result [punk::path::subfolders -recursive -exclude-paths {**/a/*/a/** **/a/*/*/a/**} .]
&& [file join . $rep_tree_tail alpha a x y a leaf] ni $result \ expr { \
&& [file join . $rep_tree_tail alpha a x y z a leaf] in $result \ [file join . $rep_tree_tail alpha a x a leaf] ni $result \
&& [file join . $rep_tree_tail alpha a x y z keep] in $result \ && [file join . $rep_tree_tail alpha a x y a leaf] ni $result \
} && [file join . $rep_tree_tail alpha a x y z a leaf] in $result \
} \ && [file join . $rep_tree_tail alpha a x y z keep] in $result \
-cleanup $repeated_subfolders_cleanup \ }
-result 1 } \
-cleanup $repeated_subfolders_cleanup \
test treefilenames_recurse_nested_positive_glob {Positive glob traversal reaches nested matches below unmatched ancestors} \ -result 1
-setup $treefilenames_tree -body {
set result [lsort [punk::path::treefilenames -sort none -directory . -include-paths {**/src/**} *.txt]] test treefilenames_recurse_nested_positive_glob {Positive glob traversal reaches nested matches below unmatched ancestors} \
set expected [lsort [list \ -setup $treefilenames_tree -body {
[file join . $tf_tree_tail src vfs deep deep.txt] \ set result [lsort [punk::path::treefilenames -sort none -directory . -include-paths {**/src/**} *.txt]]
[file join . $tf_tree_tail src vfs vfs.txt] \ set expected [lsort [list \
]] [file join . $tf_tree_tail src vfs deep deep.txt] \
expr {$result eq $expected} [file join . $tf_tree_tail src vfs vfs.txt] \
} \ ]]
-cleanup $treefilenames_cleanup \ expr {$result eq $expected}
-result 1 } \
-cleanup $treefilenames_cleanup \
test treefilenames_nonexistent_glob_path_returns_empty {Non-matching glob_paths subtree should return no files} \ -result 1
-setup $treefilenames_tree -body {
set result [punk::path::treefilenames -sort none -directory . -include-paths {**/nonexistantfolder/**} *] test treefilenames_nonexistent_glob_path_returns_empty {Non-matching glob_paths subtree should return no files} \
expr {$result eq [list]} -setup $treefilenames_tree -body {
} \ set result [punk::path::treefilenames -sort none -directory . -include-paths {**/nonexistantfolder/**} *]
-cleanup $treefilenames_cleanup \ expr {$result eq [list]}
-result 1 } \
-cleanup $treefilenames_cleanup \
test treefilenames_tailbase_newbase_returns_tree_tail {Tailbase can trim returned filenames to the tree folder} \ -result 1
-setup $treefilenames_tree -body {
set result [lsort [punk::path::treefilenames -sort none -directory $tf_tree_root -tailbase $tf_newbase *.txt]] test treefilenames_include_paths_subdir_boundary_before_exact {Include paths include internal and trailing subdir matches when subtree pattern appears first} \
set expected [lsort [list \ -setup $treefilenames_tree -body {
[file join $tf_tree_tail aside aside.txt] \ set result [lsort [punk::path::treefilenames -sort none -directory . -include-paths {**/subdir/** **/subdir} *.txt]]
[file join $tf_tree_tail aside child child.txt] \ set expected [lsort [list \
[file join $tf_tree_tail aside child grandchild grandchild.txt] \ [file join . $tf_tree_tail alpha subdir deep deep.txt] \
[file join $tf_tree_tail b other other.txt] \ [file join . $tf_tree_tail alpha subdir direct.txt] \
[file join $tf_tree_tail keep keep.txt] \ ]]
[file join $tf_tree_tail src srcroot.txt] \ if {$result ne $expected} {
[file join $tf_tree_tail src vfs deep deep.txt] \ error "result mismatch\nexpected: $expected\nactual: $result"
[file join $tf_tree_tail src vfs vfs.txt] \ }
]] expr {$result eq $expected}
expr {$result eq $expected} } \
} \ -cleanup $treefilenames_cleanup \
-cleanup $treefilenames_cleanup \ -result 1
-result 1
test treefilenames_include_paths_subdir_exact_before_boundary {Include paths include internal and trailing subdir matches when exact pattern appears first} \
test treefilenames_tailbase_tree_root_returns_tree_relative {Tailbase can trim returned filenames to paths below the search root} \ -setup $treefilenames_tree -body {
-setup $treefilenames_tree -body { set result [lsort [punk::path::treefilenames -sort none -directory . -include-paths {**/subdir **/subdir/**} *.txt]]
set result [lsort [punk::path::treefilenames -sort none -directory $tf_tree_root -tailbase $tf_tree_root *.txt]] set expected [lsort [list \
set expected [lsort [list \ [file join . $tf_tree_tail alpha subdir deep deep.txt] \
[file join aside aside.txt] \ [file join . $tf_tree_tail alpha subdir direct.txt] \
[file join aside child child.txt] \ ]]
[file join aside child grandchild grandchild.txt] \ if {$result ne $expected} {
[file join b other other.txt] \ error "result mismatch\nexpected: $expected\nactual: $result"
[file join keep keep.txt] \ }
[file join src srcroot.txt] \ expr {$result eq $expected}
[file join src vfs deep deep.txt] \ } \
[file join src vfs vfs.txt] \ -cleanup $treefilenames_cleanup \
]] -result 1
expr {$result eq $expected}
} \ test treefilenames_tailbase_newbase_returns_tree_tail {Tailbase can trim returned filenames to the tree folder} \
-cleanup $treefilenames_cleanup \ -setup $treefilenames_tree -body {
-result 1 set result [lsort [punk::path::treefilenames -sort none -directory $tf_tree_root -tailbase $tf_newbase *.txt]]
set expected [lsort [list \
test treefilenames_tailbase_exclude_paths_match_returned_paths {Exclude paths match tailbase-relative returned paths} \ [file join $tf_tree_tail alpha subdir deep deep.txt] \
-setup $treefilenames_tree -body { [file join $tf_tree_tail alpha subdir direct.txt] \
set result [lsort [punk::path::treefilenames -sort none -directory $tf_tree_root -tailbase $tf_tree_root -exclude-paths {aside aside/** src/vfs/**} *.txt]] [file join $tf_tree_tail aside aside.txt] \
set expected [lsort [list \ [file join $tf_tree_tail aside child child.txt] \
[file join b other other.txt] \ [file join $tf_tree_tail aside child grandchild grandchild.txt] \
[file join keep keep.txt] \ [file join $tf_tree_tail b other other.txt] \
[file join src srcroot.txt] \ [file join $tf_tree_tail keep keep.txt] \
[file join src vfs vfs.txt] \ [file join $tf_tree_tail src srcroot.txt] \
]] [file join $tf_tree_tail src vfs deep deep.txt] \
expr {$result eq $expected} [file join $tf_tree_tail src vfs vfs.txt] \
} \ ]]
-cleanup $treefilenames_cleanup \ expr {$result eq $expected}
-result 1 } \
-cleanup $treefilenames_cleanup \
test treefilenames_tailbase_include_paths_match_tree_root_relative_paths {Include paths match tailbase-relative paths below the tree root} \ -result 1
-setup $treefilenames_tree -body {
set result [lsort [punk::path::treefilenames -sort none -directory $tf_tree_root -tailbase $tf_tree_root -include-paths {src/**} *.txt]] test treefilenames_tailbase_tree_root_returns_tree_relative {Tailbase can trim returned filenames to paths below the search root} \
set expected [lsort [list \ -setup $treefilenames_tree -body {
[file join src vfs deep deep.txt] \ set result [lsort [punk::path::treefilenames -sort none -directory $tf_tree_root -tailbase $tf_tree_root *.txt]]
[file join src vfs vfs.txt] \ set expected [lsort [list \
]] [file join alpha subdir deep deep.txt] \
expr {$result eq $expected} [file join alpha subdir direct.txt] \
} \ [file join aside aside.txt] \
-cleanup $treefilenames_cleanup \ [file join aside child child.txt] \
-result 1 [file join aside child grandchild grandchild.txt] \
[file join b other other.txt] \
test treefilenames_tailbase_include_paths_match_newbase_relative_paths {Include paths include the tree folder when tailbase is above the search root} \ [file join keep keep.txt] \
-setup $treefilenames_tree -body { [file join src srcroot.txt] \
set include_path [file join $tf_tree_tail src **] [file join src vfs deep deep.txt] \
set result [lsort [punk::path::treefilenames -sort none -directory $tf_tree_root -tailbase $tf_newbase -include-paths [list $include_path] *.txt]] [file join src vfs vfs.txt] \
set expected [lsort [list \ ]]
[file join $tf_tree_tail src vfs deep deep.txt] \ expr {$result eq $expected}
[file join $tf_tree_tail src vfs vfs.txt] \ } \
]] -cleanup $treefilenames_cleanup \
expr {$result eq $expected} -result 1
} \
-cleanup $treefilenames_cleanup \ test treefilenames_tailbase_exclude_paths_match_returned_paths {Exclude paths match tailbase-relative returned paths} \
-result 1 -setup $treefilenames_tree -body {
set result [lsort [punk::path::treefilenames -sort none -directory $tf_tree_root -tailbase $tf_tree_root -exclude-paths {aside aside/** src/vfs/**} *.txt]]
test treefilenames_tailbase_include_and_exclude_paths_share_relative_base {Include and exclude paths use the same tailbase-relative base} \ set expected [lsort [list \
-setup $treefilenames_tree -body { [file join alpha subdir deep deep.txt] \
set result [lsort [punk::path::treefilenames -sort none -directory $tf_tree_root -tailbase $tf_tree_root -include-paths {src/**} -exclude-paths {src/vfs/**} *.txt]] [file join alpha subdir direct.txt] \
set expected [list [file join src vfs vfs.txt]] [file join b other other.txt] \
expr {$result eq $expected} [file join keep keep.txt] \
} \ [file join src srcroot.txt] \
-cleanup $treefilenames_cleanup \ [file join src vfs vfs.txt] \
-result 1 ]]
expr {$result eq $expected}
test treefilenames_rejects_internal_call_flags {Internal recursion state flags are not public API} \ } \
-setup $treefilenames_tree -body { -cleanup $treefilenames_cleanup \
set results [list] -result 1
foreach arglist {
{-call-depth-internal 1 -directory . *} test treefilenames_tailbase_include_paths_match_tree_root_relative_paths {Include paths match tailbase-relative paths below the tree root} \
{-call-subvector {a b} -directory . *} -setup $treefilenames_tree -body {
{-call-allbelow 1 -directory . *} set result [lsort [punk::path::treefilenames -sort none -directory $tf_tree_root -tailbase $tf_tree_root -include-paths {src/**} *.txt]]
} { set expected [lsort [list \
lappend results [catch {punk::path::treefilenames {*}$arglist}] [file join src vfs deep deep.txt] \
} [file join src vfs vfs.txt] \
expr {$results eq {1 1 1}} ]]
} \ expr {$result eq $expected}
-cleanup $treefilenames_cleanup \ } \
-result 1 -cleanup $treefilenames_cleanup \
} -result 1
test treefilenames_tailbase_include_paths_subdir_boundary_before_exact {Tailbase include paths include internal and trailing subdir matches when subtree pattern appears first} \
-setup $treefilenames_tree -body {
set result [lsort [punk::path::treefilenames -sort none -directory $tf_tree_root -tailbase $tf_tree_root -include-paths {**/subdir/** **/subdir} *.txt]]
set expected [lsort [list \
[file join alpha subdir deep deep.txt] \
[file join alpha subdir direct.txt] \
]]
if {$result ne $expected} {
error "result mismatch\nexpected: $expected\nactual: $result"
}
expr {$result eq $expected}
} \
-cleanup $treefilenames_cleanup \
-result 1
test treefilenames_tailbase_include_paths_subdir_exact_before_boundary {Tailbase include paths include internal and trailing subdir matches when exact pattern appears first} \
-setup $treefilenames_tree -body {
set result [lsort [punk::path::treefilenames -sort none -directory $tf_tree_root -tailbase $tf_tree_root -include-paths {**/subdir **/subdir/**} *.txt]]
set expected [lsort [list \
[file join alpha subdir deep deep.txt] \
[file join alpha subdir direct.txt] \
]]
if {$result ne $expected} {
error "result mismatch\nexpected: $expected\nactual: $result"
}
expr {$result eq $expected}
} \
-cleanup $treefilenames_cleanup \
-result 1
test treefilenames_tailbase_include_paths_match_newbase_relative_paths {Include paths include the tree folder when tailbase is above the search root} \
-setup $treefilenames_tree -body {
set include_path [file join $tf_tree_tail src **]
set result [lsort [punk::path::treefilenames -sort none -directory $tf_tree_root -tailbase $tf_newbase -include-paths [list $include_path] *.txt]]
set expected [lsort [list \
[file join $tf_tree_tail src vfs deep deep.txt] \
[file join $tf_tree_tail src vfs vfs.txt] \
]]
expr {$result eq $expected}
} \
-cleanup $treefilenames_cleanup \
-result 1
test treefilenames_tailbase_include_and_exclude_paths_share_relative_base {Include and exclude paths use the same tailbase-relative base} \
-setup $treefilenames_tree -body {
set result [lsort [punk::path::treefilenames -sort none -directory $tf_tree_root -tailbase $tf_tree_root -include-paths {src/**} -exclude-paths {src/vfs/**} *.txt]]
set expected [list [file join src vfs vfs.txt]]
expr {$result eq $expected}
} \
-cleanup $treefilenames_cleanup \
-result 1
test treefilenames_rejects_internal_call_flags {Internal recursion state flags are not public API} \
-setup $treefilenames_tree -body {
set results [list]
foreach arglist {
{-call-depth-internal 1 -directory . *}
{-call-subvector {a b} -directory . *}
{-call-allbelow 1 -directory . *}
} {
lappend results [catch {punk::path::treefilenames {*}$arglist}]
}
expr {$results eq {1 1 1}}
} \
-cleanup $treefilenames_cleanup \
-result 1
}
tcltest::cleanupTests ;#needed to produce test summary. tcltest::cleanupTests ;#needed to produce test summary.
Loading…
Cancel
Save