OSDN Git Service

Please enter the commit message for your changes. Lines starting
[eos/base.git] / util / src / TclTk / tcl8.6.12 / pkgs / itcl4.2.2 / tests / typevariable.test
1 #---------------------------------------------------------------------
2 # TITLE:
3 #       typefunction.test
4 #
5 # AUTHOR:
6 #       Arnulf Wiedemann with a lot of code form the snit tests by
7 #       Will Duquette
8 #
9 # DESCRIPTION:
10 #       Test cases for ::itcl::type proc, method, typemethod commands.
11 #       Uses the ::tcltest:: harness.
12 #
13 #    The tests assume tcltest 2.2
14 #-----------------------------------------------------------------------
15
16 package require tcltest 2.2
17 namespace import ::tcltest::*
18 ::tcltest::loadTestedCommands
19 package require itcl
20
21 interp alias {} type {} ::itcl::type
22
23 #-----------------------------------------------------------------------
24 # Type variables
25
26 test typevariable-1.2 {undefined typevariables are OK} -body {
27     type dog {
28         typevariable theValue
29         method tset {value} {
30             set theValue $value
31         }
32
33         method tget {} {
34             return $theValue
35         }
36     }
37
38     dog create spot
39     dog create fido
40     spot tset Howdy
41
42     list [spot tget] [fido tget] [set ::dog::theValue]
43 } -cleanup {
44     dog destroy
45 } -result {Howdy Howdy Howdy}
46
47 test typevariable-1.3 {predefined typevariables are OK} -body {
48     type dog {
49         typevariable greeting Hello
50
51         method tget {} {
52             return $greeting
53         }
54     }
55
56     dog create spot
57     dog create fido
58
59     list [spot tget] [fido tget] ;# FIXME [set ::dog::greeting]
60 } -cleanup {
61     dog destroy
62 } -result {Hello Hello}
63
64 test typevariable-1.4 {typevariables can be arrays} -body {
65     type dog {
66         typevariable greetings
67
68         method fill {} {
69             set greetings(a) Hi
70             set greetings(b) Howdy
71         }
72     }
73
74     dog create spot
75     spot fill
76     list $::dog::greetings(a) $::dog::greetings(b)
77 } -cleanup {
78     dog destroy
79 } -result {Hi Howdy}
80
81 test typevariable-1.5 {typevariables can used in typemethods} -body {
82     type dog {
83         typevariable greetings Howdy
84
85         typemethod greet {} {
86             return $greetings
87         }
88     }
89
90     dog greet
91 } -cleanup {
92     dog destroy
93 } -result {Howdy}
94
95 test typevariable-1.6 {typevariables can used in procs} -body {
96     type dog {
97         typevariable greetings Howdy
98
99         method greet {} {
100             return [realGreet]
101         }
102
103         proc realGreet {} {
104             return $greetings
105         }
106     }
107
108     dog create spot
109     spot greet
110 } -cleanup {
111     dog destroy
112 } -result {Howdy}
113
114 test typevariable-1.7 {mytypevar qualifies typevariables} -body {
115     type dog {
116         method tvname {name} {
117             mytypevar $name
118         }
119     }
120
121     dog create spot
122     spot tvname myvar
123 } -cleanup {
124     dog destroy
125 } -result {::dog::myvar}
126
127 test typevariable-1.8 {typevariable with too many initializers throws an error} -body {
128     type dog {
129         typevariable color dark brown
130     }
131 } -returnCodes {
132     error
133 } -result {wrong # args: should be "typevariable varname ?init?"}
134
135 test typevariable-1.9 {typevariable with too many initializers throws an error} -body {
136     type dog {
137         typevariable color -array dark brown
138     }
139
140     set result
141 } -returnCodes {
142     error
143 } -result {wrong # args: should be "typevariable varname ?init|-array init?"}
144
145 test typevariable-1.10 {typevariable can initialize array variables} -body {
146     type dog {
147         typevariable data -array {
148             family jones
149             color brown
150         }
151
152         typemethod getdata {item} {
153             return $data($item)
154         }
155     }
156
157     list [dog getdata family] [dog getdata color]
158 } -cleanup {
159     dog destroy
160 } -result {jones brown}
161
162 #-----------------------------------------------------------------------
163 # instance variable
164
165 test ivariable-1.1 {myvar qualifies instance variables} -body {
166     type dog {
167         method vname {name} {
168             myvar $name
169         }
170     }
171
172     dog create spot
173     spot vname somevar
174 } -cleanup {
175     dog destroy
176 } -match glob -result {::itcl::internal::variables::*::dog::somevar}
177
178 test ivariable-1.2 {undefined instance variables are OK} -body {
179     type dog {
180         variable greeting
181         method setgreeting {value} {
182             set greeting $value
183         }
184
185         method getgreeting {} {
186             return $greeting
187         }
188     }
189
190     set spot [dog create spot]
191     spot setgreeting Hey
192
193     dog create fido
194     fido setgreeting Howdy
195
196     list [spot getgreeting] [fido getgreeting] [set ::itcl::internal::variables[info object namespace spot]::dog::greeting]
197 } -cleanup {
198     dog destroy
199 } -result {Hey Howdy Hey}
200
201 test ivariable-1.3 {instance variables are destroyed automatically} -body {
202     type dog {
203         variable greeting
204         constructor {args} {
205             set greeting Hi
206         }
207     }
208
209     dog create spot
210     set ns [info object namespace spot]
211     set g1 [set ::itcl::internal::variables${ns}::dog::greeting]
212
213     spot destroy
214     list $g1 [info exists ::itcl::internal::variables${ns}::dog::greeting]
215 } -cleanup {
216     dog destroy
217 } -result {Hi 0}
218
219 test ivariable-1.4 {defined instance variables need not be declared} -body {
220     type dog {
221         variable greetings
222
223         method put {} {
224             set greetings Howdy
225         }
226
227         method get {} {
228             return $greetings
229         }
230     }
231
232     dog create spot
233     spot put
234     spot get
235 } -cleanup {
236     dog destroy
237 } -result {Howdy}
238
239 test ivariable-1.5 {instance variables can be arrays} -body {
240     type dog {
241         variable greetings
242
243         method fill {} {
244             set greetings(a) Hi
245             set greetings(b) Howdy
246         }
247
248         method vname {} {
249             return [myvar greetings]
250         }
251     }
252
253     dog create spot
254     spot fill
255     list [set [spot vname](a)] [set [spot vname](b)]
256 } -cleanup {
257     dog destroy
258 } -result {Hi Howdy}
259
260 test ivariable-1.6 {instance variables can be initialized in the definition} -body {
261     type dog {
262         variable greetings {Hi Howdy}
263         variable empty {}
264
265         method list {} {
266             list $greetings $empty
267         }
268     }
269
270     dog create spot
271     spot list
272 } -cleanup {
273     dog destroy
274 } -result {{Hi Howdy} {}}
275
276 test ivariable-1.9 {procs which define selfns see instance variables} -body {
277     type dog {
278         variable greeting Howdy
279
280         method caller {} {
281             return [callee $selfns]
282         }
283
284         proc callee {selfns} {
285             return [set ${selfns}::greeting]
286         }
287     }
288
289     dog create spot
290
291     spot caller
292 } -cleanup {
293     dog destroy
294 } -result {Howdy}
295
296 test ivariable-1.11 {variable with too many initializers throws an error} -body {
297     type dog {
298         variable color dark brown
299     }
300 } -returnCodes {
301     error
302 } -result {wrong # args: should be "variable name ?init?"}
303
304 test ivariable-1.12 {variable with too many initializers throws an error} -body {
305     type dog {
306         variable color -array dark brown
307     }
308 } -returnCodes {
309     error
310 } -result {wrong # args: should be "variable varname ?init|-array init?"}
311
312 test ivariable-1.13 {variable can initialize array variables} -body {
313     type dog {
314         variable data -array {
315             family jones
316             color brown
317         }
318
319         method getdata {item} {
320             return $data($item)
321         }
322     }
323
324     dog spot
325     list [spot getdata family] [spot getdata color]
326 } -cleanup {
327     dog destroy
328 } -result {jones brown}
329
330
331 #---------------------------------------------------------------------
332 # Clean up
333
334 cleanupTests
335 return