# -*- tcl -*- # Tests for the find function. # # Sourcing this file into Tcl runs the tests and generates output for errors. # No output means no errors were found. # # Copyright (c) 1998-2000 by Ajuba Solutions. # Copyright (c) 2001 by ActiveState Tool Corp. # Copyright (c) 2005-2007 by Andreas Kupries # All rights reserved. # # RCS: @(#) $Id: inplace.test,v 1.3 2009/10/06 20:07:18 andreas_kupries Exp $ # ------------------------------------------------------------------------- source [file join \ [file dirname [file dirname [file join [pwd] [info script]]]] \ devtools testutilities.tcl] testsNeedTcl 8.2 testsNeedTcltest 1.0 testing { useLocal fileutil.tcl fileutil } # ------------------------------------------------------------------------- test cat-1.1 {cat} { set path [makeFile "foo\nbar\nbaz\n" {cat [1]}] set data [fileutil::cat $path] removeFile {cat [1]} set data } "foo\nbar\nbaz\n" test cat-1.2 {cat multiple files} {macOrUnix} { set pathA [makeFile "foo\nbar\nbaz\n" {cat [1]}] set pathB [makeFile "bebop" {cat* 2}] set data [fileutil::cat $pathA $pathB] removeFile {cat [1]} removeFile {cat* 2} set data } "foo\nbar\nbaz\nbebop\n" test cat-1.3.0 {cat, option processing} { set path [makeFile "foo\r\nbar\r\nbaz\r\n" {cat [1]}] set data [fileutil::cat -translation binary $path] removeFile {cat [1]} set data } "foo\r\nbar\r\nbaz\r\n" test cat-1.3.1 {cat, option processing} { set path [makeFile "foo\r\nbar\r\nbaz\r\n" {cat [1]}] set data [fileutil::cat $path] removeFile {cat [1]} set data } "foo\nbar\nbaz\n" test cat-1.4 {cat multiple files} {macOrUnix} { set pathA [makeFile "foo\r\nbar\r\nbaz\r\n" {cat [1]}] set pathB [makeFile "bebop\r\nsnoof" {cat* 2}] set data [fileutil::cat $pathA -translation binary $pathB] removeFile {cat [1]} removeFile {cat* 2} set data } "foo\nbar\nbaz\nbebop\r\nsnoof\n" test cat-1.5.0 {cat, bad arguments} { catch {fileutil::cat} msg set msg } {wrong#args: should be fileutil::cat ?-eofchar|-translation|-encoding arg?+ file ...} test cat-1.5.1 {cat, bad arguments} { catch {fileutil::cat -translation} msg set msg } {wrong#args: should be fileutil::cat ?-eofchar|-translation|-encoding arg?+ file ...} test cat-1.5.2 {cat, bad arguments} { catch {fileutil::cat -bogus foo} msg set msg } {Bad option "-bogus", expected one of -encoding, -eofchar, or -translation} set xpath [makeFile {} {cat [2]}] removeFile {cat [2]} test cat-1.5.3 {cat, bad arguments, unreadable file} {unixOnly notRoot} { set path [makeFile {} {cat [2]}] file attributes $path -permissions 0000 catch {fileutil::cat $path} msg file attributes $path -permissions 0600 removeFile {cat [2]} set msg } "Cannot read file \"$xpath\", read access is denied" test cat-1.5.4 {cat, bad arguments, non-existing file} {unixOnly} { set path [makeFile {} {cat [2]}] removeFile {cat [2]} catch {fileutil::cat $path} msg set msg } "Cannot read file \"$xpath\", does not exist" test cat-1.5.5 {cat, bad arguments, directory} {unixOnly} { set path [makeDirectory {cat [2]}] catch {fileutil::cat $path} msg removeDirectory {cat [2]} set msg } "Cannot read file \"$xpath\", is not a file" test writefile-1.0 {writeFile, unwriteable file} {unixOnly notRoot} { set path [makeFile {} unwritable] file attributes $path -permissions 0000 catch {fileutil::writeFile $path {}} msg file attributes $path -permissions 0600 removeFile unwritable string map [list $path @] $msg } {Cannot use file "@", write access is denied} test writefile-1.1 {writeFile, not a file} {unixOnly} { set path [makeDirectory notafile] catch {fileutil::writeFile $path {}} msg removeDirectory notafile string map [list $path @] $msg } {Cannot use file "@", is not a file} test writefile-1.2 {writeFile, wrong#args} { catch {fileutil::writeFile irrelevant} msg set msg } {wrong#args: should be fileutil::writeFile ?-eofchar|-translation|-encoding arg? file data} test writefile-1.3 {writeFile, wrong#args} { catch {fileutil::writeFile} msg set msg } {wrong#args: should be fileutil::writeFile ?-eofchar|-translation|-encoding arg? file data} test writefile-1.4 {writeFile, wrong#args} { catch {fileutil::writeFile a b c} msg set msg } {wrong#args: should be fileutil::writeFile ?-eofchar|-translation|-encoding arg? file data} test writefile-1.5 {writeFile, bad option} { set path [makeFile {} dummy] catch {fileutil::writeFile -bogus $path {}} msg removeFile dummy set msg } {Bad option "-bogus", expected one of -encoding, -eofchar, or -translation} test writefile-2.0 {writeFile, create file} { set path [makeFile {} out] removeFile out set res {} lappend res [file exists $path] fileutil::writeFile $path dummy lappend res [file exists $path] lappend res [fileutil::cat $path] removeFile out set res } {0 1 dummy} test writefile-2.1 {writeFile, replace file} { set path [makeFile {} out] set res {} lappend res [file exists $path] lappend res [fileutil::cat $path] fileutil::writeFile $path dummy lappend res [file exists $path] lappend res [fileutil::cat $path] removeFile out set res } {1 { } 1 dummy} test writefile-2.2 {writeFile, translation 1} { set path [makeFile {} out] fileutil::writeFile -translation binary $path "dummy\nfoo" set res [fileutil::cat -translation binary $path] removeFile out set res } "dummy\nfoo" test writefile-2.3 {writeFile, translation 2} { set path [makeFile {} out] fileutil::writeFile -translation crlf $path "dummy\nfoo" set res [fileutil::cat -translation binary $path] removeFile out set res } "dummy\r\nfoo" test appendtofile-1.0 {appendToFile, unwriteable file} {unixOnly notRoot} { set path [makeFile {} unwritable] file attributes $path -permissions 0000 catch {fileutil::appendToFile $path {}} msg file attributes $path -permissions 0600 removeFile unwritable string map [list $path @] $msg } {Cannot use file "@", write access is denied} test appendtofile-1.1 {appendToFile, not a file} {unixOnly} { set path [makeDirectory notafile] catch {fileutil::appendToFile $path {}} msg removeDirectory notafile string map [list $path @] $msg } {Cannot use file "@", is not a file} test appendtofile-1.2 {appendToFile, wrong#args} { catch {fileutil::appendToFile irrelevant} msg set msg } {wrong#args: should be fileutil::appendToFile ?-eofchar|-translation|-encoding arg? file data} test appendtofile-1.3 {appendToFile, wrong#args} { catch {fileutil::appendToFile} msg set msg } {wrong#args: should be fileutil::appendToFile ?-eofchar|-translation|-encoding arg? file data} test appendtofile-1.4 {appendToFile, wrong#args} { catch {fileutil::appendToFile a b c} msg set msg } {wrong#args: should be fileutil::appendToFile ?-eofchar|-translation|-encoding arg? file data} test appendtofile-1.5 {appendToFile, bad option} { set path [makeFile {} dummy] catch {fileutil::appendToFile -bogus $path {}} msg removeFile dummy set msg } {Bad option "-bogus", expected one of -encoding, -eofchar, or -translation} test appendtofile-2.0 {appendToFile, create file} { set path [makeFile {} out] removeFile out set res {} lappend res [file exists $path] fileutil::appendToFile $path dummy lappend res [file exists $path] lappend res [fileutil::cat $path] removeFile out set res } {0 1 dummy} test appendtofile-2.1 {appendToFile, true append} { set path [makeFile {} out] fileutil::writeFile $path aragorn| set res {} lappend res [file exists $path] lappend res [fileutil::cat $path] fileutil::appendToFile $path dummy lappend res [file exists $path] lappend res [fileutil::cat $path] removeFile out set res } {1 aragorn| 1 aragorn|dummy} test appendtofile-2.2 {appendToFile, translation 1} { set path [makeFile {} out] fileutil::writeFile $path {} fileutil::appendToFile -translation binary $path "dummy\nfoo" set res [fileutil::cat -translation binary $path] removeFile out set res } "dummy\nfoo" test appendtofile-2.3 {appendToFile, translation 2} { set path [makeFile {} out] fileutil::writeFile $path {} fileutil::appendToFile -translation crlf $path "dummy\nfoo" set res [fileutil::cat -translation binary $path] removeFile out set res } "dummy\r\nfoo" test insertintofile-1.0 {insertIntoFile, unwriteable file} {unixOnly notRoot} { set path [makeFile {} unwritable] file attributes $path -permissions 0000 catch {fileutil::insertIntoFile $path 0 {}} msg file attributes $path -permissions 0600 removeFile unwritable string map [list $path @] $msg } {Cannot use file "@", write access is denied} test insertintofile-1.1 {insertIntoFile, not a file} {unixOnly} { set path [makeDirectory notafile] catch {fileutil::insertIntoFile $path 0 {}} msg removeDirectory notafile string map [list $path @] $msg } {Cannot use file "@", is not a file} test insertintofile-1.2 {insertIntoFile, missing file} { set path [makeFile {} missing] removeFile missing catch {fileutil::insertIntoFile $path 0 {}} msg string map [list $path @] $msg } {Cannot use file "@", does not exist} test insertintofile-1.3 {insertIntoFile, wrong#args} { catch {fileutil::insertIntoFile irrelevant} msg set msg } {wrong#args: should be fileutil::insertIntoFile ?-eofchar|-translation|-encoding arg? file at data} test insertintofile-1.4 {insertIntoFile, wrong#args} { catch {fileutil::insertIntoFile} msg set msg } {wrong#args: should be fileutil::insertIntoFile ?-eofchar|-translation|-encoding arg? file at data} test insertintofile-1.5 {insertIntoFile, wrong#args} { catch {fileutil::insertIntoFile a b c d} msg set msg } {wrong#args: should be fileutil::insertIntoFile ?-eofchar|-translation|-encoding arg? file at data} test insertintofile-1.6 {insertIntoFile, bad option} { set path [makeFile {} dummy] catch {fileutil::insertIntoFile -bogus $path {}} msg removeFile dummy set msg } {Bad option "-bogus", expected one of -encoding, -eofchar, or -translation} test insertintofile-1.7 {insertIntoFile, non-integer insertion point} { set path [makeFile {} dummy] catch {fileutil::insertIntoFile $path foo {}} msg removeFile dummy set msg } {Expected integer but got "foo"} test insertintofile-1.8 {insertIntoFile, negative insertion point} { set path [makeFile {} dummy] catch {fileutil::insertIntoFile $path -1 {}} msg removeFile dummy set msg } {Bad insertion point -1, before start of data} test insertintofile-1.9 {insertIntoFile, insertion point beyond end-of-file} { set path [makeFile {} dummy] catch {fileutil::insertIntoFile $path 4 {}} msg removeFile dummy set msg } {Bad insertion point 4, behind end of data} # Needed for 1.10 set path [makeFile {} dummy] set beyond [file size $path] incr beyond removeFile dummy test insertintofile-1.10 {insertIntoFile, insertion point beyond end-of-file} { set path [makeFile {} dummy] catch {fileutil::insertIntoFile $path $beyond {}} msg removeFile dummy set msg } "Bad insertion point $beyond, behind end of data" test insertintofile-2.0 {insertIntoFile, insert at front} { set path [makeFile {} out] fileutil::writeFile $path aragorn set res {} lappend res [fileutil::cat $path] fileutil::insertIntoFile $path 0 dummy| lappend res [fileutil::cat $path] removeFile out set res } {aragorn dummy|aragorn} test insertintofile-2.1 {insertIntoFile, insert degenerated to append} { set path [makeFile {} out] fileutil::writeFile $path aragorn set res {} lappend res [fileutil::cat $path] fileutil::insertIntoFile $path \ [file size $path] dummy| lappend res [fileutil::cat $path] removeFile out set res } {aragorn aragorndummy|} test insertintofile-2.2 {insertIntoFile, insert in the middle} { set path [makeFile {} out] fileutil::writeFile $path aragorn set res {} lappend res [fileutil::cat $path] fileutil::insertIntoFile $path 3 dummy| lappend res [fileutil::cat $path] removeFile out set res } {aragorn aradummy|gorn} test insertintofile-2.3 {insertIntoFile, insert nothing} { set path [makeFile {} out] fileutil::writeFile $path aragorn set res {} lappend res [fileutil::cat $path] fileutil::insertIntoFile $path 3 {} lappend res [fileutil::cat $path] removeFile out set res } {aragorn aragorn} test insertintofile-2.4 {insertIntoFile, translation 1} { set path [makeFile {} out] fileutil::writeFile $path {} fileutil::insertIntoFile -translation binary $path 0 "dummy\nfoo" set res [fileutil::cat -translation binary $path] removeFile out set res } "dummy\nfoo" test insertintofile-2.5 {insertIntoFile, translation 2} { set path [makeFile {} out] fileutil::writeFile $path {} fileutil::insertIntoFile -translation crlf $path 0 "dummy\nfoo" set res [fileutil::cat -translation binary $path] removeFile out set res } "dummy\r\nfoo" test removefromfile-1.0 {removeFromFile, unwriteable file} {unixOnly notRoot} { set path [makeFile {} unwritable] file attributes $path -permissions 0000 catch {fileutil::removeFromFile $path 0 {}} msg file attributes $path -permissions 0600 removeFile unwritable string map [list $path @] $msg } {Cannot use file "@", write access is denied} test removefromfile-1.1 {removeFromFile, not a file} {unixOnly} { set path [makeDirectory notafile] catch {fileutil::removeFromFile $path 0 {}} msg removeDirectory notafile string map [list $path @] $msg } {Cannot use file "@", is not a file} test removefromfile-1.2 {removeFromFile, missing file} { set path [makeFile {} missing] removeFile missing catch {fileutil::removeFromFile $path 0 {}} msg string map [list $path @] $msg } {Cannot use file "@", does not exist} test removefromfile-1.3 {removeFromFile, wrong#args} { catch {fileutil::removeFromFile irrelevant} msg set msg } {wrong#args: should be fileutil::removeFromFile ?-eofchar|-translation|-encoding arg? file at n} test removefromfile-1.4 {removeFromFile, wrong#args} { catch {fileutil::removeFromFile} msg set msg } {wrong#args: should be fileutil::removeFromFile ?-eofchar|-translation|-encoding arg? file at n} test removefromfile-1.5 {removeFromFile, wrong#args} { catch {fileutil::removeFromFile a b c d} msg set msg } {wrong#args: should be fileutil::removeFromFile ?-eofchar|-translation|-encoding arg? file at n} test removefromfile-1.6 {removeFromFile, bad option} { set path [makeFile {} dummy] catch {fileutil::removeFromFile -bogus $path {}} msg removeFile dummy set msg } {Bad option "-bogus", expected one of -encoding, -eofchar, or -translation} test removefromfile-1.7 {removeFromFile, non-integer removal point} { set path [makeFile {} dummy] catch {fileutil::removeFromFile $path foo 0} msg removeFile dummy set msg } {Expected integer but got "foo"} test removefromfile-1.8 {removeFromFile, negative removal point} { set path [makeFile {} dummy] catch {fileutil::removeFromFile $path -1 0} msg removeFile dummy set msg } {Bad removal point -1, before start of data} test removefromfile-1.9 {removeFromFile, removal point beyond end-of-file} { set path [makeFile {} dummy] catch {fileutil::removeFromFile $path 4 0} msg removeFile dummy set msg } {Bad removal point 4, behind end of data} set path [makeFile {} dummy] set beyond [file size $path] incr beyond removeFile dummy test removefromfile-1.10 {removeFromFile, removal point beyond end-of-file} { set path [makeFile {} dummy] catch {fileutil::removeFromFile $path $beyond 0} msg removeFile dummy set msg } "Bad removal point $beyond, behind end of data" test removefromfile-1.11 {removeFromFile, non-integer removal size} { set path [makeFile {} dummy] catch {fileutil::removeFromFile $path 0 foo} msg removeFile dummy set msg } {Expected integer but got "foo"} test removefromfile-1.12 {removeFromFile, negative removal size} { set path [makeFile {} dummy] catch {fileutil::removeFromFile $path 0 -1} msg removeFile dummy set msg } {Bad removal size -1} test removefromfile-1.13 {removeFromFile, removal size beyond end-of-file} { set path [makeFile {} dummy] catch {fileutil::removeFromFile $path 0 4} msg removeFile dummy set msg } {Bad removal size 4, going behind end of data} set path [makeFile {} dummy] set beyond [file size $path] incr beyond removeFile dummy test removefromfile-1.14 {removeFromFile, removal point beyond end-of-file} { set path [makeFile {} dummy] catch {fileutil::removeFromFile $path 0 $beyond} msg removeFile dummy set msg } "Bad removal size $beyond, going behind end of data" test removefromfile-2.0 {removeFromFile, remove at front} { set path [makeFile {} out] fileutil::writeFile $path aragorn set res {} lappend res [fileutil::cat $path] fileutil::removeFromFile $path 0 3 lappend res [fileutil::cat $path] removeFile out set res } {aragorn gorn} test removefromfile-2.1 {removeFromFile, removal at end} { set path [makeFile {} out] fileutil::writeFile $path aragorn set res {} lappend res [fileutil::cat $path] fileutil::removeFromFile $path 3 4 lappend res [fileutil::cat $path] removeFile out set res } {aragorn ara} test removefromfile-2.2 {removeFromFile, removal in the middle} { set path [makeFile {} out] fileutil::writeFile $path aragorn set res {} lappend res [fileutil::cat $path] fileutil::removeFromFile $path 3 1 lappend res [fileutil::cat $path] removeFile out set res } {aragorn araorn} test removefromfile-2.3 {removeFromFile, remove nothing} { set path [makeFile {} out] fileutil::writeFile $path aragorn set res {} lappend res [fileutil::cat $path] fileutil::removeFromFile $path 3 0 lappend res [fileutil::cat $path] removeFile out set res } {aragorn aragorn} test replaceinfile-1.0 {replaceInFile, unwriteable file} {unixOnly notRoot} { set path [makeFile {} unwritable] file attributes $path -permissions 0000 catch {fileutil::replaceInFile $path 0 0 {}} msg file attributes $path -permissions 0600 removeFile unwritable string map [list $path @] $msg } {Cannot use file "@", write access is denied} test replaceinfile-1.1 {replaceInFile, not a file} {unixOnly} { set path [makeDirectory notafile] catch {fileutil::replaceInFile $path 0 0 {}} msg removeDirectory notafile string map [list $path @] $msg } {Cannot use file "@", is not a file} test replaceinfile-1.2 {replaceInFile, missing file} { set path [makeFile {} missing] removeFile missing catch {fileutil::replaceInFile $path 0 0 {}} msg string map [list $path @] $msg } {Cannot use file "@", does not exist} test replaceinfile-1.3 {replaceInFile, wrong#args} { catch {fileutil::replaceInFile irrelevant} msg set msg } {wrong#args: should be fileutil::replaceInFile ?-eofchar|-translation|-encoding arg? file at n data} test replaceinfile-1.4 {replaceInFile, wrong#args} { catch {fileutil::replaceInFile} msg set msg } {wrong#args: should be fileutil::replaceInFile ?-eofchar|-translation|-encoding arg? file at n data} test replaceinfile-1.5 {replaceInFile, wrong#args} { catch {fileutil::replaceInFile a b c d e} msg set msg } {wrong#args: should be fileutil::replaceInFile ?-eofchar|-translation|-encoding arg? file at n data} test replaceinfile-1.6 {replaceInFile, bad option} { set path [makeFile {} dummy] catch {fileutil::replaceInFile -bogus $path {}} msg removeFile dummy set msg } {Bad option "-bogus", expected one of -encoding, -eofchar, or -translation} test replaceinfile-1.7 {replaceInFile, non-integer replacement point} { set path [makeFile {} dummy] catch {fileutil::replaceInFile $path foo 0 x} msg removeFile dummy set msg } {Expected integer but got "foo"} test replaceinfile-1.8 {replaceInFile, negative replacement point} { set path [makeFile {} dummy] catch {fileutil::replaceInFile $path -1 0 x} msg removeFile dummy set msg } {Bad replacement point -1, before start of data} test replaceinfile-1.9 {replaceInFile, replacement point beyond end-of-file} { set path [makeFile {} dummy] catch {fileutil::replaceInFile $path 4 0 x} msg removeFile dummy set msg } {Bad replacement point 4, behind end of data} set path [makeFile {} dummy] set beyond [file size $path] incr beyond removeFile dummy test replaceinfile-1.10 {replaceInFile, replacement point beyond end-of-file} { set path [makeFile {} dummy] catch {fileutil::replaceInFile $path $beyond 0 x} msg removeFile dummy set msg } "Bad replacement point $beyond, behind end of data" test replaceinfile-1.11 {replaceInFile, non-integer replacement size} { set path [makeFile {} dummy] catch {fileutil::replaceInFile $path 0 foo x} msg removeFile dummy set msg } {Expected integer but got "foo"} test replaceinfile-1.12 {replaceInFile, negative replacement size} { set path [makeFile {} dummy] catch {fileutil::replaceInFile $path 0 -1 x} msg removeFile dummy set msg } {Bad replacement size -1} test replaceinfile-1.13 {replaceInFile, replacement size beyond end-of-file} { set path [makeFile {} dummy] catch {fileutil::replaceInFile $path 0 4 x} msg removeFile dummy set msg } {Bad replacement size 4, going behind end of data} set path [makeFile {} dummy] set beyond [file size $path] incr beyond removeFile dummy test replaceinfile-1.14 {replaceInFile, replacement size beyond end-of-file} { set path [makeFile {} dummy] catch {fileutil::replaceInFile $path 0 $beyond x} msg removeFile dummy set msg } "Bad replacement size $beyond, going behind end of data" test replaceinfile-2.0 {replaceInFile, replace at front, remove} { set path [makeFile {} out] fileutil::writeFile $path aragorn set res {} lappend res [fileutil::cat $path] fileutil::replaceInFile $path 0 3 {} lappend res [fileutil::cat $path] removeFile out set res } {aragorn gorn} test replaceinfile-2.1 {replaceInFile, replacement at end, remove} { set path [makeFile {} out] fileutil::writeFile $path aragorn set res {} lappend res [fileutil::cat $path] fileutil::replaceInFile $path 3 4 {} lappend res [fileutil::cat $path] removeFile out set res } {aragorn ara} test replaceinfile-2.2 {replaceInFile, replacement in the middle, remove} { set path [makeFile {} out] fileutil::writeFile $path aragorn set res {} lappend res [fileutil::cat $path] fileutil::replaceInFile $path 3 1 {} lappend res [fileutil::cat $path] removeFile out set res } {aragorn araorn} test replaceinfile-2.3 {replaceInFile, replace nothing} { set path [makeFile {} out] fileutil::writeFile $path aragorn set res {} lappend res [fileutil::cat $path] fileutil::replaceInFile $path 3 0 {} lappend res [fileutil::cat $path] removeFile out set res } {aragorn aragorn} test replaceinfile-2.4 {replaceInFile, replace at front, insert} { set path [makeFile {} out] fileutil::writeFile $path aragorn set res {} lappend res [fileutil::cat $path] fileutil::replaceInFile $path 0 0 dummy| lappend res [fileutil::cat $path] removeFile out set res } {aragorn dummy|aragorn} test replaceinfile-2.5 {replaceInFile, replacement at end, append} { set path [makeFile {} out] fileutil::writeFile $path aragorn set res {} lappend res [fileutil::cat $path] fileutil::replaceInFile $path 7 0 |dummy lappend res [fileutil::cat $path] removeFile out set res } {aragorn aragorn|dummy} test replaceinfile-2.6 {replaceInFile, replacement in the middle, insert} { set path [makeFile {} out] fileutil::writeFile $path aragorn set res {} lappend res [fileutil::cat $path] fileutil::replaceInFile $path 3 0 |dummy| lappend res [fileutil::cat $path] removeFile out set res } {aragorn ara|dummy|gorn} test replaceinfile-2.7 {replaceInFile, replace at front, expand} { set path [makeFile {} out] fileutil::writeFile $path aragorn set res {} lappend res [fileutil::cat $path] fileutil::replaceInFile $path 0 3 dummy| lappend res [fileutil::cat $path] removeFile out set res } {aragorn dummy|gorn} test replaceinfile-2.8 {replaceInFile, replacement at end, expand} { set path [makeFile {} out] fileutil::writeFile $path aragorn set res {} lappend res [fileutil::cat $path] fileutil::replaceInFile $path 3 4 |dummy lappend res [fileutil::cat $path] removeFile out set res } {aragorn ara|dummy} test replaceinfile-2.9 {replaceInFile, replacement in the middle, expand} { set path [makeFile {} out] fileutil::writeFile $path aragorn set res {} lappend res [fileutil::cat $path] fileutil::replaceInFile $path 3 1 |dummy| lappend res [fileutil::cat $path] removeFile out set res } {aragorn ara|dummy|orn} test replaceinfile-2.10 {replaceInFile, replace at front, shrink} { set path [makeFile {} out] fileutil::writeFile $path aragorn set res {} lappend res [fileutil::cat $path] fileutil::replaceInFile $path 0 3 | lappend res [fileutil::cat $path] removeFile out set res } {aragorn |gorn} test replaceinfile-2.11 {replaceInFile, replacement at end, shrink} { set path [makeFile {} out] fileutil::writeFile $path aragorn set res {} lappend res [fileutil::cat $path] fileutil::replaceInFile $path 3 4 | lappend res [fileutil::cat $path] removeFile out set res } {aragorn ara|} test replaceinfile-2.12 {replaceInFile, replacement in the middle, shrink} { set path [makeFile {} out] fileutil::writeFile $path aragorn set res {} lappend res [fileutil::cat $path] fileutil::replaceInFile $path 3 3 | lappend res [fileutil::cat $path] removeFile out set res } {aragorn ara|n} test updateinplace-1.0 {updateInPlace, unwriteable file} {unixOnly notRoot} { set path [makeFile {} unwritable] file attributes $path -permissions 0000 catch {fileutil::updateInPlace $path {string map {}}} msg file attributes $path -permissions 0600 removeFile unwritable string map [list $path @] $msg } {Cannot use file "@", write access is denied} test updateinplace-1.1 {updateInPlace, not a file} {unixOnly} { set path [makeDirectory notafile] catch {fileutil::updateInPlace $path {string map {}}} msg removeDirectory notafile string map [list $path @] $msg } {Cannot use file "@", is not a file} test updateinplace-1.2 {updateInPlace, missing file} { set path [makeFile {} missing] removeFile missing catch {fileutil::updateInPlace $path {string map {}}} msg string map [list $path @] $msg } {Cannot use file "@", does not exist} test updateinplace-1.3 {updateInPlace, wrong#args} { catch {fileutil::updateInPlace irrelevant} msg set msg } {wrong#args: should be fileutil::updateInPlace ?-eofchar|-translation|-encoding arg? file cmd} test updateinplace-1.4 {updateInPlace, wrong#args} { catch {fileutil::updateInPlace} msg set msg } {wrong#args: should be fileutil::updateInPlace ?-eofchar|-translation|-encoding arg? file cmd} test updateinplace-1.5 {updateInPlace, wrong#args} { catch {fileutil::updateInPlace a b c} msg set msg } {wrong#args: should be fileutil::updateInPlace ?-eofchar|-translation|-encoding arg? file cmd} test updateinplace-1.6 {updateInPlace, bad option} { set path [makeFile {} dummy] catch {fileutil::updateInPlace -bogus $path {string map {}}} msg removeFile dummy set msg } {Bad option "-bogus", expected one of -encoding, -eofchar, or -translation} test updateinplace-1.7 {updateInPlace, bogus cmd} { # Error leaves input file unchanged. set path [makeFile {} dummy] fileutil::writeFile $path aragorn catch {fileutil::updateInPlace $path bogus} msg set msg [list $msg [fileutil::cat $path]] removeFile dummy set msg } {{invalid command name "bogus"} aragorn} test updateinplace-2.0 {updateInPlace, string map} { set path [makeFile {} out] fileutil::writeFile $path aragorn set res {} lappend res [fileutil::cat $path] fileutil::updateInPlace $path {string map {a | r =}} lappend res [fileutil::cat $path] removeFile out set res } {aragorn |=|go=n} # ------------------------------------------------------------------------- catch {unset path} catch {unset res} catch {unset msg} catch {unset data} testsuiteCleanup return