From b5a4a7053b7f72b3376199aff0c4eeeae6cd5a53 Mon Sep 17 00:00:00 2001 From: mistachkin Date: Fri, 16 Mar 2018 23:54:26 +0000 Subject: [PATCH] Enable more 'zipfile' tests on Win32. FossilOrigin-Name: 49d2566c8e7d0df37494ee001fc6eae5f47f95e16f6a575f2d8d6777b62e6068 --- manifest | 14 ++--- manifest.uuid | 2 +- test/zipfile.test | 135 ++++++++++++++++++++++++++++++--------------- test/zipfile2.test | 2 + 4 files changed, 99 insertions(+), 54 deletions(-) diff --git a/manifest b/manifest index a8ad7d82f7..5acce98830 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Make\sa\scouple\stests\sless\ssensitive\sto\stiming. -D 2018-03-16T23:54:12.517 +C Enable\smore\s'zipfile'\stests\son\sWin32. +D 2018-03-16T23:54:26.457 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 7016fc56c6b9bfe5daac4f34be8be38d8c0b5fab79ccbfb764d3b23bf1c6fff3 @@ -1611,8 +1611,8 @@ F test/wordcount.c cb589cec469a1d90add05b1f8cee75c7210338d87a5afd65260ed5c0f4bbf F test/writecrash.test f1da7f7adfe8d7f09ea79b42e5ca6dcc41102f27f8e334ad71539501ddd910cc F test/zeroblob.test 3857870fe681b8185654414a9bccfde80b62a0fa F test/zerodamage.test 9c41628db7e8d9e8a0181e59ea5f189df311a9f6ce99cc376dc461f66db6f8dc -F test/zipfile.test fd865048725bb138ef3024cee704cd9da9250de4b6f78ad27ff8e7e6d46caefe -F test/zipfile2.test 67d5f08a202796d4b7a71dfa4b8dcb74aa7a9d1f42c5f17bedff9855c1ba7aa5 +F test/zipfile.test dbad090b506b9da943400e285e6723a53bdb3591aaa8f3138df892eae6ccb243 +F test/zipfile2.test fb68e022bf759060be041e3a1e3f955e21f3fa02a7fa1dcba0a01c88ab6deee6 F test/zipfilefault.test 44d4d7a7f7cca7521d569d7f71026b241d65a6b1757aa409c1a168827edbbc2c F tool/GetFile.cs a15e08acb5dd7539b75ba23501581d7c2b462cb5 F tool/GetTclKit.bat 8995df40c4209808b31f24de0b58f90930239a234f7591e3675d45bfbb990c5d @@ -1712,7 +1712,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 56d11c250961790579a7aeee65e83fdb29462ae37f9de93da13fbd890fc0a01d -R f872f68a9ea8d96d06313f821ac22957 +P bc2af8e0aa28d8d10612ab9464c008a970348b4720bb34d0c546d341e2bc09e0 +R 7a8f6991afcb70824bbbe5f92582fa58 U mistachkin -Z 1ea7ec4ed43cecff4ee6039be766ced0 +Z 9baa572ff0bb0d7155a0ba438dc60407 diff --git a/manifest.uuid b/manifest.uuid index 148b96f82e..f884950f1b 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -bc2af8e0aa28d8d10612ab9464c008a970348b4720bb34d0c546d341e2bc09e0 \ No newline at end of file +49d2566c8e7d0df37494ee001fc6eae5f47f95e16f6a575f2d8d6777b62e6068 \ No newline at end of file diff --git a/test/zipfile.test b/test/zipfile.test index c23e120f77..833633d870 100644 --- a/test/zipfile.test +++ b/test/zipfile.test @@ -10,6 +10,8 @@ #*********************************************************************** # +package require Tcl 8.6 + set testdir [file dirname $argv0] source $testdir/tester.tcl set testprefix zipfile @@ -21,6 +23,10 @@ if {[catch {load_static_extension db zipfile} error]} { puts "Skipping zipfile tests, hit load error: $error" finish_test; return } +if {[catch {load_static_extension db fileio} error]} { + puts "Skipping zipfile tests, hit load error: $error" + finish_test; return +} proc readfile {f} { set fd [open $f] @@ -30,16 +36,39 @@ proc readfile {f} { set data } -if {$::tcl_platform(platform)=="unix" && [catch {exec unzip}]==0} { - set ::UNZIP 1 - load_static_extension db fileio +unset -nocomplain ::UNZIP + +if {[catch {exec unzip} msg]==0 && \ + [regexp -line {^UnZip \d+\.\d+ .*? Info-ZIP\.} $msg]} { + set ::UNZIP unzip + proc fix_stat_mode {name mode} { + if {$::tcl_platform(platform)=="windows"} { + # + # NOTE: Set or unset the write bits of the file permissions + # based on the read-only attribute because the Win32 + # version of UnZip does this. + # + set writebits 0x12; # 0o22 + set result $mode + if {[file attributes $name -readonly]} { + set result [expr {$result | $writebits}] + } else { + set result [expr {$result & ~$writebits}] + } + return $result + } else { + return $mode + } + } proc do_unzip {file} { forcedelete test_unzip file mkdir test_unzip - exec unzip -d test_unzip $file - - set res [db eval { - SELECT replace(name,'test_unzip/',''),mode,mtime,data + exec $::UNZIP -d test_unzip $file + + db func modefix fix_stat_mode + + set res [db eval { + SELECT replace(name,'test_unzip/',''),modefix(name,mode),mtime,data FROM fsdir('test_unzip') WHERE name!='test_unzip' ORDER BY name @@ -108,7 +137,6 @@ proc do_zipfile_blob_test {tn file} { # the same results as in (1). # proc do_unzip_test {tn file} { - if {[info vars ::UNZIP]==""} { return } db func sss strip_slash db eval { @@ -247,65 +275,73 @@ do_execsql_test 1.6.2 { i.txt 33188 4 zxcvb 0 } -do_execsql_test 1.6.3 { - UPDATE zz SET mode='-rw-r--r-x' WHERE name='h.txt'; - SELECT name, mode, mtime, data, method FROM zipfile('test.zip'); -} { - f.txt 33188 1000000000 abcde 0 - h.txt 33189 1000000004 aaaaaaaaaabbbbbbbbbb 8 - i.txt 33188 4 zxcvb 0 +if {$::tcl_platform(platform)=="unix"} { + set modes -rw-r--r-x + set perms 33189 +} else { + set modes -rw-r--r--; # no execute bits on Win32 + set perms 33188 } + +do_execsql_test 1.6.3 { + UPDATE zz SET mode=$modes WHERE name='h.txt'; + SELECT name, mode, mtime, data, method FROM zipfile('test.zip'); +} [string map [list %perms% $perms] { + f.txt 33188 1000000000 abcde 0 + h.txt %perms% 1000000004 aaaaaaaaaabbbbbbbbbb 8 + i.txt 33188 4 zxcvb 0 +}] do_zip_tests 1.6.3a test.zip do_execsql_test 1.6.4 { UPDATE zz SET name = 'blue.txt' WHERE name='f.txt'; SELECT name, mode, mtime, data, method FROM zipfile('test.zip'); -} { +} [string map [list %perms% $perms] { blue.txt 33188 1000000000 abcde 0 - h.txt 33189 1000000004 aaaaaaaaaabbbbbbbbbb 8 + h.txt %perms% 1000000004 aaaaaaaaaabbbbbbbbbb 8 i.txt 33188 4 zxcvb 0 -} +}] do_zip_tests 1.6.4a test.zip do_execsql_test 1.6.5 { UPDATE zz SET data = 'edcba' WHERE name='blue.txt'; SELECT name, mode, mtime, data, method FROM zipfile('test.zip'); -} { +} [string map [list %perms% $perms] { blue.txt 33188 1000000000 edcba 0 - h.txt 33189 1000000004 aaaaaaaaaabbbbbbbbbb 8 + h.txt %perms% 1000000004 aaaaaaaaaabbbbbbbbbb 8 i.txt 33188 4 zxcvb 0 -} +}] do_execsql_test 1.6.6 { UPDATE zz SET mode=NULL, data = NULL WHERE name='blue.txt'; SELECT name, mode, mtime, data, method FROM zipfile('test.zip'); -} { +} [string map [list %perms% $perms] { blue.txt/ 16877 1000000000 {} 0 - h.txt 33189 1000000004 aaaaaaaaaabbbbbbbbbb 8 + h.txt %perms% 1000000004 aaaaaaaaaabbbbbbbbbb 8 i.txt 33188 4 zxcvb 0 -} +}] do_catchsql_test 1.6.7 { UPDATE zz SET data=NULL WHERE name='i.txt' } {1 {zipfile: mode does not match data}} do_execsql_test 1.6.8 { SELECT name, mode, mtime, data, method FROM zipfile('test.zip'); -} { +} [string map [list %perms% $perms] { blue.txt/ 16877 1000000000 {} 0 - h.txt 33189 1000000004 aaaaaaaaaabbbbbbbbbb 8 + h.txt %perms% 1000000004 aaaaaaaaaabbbbbbbbbb 8 i.txt 33188 4 zxcvb 0 -} - -do_execsql_test 1.6.8 { - UPDATE zz SET data = '' WHERE name='i.txt'; - SELECT name,mode,mtime,data,method from zipfile('test.zip'); -} { - blue.txt/ 16877 1000000000 {} 0 - h.txt 33189 1000000004 aaaaaaaaaabbbbbbbbbb 8 - i.txt 33188 4 {} 0 -} +}] do_execsql_test 1.6.9 { + UPDATE zz SET data = '' WHERE name='i.txt'; + SELECT name,mode,mtime,data,method from zipfile('test.zip'); +} [string map [list %perms% $perms] { + blue.txt/ 16877 1000000000 {} 0 + h.txt %perms% 1000000004 aaaaaaaaaabbbbbbbbbb 8 + i.txt 33188 4 {} 0 +}] + +do_execsql_test 1.6.10 { SELECT a.name, a.data FROM zz AS a, zz AS b WHERE a.name=+b.name AND +a.mode=b.mode @@ -315,7 +351,7 @@ do_execsql_test 1.6.9 { i.txt {} } -do_execsql_test 1.6.10 { +do_execsql_test 1.6.11 { SELECT name, data FROM zz WHERE name LIKE '%txt' } { h.txt aaaaaaaaaabbbbbbbbbb @@ -360,13 +396,18 @@ do_execsql_test 2.4 { } do_zip_tests 2.4a test.zip -# If on unix, check that the [unzip] utility can unpack our archive. +# Check that the [unzip] utility can unpack our archive. # -if {$::tcl_platform(platform)=="unix"} { +if {[info exists ::UNZIP]} { do_test 2.5.1 { forcedelete dirname forcedelete dirname2 - set rc [catch { exec unzip test.zip > /dev/null } msg] + if {$::tcl_platform(platform)=="unix"} { + set null /dev/null + } else { + set null NUL + } + set rc [catch { exec $::UNZIP test.zip > $null } msg] list $rc $msg } {0 {}} do_test 2.5.2 { file isdir dirname3 } 1 @@ -384,6 +425,7 @@ if {$::tcl_platform(platform)=="unix"} { reset_db forcedelete test.zip load_static_extension db zipfile +load_static_extension db fileio do_execsql_test 3.0 { CREATE VIRTUAL TABLE temp.x1 USING zipfile('test.zip'); @@ -453,7 +495,7 @@ do_catchsql_test 4.7 { SELECT zipfile(name,data) FROM c } {1 {first argument to zipfile() must be non-NULL}} -do_catchsql_test 4.7 { +do_catchsql_test 4.8 { WITH c(name,data,method) AS ( SELECT 'a.txt', 'abc', 0 UNION SELECT 'b.txt', 'def', 8 @@ -462,7 +504,7 @@ do_catchsql_test 4.7 { SELECT zipfile(name,NULL,NULL,data,method) FROM c } {1 {illegal method value: 16}} -do_catchsql_test 4.8 { +do_catchsql_test 4.9 { WITH c(name,data) AS ( SELECT 'a.txt', 'abc' UNION SELECT 'b.txt', 'def' @@ -485,9 +527,8 @@ do_execsql_test 5.0 { a.txt 946684800 abc } -if {[info vars ::UNZIP]!=""} { +if {[info exists ::UNZIP]} { ifcapable datetime { - load_static_extension db fileio forcedelete test1.zip test2.zip do_test 6.0 { execsql { @@ -502,7 +543,7 @@ ifcapable datetime { } forcedelete test_unzip file mkdir test_unzip - exec unzip -d test_unzip test1.zip + exec $::UNZIP -d test_unzip test1.zip db eval { SELECT name, strftime('%s', mtime, 'unixepoch', 'localtime') @@ -534,7 +575,7 @@ ifcapable datetime { do_test 6.2 { forcedelete test_unzip file mkdir test_unzip - exec unzip -d test_unzip test2.zip + exec $::UNZIP -d test_unzip test2.zip db eval { SELECT name, mtime @@ -652,6 +693,8 @@ catch {db close} forcedelete test.zip test.db sqlite3 db :memory: load_static_extension db zipfile +load_static_extension db fileio + do_execsql_test 10.0 { CREATE VIRTUAL TABLE z USING zipfile('test.zip'); } {} diff --git a/test/zipfile2.test b/test/zipfile2.test index f3509d0a54..e39bf687f5 100644 --- a/test/zipfile2.test +++ b/test/zipfile2.test @@ -10,6 +10,8 @@ #*********************************************************************** # +package require Tcl 8.6 + set testdir [file dirname $argv0] source $testdir/tester.tcl set testprefix zipfile2