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

通讯编程

开发平台:

Visual C++

  1. # This file is a Tcl script to test out the "send" command and the
  2. # other procedures in the file tkSend.c.  It is organized in the
  3. # standard fashion for Tcl tests.
  4. #
  5. # Copyright (c) 1994 Sun Microsystems, Inc.
  6. # Copyright (c) 1994-1996 Sun Microsystems, Inc.
  7. # Copyright (c) 1998-1999 by Scriptics Corporation.
  8. # All rights reserved.
  9. #
  10. # RCS: @(#) $Id: winSend.test,v 1.4 2002/07/13 20:28:36 dgp Exp $
  11. package require tcltest 2.1
  12. namespace import -force tcltest::configure
  13. namespace import -force tcltest::testsDirectory
  14. configure -testdir [file join [pwd] [file dirname [info script]]]
  15. configure -loadfile [file join [testsDirectory] constraints.tcl]
  16. tcltest::loadTestedCommands
  17. namespace import -force tcltest::interpreter
  18. # Compute a script that will load Tk into a child interpreter.
  19. foreach pkg [info loaded] {
  20.     if {[lindex $pkg 1] == "Tk"} {
  21. set loadTk "load $pkg"
  22. break
  23.     }
  24. }
  25. # Procedure to create a new application with a given name and class.
  26. proc newApp {name {safe {}}} {
  27.     global loadTk
  28.     if {[string compare $safe "-safe"] == 0} {
  29. interp create -safe $name
  30.     } else {
  31. interp create $name
  32.     }
  33.     $name eval [list set argv [list -name $name]]
  34.     catch {eval $loadTk $name}
  35. }
  36. set currentInterps [winfo interps]
  37. if {[testConstraint win] && [llength [info commands send]]} {
  38.     if {[catch {exec [interpreter] &}] == 0} {
  39. # Wait until the child application has launched.
  40. while {[llength [winfo interps]] == [llength $currentInterps]} {}
  41. # Now find an interp to send to
  42. set newInterps [winfo interps]
  43. foreach interp $newInterps {
  44.     if {[lsearch -exact $currentInterps $interp] < 0} {
  45. break
  46.     }
  47. }
  48. # Now we have found our interpreter we are going to send to.
  49. # Make sure that it works first.
  50. testConstraint winSend [expr {[catch {
  51. send $interp {console hide; update}
  52. }] == 0}]
  53.     }
  54. }
  55. # setting up dde server is done when the first interp is created and
  56. # cannot be tested very easily.
  57. test winSend-1.1 {Tk_SetAppName - changing name of interp} winSend {
  58.     newApp testApp
  59.     list [testApp eval tk appname testApp2] [interp delete testApp]
  60. } {testApp2 {}}
  61. test winSend-1.2 {Tk_SetAppName - changing name - not front of linked list} {
  62. winSend
  63. } {
  64.     newApp testApp
  65.     newApp testApp2
  66.     list [testApp eval tk appname testApp3] [interp delete testApp] [interp delete testApp2]
  67. } {testApp3 {} {}}
  68. test winSend-1.3 {Tk_SetAppName - unique name - no conflicts} winSend {
  69.     newApp testApp
  70.     list [testApp eval tk appname testApp] [interp delete testApp]
  71. } {testApp {}}
  72. test winSend-1.4 {Tk_SetAppName - unique name - one conflict} winSend {
  73.     newApp testApp
  74.     newApp foobar
  75.     list [foobar eval tk appname testApp] [interp delete foobar] [interp delete testApp]
  76. } {{testApp #2} {} {}}
  77. test winSend-1.5 {Tk_SetAppName - unique name - one conflict} winSend {
  78.     newApp testApp
  79.     newApp foobar
  80.     newApp blaz
  81.     foobar eval tk appname testApp
  82.     list [blaz eval tk appname testApp] [interp delete foobar] [interp delete testApp] [interp delete blaz]
  83. } {{testApp #3} {} {} {}}
  84. test winSend-1.6 {Tk_SetAppName - safe interps} winSend {
  85.     newApp testApp -safe
  86.     list [catch {testApp eval send testApp {set foo a}} msg] $msg [interp delete testApp]
  87. } {1 {invalid command name "send"} {}}
  88. test winSend-2.1 {Tk_SendObjCmd - # of args} winSend {
  89.     list [catch {send tktest} msg] $msg
  90. } {1 {wrong # args: should be "send ?options? interpName arg ?arg ...?"}}
  91. test winSend-2.1 {Tk_SendObjCmd: arguments} winSend {
  92.     list [catch {send -bogus tktest} msg] $msg
  93. } {1 {bad option "-bogus": must be -async, -displayof, or --}}
  94. test winSend-2.1 {Tk_SendObjCmd: arguments} winSend {
  95.     list [catch {send -async bogus foo} msg] $msg
  96. } {1 {no registered server named "bogus"}}
  97. test winSend-2.1 {Tk_SendObjCmd: arguments} winSend {
  98.     list [catch {send -displayof . bogus foo} msg] $msg
  99. } {1 {no registered server named "bogus"}}
  100. test winSend-2.1 {Tk_SendObjCmd: arguments} winSend {
  101.     list [catch {send -- -bogus foo} msg] $msg
  102. } {1 {no registered server named "-bogus"}}
  103. test winSend-2.2 {Tk_SendObjCmd - sending to ourselves} winSend {
  104.     list [send [tk appname] {set foo a}]
  105. } {a}
  106. test winSend-2.3 {Tk_SendObjCmd - sending to ourselves in a different interpreter} winSend {
  107.     newApp testApp
  108.     list [catch {send testApp {set foo b}} msg] $msg [interp delete testApp]
  109. } {0 b {}}
  110. test winSend-2.4 {Tk_SendObjCmd - sending to ourselves in a different interp with errors} winSend {
  111.     newApp testApp
  112.     list [catch {send testApp {expr 2 / 0}} msg] $msg $errorCode $errorInfo [interp delete testApp]
  113. } "1 {divide by zero} {ARITH DIVZERO {divide by zero}} {divide by zeron    while executingn"expr 2 / 0"n    invoked from withinn"send testApp {expr 2 / 0}"} {}"
  114. test winSend-2.5 {Tk_SendObjCmd - sending to another app async} winSend {
  115.     set newInterps [winfo interps]
  116.     foreach interp $newInterps {
  117. if {[lsearch $currentInterps $interp] < 0} {
  118.     break
  119. }
  120.     }
  121.     list [catch {send -async $interp {set foo a}} msg] $msg
  122. } {0 {}}
  123. test winSend-2.6 {Tk_SendObjCmd - sending to another app sync - no error} winSend {
  124.     set newInterps [winfo interps]
  125.     foreach interp $newInterps {
  126. if {[lsearch $currentInterps $interp] < 0} {
  127.     break
  128. }
  129.     }
  130.     list [catch {send $interp {set foo a}} msg] $msg
  131. } {0 a}
  132. test winSend-2.7 {Tk_SendObjCmd - sending to another app - error} winSend {
  133.     set newInterps [winfo interps]
  134.     foreach interp $newInterps {
  135. if {[lsearch $currentInterps $interp] < 0} {
  136.     break
  137. }
  138.     }
  139.     list [catch {send $interp {expr 2 / 0}} msg] $msg $errorCode $errorInfo
  140. } "1 {divide by zero} {ARITH DIVZERO {divide by zero}} {divide by zeron    while executingn"expr 2 / 0"n    invoked from withinn"send $interp {expr 2 / 0}"}"
  141. test winSend-3.1 {TkGetInterpNames} winSend {
  142.     set origLength [llength $currentInterps]
  143.     set newLength [llength [winfo interps]]
  144.     expr {($newLength - 2) == $origLength}
  145. } {1}
  146. test winSend-4.1 {DeleteProc - changing name of app} winSend {
  147.     newApp a
  148.     list [a eval tk appname foo] [interp delete a]
  149. } {foo {}}
  150. test winSend-4.2 {DeleteProc - normal} winSend {
  151.     newApp a
  152.     list [interp delete a]
  153. } {{}}
  154. test winSend-5.1 {ExecuteRemoteObject - no error} winSend {
  155.     set newInterps [winfo interps]
  156.     foreach interp $newInterps {
  157. if {[lsearch $currentInterps $interp] < 0} {
  158.     break
  159. }
  160.     }
  161.     list [send $interp {send [tk appname] {expr 2 / 1}}]
  162. } {2}
  163. test winSend-5.2 {ExecuteRemoteObject - error} winSend {
  164.     set newInterps [winfo interps]
  165.     foreach interp $newInterps {
  166. if {[lsearch $currentInterps $interp] < 0} {
  167.     break
  168. }
  169.     }
  170.     list [catch {send $interp {send [tk appname] {expr 2 / 0}}} msg] $msg
  171. } {1 {divide by zero}}
  172. test winSend-6.1 {SendDDEServer - XTYP_CONNECT} winSend {
  173.     set foo "Hello, World"
  174.     set newInterps [winfo interps]
  175.     foreach interp $newInterps {
  176. if {[lsearch $currentInterps $interp] < 0} {
  177.     break
  178. }
  179.     }
  180.     set command "dde request Tk [tk appname] foo"
  181.     list [catch "send {$interp} {$command}" msg] $msg
  182. } {0 {Hello, World}}
  183. test winSend-6.2 {SendDDEServer - XTYP_CONNECT_CONFIRM} winSend {
  184.     set foo "Hello, World"
  185.     set newInterps [winfo interps]
  186.     foreach interp $newInterps {
  187. if {[lsearch $currentInterps $interp] < 0} {
  188.     break
  189. }
  190.     }
  191.     set command "dde request Tk [tk appname] foo"
  192.     list [catch "send {$interp} {$command}" msg] $msg
  193. } {0 {Hello, World}}
  194. test winSend-6.3 {SendDDEServer - XTYP_DISCONNECT} winSend {
  195.     set foo "Hello, World"
  196.     set newInterps [winfo interps]
  197.     foreach interp $newInterps {
  198. if {[lsearch $currentInterps $interp] < 0} {
  199.     break
  200. }
  201.     }
  202.     set command "dde request Tk [tk appname] foo"
  203.     list [catch "send {$interp} {$command}" msg] $msg
  204. } {0 {Hello, World}}
  205. test winSend-6.4 {SendDDEServer - XTYP_REQUEST variable} winSend {
  206.     set foo "Hello, World"
  207.     set newInterps [winfo interps]
  208.     foreach interp $newInterps {
  209. if {[lsearch $currentInterps $interp] < 0} {
  210.     break
  211. }
  212.     }
  213.     set command "dde request Tk [tk appname] foo"
  214.     list [catch "send {$interp} {$command}" msg] $msg
  215. } {0 {Hello, World}}
  216. test winSend-6.5 {SendDDEServer - XTYP_REQUEST array} winSend {
  217.     catch {unset foo}
  218.     set foo(test) "Hello, World"
  219.     set newInterps [winfo interps]
  220.     foreach interp $newInterps {
  221. if {[lsearch $currentInterps $interp] < 0} {
  222.     break
  223. }
  224.     }
  225.     set command "dde request Tk [tk appname] foo(test)"
  226.     list [catch "send {$interp} {$command}" msg] $msg [catch {unset foo}]
  227. } {0 {Hello, World} 0}
  228. test winSend-6.6 {SendDDEServer - XTYP_REQUEST return results} winSend {
  229.     set foo 3
  230.     set newInterps [winfo interps]
  231.     foreach interp $newInterps {
  232. if {[lsearch $currentInterps $interp] < 0} {
  233.     break
  234. }
  235.     }
  236.     set command "send [tk appname] {expr $foo + 1}"
  237.     list [catch "send {$interp} {$command}" msg] $msg
  238. } {0 4}
  239. test winSend-6.7 {SendDDEServer - XTYP_EXECUTE} winSend {
  240.     set newInterps [winfo interps]
  241.     foreach interp $newInterps {
  242. if {[lsearch $currentInterps $interp] < 0} {
  243.     break
  244. }
  245.     }
  246.     set command "send [tk appname] {expr 4 / 2}"
  247.     list [catch "send {$interp} {$command}" msg] $msg
  248. } {0 2}
  249. test winSend-6.8 {SendDDEServer - XTYP_WILDCONNECT} winSend {
  250.     set newInterps [winfo interps]
  251.     foreach interp $newInterps {
  252. if {[lsearch $currentInterps $interp] < 0} {
  253.     break
  254. }
  255.     }
  256.     set command "dde services Tk {}"
  257.     list [catch "send {$interp} {$command}"]
  258. } {0}
  259. test winSend-7.1 {DDEExitProc} winSend {
  260.     newApp testApp
  261.     list [interp delete testApp]
  262. } {{}}
  263. test winSend-8.1 {SendDdeConnect} winSend {
  264.     set newInterps [winfo interps]
  265.     foreach interp $newInterps {
  266. if {[lsearch $currentInterps $interp] < 0} {
  267.     break
  268. }
  269.     }
  270.     list [send $interp {set tk foo}]
  271. } {foo}
  272. test winSend-9.1 {SetDDEError} winSend {
  273.     list [catch {dde execute Tk foo {set foo hello}} msg] $msg
  274. } {1 {dde command failed}}
  275. test winSend-10.1 {Tk_DDEObjCmd - wrong num args} winSend {
  276.     list [catch {dde} msg] $msg
  277. } {1 {wrong # args: should be "dde ?-async? serviceName topicName value"}}
  278. test winSend-10.2 {Tk_DDEObjCmd - unknown subcommand} winSend {
  279.     list [catch {dde foo} msg] $msg
  280. } {1 {bad command "foo": must be execute, request, or services}}
  281. test winSend-10.3 {Tk_DDEObjCmd - execute - wrong num args} winSend {
  282.     list [catch {dde execute} msg] $msg
  283. } {1 {wrong # args: should be "dde execute ?-async? serviceName topicName value"}}
  284. test winSend-10.4 {Tk_DDEObjCmd - execute - wrong num args} winSend {
  285.     list [catch {dde execute 3 4 5 6 7} msg] $msg
  286. } {1 {wrong # args: should be "dde execute ?-async? serviceName topicName value"}}
  287. test winSend-10.5 {Tk_DDEObjCmd - execute async - wrong num args} winSend {
  288.     list [catch {dde execute -async} msg] $msg
  289. } {1 {wrong # args: should be "dde execute ?-async? serviceName topicName value"}}
  290. test winSend-10.6 {Tk_DDEObjCmd - request - wrong num args} winSend {
  291.     list [catch {dde request} msg] $msg
  292. } {1 {wrong # args: should be "dde request serviceName topicName value"}}
  293. test winSend-10.7 {Tk_DDEObjCmd - services wrong num args} winSend {
  294.     list [catch {dde services} msg] $msg
  295. } {1 {wrong # args: should be "dde services serviceName topicName"}}
  296. test winSend-10.8 {Tk_DDEObjCmd - null service name} winSend {
  297.     list [catch {dde services {} {tktest #2}}]
  298. } {0}
  299. test winSend-10.9 {Tk_DDEObjCmd - null topic name} winSend {
  300.     list [catch {dde services {Tk} {}}]
  301. } {0}
  302. test winSend-10.10 {Tk_DDEObjCmd - execute - nothing to execute} winSend {
  303.     set newInterps [winfo interps]
  304.     foreach interp $newInterps {
  305. if {[lsearch $currentInterps $interp] < 0} {
  306.     break
  307. }
  308.     }
  309.     list [catch {dde execute Tk $interp {}} msg] $msg
  310. } {1 {cannot execute null data}}
  311. test winSend-10.11 {Tk_DDEObjCmd - execute - no such conversation} winSend {
  312.     list [catch {dde execute Tk foo {set foo hello}} msg] $msg
  313. } {1 {dde command failed}}
  314. test winSend-10.12 {Tk_DDEObjCmd - execute - async} winSend {
  315.     set newInterps [winfo interps]
  316.     foreach interp $newInterps {
  317. if {[lsearch $currentInterps $interp] < 0} {
  318.     break
  319. }
  320.     }
  321.     list [catch {dde execute -async Tk $interp {set foo hello}} msg] $msg
  322. } {0 {}}
  323. test winSend-10.13 {Tk_DDEObjCmd - execute} winSend {
  324.     set newInterps [winfo interps]
  325.     foreach interp $newInterps {
  326. if {[lsearch $currentInterps $interp] < 0} {
  327.     break
  328. }
  329.     }
  330.     list [catch {dde execute Tk $interp {set foo goodbye}} msg] $msg
  331. } {0 {}}
  332. test winSend-10.14 {Tk_DDEObjCmd - request - nothing to request} winSend {
  333.     set newInterps [winfo interps]
  334.     foreach interp $newInterps {
  335. if {[lsearch $currentInterps $interp] < 0} {
  336.     break
  337. }
  338.     }
  339.     list [catch {dde request Tk $interp {}} msg] $msg
  340. } {1 {cannot request value of null data}}
  341. test winSend-10.15 {Tk_DDEObjCmd - request - invalid interp} winSend {
  342.     set newInterps [winfo interps]
  343.     foreach interp $newInterps {
  344. if {[lsearch $currentInterps $interp] < 0} {
  345.     break
  346. }
  347.     }
  348.     list [catch {dde request Tk foo foo} msg] $msg
  349. } {1 {dde command failed}}
  350. test winSend-10.16 {Tk_DDEObjCmd - invalid variable} winSend {
  351.     set newInterps [winfo interps]
  352.     foreach interp $newInterps {
  353. if {[lsearch $currentInterps $interp] < 0} {
  354.     break
  355. }
  356.     }
  357.     send $interp {unset foo}
  358.     list [catch {dde request Tk $interp foo} msg] $msg
  359. } {1 {remote server cannot handle this command}}
  360. test winSend-10.17 {Tk_DDEObjCmd - valid variable} winSend {
  361.     set newInterps [winfo interps]
  362.     foreach interp $newInterps {
  363. if {[lsearch $currentInterps $interp] < 0} {
  364.     break
  365. }
  366.     }
  367.     send $interp {set foo winSend-10.17}
  368.     list [catch {dde request Tk $interp foo} msg] $msg
  369. } {0 winSend-10.17}
  370. test winSend-10.18 {Tk_DDEObjCmd - services} winSend {
  371.     set currentService [list Tk [tk appname]]
  372.     list [catch {dde services Tk {}} msg] [expr [lsearch $msg $currentService] >= 0]
  373. } {0 1}
  374. # Get rid of the other app and all of its interps
  375. set newInterps [winfo interps]
  376. while {[llength $newInterps] != [llength $currentInterps]} {
  377.     foreach interp $newInterps {
  378. if {[lsearch -exact $currentInterps $interp] < 0} {
  379.     catch {send $interp exit}
  380.     set newInterps [winfo interps]
  381.     break
  382. }
  383.     }
  384. }
  385. # cleanup
  386. ::tcltest::cleanupTests
  387. return