1# Commands covered: sound read/write
2#
3
4package require -exact snack 2.2
5
6if {[lsearch [namespace children] ::tcltest] == -1} {
7    package require tcltest
8    namespace import ::tcltest::*
9}
10
11test fileio-1.1 {write/read commands for WAV file format} {
12  set s [snack::sound snd]
13  $s length 300
14  $s write snackTest.wav
15  set res [$s read snackTest.wav]
16  $s destroy
17  set res
18} {WAV}
19
20test fileio-1.2 {write/read commands for AU file format} {
21  set s [snack::sound snd]
22  $s length 300
23  $s write snackTest.au
24  set res [$s read snackTest.au]
25  $s destroy
26  set res
27} {AU}
28
29test fileio-1.3 {write/read commands for AIFF file format} {
30  set s [snack::sound snd]
31  $s length 300
32  $s write snackTest.aiff
33  set res [$s read snackTest.aiff]
34  $s destroy
35  set res
36} {AIFF}
37
38test fileio-1.4 {write/read commands for MP3 file format} {
39  set s [snack::sound snd]
40  $s length 300
41  set res [list [catch {$s write snackTest.mp3} msg] $msg]
42  $s destroy
43  set res
44} {1 {Unsupported save format}}
45
46test fileio-1.5 {write/read commands for RAW file format} {
47  set s [snack::sound snd -load ex1.wav]
48  $s write snackTest.raw -start 5000 -end 10000 -fileformat raw \
49	-byteorder littleEndian
50  $s read snackTest.raw -guessproperties 1
51  set res [$s cget -byteorder]
52  $s destroy
53  set res
54} {littleEndian}
55
56test fileio-1.6 {write/read commands for RAW file format} {
57  set s [snack::sound snd -load ex1.wav]
58  $s write snackTest.raw -start 5000 -end 10000 -fileformat raw \
59	-byteorder bigEndian
60  $s read snackTest.raw -guessproperties 1
61  set res [$s cget -byteorder]
62  $s destroy
63  set res
64} {bigEndian}
65
66test fileio-1.7 {write/read commands for RAW file format} {
67  set s [snack::sound snd -load ex1.wav]
68  $s write snackTest.raw -fileformat raw -byteorder bigEndian
69  $s read snackTest.raw -rate 16000 -encoding Lin16 -channels 1 \
70	-byteorder bigEndian -guessproperties 0
71  set res [$s info]
72  $s destroy
73  set res
74} {15820 16000 14264 -8288 Lin16 1 RAW 0}
75
76test fileio-2.1 {read command, -start/-end options} {
77  set s [snack::sound snd]
78  $s read ex1.wav -start 5000 -end 10000
79  set res [list [$s sample 0] [$s sample 5000] [$s length]]
80  $s destroy
81  set res
82} {7443 779 5001}
83
84test fileio-2.2 {read command, missing argument for -end option} {
85  set s [snack::sound snd]
86  catch {$s read ex1.wav -start 5000 -end} msg
87  $s destroy
88  set msg
89} {No argument given for -end option}
90
91test fileio-3.1 {read command, empty -progress option} {
92  set s [snack::sound snd]
93  catch {$s read ex1.wav -progress ""} msg
94  $s destroy
95  set msg
96} WAV
97
98test fileio-3.2 {write command, empty -progress option} {
99  set s [snack::sound snd]
100  catch {$s write snackTest.wav -progress ""} msg
101  $s destroy
102  set msg
103} {}
104
105test fileio-3.3 {read command, -progress option} {
106  set res ""
107  proc prog {msg frac} {
108    lappend ::res $frac
109  }
110  set s [snack::sound snd]
111  $s read ex1.wav -progress prog
112  $s destroy
113  set res
114} {0.0 1.0}
115
116test fileio-3.4 {write command, -progress option} {
117  set res ""
118  proc prog {msg frac} {
119    lappend ::res $frac
120  }
121  set s [snack::sound snd]
122  $s write snackTest.wav -progress prog
123  $s destroy
124  set res
125} {0.0 1.0}
126
127test fileio-4.1 {read command, read error should leave current untouched} {
128  set s [snack::sound snd -load ex1.wav]
129  catch {$s read nonexisting.wav}
130  set res [$s info]
131  $s destroy
132  set res
133} {15820 16000 14264 -8288 Lin16 1 WAV 44}
134
135test fileio-4.2 {read command, No file name given} {
136  set s [snack::sound snd]
137  catch {$s read} res
138  $s destroy
139  set res
140} {No file name given}
141
142# cleanup
143catch {::tcltest::removeFile snackTest.wav}
144catch {::tcltest::removeFile snackTest.au}
145catch {::tcltest::removeFile snackTest.aiff}
146catch {::tcltest::removeFile snackTest.raw}
147::tcltest::cleanupTests
148return
149