imgPhoto.test
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:31k
源码类别:

通讯编程

开发平台:

Visual C++

  1. # This file is a Tcl script to test out the "photo" image type and the
  2. # other procedures in the file tkImgPhoto.c.  It is organized in the
  3. # standard fashion for Tcl tests.
  4. #
  5. # Copyright (c) 1994 The Australian National University
  6. # Copyright (c) 1994-1997 Sun Microsystems, Inc.
  7. # Copyright (c) 1998-1999 by Scriptics Corporation.
  8. # All rights reserved.
  9. #
  10. # Author: Paul Mackerras (paulus@cs.anu.edu.au)
  11. #
  12. # RCS: @(#) $Id: imgPhoto.test,v 1.15.2.6 2008/02/01 16:59:58 rmax Exp $
  13. package require tcltest 2.1
  14. namespace import -force tcltest::configure
  15. namespace import -force tcltest::testsDirectory
  16. configure -testdir [file join [pwd] [file dirname [info script]]]
  17. configure -loadfile [file join [testsDirectory] constraints.tcl]
  18. tcltest::loadTestedCommands
  19. namespace import -force tcltest::makeFile
  20. namespace import -force tcltest::removeFile
  21. eval image delete [image names]
  22. canvas .c
  23. pack .c
  24. update
  25. set README [makeFile {
  26. README -- Tk test suite design document.
  27. } README-imgPhotot]
  28. # find the teapot.ppm file for use in these tests
  29. # first look in $tk_library/demos/images/teapot.ppm
  30. # then look in <this file>/../../library/demos/images/teapot.ppm
  31. testConstraint hasTeapotPhoto 1
  32. set teapotPhotoFile [file join $tk_library demos images teapot.ppm]
  33. if {![file exists $teapotPhotoFile]} {
  34.     set newLib [file dirname [testsDirectory]]
  35.     set teapotPhotoFile [file join $newLib library demos images teapot.ppm]
  36.     if {![file exists $teapotPhotoFile]} {
  37. testConstraint hasTeapotPhoto
  38.     }
  39. }
  40. test imgPhoto-1.1 {options for photo images} {
  41.     image create photo p1 -width 79 -height 83
  42.     list [lindex [p1 configure -width] 4] [lindex [p1 configure -height] 4] 
  43. [image width p1] [image height p1]
  44. } {79 83 79 83}
  45. test imgPhoto-1.2 {options for photo images} {
  46.     list [catch {image create photo p1 -file no.such.file} err] 
  47. [string tolower $err]
  48. } {1 {couldn't open "no.such.file": no such file or directory}}
  49. test imgPhoto-1.3 {options for photo images} hasTeapotPhoto {
  50.     list [catch {image create photo p1 -file $teapotPhotoFile 
  51.     -format no.such.format} err] $err
  52. } {1 {image file format "no.such.format" is not supported}}
  53. test imgPhoto-1.4 {options for photo images} hasTeapotPhoto {
  54.     image create photo p1 -file $teapotPhotoFile
  55.     list [image width p1] [image height p1]
  56. } {256 256}
  57. test imgPhoto-1.5 {options for photo images} hasTeapotPhoto {
  58.     image create photo p1 -file $teapotPhotoFile 
  59.     -format ppm -width 79 -height 83
  60.     list [image width p1] [image height p1] 
  61. [lindex [p1 configure -file] 4] [lindex [p1 configure -format] 4]
  62. } [list 79 83 $teapotPhotoFile ppm]
  63. test imgPhoto-1.6 {options for photo images} {
  64.     image create photo p1 -palette 2/2/2 -gamma 2.2
  65.     list [format %.1f [lindex [p1 configure -gamma] 4]] 
  66.     [lindex [p1 configure -palette] 4]
  67. } {2.2 2/2/2}
  68. test imgPhoto-1.7 {options for photo images} {
  69.     list [catch {image create photo p1 -file $README} err] $err
  70. } [subst {1 {couldn't recognize data in image file "$README"}}]
  71. test imgPhoto-1.8 {options for photo images} {
  72.     list [catch {image create photo -blah blah} err] $err
  73. } {1 {unknown option "-blah"}}
  74. test imgPhoto-1.9 {options for photo images - error case} {
  75.     list [catch {image create photo -format} err] $err
  76. } {1 {value for "-format" missing}}
  77. test imgPhoto-1.10 {options for photo images - error case} {
  78.     list [catch {image create photo -data} err] $err
  79. } {1 {value for "-data" missing}}
  80. test imgPhoto-1.11 {options for photo images - error case} {
  81.     list [catch {image create photo p1 -format} err] $err
  82. } {1 {value for "-format" missing}}
  83. test imgPhoto-2.1 {ImgPhotoCreate procedure} {
  84.     eval image delete [image names]
  85.     catch {image create photo -blah blah}
  86.     image names
  87. } {}
  88. test imgPhoto-2.2 {ImgPhotoCreate procedure} {
  89.     eval image delete [image names]
  90.     image create photo image1
  91.     list [info commands image1] [image names] 
  92.     [image width image1] [image height image1]
  93. } {image1 image1 0 0}
  94. # test imgPhoto-2.3 {ImgPhotoCreate procedure: creation failure} {
  95. #     image create photo p1
  96. #     image create photo p2 -width 10 -height 10
  97. #     catch {image create photo p2 -file bogus.img} msg
  98. #     p1 copy p2
  99. #     set msg
  100. # } {couldn't open "bogus.img": no such file or directory}
  101. test imgPhoto-3.1 {ImgPhotoConfigureMaster procedure} hasTeapotPhoto {
  102.     image create photo p1 -file $teapotPhotoFile
  103.     p1 configure -file $teapotPhotoFile
  104. } {}
  105. test imgPhoto-3.2 {ImgPhotoConfigureMaster procedure} hasTeapotPhoto {
  106.     image create photo p1 -file $teapotPhotoFile
  107.     list [catch {p1 configure -file bogus} err] [string tolower $err] 
  108. [image width p1] [image height p1]
  109. } {1 {couldn't open "bogus": no such file or directory} 256 256}
  110. test imgPhoto-3.3 {ImgPhotoConfigureMaster procedure} hasTeapotPhoto {
  111.     image create photo p1
  112.     .c create image 10 10 -image p1 -tags p1.1 -anchor nw
  113.     .c create image 300 10 -image p1 -tags p1.2 -anchor nw
  114.     update
  115.     p1 configure -file $teapotPhotoFile
  116.     update
  117.     list [image width p1] [image height p1] [.c bbox p1.1] [.c bbox p1.2]
  118. } {256 256 {10 10 266 266} {300 10 556 266}}
  119. eval image delete [image names]
  120. image create photo p1
  121. .c create image 10 10 -image p1
  122. update
  123. test imgPhoto-4.1 {ImgPhotoCmd procedure} {
  124.     list [catch {p1} err] $err
  125. } {1 {wrong # args: should be "p1 option ?arg arg ...?"}}
  126. test imgPhoto-4.2 {ImgPhotoCmd procedure} {
  127.     list [catch {p1 blah} err] $err
  128. } {1 {bad option "blah": must be blank, cget, configure, copy, data, get, put, read, redither, transparency, or write}}
  129. test imgPhoto-4.3 {ImgPhotoCmd procedure: blank option} {
  130.     p1 blank
  131.     list [catch {p1 blank x} err] $err
  132. } {1 {wrong # args: should be "p1 blank"}}
  133. test imgPhoto-4.4 {ImgPhotoCmd procedure: cget option} {
  134.     list [catch {p1 cget} msg] $msg
  135. } {1 {wrong # args: should be "p1 cget option"}}
  136. test imgPhoto-4.5 {ImgPhotoCmd procedure: cget option} {
  137.     image create photo p2 -width 25 -height 30
  138.     list [p2 cget -width] [p2 cget -height]
  139. } {25 30}
  140. test imgPhoto-4.6 {ImgPhotoCmd procedure: configure option} {
  141.     llength [p1 configure]
  142. } {7}
  143. test imgPhoto-4.7 {ImgPhotoCmd procedure: configure option} {
  144.     p1 conf -palette 3/4/2
  145.     p1 configure -palette
  146. } {-palette {} {} {} 3/4/2}
  147. test imgPhoto-4.8 {ImgPhotoCmd procedure: configure option} {
  148.     list [catch {p1 configure -blah} msg] $msg
  149. } {1 {unknown option "-blah"}}
  150. test imgPhoto-4.9 {ImgPhotoCmd procedure: configure option} {
  151.     list [catch {p1 configure -palette {} -gamma} msg] $msg
  152. } {1 {value for "-gamma" missing}}
  153. test imgPhoto-4.10 {ImgPhotoCmd procedure: copy option} hasTeapotPhoto {
  154.     image create photo p2 -file $teapotPhotoFile
  155.     p1 configure -width 0 -height 0 -palette {} -gamma 1
  156.     p1 copy p2
  157.     list [image width p1] [image height p1] [p1 get 100 100]
  158. } {256 256 {169 117 90}}
  159. test imgPhoto-4.11 {ImgPhotoCmd procedure: copy option} {
  160.     list [catch {p1 copy} msg] $msg
  161. } {1 {wrong # args: should be "p1 copy source-image ?-compositingrule rule? ?-from x1 y1 x2 y2? ?-to x1 y1 x2 y2? ?-zoom x y? ?-subsample x y?"}}
  162. test imgPhoto-4.12 {ImgPhotoCmd procedure: copy option} {
  163.     list [catch {p1 copy blah} msg] $msg
  164. } {1 {image "blah" doesn't exist or is not a photo image}}
  165. test imgPhoto-4.13 {ImgPhotoCmd procedure: copy option} {
  166.     list [catch {p1 copy p2 -blah} msg] $msg
  167. } {1 {unrecognized option "-blah": must be -compositingrule, -from, -shrink, -subsample, -to, or -zoom}}
  168. test imgPhoto-4.14 {ImgPhotoCmd procedure: copy option} {
  169.     list [catch {p1 copy p2 -from -to} msg] $msg
  170. } {1 {the "-from" option requires one to four integer values}}
  171. test imgPhoto-4.15 {ImgPhotoCmd procedure: copy option} {
  172.     p1 copy p2
  173.     p1 copy p2 -from 0 70 60 120 -shrink
  174.     list [image width p1] [image height p1] [p1 get 20 10]
  175. } {60 50 {215 154 120}}
  176. test imgPhoto-4.16 {ImgPhotoCmd procedure: copy option} {
  177.     p1 copy p2 -from 60 120 0 70 -to 20 50
  178.     list [image width p1] [image height p1] [p1 get 40 80]
  179. } {80 100 {19 92 192}}
  180. test imgPhoto-4.17 {ImgPhotoCmd procedure: copy option} {
  181.     p1 copy p2 -from 0 120 60 70 -to 0 0 100 100
  182.     list [image width p1] [image height p1] [p1 get 80 60]
  183. } {100 100 {215 154 120}}
  184. test imgPhoto-4.18 {ImgPhotoCmd procedure: copy option} {
  185.     p1 copy p2 -from 60 70 0 120 -zoom 2
  186.     list [image width p1] [image height p1] [p1 get 100 50]
  187. } {120 100 {169 99 47}}
  188. test imgPhoto-4.19 {ImgPhotoCmd procedure: copy option} {
  189.     p1 copy p2 -from 0 70 60 120
  190.     list [image width p1] [image height p1] [p1 get 100 50]
  191. } {120 100 {169 99 47}}
  192. test imgPhoto-4.20 {ImgPhotoCmd procedure: copy option} {
  193.     p1 copy p2 -from 20 20 200 180 -subsample 2 -shrink
  194.     list [image width p1] [image height p1] [p1 get 50 30]
  195. } {90 80 {207 146 112}}
  196. test imgPhoto-4.21 {ImgPhotoCmd procedure: copy option} {
  197.     p1 copy p2
  198.     set result [list [image width p1] [image height p1]]
  199.     p1 conf -width 49 -height 51
  200.     lappend result [image width p1] [image height p1]
  201.     p1 copy p2
  202.     lappend result [image width p1] [image height p1]
  203.     p1 copy p2 -from 0 0 10 10 -shrink
  204.     lappend result [image width p1] [image height p1]
  205.     p1 conf -width 0
  206.     p1 copy p2 -from 0 0 10 10 -shrink
  207.     lappend result [image width p1] [image height p1]
  208.     p1 conf -height 0
  209.     p1 copy p2 -from 0 0 10 10 -shrink
  210.     lappend result [image width p1] [image height p1]
  211. } {256 256 49 51 49 51 49 51 10 51 10 10}
  212. test imgPhoto-4.22 {ImgPhotoCmd procedure: get option} hasTeapotPhoto {
  213.     p1 read $teapotPhotoFile
  214.     list [p1 get 100 100] [p1 get 150 100] [p1 get 100 150]
  215. } {{169 117 90} {172 115 84} {35 35 35}}
  216. test imgPhoto-4.23 {ImgPhotoCmd procedure: get option} {
  217.     list [catch {p1 get 256 0} err] $err
  218. } {1 {p1 get: coordinates out of range}}
  219. test imgPhoto-4.24 {ImgPhotoCmd procedure: get option} {
  220.     list [catch {p1 get 0 -1} err] $err
  221. } {1 {p1 get: coordinates out of range}}
  222. test imgPhoto-4.25 {ImgPhotoCmd procedure: get option} {
  223.     list [catch {p1 get} err] $err
  224. } {1 {wrong # args: should be "p1 get x y"}}
  225. test imgPhoto-4.26 {ImgPhotoCmd procedure: put option} {
  226.     list [catch {p1 put} err] $err
  227. } {1 {wrong # args: should be "p1 put data ?options?"}}
  228. test imgPhoto-4.27 {ImgPhotoCmd procedure: put option} {
  229.     list [catch {p1 put {{white} {white white}}} err] $err
  230. } {1 {all elements of color list must have the same number of elements}}
  231. test imgPhoto-4.28 {ImgPhotoCmd procedure: put option} {
  232.     list [catch {p1 put {{blahgle}}} err] $err
  233. } {1 {can't parse color "blahgle"}}
  234. test imgPhoto-4.29 {ImgPhotoCmd procedure: put option} {
  235.     p1 put -to 10 10 20 20 {{white}}
  236.     p1 get 19 19
  237. } {255 255 255}
  238. test imgPhoto-4.30 {ImgPhotoCmd procedure: read option} {
  239.     list [catch {p1 read} err] $err
  240. } {1 {wrong # args: should be "p1 read fileName ?options?"}}
  241. test imgPhoto-4.31 {ImgPhotoCmd procedure: read option} hasTeapotPhoto {
  242.     list [catch {p1 read $teapotPhotoFile -zoom 2} err] $err
  243. } {1 {unrecognized option "-zoom": must be -format, -from, -shrink, or -to}}
  244. test imgPhoto-4.32 {ImgPhotoCmd procedure: read option} {
  245.     list [catch {p1 read bogus} err] [string tolower $err]
  246. } {1 {couldn't open "bogus": no such file or directory}}
  247. test imgPhoto-4.33 {ImgPhotoCmd procedure: read option} hasTeapotPhoto {
  248.     list [catch {p1 read $teapotPhotoFile -format bogus} err] $err
  249. } {1 {image file format "bogus" is not supported}}
  250. test imgPhoto-4.34 {ImgPhotoCmd procedure: read option} {
  251.     list [catch {p1 read $README} err] $err
  252. } [subst {1 {couldn't recognize data in image file "$README"}}]
  253. test imgPhoto-4.35 {ImgPhotoCmd procedure: read option} hasTeapotPhoto {
  254.     p1 read $teapotPhotoFile
  255.     list [image width p1] [image height p1] [p1 get 120 120]
  256. } {256 256 {161 109 82}}
  257. test imgPhoto-4.36 {ImgPhotoCmd procedure: read option} hasTeapotPhoto {
  258.     p1 read $teapotPhotoFile -from 0 70 60 120 -to 10 10 -shrink
  259.     list [image width p1] [image height p1] [p1 get 29 19]
  260. } {70 60 {244 180 144}}
  261. test imgPhoto-4.37 {ImgPhotoCmd procedure: redither option} {
  262.     p1 redither
  263.     list [catch {p1 redither x} err] $err
  264. } {1 {wrong # args: should be "p1 redither"}}
  265. test imgPhoto-4.38 {ImgPhotoCmd procedure: write option} {
  266.     list [catch {p1 write} err] $err
  267. } {1 {wrong # args: should be "p1 write fileName ?options?"}}
  268. test imgPhoto-4.39 {ImgPhotoCmd procedure: write option} {
  269.     list [catch {p1 write teapot.tmp -format bogus} err] $err
  270. } {1 {image file format "bogus" is unknown}}
  271. eval image delete [image names]
  272. image create photo p1
  273. test imgPhoto-4.40 {ImgPhotoCmd procedure: transparency option} {
  274.     list [catch {p1 transparency} err] $err
  275. } {1 {wrong # args: should be "p1 transparency option ?arg arg ...?"}}
  276. test imgPhoto-4.41 {ImgPhotoCmd procedure: transparency get option} {
  277.     list [catch {p1 transparency get} err] $err
  278. } {1 {wrong # args: should be "p1 transparency get x y"}}
  279. test imgPhoto-4.42 {ImgPhotoCmd procedure: transparency get option} {
  280.     list [catch {p1 transparency get 0} err] $err
  281. } {1 {wrong # args: should be "p1 transparency get x y"}}
  282. test imgPhoto-4.43 {ImgPhotoCmd procedure: transparency get option} {
  283.     list [catch {p1 transparency get 0 0 0} err] $err
  284. } {1 {wrong # args: should be "p1 transparency get x y"}}
  285. test imgPhoto-4.44 {ImgPhotoCmd procedure: transparency get option} {
  286.     list [catch {p1 transparency get bogus 0} err] $err
  287. } {1 {expected integer but got "bogus"}}
  288. test imgPhoto-4.45 {ImgPhotoCmd procedure: transparency get option} {
  289.     list [catch {p1 transparency get 0 bogus} err] $err
  290. } {1 {expected integer but got "bogus"}}
  291. test imgPhoto-4.46 {ImgPhotoCmd procedure: transparency get option} {
  292.     p1 put white
  293.     p1 transparency get 0 0
  294. } 0
  295. test imgPhoto-4.47 {ImgPhotoCmd procedure: transparency get option} {
  296.     list [catch {p1 transparency get 1 0} err] $err
  297. } {1 {p1 transparency get: coordinates out of range}}
  298. test imgPhoto-4.48 {ImgPhotoCmd procedure: transparency get option} {
  299.     list [catch {p1 transparency get -1 0} err] $err
  300. } {1 {p1 transparency get: coordinates out of range}}
  301. test imgPhoto-4.49 {ImgPhotoCmd procedure: transparency get option} {
  302.     list [catch {p1 transparency get 0 1} err] $err
  303. } {1 {p1 transparency get: coordinates out of range}}
  304. test imgPhoto-4.50 {ImgPhotoCmd procedure: transparency get option} {
  305.     list [catch {p1 transparency get 0 -1} err] $err
  306. } {1 {p1 transparency get: coordinates out of range}}
  307. test imgPhoto-4.51 {ImgPhotoCmd procedure: transparency get option} {
  308.     p1 blank
  309.     p1 transparency get 0 0
  310. } 1
  311. test imgPhoto-4.52 {ImgPhotoCmd procedure: transparency set option} {
  312.     list [catch {p1 transparency set} err] $err
  313. } {1 {wrong # args: should be "p1 transparency set x y boolean"}}
  314. test imgPhoto-4.53 {ImgPhotoCmd procedure: transparency set option} {
  315.     list [catch {p1 transparency set 0} err] $err
  316. } {1 {wrong # args: should be "p1 transparency set x y boolean"}}
  317. test imgPhoto-4.54 {ImgPhotoCmd procedure: transparency set option} {
  318.     list [catch {p1 transparency set 0 0} err] $err
  319. } {1 {wrong # args: should be "p1 transparency set x y boolean"}}
  320. test imgPhoto-4.55 {ImgPhotoCmd procedure: transparency set option} {
  321.     list [catch {p1 transparency set 0 0 0 0} err] $err
  322. } {1 {wrong # args: should be "p1 transparency set x y boolean"}}
  323. test imgPhoto-4.56 {ImgPhotoCmd procedure: transparency set option} {
  324.     list [catch {p1 transparency set bogus 0 0} err] $err
  325. } {1 {expected integer but got "bogus"}}
  326. test imgPhoto-4.57 {ImgPhotoCmd procedure: transparency set option} {
  327.     list [catch {p1 transparency set 0 bogus 0} err] $err
  328. } {1 {expected integer but got "bogus"}}
  329. test imgPhoto-4.58 {ImgPhotoCmd procedure: transparency set option} {
  330.     list [catch {p1 transparency set 0 0 bogus} err] $err
  331. } {1 {expected boolean value but got "bogus"}}
  332. test imgPhoto-4.59 {ImgPhotoCmd procedure: transparency set option} {
  333.     list [catch {p1 transparency set 1 0 0} err] $err
  334. } {1 {p1 transparency set: coordinates out of range}}
  335. test imgPhoto-4.60 {ImgPhotoCmd procedure: transparency set option} {
  336.     list [catch {p1 transparency set -1 0 0} err] $err
  337. } {1 {p1 transparency set: coordinates out of range}}
  338. test imgPhoto-4.61 {ImgPhotoCmd procedure: transparency set option} {
  339.     list [catch {p1 transparency set 0 1 0} err] $err
  340. } {1 {p1 transparency set: coordinates out of range}}
  341. test imgPhoto-4.62 {ImgPhotoCmd procedure: transparency set option} {
  342.     list [catch {p1 transparency set 0 -1 0} err] $err
  343. } {1 {p1 transparency set: coordinates out of range}}
  344. test imgPhoto-4.63 {ImgPhotoCmd procedure: transparency set option} {
  345.     p1 transparency set 0 0 false
  346.     p1 transparency get 0 0
  347. } 0
  348. test imgPhoto-4.64 {ImgPhotoCmd procedure: transparency set option} {
  349.     p1 transparency set 0 0 true
  350.     p1 transparency get 0 0
  351. } 1
  352. # Now for some heftier testing, checking that setting and resetting of
  353. # pixels' transparency status doesn't "leak" with any one-off errors.
  354. proc checkImgTrans {img width height} {
  355.     set result {}
  356.     for {set x 0} {$x<$width} {incr x} {
  357. for {set y 0} {$y<$height} {incr y} {
  358.     if {[$img transparency get $x $y]} {
  359. lappend result $x $y
  360.     }
  361. }
  362.     }
  363.     return $result
  364. }
  365. test imgPhoto-4.65 {ImgPhotoCmd procedure: transparency get option} {
  366.     p1 put white -to 0 0 3 3
  367.     checkImgTrans p1 3 3
  368. } {}
  369. test imgPhoto-4.66 {ImgPhotoCmd procedure: transparency get option} {
  370.     p1 blank
  371.     checkImgTrans p1 3 3
  372. } {0 0 0 1 0 2 1 0 1 1 1 2 2 0 2 1 2 2}
  373. proc checkImgTransLoopSetReset {img width height} {
  374.     set result {}
  375.     for {set x 0} {$x<$width} {incr x} {
  376. for {set y 0} {$y<$height} {incr y} {
  377.     $img put white -to 0 0 3 3
  378.     $img transparency set $x $y 1
  379.     set result [concat $result [checkImgTrans $img $width $height]]
  380.     lappend result ,
  381.     $img transparency set $x $y 0
  382.     set result [concat $result [checkImgTrans $img $width $height]]
  383.     lappend result .
  384. }
  385.     }
  386.     return $result
  387. }
  388. test imgPhoto-4.67 {ImgPhotoCmd procedure: transparency set option} {
  389.     checkImgTransLoopSetReset p1 3 3
  390. } {0 0 , . 0 1 , . 0 2 , . 1 0 , . 1 1 , . 1 2 , . 2 0 , . 2 1 , . 2 2 , .}
  391. proc checkImgTransLoopResetSet {img width height} {
  392.     set result {}
  393.     for {set x 0} {$x<$width} {incr x} {
  394. for {set y 0} {$y<$height} {incr y} {
  395.     $img blank
  396.     $img transparency set $x $y 0
  397.     set result [concat $result [checkImgTrans $img $width $height]]
  398.     lappend result ,
  399.     $img transparency set $x $y 1
  400.     set result [concat $result [checkImgTrans $img $width $height]]
  401.     lappend result .
  402. }
  403.     }
  404.     return $result
  405. }
  406. test imgPhoto-4.68 {ImgPhotoCmd procedure: transparency set option} {
  407.     checkImgTransLoopResetSet p1 3 3
  408. } {0 1 0 2 1 0 1 1 1 2 2 0 2 1 2 2 , 0 0 0 1 0 2 1 0 1 1 1 2 2 0 2 1 2 2 . 0 0 0 2 1 0 1 1 1 2 2 0 2 1 2 2 , 0 0 0 1 0 2 1 0 1 1 1 2 2 0 2 1 2 2 . 0 0 0 1 1 0 1 1 1 2 2 0 2 1 2 2 , 0 0 0 1 0 2 1 0 1 1 1 2 2 0 2 1 2 2 . 0 0 0 1 0 2 1 1 1 2 2 0 2 1 2 2 , 0 0 0 1 0 2 1 0 1 1 1 2 2 0 2 1 2 2 . 0 0 0 1 0 2 1 0 1 2 2 0 2 1 2 2 , 0 0 0 1 0 2 1 0 1 1 1 2 2 0 2 1 2 2 . 0 0 0 1 0 2 1 0 1 1 2 0 2 1 2 2 , 0 0 0 1 0 2 1 0 1 1 1 2 2 0 2 1 2 2 . 0 0 0 1 0 2 1 0 1 1 1 2 2 1 2 2 , 0 0 0 1 0 2 1 0 1 1 1 2 2 0 2 1 2 2 . 0 0 0 1 0 2 1 0 1 1 1 2 2 0 2 2 , 0 0 0 1 0 2 1 0 1 1 1 2 2 0 2 1 2 2 . 0 0 0 1 0 2 1 0 1 1 1 2 2 0 2 1 , 0 0 0 1 0 2 1 0 1 1 1 2 2 0 2 1 2 2 .}
  409. catch {rename checkImgTransLoopSetReset {}}
  410. catch {rename checkImgTransLoopResetSet {}}
  411. # Test the compositing rules for copying images
  412. image create photo p1 -width 3 -height 3
  413. image create photo p2 -width 2 -height 2
  414. test imgPhoto-4.68 {ImgPhotoCmd procedure: copy with -compositingrule} {
  415.     list [catch {p1 copy p2 -to 1 1 -compositingrule} msg] $msg
  416. } {1 {the "-compositingrule" option requires a value}}
  417. test imgPhoto-4.69 {ImgPhotoCmd procedure: copy with -compositingrule} {
  418.     list [catch {p1 copy p2 -to 1 1 -compositingrule BAD} msg] $msg
  419. } {1 {bad compositing rule "BAD": must be overlay or set}}
  420. test imgPhoto-4.70 {ImgPhotoCmd procedure: copy with -compositingrule} {
  421.     # Tests default compositing rule
  422.     p1 blank
  423.     p2 blank
  424.     p1 put white -to 0 0 2 2
  425.     p2 put white -to 0 0 2 2
  426.     p2 transparency set 0 0 true
  427.     p1 copy p2 -to 1 1
  428.     checkImgTrans p1 3 3
  429. } {0 2 2 0}
  430. test imgPhoto-4.71 {ImgPhotoCmd procedure: copy with -compositingrule} {
  431.     p1 blank
  432.     p2 blank
  433.     p1 put white -to 0 0 2 2
  434.     p2 put white -to 0 0 2 2
  435.     p2 transparency set 0 0 true
  436.     p1 copy p2 -to 1 1 -compositingrule overlay
  437.     checkImgTrans p1 3 3
  438. } {0 2 2 0}
  439. test imgPhoto-4.72 {ImgPhotoCmd procedure: copy with -compositingrule} {
  440.     p1 blank
  441.     p2 blank
  442.     p1 put white -to 0 0 2 2
  443.     p2 put white -to 0 0 2 2
  444.     p2 transparency set 0 0 true
  445.     p1 copy p2 -to 1 1 -compositingrule set
  446.     checkImgTrans p1 3 3
  447. } {0 2 1 1 2 0}
  448. catch {rename checkImgTrans {}}
  449. test imgPhoto-5.1 {ImgPhotoGet/Free procedures, shared instances} hasTeapotPhoto {
  450.     eval image delete [image names]
  451.     .c delete all
  452.     image create photo p1 -file $teapotPhotoFile
  453.     .c create image 0 0 -image p1 -tags p1.1
  454.     .c create image 256 0 -image p1 -tags p1.2
  455.     .c create image 0 256 -image p1 -tags p1.3
  456.     update
  457.     .c delete i1.1
  458.     p1 configure -width 1
  459.     update
  460.     .c delete i1.2
  461.     p1 configure -height 1
  462.     update
  463.     image delete p1
  464. } {}
  465. test imgPhoto-6.1 {ImgPhotoDisplay procedure, blank display} {
  466.     .c delete all
  467.     image create photo p1 -width 10 -height 10
  468.     p1 blank
  469.     .c create image 10 10 -image p1
  470.     update
  471. } {}
  472. test imgPhoto-7.1 {ImgPhotoFree procedure, resource freeing} hasTeapotPhoto {
  473.     eval image delete [image names]
  474.     .c delete all
  475.     image create photo p1 -file $teapotPhotoFile
  476.     .c create image 0 0 -image p1 -anchor nw
  477.     update
  478.     .c delete all
  479.     image delete p1
  480. } {}
  481. test imgPhoto-7.2 {ImgPhotoFree procedures, unlinking} hasTeapotPhoto {
  482.     image create photo p1 -file $teapotPhotoFile
  483.     .c create image 10 10 -image p1 -anchor nw
  484.     button .b1 -image p1
  485.     button .b2 -image p1
  486.     button .b3 -image p1
  487.     pack .b1 .b2 .b3
  488.     update
  489.     destroy .b2
  490.     update
  491.     destroy .b3
  492.     update
  493.     destroy .b1
  494.     update
  495.     .c delete all
  496. } {}
  497. test imgPhoto-7.3 {ImgPhotoFree procedures, multiple visuals} hasTeapotPhoto {
  498.     image create photo p1 -file $teapotPhotoFile
  499.     button .b1 -image p1
  500.     frame .f -visual best
  501.     button .f.b2 -image p1
  502.     pack .f.b2
  503.     pack .b1 .f
  504.     update
  505.     destroy .b1
  506.     update
  507.     .f.b2 configure -image {}
  508.     update
  509.     destroy .f
  510.     image delete p1
  511. } {}
  512. test imgPhoto-8.1 {ImgPhotoDelete procedure} hasTeapotPhoto {
  513.     image create photo p2 -file $teapotPhotoFile
  514.     image delete p2
  515. } {}
  516. test imagePhoto-8.2 {ImgPhotoDelete procedure} hasTeapotPhoto {
  517.     image create photo p2 -file $teapotPhotoFile
  518.     rename p2 newp2
  519.     set x [list [info command p2] [info command new*] [newp2 cget -file]]
  520.     image delete p2
  521.     append x [info command new*]
  522. } [list {} newp2 $teapotPhotoFile]
  523. test imagePhoto-8.3 {ImgPhotoDelete procedure, name cleanup} {
  524.     image create photo p1
  525.     image create photo p2 -width 10 -height 10
  526.     image delete p2
  527.     list [catch {p1 copy p2} msg] $msg
  528. } {1 {image "p2" doesn't exist or is not a photo image}}
  529. test imagePhoto-9.1 {ImgPhotoCmdDeletedProc procedure} hasTeapotPhoto {
  530.     image create photo p2 -file $teapotPhotoFile
  531.     rename p2 {}
  532.     list [lsearch -exact [image names] p2] [catch {p2 foo} msg] $msg
  533. } {-1 1 {invalid command name "p2"}}
  534. test imgPhoto-10.1 {Tk_ImgPhotoPutBlock procedure} {
  535.     eval image delete [image names]
  536.     image create photo p1
  537.     p1 put {{#ff0000 #ff0000 #ff0000 #ff0000 #ff0000 #ff0000 #ff0000 #ff0000}} -to 0 0
  538.     p1 put {{#00ff00 #00ff00}} -to 2 0
  539.     list [p1 get 2 0] [p1 get 3 0] [p1 get 4 0]
  540. } {{0 255 0} {0 255 0} {255 0 0}}
  541. test imgPhoto-11.1 {Tk_FindPhoto} {
  542.     eval image delete [image names]
  543.     image create bitmap i1
  544.     image create photo p1
  545.     list [catch {p1 copy i1} msg] $msg
  546. } {1 {image "i1" doesn't exist or is not a photo image}}
  547. test imgPhoto-12.1 {Tk_PhotoPutZoomedBlock} hasTeapotPhoto {
  548.     image create photo p3 -file $teapotPhotoFile
  549.     set result [list [p3 get 50 50] [p3 get 100 100]]
  550.     p3 copy p3 -zoom 2
  551.     lappend result [image width p3] [image height p3] [p3 get 100 100]
  552.     image delete p3
  553.     set result
  554. } {{19 92 192} {169 117 90} 512 512 {19 92 192}}
  555. test imgPhoto-13.1 {check separation of images in different interpreters} {
  556.     eval image delete [image names]
  557.     set data {
  558. R0lGODlhQgBkAPUAANbWxs7Wxs7OxsbOxsbGxsbGvb3Gvca9vcDAwL21vbW1vbW1tbWtta2t
  559. ta2ltaWltaWlraWctaWcrZycrZyUrZSUrZSMrZSMpYyMrYyMpYyEpYSEpYR7pYR7nHp7pYRz
  560. pYRynHtzpXtznHtrnHNrnHNjnGtjnGtjlGtalGNalGNSlGNSjFpSlFpKlFpKjFJKjFJCjFI5
  561. jEo5jEo5hEoxhEIxhDkphDkhhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAQgBkAAAG
  562. /kCEcEgsGo/IpHLJbDqf0Kh0Sq1ar9isdsvter/gsHhMLpvP6LR6zW673/C4fE6v2+/4vH7P
  563. 7/v/gIGCg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmOBZxXnAQEnKIIBUQJCguoDKkIBgWhpUev
  564. CA4TDwgEUpwKERUaHCIiJCQjIiEUQhwqKiwqLjDQMCwoIha3oUO5ESMuLSwtLSIMsU4Tzi4o
  565. JBwWFA8ODQoMCkIMq6sNDQ4UFhwlzC4qSGhgkMvCsAoM6E0oAWMCOSUFGrgQcauAgAACSqGa
  566. l6SAK1EaJXBA0SIDBw0KBiCg8EtEBgEWYCxoooAigFwIJGgQYQIF/goTAjk6sXhxAwwFnHRO
  567. mEmAwoQAIUo8lCWhRgoOElJVkJBQFCwhCRqkYlUE1QMKHEywoBCrQaeIMCgQeOCi3AkYMmRI
  568. S5EuxEkN7OApkGDhF4fDxoSVMAFUBAWkRxI0a+XghVAkBSqMsFCBwj4OI0igSKGCdLN0wYKd
  569. zGDBwUYhn6YOKUCioQECGk7INpIArQgUKkr87TyhAYIDQxQgLkYsRIcQIDjcgi2Lw8RYKaAz
  570. MXCgAs8UJrZGmOA5AkeQBlqRKsIpvYMQDx4S4NCCxIJSKJpFYMIgnPlSF2ygAQWuCUHAAp6x
  571. E4EEE5BXQQUWYLABBySoAIMLHBSBWwso/jxwIAoyzMAWEw3AEEJCt6nUwAQagCDCYcCQwJcK
  572. 6QD3DDQxwNDCCSg9NIAGKpwwgQAOtDADDBbsdkQDIPhkwosDPgDPAg1EAME++1jTnhAKdAnb
  573. VAR04EIJFAhwwQs0sBDfE7cZwEAE++yU2joOtDcKE7GUcoIKH6RSmwwnQCZFKAo8cE2es7my
  574. HnuxKTDgAA6owEEBjoL3wqRUNDBCCnyRYMFMRSDoWYPvyBPPA738lt1KKTxgpjolrDDiFAWU
  575. cAMKE+CipAMRZMDTCSSUQMIJPQHLwWOcrDKBCBpokAIJgmYqQgosxIAOCS8iJEQD7HR2QbMh
  576. WCCEK7Ck90Cz/oAFu+YVigpTwTsLyJOcBJ6N6plxRihA3E4cOKTkFCU6FMoAA7wiygAZgURA
  577. ekYsEJYFGTSATRccQEMjti8eZsEFFuA7z2WkEJAAl7iEQekEhQHGzgQR4INUKLB8pYAFJaQA
  578. KhleKdwAByEkFswHIoxQQn4AcYBvGRosisDICCjQAIMJGnZYBsUd4JEZBIhQwgPzKFwAwggL
  579. IHbOQzCtxZ1NL0BlKmmhIOwwHGTg2YMUEBdtKzBfbQWlhMHoHIXBnvABBGE9UMKNMKhgQgnG
  580. nNQO0wVQoI4FEohFyr9GzDIYaaPxxWy0rCjKQJUMQvxBaMOgNMQChcU4DAkZ6PoV/hIUoP4i
  581. Z7g/YHZHIPXeyWyONgsaCi4AOoLjXP8uhAAvPpCQ2Akr38UpXW60Ij8yPkMmwwj8KAI8QWtQ
  582. +eXSixEb37WhcHQBERz2rdZ8leCBBcXNY3XevQ8VG/6+F5CACDYgATlmYYD27aRmLngBNADC
  583. GGxxQEAWUJDzqpcctc2DARN4kNRgtJxhnKAFV0kIEhYAJ34IQwUhqkENYFCCE5BmGf9wwWmA
  584. 5UGgXAAVtfCFMIgRLMbFLQIPYFACcMI7TjQoH2eJQIs2poEMYMAp5XGAvFrBCYS9ImzQG1vT
  585. arGTEQhIhE7QjLA+MKDOxClGwuoJtWi0uBIUIxjDSE2wQ4iHl7ywQDjGwZws/NcAlgBjaKQJ
  586. JDVuoQBeUeACoFkMcFqgQL1IgxpRSsjsqHA/gy0tHvmAx2z2BxIupaJrnVxCEAAAOw==
  587.     }
  588.     interp create x1
  589.     interp create x2
  590.     x1 eval {load {} Tk}
  591.     x2 eval {load {} Tk}
  592.     x1 eval [list image create photo T1_data -data $data]
  593.     x2 eval [list image create photo T1_data -data $data]
  594.     unset data
  595.     interp delete x1
  596.     interp delete x2
  597. } {}
  598. test imgPhoto-14.1 {GIF writes work correctly} {
  599.     set data "R0lGODlhYwA5APcAAAAAAIAAAACAAICAAAAAgIAAgACAgICAgAysnGy8hKzM
  600. hASs3MTcjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  601. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  602. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  603. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  604. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  605. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  606. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  607. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  608. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  609. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  610. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  611. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  612. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  613. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  614. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  615. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwP8AAAD/
  616. AP//AAAA//8A/wD//////ywAAAAAYwA5AAAI/wAZCBxIsKDBgwgTKlzIsKHD
  617. hxAjSpxIsaLFixgzatzIsaPHjyBDihxJsqTJkyhTqlzJsqXLlzBjypxJs6bN
  618. mzhz6tzJs6fPn0CDCh1KtKhRiwoSKEXAtGlTpUqPGkyagOmCq1edNsWalWkC
  619. BUSXIuDqFepBqFWtZv3KU+zYrkrBSqT6dgECtjOTbu16NwFHvV3lshRLti/J
  620. qlgRCE6ZuO9ik4Dt+k0ZVyZiyVIvXr77ODPEy5g9T4zMWfTEzXdNz1VbWvXn
  621. uqldP1TAOrbshqBb314Y2W7n3Qdpv7UNPCHpycUVbv6dnODy5sqzQldIe8H0
  622. hciva9/Ovbv37+BzBgEEADs=
  623. "
  624.     set photo [image create photo -data $data]
  625.     set filename [makeFile {} imgPhoto-14.1.gif]
  626.     removeFile imgPhoto-14.1.gif
  627.     $photo write $filename -format gif
  628.     set photo2 [image create photo -file $filename]
  629.     set result [string equal [$photo data] [$photo2 data]]
  630.     image delete $photo $photo2
  631.     catch {file delete -force $filename}
  632.     set result
  633. } 1
  634. test imgPhoto-14.2 {GIF -index handler buffer sizing} -setup {
  635.     set i [image create photo]
  636. } -body {
  637.     # Bug 1458234 makes this crash when trying to access buffers of the
  638.     # wrong size, caused when the initial frame is not the largest frame.
  639.     set data {
  640.         R0lGODlhIAAgAKEAAPkOSQsi7////////yH/C05FVFNDQVBFMi4wAwEAAAAh
  641.         +QQJMgAAACwGAAYAFAAUAAACEYyPqcvtD6OctNqLs968+68VACH5BAkyAAEA
  642.         LAMAAwAaABoAAAI0jH+gq+gfmFzQzUsr3gBybn1gIm5kaUaoubbuC8fyTNel
  643.         Ohv1CSO533u8KrgbUfc5Ci/EAgA7
  644.     }
  645.     $i configure -data $data -format {gif -index 2}
  646. } -cleanup {
  647.     image delete $i
  648. } -returnCodes error -result {no image data for this index}
  649. test imgPhoto-14.3 {GIF -index interleaving and small frames} -setup {
  650.     set i [image create photo]
  651. } -body {
  652.     # Interleaved GIFs used to crash us when a smaller subsequent frame
  653.     # was accessed.
  654.     $i configure -format {GIF -index 1} -data {
  655. R0lGODdhAQAFAPAAAP8AAAAAACwAAAAAAQAFAEACAoRdACwAAAAAAQAEAEACAoRRADs=
  656.     }
  657. } -cleanup {
  658.     image delete $i
  659. }
  660. test imgPhoto-14.4 {GIF buffer overflow} -setup {
  661.     set i [image create photo]
  662. } -body {
  663.     # This crashes Tk up to 8.4.17 and 8.5.0
  664.     $i configure -data {
  665. R0lGODlhCgAKAPcAAAAAAIAAAACAAICAAAAAgIAAgACAgICAgMDAwP8AAAD/
  666. AP//AAAA//8A/wD//////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  667. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  668. AAAAMwAAZgAAmQAAzAAA/wAzAAAzMwAzZgAzmQAzzAAz/wBmAABmMwBmZgBm
  669. mQBmzABm/wCZAACZMwCZZgCZmQCZzACZ/wDMAADMMwDMZgDMmQDMzADM/wD/
  670. AAD/MwD/ZgD/mQD/zAD//zMAADMAMzMAZjMAmTMAzDMA/zMzADMzMzMzZjMz
  671. mTMzzDMz/zNmADNmMzNmZjNmmTNmzDNm/zOZADOZMzOZZjOZmTOZzDOZ/zPM
  672. ADPMMzPMZjPMmTPMzDPM/zP/ADP/MzP/ZjP/mTP/zDP//2YAAGYAM2YAZmYA
  673. mWYAzGYA/2YzAGYzM2YzZmYzmWYzzGYz/2ZmAGZmM2ZmZmZmmWZmzGZm/2aZ
  674. AGaZM2aZZmaZmWaZzGaZ/2bMAGbMM2bMZmbMmWbMzGbM/2b/AGb/M2b/Zmb/
  675. mWb/zGb//5kAAJkAM5kAZpkAmZkAzJkA/5kzAJkzM5kzZpkzmZkzzJkz/5lm
  676. AJlmM5lmZplmmZlmzJlm/5mZAJmZM5mZZpmZmZmZzJmZ/5nMAJnMM5nMZpnM
  677. mZnMzJnM/5n/AJn/M5n/Zpn/mZn/zJn//8wAAMwAM8wAZswAmcwAzMwA/8wz
  678. AMwzM8wzZswzmcwzzMwz/8xmAMxmM8xmZsxmmcxmzMxm/8yZAMyZM8yZZsyZ
  679. mcyZzMyZ/8zMAMzMM8zMZszMmczMzMzM/8z/AMz/M8z/Zsz/mcz/zMz///8A
  680. AP8AM/8AZv8Amf8AzP8A//8zAP8zM/8zZv8zmf8zzP8z//9mAP9mM/9mZv9m
  681. mf9mzP9m//+ZAP+ZM/+ZZv+Zmf+ZzP+Z///MAP/MM//MZv/Mmf/MzP/M////
  682. AP//M///Zv//mf//zP///yH5BAEAABAALAAAAAAKAAoAABUSAAD/HEiwoMGD
  683. CBMqXMiwYcKAADs=
  684.     } 
  685. } -cleanup {
  686.     image delete $i
  687. } -returnCodes error -result {malformed image}
  688. test imgPhoto-15.1 {photo images can fail to allocate memory gracefully} 
  689. {nonPortable} {
  690.     # This is not portable to very large machines with more around
  691.     # 3GB of free memory available...
  692.     list [catch {image create photo -width 32000 -height 32000} msg] $msg
  693. } {1 {not enough free memory for image buffer}}
  694. test imgPhoto-16.1 {copying to self doesn't access freed memory} {
  695.     # Bug 877950 makes this crash when trying to copy out of a deallocated area
  696.     set i [image create photo]
  697.     $i put red -to 0 0 1000 1000
  698.     $i copy $i -from 0 0 1000 1000 -to 500 0
  699.     image delete $i
  700. } {}
  701. destroy .c
  702. eval image delete [image names]
  703. # cleanup
  704. removeFile README-imgPhoto
  705. ::tcltest::cleanupTests
  706. return