1# uuencode.test - Copyright (C) 2002 Pat Thoyts <patthoyts@users.sourceforge.net> 2# 3# Tests for the Tcllib uuencode package 4# 5# ------------------------------------------------------------------------- 6# See the file "license.terms" for information on usage and redistribution 7# of this file, and for a DISCLAIMER OF ALL WARRANTIES. 8# ------------------------------------------------------------------------- 9# RCS: @(#) $Id: uuencode.test,v 1.15 2008/12/12 04:57:46 andreas_kupries Exp $ 10 11# ------------------------------------------------------------------------- 12 13source [file join \ 14 [file dirname [file dirname [file join [pwd] [info script]]]] \ 15 devtools testutilities.tcl] 16 17testsNeedTcl 8.2 18testsNeedTcltest 1.0 19 20testing { 21 useTcllibC 22 useLocalKeep uuencode.tcl uuencode 23} 24 25# ------------------------------------------------------------------------- 26 27set trf 0 28if {[llength [info commands ::uuencode::CEncode]]} { 29 puts "> critcl based" 30} elseif {[package provide Trf] != {}} { 31 puts "> Trf based" 32 set trf 1 33} else { 34 puts "> pure tcl" 35} 36 37package require log 38log::lvSuppress notice 39 40# ------------------------------------------------------------------------- 41 42test uuencode-1.0 {encode string} { 43 catch {::uuencode::encode ABC} result 44 set result 45} "04)#" 46 47test uuencode-1.1 {decode string} { 48 catch {::uuencode::decode "04)#"} result 49 set result 50} "ABC" 51 52test uuencode-1.2 {encode longer string} { 53 catch {::uuencode::encode [string repeat x 102]} result 54 set result 55} [string repeat ">'AX" 34] 56 57test uuencode-1.3 {decode longer string} { 58 catch {::uuencode::decode [string repeat ">'AX" 34]} result 59 set result 60} [string repeat x 102] 61 62# Trf uses a different padding character. 63if {!$trf} { 64 # critcl / pure tcl based 65 set testdata {begin 644 data.dat 6675&AE(&-A="!S870@;VX@=&AE(&UA="X` 67` 68end} 69} else { 70 set testdata {begin 644 data.dat 7175&AE(&-A="!S870@;VX@=&AE(&UA="X~ 72` 73end} 74} 75 76test uuencode-1.4 {uuencode string} { 77 catch {::uuencode::uuencode "The cat sat on the mat."} result 78 set result 79} $testdata 80 81test uuencode-1.5 {uudecode string} { 82 catch {::uuencode::uudecode $testdata} result 83 set result 84} [list [list data.dat 644 "The cat sat on the mat."]] 85 86test uuencode-1.6 {encode dash-string} { 87 catch {::uuencode::encode -BC} result 88 set result 89} "+4)#" 90 91test uuencode-1.7 {decode dash-string} { 92 catch {::uuencode::decode "-4)#"} result 93 set result 94} "5BC" 95 96# ------------------------------------------------------------------------- 97 98set testdata [list \ 99 "begin 644 data.dat" \ 100 "75&AE(&-A=\"!S870@;VX@=&AE(&UA=\"X" \ 101 "`" \ 102 "end" ] 103 104test uuencode-2.1 {uudecode unpadded lines} { 105 catch {::uuencode::uudecode [join $testdata "\n"]} result 106 set result 107} [list [list data.dat 644 "The cat sat on the mat."]] 108 109test uuencode-2.2 {uudecode DOS line endings} { 110 set f [open uuencode.test.data w] 111 fconfigure $f -translation binary 112 puts -nonewline $f [join $testdata "\r\n"] 113 close $f 114 catch {::uuencode::uudecode -file uuencode.test.data} result 115 set result 116} [list [list data.dat 644 "The cat sat on the mat."]] 117 118foreach {n in out} { 119 0 a {80``} 120 1 abc {86)C} 121 2 \0 {````} 122 3 "\r\n\t" {#0H)} 123 4 "hello world" {:&5L;&\@=V]R;&0`} 124} { 125 test uuencode-3.$n {check the pure tcl encoder} { 126 list [catch {::uuencode::Encode $in} r] $r 127 } [list 0 $out] 128} 129 130# ------------------------------------------------------------------------- 131 132test uuencode-4.0 {encode bad args} { 133 catch {::uuencode::uuencode -bogus} result 134 set result 135} {bad option -bogus: must be -file, -mode, or -name} 136 137test uuencode-4.1 {encode wrong#args} { 138 catch {::uuencode::uuencode -file} result 139 set result 140} {wrong # args: should be "uuencode ?-name string? ?-mode octal? (-file filename | ?--? string)"} 141 142test uuencode-4.2 {encode wrong#args} { 143 catch {::uuencode::uuencode -name} result 144 set result 145} {wrong # args: should be "uuencode ?-name string? ?-mode octal? (-file filename | ?--? string)"} 146 147test uuencode-4.3 {encode wrong#args} { 148 catch {::uuencode::uuencode -mode} result 149 set result 150} {wrong # args: should be "uuencode ?-name string? ?-mode octal? (-file filename | ?--? string)"} 151 152test uuencode-4.4 {encode wrong#args} { 153 catch {::uuencode::uuencode -mode 1} result 154 set result 155} {wrong # args: should be "uuencode ?-name string? ?-mode octal? (-file filename | ?--? string)"} 156 157test uuencode-4.5 {encode wrong#args} { 158 catch {::uuencode::uuencode -name foo} result 159 set result 160} {wrong # args: should be "uuencode ?-name string? ?-mode octal? (-file filename | ?--? string)"} 161 162test uuencode-4.6 {encode wrong#args} { 163 catch {::uuencode::uuencode --} result 164 set result 165} {wrong # args: should be "uuencode ?-name string? ?-mode octal? (-file filename | ?--? string)"} 166 167 168 169test uuencode-5.0 {decode bad args} { 170 catch {::uuencode::uudecode -bogus} result 171 set result 172} {bad option -bogus: must be -file} 173 174test uuencode-5.1 {decode wrong#args} { 175 catch {::uuencode::uudecode -file} result 176 set result 177} {wrong # args: should be "uudecode (-file filename | ?--? string)"} 178 179test uuencode-5.2 {decode wrong#args} { 180 catch {::uuencode::uudecode --} result 181 set result 182} {wrong # args: should be "uudecode (-file filename | ?--? string)"} 183 184 185# ------------------------------------------------------------------------- 186 187file delete -force uuencode.test.data 188testsuiteCleanup 189 190# Local Variables: 191# mode: tcl 192# indent-tabs-mode: nil 193# End: 194