1 # This file is a Tcl script to test out the "image" command and the
2 # other procedures in the file tkImage.c. It is organized in the
3 # standard fashion for Tcl tests.
5 # Copyright (c) 1994 The Regents of the University of California.
6 # Copyright (c) 1994 Sun Microsystems, Inc.
7 # Copyright (c) 1998-1999 by Scriptics Corporation.
10 package require tcltest 2.2
11 namespace import ::tcltest::*
12 eval tcltest::configure $argv
13 tcltest::loadTestedCommands
17 # Canvas used in some tests in the whole file
18 canvas .c -highlightthickness 2
23 test image-1.1 {Tk_ImageCmd procedure, "create" option} -body {
25 } -returnCodes error -result {wrong # args: should be "image option ?args?"}
26 test image-1.2 {Tk_ImageCmd procedure, "create" option} -body {
28 } -returnCodes error -result {bad option "gorp": must be create, delete, height, inuse, names, type, types, or width}
29 test image-1.3 {Tk_ImageCmd procedure, "create" option} -body {
31 } -returnCodes error -result {wrong # args: should be "image create type ?name? ?-option value ...?"}
32 test image-1.4 {Tk_ImageCmd procedure, "create" option} -body {
34 } -returnCodes error -result {image type "bad_type" doesn't exist}
35 test image-1.5 {Tk_ImageCmd procedure, "create" option} -constraints {
38 list [image create test myimage] [imageNames]
41 } -result {myimage myimage}
42 test image-1.6 {Tk_ImageCmd procedure, "create" option} -constraints {
47 scan [image create test] image%d first
48 image create test myimage
49 scan [image create test -variable x] image%d second
55 test image-1.7 {Tk_ImageCmd procedure, "create" option} -constraints {
60 image create test myimage -variable x
61 .c create image 100 50 -image myimage
62 .c create image 100 150 -image myimage
65 set timer [after 500 {lappend x "timed out"}]
66 image create test myimage -variable x
69 # On MacOS we need to wait for the test image display procedure to run.
70 while {"timed out" ni $x && [lindex $x end 1] ne "display"} {
74 if {[lindex $x end] eq "timed out"} {
75 return [lreplace $x end end]
80 } -result {{myimage free} {myimage free} {myimage delete} {myimage get} {myimage get} {myimage display 0 0 30 15} {myimage display 0 0 30 15}}
81 test image-1.8 {Tk_ImageCmd procedure, "create" option} -constraints {
87 image create test myimage -variable x
88 .c create image 100 50 -image myimage
89 .c create image 100 150 -image myimage
93 set timer [after 500 {lappend x "timed out"}]
94 image create test myimage -variable x
101 } -result {{myimage get} {myimage get} {myimage display 0 0 30 15} {myimage display 0 0 30 15}}
102 test image-1.9 {Tk_ImageCmd procedure, "create" option} -constraints {
105 image create test -badName foo
106 } -returnCodes error -result {bad option name "-badName"}
107 test image-1.10 {Tk_ImageCmd procedure, "create" option} -constraints {
110 catch {image create test -badName foo}
113 test image-1.11 {Tk_ImageCmd procedure, "create" option with same name as main window} -body {
114 set code [loadTkCommand]
117 puts [list [catch {image create photo .} msg] $msg]
120 set script [makeFile $code script]
121 exec [interpreter] <$script
124 } -result {1 {images may not be named the same as the main window}}
125 test image-1.12 {Tk_ImageCmd procedure, "create" option with same name as main window after renaming} -body {
126 set code [loadTkCommand]
129 puts [list [catch {rename . foo;image create photo foo} msg] $msg]
132 set script [makeFile $code script]
133 exec [interpreter] <$script
136 } -result {1 {images may not be named the same as the main window}}
137 test image-1.13 {Tk_ImageCmd, "create" option: do not generated command name in use} -setup {
141 set i [image create bitmap]
142 regexp {^image(\d+)$} $i -> serial
144 proc image$serial {} {return works}
145 set j [image create bitmap]
149 rename image$serial {}
153 test image-2.1 {Tk_ImageCmd procedure, "delete" option} -body {
156 test image-2.2 {Tk_ImageCmd procedure, "delete" option} -constraints {
162 image create test myimage
163 image create test img2
164 lappend result [lsort [imageNames]]
166 lappend result [imageNames]
169 } -result {{img2 myimage} {}}
170 test image-2.3 {Tk_ImageCmd procedure, "delete" option} -constraints {
175 image create test myimage
176 image create test img2
177 image delete myimage gorp img2
180 } -returnCodes error -result {image "gorp" doesn't exist}
181 test image-2.4 {Tk_ImageCmd procedure, "delete" option} -constraints {
186 image create test myimage
187 image create test img2
188 catch {image delete myimage gorp img2}
195 test image-3.1 {Tk_ImageCmd procedure, "height" option} -body {
197 } -returnCodes error -result {wrong # args: should be "image height name"}
198 test image-3.2 {Tk_ImageCmd procedure, "height" option} -body {
200 } -returnCodes error -result {wrong # args: should be "image height name"}
201 test image-3.3 {Tk_ImageCmd procedure, "height" option} -body {
203 } -returnCodes error -result {image "foo" doesn't exist}
204 test image-3.4 {Tk_ImageCmd procedure, "height" option} -constraints {
209 image create test myimage
210 set x [image h myimage]
211 myimage changed 0 0 0 0 60 50
212 list $x [image height myimage]
218 test image-4.1 {Tk_ImageCmd procedure, "names" option} -body {
220 } -returnCodes error -result {wrong # args: should be "image names"}
221 test image-4.2 {Tk_ImageCmd procedure, "names" option} -constraints {
224 catch {interp delete testinterp}
226 interp create testinterp
227 load {} Tk testinterp
228 interp eval testinterp {
229 image delete {*}[image names]
230 image create test myimage
231 image create test img2
232 image create test 24613
236 interp delete testinterp
237 } -result {24613 img2 myimage}
238 test image-4.3 {Tk_ImageCmd procedure, "names" option} -setup {
239 catch {interp delete testinterp}
241 interp create testinterp
242 load {} Tk testinterp
243 interp eval testinterp {
244 image delete {*}[image names]
245 eval image delete [image names] [image names]
249 interp delete testinterp
253 test image-5.1 {Tk_ImageCmd procedure, "type" option} -body {
255 } -returnCodes error -result {wrong # args: should be "image type name"}
256 test image-5.2 {Tk_ImageCmd procedure, "type" option} -body {
258 } -returnCodes error -result {wrong # args: should be "image type name"}
259 test image-5.3 {Tk_ImageCmd procedure, "type" option} -body {
261 } -returnCodes error -result {image "foo" doesn't exist}
263 test image-5.4 {Tk_ImageCmd procedure, "type" option} -constraints {
268 image create test myimage
273 test image-5.5 {Tk_ImageCmd procedure, "type" option} -constraints {
278 image create test myimage
279 .c create image 50 50 -image myimage
284 } -returnCodes error -result {image "myimage" doesn't exist}
285 test image-5.6 {Tk_ImageCmd procedure, "type" option} -constraints {
290 image create oldtest myimage
295 test image-5.7 {Tk_ImageCmd procedure, "type" option} -constraints {
301 image create oldtest myimage
302 .c create image 50 50 -image myimage
308 } -returnCodes error -result {image "myimage" doesn't exist}
311 test image-6.1 {Tk_ImageCmd procedure, "types" option} -body {
313 } -returnCodes error -result {wrong # args: should be "image types"}
314 test image-6.2 {Tk_ImageCmd procedure, "types" option} -body {
316 } -match glob -result {bitmap*photo test}
319 test image-7.1 {Tk_ImageCmd procedure, "width" option} -body {
321 } -returnCodes error -result {wrong # args: should be "image width name"}
322 test image-7.2 {Tk_ImageCmd procedure, "width" option} -body {
324 } -returnCodes error -result {wrong # args: should be "image width name"}
325 test image-7.3 {Tk_ImageCmd procedure, "width" option} -body {
327 } -returnCodes error -result {image "foo" doesn't exist}
328 test image-7.4 {Tk_ImageCmd procedure, "width" option} -constraints {
333 image create test myimage
334 set x [image w myimage]
335 myimage changed 0 0 0 0 60 50
336 list $x [image width myimage]
342 test image-8.1 {Tk_ImageCmd procedure, "inuse" option} -constraints {
349 image create test myimage2
350 lappend res [image inuse myimage2]
351 button .b -image myimage2
352 lappend res [image inuse myimage2]
358 test image-9.1 {Tk_ImageChanged procedure} -constraints testImageType -setup {
363 image create test foo -variable x
364 .c create image 50 50 -image foo
367 set timer [after 500 {lappend x "timed out"}]
368 foo changed 5 6 7 8 30 15
371 # On MacOS we need to wait for the test image display procedure to run.
372 while {"timed out" ni $x && [lindex $x end 1] ne "display"} {
380 } -result {{foo display 5 6 7 8}}
382 test image-9.2 {Tk_ImageChanged procedure} -constraints testImageType -setup {
387 image create test foo -variable x
388 .c create image 50 50 -image foo
389 .c create image 90 100 -image foo
392 foo changed 5 6 7 8 30 15
393 set timer [after 500 {lappend x "timed out"}]
394 image create test myimage -variable x
401 } -result {{foo display 5 6 25 9} {foo display 0 0 12 14}}
403 test image-10.1 {Tk_GetImage procedure} -setup {
406 .c create image 100 10 -image bad_name
409 } -returnCodes error -result {image "bad_name" doesn't exist}
410 test image-10.2 {Tk_GetImage procedure} -constraints testImageType -setup {
414 image create test mytest
415 label .l -image mytest
417 label .l2 -image mytest
421 } -returnCodes error -result {image "mytest" doesn't exist}
424 test image-11.1 {Tk_FreeImage procedure} -constraints testImageType -setup {
428 image create test foo -variable x
429 .c create image 50 50 -image foo -tags i1
430 .c create image 90 100 -image foo -tags i2
435 set timer [after 500 {lappend x "timed out"}]
443 } -result {foo {{foo free} {foo display 0 0 30 15}}}
444 test image-11.2 {Tk_FreeImage procedure} -constraints testImageType -setup {
448 image create test foo -variable x
449 .c create image 50 50 -image foo -tags i1
450 set names [imageNames]
453 set names2 [imageNames]
459 list $names $names2 [imageNames] $x
463 } -result {foo {} {} {}}
466 # Non-portable, apparently due to differences in rounding:
467 test image-12.1 {Tk_RedrawImage procedure, redisplay area clipping} -constraints {
468 testImageType nonPortable
472 image create test foo -variable x
473 .c create image 50 60 -image foo -tags i1 -anchor nw
475 .c create rectangle 30 40 55 65 -width 0 -fill black -outline {}
481 } -result {{foo display 0 0 5 5 50 50}}
482 test image-12.2 {Tk_RedrawImage procedure, redisplay area clipping} -constraints {
483 testImageType nonPortable
487 image create test foo -variable x
488 .c create image 50 60 -image foo -tags i1 -anchor nw
490 .c create rectangle 60 40 100 65 -width 0 -fill black -outline {}
496 } -result {{foo display 10 0 20 5 30 50}}
497 test image-12.3 {Tk_RedrawImage procedure, redisplay area clipping} -constraints {
498 testImageType nonPortable
502 image create test foo -variable x
503 .c create image 50 60 -image foo -tags i1 -anchor nw
505 .c create rectangle 60 70 100 200 -width 0 -fill black -outline {}
511 } -result {{foo display 10 10 20 5 30 30}}
512 test image-12.4 {Tk_RedrawImage procedure, redisplay area clipping} -constraints {
513 testImageType nonPortable
517 image create test foo -variable x
518 .c create image 50 60 -image foo -tags i1 -anchor nw
520 .c create rectangle 30 70 55 200 -width 0 -fill black -outline {}
526 } -result {{foo display 0 10 5 5 50 30}}
527 test image-12.5 {Tk_RedrawImage procedure, redisplay area clipping} -constraints {
528 testImageType nonPortable
532 image create test foo -variable x
533 .c create image 50 60 -image foo -tags i1 -anchor nw
535 .c create rectangle 10 20 120 130 -width 0 -fill black -outline {}
541 } -result {{foo display 0 0 30 15 70 70}}
542 test image-12.6 {Tk_RedrawImage procedure, redisplay area clipping} -constraints {
543 testImageType nonPortable
547 image create test foo -variable x
548 .c create image 50 60 -image foo -tags i1 -anchor nw
550 .c create rectangle 55 65 75 70 -width 0 -fill black -outline {}
556 } -result {{foo display 5 5 20 5 30 30}}
559 test image-13.1 {Tk_SizeOfImage procedure} -constraints testImageType -setup {
562 image create test foo -variable x
563 set result [list [image width foo] [image height foo]]
564 foo changed 0 0 0 0 85 60
565 lappend result [image width foo] [image height foo]
568 } -result {30 15 85 60}
570 test image-13.2 {DeleteImage procedure} -constraints testImageType -setup {
574 image create test foo -variable x
575 .c create image 50 50 -image foo -tags i1
576 .c create image 90 100 -image foo -tags i2
579 lappend x | [imageNames] | [catch {image delete foo} msg] | $msg | [imageNames] |
582 } -result {{foo free} {foo free} {foo delete} | {} | 1 | {image "foo" doesn't exist} | {} |}
584 test image-13.3 {Tk_SizeOfImage procedure} -constraints testOldImageType -setup {
587 image create oldtest foo -variable x
588 set result [list [image width foo] [image height foo]]
589 foo changed 0 0 0 0 85 60
590 lappend result [image width foo] [image height foo]
593 } -result {30 15 85 60}
595 test image-13.4 {DeleteImage procedure} -constraints testOldImageType -setup {
599 image create oldtest foo -variable x
600 .c create image 50 50 -image foo -tags i1
601 .c create image 90 100 -image foo -tags i2
604 lappend x | [imageNames] | [catch {image delete foo} msg] | $msg | [imageNames] |
608 } -result {{foo free} {foo free} {foo delete} | {} | 1 | {image "foo" doesn't exist} | {} |}
610 test image-14.1 {image command vs hidden commands} -body {
611 catch {image delete hidden}
613 set h [interp hidden]
614 image create photo hidden
615 interp hide {} hidden
617 set res1 [list [imageNames] [interp hidden]]
618 set res2 [list $l $h]
619 expr {$res1 eq $res2}
622 test image-15.1 {deleting image does not make widgets forget about it} -setup {
626 image create photo foo -width 10 -height 10
627 .c create image 10 10 -image foo -tags i1 -anchor nw
630 lappend x [imageNames]
632 lappend x [imageNames]
633 image create photo foo -width 20 -height 20
634 lappend x [.c bbox i1] [imageNames]
638 } -result {10 10 20 20 foo {} {10 10 30 30} foo}