Index: third_party/sqlite/src/test/vtabH.test |
diff --git a/third_party/sqlite/src/test/vtabH.test b/third_party/sqlite/src/test/vtabH.test |
index 7bd542e05b0c7acc2458562981fa078b90bbfc5f..3ce457ff0b219ab14cf1bec76ab4dad4f1e7cb67 100644 |
--- a/third_party/sqlite/src/test/vtabH.test |
+++ b/third_party/sqlite/src/test/vtabH.test |
@@ -68,19 +68,19 @@ set x7 backbone |
set x8 backarrow |
set x9 castle |
-db func glob gfunc |
+db func glob -argcount 2 gfunc |
proc gfunc {a b} { |
incr ::gfunc |
return 1 |
} |
-db func like lfunc |
+db func like -argcount 2 lfunc |
proc lfunc {a b} { |
incr ::gfunc 100 |
return 1 |
} |
-db func regexp rfunc |
+db func regexp -argcount 2 rfunc |
proc rfunc {a b} { |
incr ::gfunc 10000 |
return 1 |
@@ -108,7 +108,12 @@ foreach ::tclvar_set_omit {0 1} { |
#------------------------------------------------------------------------- |
# |
-if {1} { |
+if {$tcl_platform(platform)=="windows"} { |
+ set drive [string range [pwd] 0 1] |
+ set ::env(fstreeDrive) $drive |
+} |
+if {$tcl_platform(platform)!="windows" || \ |
+ [regexp -nocase -- {^[A-Z]:} $drive]} { |
reset_db |
register_fs_module db |
do_execsql_test 3.0 { |
@@ -116,31 +121,65 @@ if {1} { |
SELECT name FROM fsdir WHERE dir = '.' AND name = '.' |
} {test.db .} |
+ proc sort_files { names {nocase false} } { |
+ if {$nocase && $::tcl_platform(platform) eq "windows"} { |
+ return [lsort -nocase $names] |
+ } else { |
+ return [lsort $names] |
+ } |
+ } |
+ |
proc list_root_files {} { |
if {$::tcl_platform(platform) eq "windows"} { |
- set res [list] |
- foreach name [glob -directory $::env(SystemDrive)/ -- *] { |
+ set res [list]; set dir $::env(fstreeDrive)/; set names [list] |
+ eval lappend names [glob -nocomplain -directory $dir -- *] |
+ foreach name $names { |
if {[string index [file tail $name] 0] eq "."} continue |
+ if {[file attributes $name -hidden]} continue |
+ if {[file attributes $name -system]} continue |
lappend res $name |
} |
- return $res |
+ return [sort_files $res true] |
} else { |
- return [string map {/ {}} [glob /*]] |
+ return [sort_files [string map {/ {}} [glob -nocomplain -- /*]]] |
} |
} |
proc list_files { pattern } { |
if {$::tcl_platform(platform) eq "windows"} { |
- set res [list] |
- foreach name [glob -nocomplain $pattern] { |
+ set res [list]; set names [list] |
+ eval lappend names [glob -nocomplain -- $pattern] |
+ foreach name $names { |
if {[string index [file tail $name] 0] eq "."} continue |
+ if {[file attributes $name -hidden]} continue |
+ if {[file attributes $name -system]} continue |
lappend res $name |
} |
- return $res |
+ return [sort_files $res] |
+ } else { |
+ return [sort_files [glob -nocomplain -- $pattern]] |
+ } |
+ } |
+ |
+ # Read the first 5 entries from the root directory. Except, ignore |
+ # files that contain the "$" character in their names as these are |
+ # special files on some Windows platforms. |
+ # |
+ set res [list] |
+ set root_files [list_root_files] |
+ foreach p $root_files { |
+ if {$::tcl_platform(platform) eq "windows"} { |
+ if {![regexp {\$} $p]} {lappend res $p} |
} else { |
- return [glob -nocomplain $pattern] |
+ lappend res "/$p" |
} |
} |
+ set num_root_files [llength $root_files] |
+ do_test 3.1 { |
+ sort_files [execsql { |
+ SELECT path FROM fstree WHERE path NOT GLOB '*\$*' LIMIT $num_root_files; |
+ }] true |
+ } [sort_files $res true] |
# Read all entries in the current directory. |
# |
@@ -158,7 +197,7 @@ if {1} { |
set res [contents $pwd] |
do_execsql_test 3.2 { |
SELECT path FROM fstree WHERE path GLOB $pwd ORDER BY 1 |
- } [lsort $res] |
+ } [sort_files $res] |
# Add some sub-directories and files to the current directory. |
# |