diff options
Diffstat (limited to 'tcllib/modules/tie/tie_file.test')
-rw-r--r-- | tcllib/modules/tie/tie_file.test | 392 |
1 files changed, 392 insertions, 0 deletions
diff --git a/tcllib/modules/tie/tie_file.test b/tcllib/modules/tie/tie_file.test new file mode 100644 index 0000000..59ab914 --- /dev/null +++ b/tcllib/modules/tie/tie_file.test @@ -0,0 +1,392 @@ +# Tests for the tie module. -*- tcl -*- +# +# Copyright (c) 2004 Andreas Kupries <andreas_kupries@users.sourceforge.net> +# All rights reserved. +# +# RCS: @(#) $Id: tie_file.test,v 1.10 2006/10/12 04:45:57 andreas_kupries Exp $ + +# ------------------------------------------------------------------------- + +source [file join \ + [file dirname [file dirname [file join [pwd] [info script]]]] \ + devtools testutilities.tcl] + +testsNeedTcl 8.4 +testsNeedTcltest 1.0 + +support { + use snit/snit.tcl snit + useLocal tie.tcl tie +} +testing { + useLocal tie_file.tcl tie::std::file +} + +# ------------------------------------------------------------------------- +# Creation of array data sources +# Errors: Undefined variable, scalar, local variable + +test tie-file-1.0 {file creation, wrong#args} { + catch {tie::std::file} msg + set msg +} {Error in constructor: wrong # args: should be "::tie::std::file::Snit_constructor type selfns win self thepath"} + +test tie-file-1.1 {file creation, wrong#args} { + catch {tie::std::file x} msg + set msg +} {Error in constructor: wrong # args: should be "::tie::std::file::Snit_constructor type selfns win self thepath"} + +test tie-file-1.2 {file creation, wrong#args} { + catch {tie::std::file x y z} msg + set msg +} {Error in constructor: wrong # args: should be "::tie::std::file::Snit_constructor type selfns win self thepath"} + +test tie-file-1.3 {file creation, ok args, unwritable file} {unixOnly notRoot} { + set f [makeFile {} journal] + file attributes $f -permissions ugo-w + catch {tie::std::file x $f} msg + removeFile journal + string map [list $f @] $msg +} {Error in constructor: couldn't open "@": permission denied} + +test tie-file-1.4 {file creation, ok args, unwritable file} {winOnly} { + set f [makeFile {} journal] + file attributes $f -readonly 1 + catch {tie::std::file x $f} msg + file attributes $f -readonly 0 + removeFile journal + string map [list $f @] $msg +} {Error in constructor: couldn't open "@": permission denied} + +test tie-file-1.5 {file creation, ok args, unreadable file} {unixOnly notRoot} { + set f [makeFile {} journal] + file attributes $f -permissions ugo-r + catch {tie::std::file x $f} msg + removeFile journal + string map [list $f @] $msg +} {Error in constructor: couldn't open "@": permission denied} + +test tie-file-1.6 {file creation, ok args, uncreateable file} {unixOnly notRoot} { + set d [makeDirectory jtest] + set f [makeFile {} jtest/journal] + + # Delete the created file, we want the tie code to try to generate + # it (and expect it to fail). + file delete $f + + file attributes $d -permissions ugo-w + + catch {tie::std::file x $f} msg + + removeDirectory jtest + string map [list $f @] $msg +} {Error in constructor: couldn't open "@": permission denied} + +test tie-file-1.7 {file creation, ok args, uncreateable file} {knownBug winOnly notRoot} { + set d [makeDirectory jtest] + set f [makeFile {} jtest/journal] + removeFile jtest/journal + file attributes $d -readonly 1 + + catch {tie::std::file x $f} msg + + removeFile jtest/journal + removeDirectory jtest + string map [list $f @] $msg +} {Error in constructor: couldn't open "@": permission denied} + +test tie-file-1.8 {file creation, fixed name, array} { + set f [makeFile {} journal] + set msg [tie::std::file x $f] + x destroy + removeFile journal + set msg +} {::x} + +test tie-file-1.9 {file creation, %AUTO%} { + set f [makeFile {} journal] + set msg [tie::std::file %AUTO% $f] + $msg destroy + removeFile journal + string match ::file\[679] $msg +} 1 + +# ------------------------------------------------------------------------- +## Methods + +test tie-file-2.0 {file get, wrong#args} { + set f [makeFile {array set {b 2 a 1}} journal] + tie::std::file x $f + catch {x get a} msg + x destroy + removeFile journal + set msg +} {wrong # args: should be "::tie::std::file::Snit_methodget type selfns win self"} + +test tie-file-2.1 {file get} { + set f [makeFile {array set {b 2 a 1}} journal] + tie::std::file x $f + set res [dictsort [x get]] + x destroy + removeFile journal + set res +} {a 1 b 2} + + +test tie-file-3.0 {file set, wrong#args} { + set f [makeFile {} journal] + tie::std::file x $f + set res {} + catch {x set} msg + x destroy + removeFile journal + set msg +} {wrong # args: should be "::tie::std::file::Snit_methodset type selfns win self dict"} + +test tie-file-3.1 {file set, wrong#args} { + set f [makeFile {} journal] + tie::std::file x $f + set res {} + catch {x set a b} msg + x destroy + removeFile journal + set msg +} {wrong # args: should be "::tie::std::file::Snit_methodset type selfns win self dict"} + +test tie-file-3.2 {file set} { + set f [makeFile {} journal] + tie::std::file x $f + set res {} + lappend res [x set {c 3 b 2 a 1}] + lappend res [viewFile journal] + x destroy + removeFile journal + set res +} {{} { +array set {c 3 b 2 a 1}}} + + +test tie-file-4.0 {file names, wrong#args} { + set f [makeFile {array set {b 2 a 1}} journal] + tie::std::file x $f + catch {x names a} msg + x destroy + removeFile journal + set msg +} {wrong # args: should be "::tie::std::file::Snit_methodnames type selfns win self"} + +test tie-file-4.1 {file names} { + set f [makeFile {array set {b 2 a 1}} journal] + tie::std::file x $f + set res [lsort [x names]] + x destroy + removeFile journal + set res +} {a b} + + +test tie-file-5.0 {file size, wrong#args} { + set f [makeFile {array set {b 2 a 1}} journal] + tie::std::file x $f + catch {x size a} msg + x destroy + removeFile journal + set msg +} {wrong # args: should be "::tie::std::file::Snit_methodsize type selfns win self"} + +test tie-file-5.1 {file size} { + set f [makeFile {array set {b 2 a 1}} journal] + tie::std::file x $f + set res [x size] + x destroy + removeFile journal + set res +} 2 + + +test tie-file-6.0 {file unset, wrong#args} { + set f [makeFile {array set {foo bar fox snarf a 3}} journal] + tie::std::file x $f + set res {} + catch {x unset a b} msg + x destroy + removeFile journal + set msg +} {wrong # args: should be "::tie::std::file::Snit_methodunset type selfns win self ?pattern?"} + +test tie-file-6.1 {file unset, default pattern} { + set f [makeFile {array set {foo bar fox snarf a 3}} journal] + tie::std::file x $f + set res {} + lappend res [x unset] + lappend res [viewFile journal] + x destroy + removeFile journal + set res +} {{} {array set {foo bar fox snarf a 3} +array unset *}} + +test tie-file-6.2 {file unset, by pattern} { + set f [makeFile {array set {foo bar fox snarf a 3}} journal] + tie::std::file x $f + set res {} + lappend res [x unset f*] + lappend res [viewFile journal] + x destroy + removeFile journal + set res +} {{} {array set {foo bar fox snarf a 3} +array unset f*}} + + +test tie-file-7.0 {file getv, wrong#args} { + set f [makeFile {} journal] + tie::std::file x $f + set res {} + catch {x getv} msg + x destroy + removeFile journal + set msg +} {wrong # args: should be "::tie::std::file::Snit_methodgetv type selfns win self index"} + +test tie-file-7.1 {file getv, wrong#args} { + set f [makeFile {} journal] + tie::std::file x $f + set res {} + catch {x getv a b} msg + x destroy + removeFile journal + set msg +} {wrong # args: should be "::tie::std::file::Snit_methodgetv type selfns win self index"} + +test tie-file-7.2 {file getv} { + set f [makeFile {array set {a 3 b 4}} journal] + tie::std::file x $f + set res {} + lappend res [x getv a] + x destroy + removeFile journal + set res +} 3 + + +test tie-file-8.0 {file setv, wrong#args} { + set f [makeFile {} journal] + tie::std::file x $f + set res {} + catch {x setv} msg + x destroy + removeFile journal + set msg +} {wrong # args: should be "::tie::std::file::Snit_methodsetv type selfns win self index value"} + +test tie-file-8.1 {file setv, wrong#args} { + set f [makeFile {} journal] + tie::std::file x $f + set res {} + catch {x setv a} msg + x destroy + removeFile journal + set msg +} {wrong # args: should be "::tie::std::file::Snit_methodsetv type selfns win self index value"} + +test tie-file-8.2 {file setv, wrong#args} { + set f [makeFile {} journal] + tie::std::file x $f + set res {} + catch {x setv a b c} msg + x destroy + removeFile journal + set msg +} {wrong # args: should be "::tie::std::file::Snit_methodsetv type selfns win self index value"} + +test tie-file-8.3 {file setv} { + set f [makeFile {} journal] + tie::std::file x $f + set res {} + lappend res [x setv fox snarf] + lappend res [viewFile journal] + x destroy + removeFile journal + set res +} {{} { +set fox snarf}} + + +test tie-file-9.0 {file unsetv, wrong#args} { + set f [makeFile {} journal] + tie::std::file x $f + set res {} + catch {x unsetv} msg + x destroy + removeFile journal + set msg +} {wrong # args: should be "::tie::std::file::Snit_methodunsetv type selfns win self index"} + +test tie-file-9.1 {file unsetv, wrong#args} { + set f [makeFile {} journal] + tie::std::file x $f + set res {} + catch {x unsetv a b} msg + x destroy + removeFile journal + set msg +} {wrong # args: should be "::tie::std::file::Snit_methodunsetv type selfns win self index"} + +test tie-file-9.2 {file unsetv} { + set f [makeFile {array set {a 3 b 4}} journal] + tie::std::file x $f + set res {} + lappend res [x unsetv a] + lappend res [viewFile journal] + x destroy + removeFile journal + set res +} {{} {array set {a 3 b 4} +unset a}} + +# ------------------------------------------------------------------------- +## File compaction + +test tie-file-10.0 {file compaction} { + set f [makeFile { + set aa 3 + set ab 4 + set ac 5 + set ad 6 + set ae 7 + set f 8 + array unset a* + } journal] ; # {} + tie::std::file x $f + x names ; # This loads the journal and causes compaction + x destroy + set res [viewFile journal] + removeFile journal + set res +} {array set {f 8}} + +test tie-file-10.1 {file compaction, not} { + set f [makeFile { + set aa 3 + set ab 4 + set ac 5 + set ad 6 + set ae 7 + } journal] ; # {} + tie::std::file x $f + x names ; # This loads the journal and causes compaction + x destroy + set res [viewFile journal] + removeFile journal + set res +} { + set aa 3 + set ab 4 + set ac 5 + set ad 6 + set ae 7 + } + +testsuiteCleanup +return |