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

通讯编程

开发平台:

Visual C++

  1. # This file is a Tcl script to test out the procedures in the file
  2. # tkColor.c.  It is organized in the standard fashion for Tcl tests.
  3. #
  4. # Copyright (c) 1995-1998 Sun Microsystems, Inc.
  5. # Copyright (c) 1998-1999 by Scriptics Corporation.
  6. # All rights reserved.
  7. #
  8. # RCS: @(#) $Id: color.test,v 1.6 2002/07/14 05:48:46 dgp Exp $
  9. package require tcltest 2.1
  10. namespace import -force tcltest::configure
  11. namespace import -force tcltest::testsDirectory
  12. configure -testdir [file join [pwd] [file dirname [info script]]]
  13. configure -loadfile [file join [testsDirectory] constraints.tcl]
  14. tcltest::loadTestedCommands
  15. testConstraint testcolor [llength [info commands testcolor]]
  16. # cname --
  17. # Returns a proper name for a color, given its intensities.
  18. #
  19. # Arguments:
  20. # r, g, b - Intensities on a 0-255 scale.
  21. proc cname {r g b} {
  22.     format #%02x%02x%02x $r $g $b
  23. }
  24. proc cname4 {r g b} {
  25.     format #%04x%04x%04x $r $g $b
  26. }
  27. # mkColors --
  28. # Creates a canvas and fills it with a 2-D array of squares, each of a
  29. # different color.
  30. #
  31. # Arguments:
  32. # c - Name of canvas window to create.
  33. # width - Number of squares in each row.
  34. # height - Number of squares in each column.
  35. # r, g, b - Initial value for red, green, and blue intensities.
  36. # rx, gx, bx - Change in intensities between adjacent elements in row.
  37. # ry, gy, by - Change in intensities between adjacent elements in column.
  38. proc mkColors {c width height r g b rx gx bx ry gy by} {
  39.     catch {destroy $c}
  40.     canvas $c -width 400 -height 200 -bd 0
  41.     for {set y 0} {$y < $height} {incr y} {
  42. for {set x 0} {$x < $width} {incr x} {
  43.     set color [format #%02x%02x%02x [expr $r + $y*$ry + $x*$rx] 
  44.     [expr $g + $y*$gy + $x*$gx] [expr $b + $y*$by + $x*$bx]]
  45.     $c create rectangle [expr 10*$x] [expr 20*$y] 
  46.     [expr 10*$x + 10] [expr 20*$y + 20] -outline {} 
  47.     -fill $color
  48. }
  49.     }
  50. }
  51. # closest -
  52. # Given intensities between 0 and 255, return the closest intensities
  53. # that the server can provide.
  54. #
  55. # Arguments:
  56. # w - Window in which to lookup color
  57. # r, g, b - Desired intensities, between 0 and 255.
  58. proc closest {w r g b} {
  59.     set vals [winfo rgb $w [cname $r $g $b]]
  60.     list [expr [lindex $vals 0]/256] [expr [lindex $vals 1]/256] 
  61.     [expr [lindex $vals 2]/256]
  62. }
  63. # c255  -
  64. # Given a list of red, green, and blue intensities, scale them
  65. # down to a 0-255 range.
  66. #
  67. # Arguments:
  68. # vals - List of intensities.
  69. proc c255 {vals} {
  70.     list [expr [lindex $vals 0]/256] [expr [lindex $vals 1]/256] 
  71.     [expr [lindex $vals 2]/256]
  72. }
  73. # colorsFree --
  74. #
  75. # Returns 1 if there appear to be free colormap entries in a window,
  76. # 0 otherwise.
  77. #
  78. # Arguments:
  79. # w - Name of window in which to check.
  80. # red, green, blue - Intensities to use in a trial color allocation
  81. # to see if there are colormap entries free.
  82. proc colorsFree {w {red 31} {green 245} {blue 192}} {
  83.     set vals [winfo rgb $w [format #%02x%02x%02x $red $green $blue]]
  84.     expr ([lindex $vals 0]/256 == $red) && ([lindex $vals 1]/256 == $green) 
  85.     && ([lindex $vals 2]/256 == $blue)
  86. }
  87. if {[testConstraint psuedocolor8]} {
  88.     toplevel .t -visual {pseudocolor 8} -colormap new
  89.     wm geom .t +0+0
  90.     mkColors .t.c 40 6 0 0 0 0 6 0 0 0 40
  91.     pack .t.c
  92.     update
  93.     testConstraint colorsFree [colorsFree .t.c 101 233 17]
  94.     if {[testConstraint colorsFree]} {
  95. mkColors .t.c2 20 1 250 0 0 -10 0 0 0 0 0
  96. pack .t.c2
  97. testConstraint colorsFree [expr {![colorsFree .t.c]}]
  98.     }
  99.     destroy .t.c .t.c2
  100. }
  101. test color-1.1 {Tk_AllocColorFromObj - converting internal reps} colorsFree {
  102.     set x green
  103.     lindex $x 0
  104.     destroy .b1
  105.     button .b1 -foreground $x -text .b1
  106.     lindex $x 0
  107.     testcolor green
  108. } {{1 0}}
  109. test color-1.2 {Tk_AllocColorFromObj - discard stale color} colorsFree {
  110.     set x green
  111.     destroy .b1 .b2
  112.     button .b1 -foreground $x -text First
  113.     destroy .b1
  114.     set result {}
  115.     lappend result [testcolor green]
  116.     button .b2 -foreground $x -text Second
  117.     lappend result [testcolor green]
  118. } {{} {{1 1}}}
  119. test color-1.3 {Tk_AllocColorFromObj - reuse existing color} colorsFree {
  120.     set x green
  121.     destroy .b1 .b2
  122.     button .b1 -foreground $x -text First
  123.     set result {}
  124.     lappend result [testcolor green]
  125.     button .b2 -foreground $x -text Second
  126.     pack .b1 .b2 -side top
  127.     lappend result [testcolor green]
  128. } {{{1 1}} {{2 1}}}
  129. test color-1.4 {Tk_AllocColorFromObj - try other colors in list} colorsFree {
  130.     set x purple
  131.     destroy .b1 .b2 .t.b
  132.     button .b1 -foreground $x -text First
  133.     pack .b1 -side top
  134.     set result {}
  135.     lappend result [testcolor purple]
  136.     button .t.b -foreground $x -text Second
  137.     pack .t.b -side top
  138.     lappend result [testcolor purple]
  139.     button .b2 -foreground $x -text Third
  140.     pack .b2 -side top
  141.     lappend result [testcolor purple]
  142. } {{{1 1}} {{1 1} {1 0}} {{1 0} {2 1}}}
  143. test color-2.1 {Tk_GetColor procedure} colorsFree {
  144.     c255 [winfo rgb .t #FF0000]
  145. } {255 0 0}
  146. test color-2.2 {Tk_GetColor procedure} colorsFree {
  147.     list [catch {winfo rgb .t noname} msg] $msg
  148. } {1 {unknown color name "noname"}}
  149. test color-2.3 {Tk_GetColor procedure} colorsFree {
  150.     c255 [winfo rgb .t #123456]
  151. } {18 52 86}
  152. test color-2.4 {Tk_GetColor procedure} colorsFree {
  153.     list [catch {winfo rgb .t #xyz} msg] $msg
  154. } {1 {invalid color name "#xyz"}}
  155. test color-2.5 {Tk_GetColor procedure} colorsFree {
  156.     winfo rgb .t #00FF00
  157. } {0 65535 0}
  158. test color-2.6 {Tk_GetColor procedure} {colorsFree nonPortable} {
  159.     # Red doesn't always map to *pure* red
  160.     winfo rgb .t red
  161. } {65535 0 0}
  162. test color-2.7 {Tk_GetColor procedure} colorsFree {
  163.     winfo rgb .t #ff0000
  164. } {65535 0 0}
  165. test color-3.1 {Tk_FreeColor procedure, reference counting} colorsFree {
  166.     eval destroy [winfo child .t]
  167.     mkColors .t.c 40 6 0 240 240 0 -6 0 0 0 -40
  168.     pack .t.c
  169.     mkColors .t.c2 20 1 250 0 0 -10 0 0 0 0 0
  170.     pack .t.c2
  171.     update
  172.     set last [.t.c2 create rectangle 50 50 70 60 -outline {} 
  173.     -fill [cname 0 240 240]]
  174.     .t.c delete 1
  175.     set result [colorsFree .t]
  176.     .t.c2 delete $last
  177.     lappend result [colorsFree .t]
  178. } {0 1}
  179. test color-3.2 {Tk_FreeColor procedure, flushing stressed cmap information} colorsFree {
  180.     eval destroy [winfo child .t]
  181.     mkColors .t.c 40 6 0 240 240 0 -6 0 0 0 -40
  182.     pack .t.c
  183.     mkColors .t.c2 20 1 250 0 0 -10 0 0 0 0 0
  184.     mkColors .t.c2 20 1 250 250 0 -10 -10 0 0 0 0
  185.     pack .t.c2
  186.     update
  187.     closest .t 241 241 1
  188. } {240 240 0}
  189. test color-3.3 {Tk_FreeColorFromObj - reference counts} colorsFree {
  190.     set x purple
  191.     destroy .b1 .b2 .t.b
  192.     button .b1 -foreground $x -text First
  193.     pack .b1 -side top
  194.     button .t.b -foreground $x -text Second
  195.     pack .t.b -side top
  196.     button .b2 -foreground $x -text Third
  197.     pack .b2 -side top
  198.     set result {}
  199.     lappend result [testcolor purple]
  200.     destroy .b1
  201.     lappend result [testcolor purple]
  202.     destroy .b2
  203.     lappend result [testcolor purple]
  204.     destroy .t.b
  205.     lappend result [testcolor purple]
  206. } {{{1 0} {2 1}} {{1 0} {1 1}} {{1 0}} {}}
  207. test color-3.4 {Tk_FreeColorFromObj - unlinking from list} colorsFree {
  208.     destroy .b .t.b .t2 .t3
  209.     toplevel .t2 -visual {pseudocolor 8} -colormap new
  210.     toplevel .t3 -visual {pseudocolor 8} -colormap new
  211.     set x purple
  212.     button .b -foreground $x -text .b1
  213.     button .t.b1 -foreground $x -text .t.b1
  214.     button .t.b2 -foreground $x -text .t.b2
  215.     button .t2.b1 -foreground $x -text .t2.b1
  216.     button .t2.b2 -foreground $x -text .t2.b2
  217.     button .t2.b3 -foreground $x -text .t2.b3
  218.     button .t3.b1 -foreground $x -text .t3.b1
  219.     button .t3.b2 -foreground $x -text .t3.b2
  220.     button .t3.b3 -foreground $x -text .t3.b3
  221.     button .t3.b4 -foreground $x -text .t3.b4
  222.     set result {}
  223.     lappend result [testcolor purple]
  224.     destroy .t2
  225.     lappend result [testcolor purple]
  226.     destroy .b
  227.     lappend result [testcolor purple]
  228.     destroy .t3
  229.     lappend result [testcolor purple]
  230.     destroy .t
  231.     lappend result [testcolor purple]
  232. } {{{4 1} {3 0} {2 0} {1 0}} {{4 1} {2 0} {1 0}} {{4 1} {2 0}} {{2 0}} {}}
  233. test color-4.1 {FreeColorObjProc} colorsFree {
  234.     destroy .b
  235.     set x [format purple]
  236.     button .b -foreground $x -text .b1
  237.     set y [format purple]
  238.     .b configure -foreground $y
  239.     set z [format purple]
  240.     .b configure -foreground $z
  241.     set result {}
  242.     lappend result [testcolor purple]
  243.     set x red
  244.     lappend result [testcolor purple]
  245.     set z 32
  246.     lappend result [testcolor purple]
  247.     destroy .b
  248.     lappend result [testcolor purple]
  249.     set y bogus
  250.     set result
  251. } {{{1 3}} {{1 2}} {{1 1}} {}}
  252. destroy .t
  253. # cleanup
  254. ::tcltest::cleanupTests
  255. return