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

通讯编程

开发平台:

Visual C++

  1. if {[namespace exists tk::test]} {
  2.     deleteWindows
  3.     wm geometry . {}
  4.     raise .
  5.     return
  6. }
  7. package require Tcl 8.4
  8. package require Tk 8.4
  9. tk appname tktest
  10. wm title . tktest
  11. # If the main window isn't already mapped (e.g. because the tests are
  12. # being run automatically) , specify a precise size for it so that the
  13. # user won't have to position it manually.
  14. if {![winfo ismapped .]} {
  15.     wm geometry . +0+0
  16.     update
  17. }
  18. package require tcltest 2.1
  19. namespace eval tk {
  20.     namespace eval test {
  21. namespace eval bg {
  22.     # Manage a background process.  
  23.     # Replace with slave interp or thread?
  24.     namespace import ::tcltest::interpreter
  25.     namespace export setup cleanup do
  26.     proc cleanup {} {
  27. variable fd
  28. # catch in case the background process has closed $fd
  29. catch {puts $fd exit}
  30. catch {close $fd}
  31. set fd ""
  32.     }
  33.     proc setup args {
  34. variable fd
  35. if {[info exists fd] && [string length $fd]} {
  36.     cleanup
  37. }
  38. set fd [open "|[list [interpreter] 
  39. -geometry +0+0 -name tktest] $args" r+]
  40. puts $fd "puts foo; flush stdout"
  41. flush $fd
  42. if {[gets $fd data] < 0} {
  43.     error "unexpected EOF from "[interpreter]""
  44. }
  45. if {$data ne "foo"} {
  46.     error "unexpected output from
  47.     background process: "$data""
  48. }
  49. fileevent $fd readable [namespace code Ready]
  50.     }
  51.     proc Ready {} {
  52. variable fd
  53. variable Data
  54. variable Done
  55. set x [gets $fd]
  56. if {[eof $fd]} {
  57.     fileevent $fd readable {}
  58.     set Done 1
  59. } elseif {$x eq "**DONE**"} {
  60.     set Done 1
  61. } else {
  62.     append Data $x
  63. }
  64.     }
  65.     proc do {cmd {block 0}} {
  66. variable fd
  67. variable Data
  68. variable Done
  69. if {$block} {
  70.     fileevent $fd readable {}
  71. }
  72. puts $fd "[list catch $cmd msg]; update; puts $msg;
  73. puts **DONE**; flush stdout"
  74. flush $fd
  75. set Data {}
  76. if {$block} {
  77.     while {![eof $fd]} {
  78. set line [gets $fd]
  79. if {$line eq "**DONE**"} {
  80.     break
  81. }
  82. append Data $line
  83.     }
  84. } else {
  85.     set Done 0
  86.     vwait [namespace which -variable Done]
  87. }
  88. return $Data
  89.     }
  90. }
  91. proc Export {internal as external} {
  92.     uplevel 1 [list namespace import $internal]
  93.     uplevel 1 [list rename [namespace tail $internal] $external]
  94.     uplevel 1 [list namespace export $external]
  95. }
  96. Export bg::setup as setupbg
  97. Export bg::cleanup as cleanupbg
  98. Export bg::do as dobg
  99. namespace export deleteWindows
  100. proc deleteWindows {} {
  101.     eval destroy [winfo children .]
  102. }
  103. namespace export fixfocus 
  104. proc fixfocus {} {
  105.             catch {destroy .focus}
  106.             toplevel .focus
  107.             wm geometry .focus +0+0
  108.             entry .focus.e
  109.             .focus.e insert 0 "fixfocus"
  110.             pack .focus.e
  111.             update
  112.             focus -force .focus.e
  113.             destroy .focus
  114. }
  115.     }
  116. }
  117. namespace import -force tk::test::*
  118. namespace import -force tcltest::testConstraint
  119. testConstraint notAqua [expr {[tk windowingsystem] ne "aqua"}]
  120. testConstraint aqua [expr {[tk windowingsystem] eq "aqua"}]
  121. testConstraint userInteraction 0
  122. testConstraint nonUnixUserInteraction [expr {[testConstraint userInteraction]
  123.                                                 || [testConstraint unix]}]
  124. testConstraint altDisplay [info exists env(TK_ALT_DISPLAY)]
  125. testConstraint noExceed [expr {![testConstraint unix]
  126. || [catch {font actual "{xyz"}]}]
  127. testConstraint testImageType [expr {[lsearch [image types] test] >= 0}]
  128. testConstraint testembed [llength [info commands testembed]]
  129. testConstraint testwrapper [llength [info commands testwrapper]]
  130. testConstraint testfont [llength [info commands testfont]]
  131. testConstraint fonts 1
  132. destroy .e
  133. entry .e -width 0 -font {Helvetica -12} -bd 1
  134. .e insert end a.bcd
  135. if {([winfo reqwidth .e] != 37) || ([winfo reqheight .e] != 20)} {
  136.     testConstraint fonts 0
  137. }
  138. destroy .e
  139. destroy .t
  140. text .t -width 80 -height 20 -font {Times -14} -bd 1
  141. pack .t
  142. .t insert end "This isna dot."
  143. update
  144. set x [list [.t bbox 1.3] [.t bbox 2.5]]
  145. destroy .t
  146. if {![string match {{22 3 6 15} {31 18 [34] 15}} $x]} {
  147.     testConstraint fonts 0
  148. }
  149. testConstraint pseudocolor8 [expr {([catch {
  150.                         toplevel .t -visual {pseudocolor 8} -colormap new
  151.                         }] == 0) && ([winfo depth .t] == 8)}]
  152. destroy .t
  153. testConstraint haveTruecolor24 [expr {[lsearch [winfo visualsavailable .] {truecolor 24}] != -1}]
  154. setupbg
  155. set app [dobg {tk appname}]
  156. testConstraint secureserver 0
  157. if {[llength [info commands send]]} {
  158.     testConstraint secureserver 1
  159.     if {[catch {send $app set a 0} msg] == 1} {
  160.         if {[string match "X server insecure *" $msg]} {
  161.             testConstraint secureserver 0
  162. }
  163.     }
  164. }
  165. cleanupbg
  166. eval tcltest::configure $argv
  167. namespace import -force tcltest::test
  168. deleteWindows
  169. wm geometry . {}
  170. raise .