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