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

通讯编程

开发平台:

Visual C++

  1. # This file is a Tcl script to test out Tk's interactions with
  2. # the window manager, including the "wm" command.  It is organized
  3. # in the standard fashion for Tcl tests.
  4. #
  5. # Copyright (c) 1992-1994 The Regents of the University of California.
  6. # Copyright (c) 1994-1997 Sun Microsystems, Inc.
  7. # Copyright (c) 1998-1999 by Scriptics Corporation.
  8. # All rights reserved.
  9. #
  10. # RCS: @(#) $Id$
  11. # This file tests window manager interactions that work across
  12. # platforms. Window manager tests that only work on a specific
  13. # platform should be placed in unixWm.test or winWm.test.
  14. package require tcltest 2.1
  15. namespace import -force tcltest::configure
  16. namespace import -force tcltest::testsDirectory
  17. configure -testdir [file join [pwd] [file dirname [info script]]]
  18. configure -loadfile [file join [testsDirectory] constraints.tcl]
  19. tcltest::loadTestedCommands
  20. wm deiconify .
  21. if {![winfo ismapped .]} {
  22.     tkwait visibility .
  23. }
  24. proc stdWindow {} {
  25.     destroy .t
  26.     toplevel .t -width 100 -height 50
  27.     wm geom .t +0+0
  28.     update
  29. }
  30. # [raise] and [lower] may return before the window manager
  31. # has completed the operation.  The raiseDelay procedure
  32. # idles for a while to give the operation a chance to complete.
  33. #
  34. proc raiseDelay {} {
  35.     after 100; update
  36. }
  37. deleteWindows
  38. stdWindow
  39. test wm-1.1 {Tk_WmObjCmd procedure, miscellaneous errors} {
  40.     list [catch {wm} msg] $msg
  41. } {1 {wrong # args: should be "wm option window ?arg ...?"}}
  42. test wm-1.2 {Tk_WmObjCmd procedure, miscellaneous errors} {
  43.     list [catch {wm foo} msg] $msg
  44. } {1 {bad option "foo": must be aspect, attributes, client, colormapwindows, command, deiconify, focusmodel, frame, geometry, grid, group, iconbitmap, iconify, iconmask, iconname, iconphoto, iconposition, iconwindow, maxsize, minsize, overrideredirect, positionfrom, protocol, resizable, sizefrom, stackorder, state, title, transient, or withdraw}}
  45. test wm-1.3 {Tk_WmObjCmd procedure, miscellaneous errors} {
  46.     list [catch {wm command} msg] $msg
  47. } {1 {wrong # args: should be "wm option window ?arg ...?"}}
  48. test wm-1.4 {Tk_WmObjCmd procedure, miscellaneous errors} {
  49.     list [catch {wm aspect bogus} msg] $msg
  50. } {1 {bad window path name "bogus"}}
  51. test wm-1.5 {Tk_WmObjCmd procedure, miscellaneous errors} {
  52.     catch {destroy .b}
  53.     button .b -text hello
  54.     list [catch {wm geometry .b} msg] $msg
  55. } {1 {window ".b" isn't a top-level window}}
  56. test wm-aspect-1.1 {usage} {
  57.     list [catch {wm aspect} err] $err
  58. } {1 {wrong # args: should be "wm option window ?arg ...?"}}
  59. test wm-aspect-1.2 {usage} {
  60.     list [catch {wm aspect . _} err] $err
  61. } {1 {wrong # args: should be "wm aspect window ?minNumer minDenom maxNumer maxDenom?"}}
  62. test wm-aspect-1.3 {usage} {
  63.     list [catch {wm aspect . _ _ _} err] $err
  64. } {1 {wrong # args: should be "wm aspect window ?minNumer minDenom maxNumer maxDenom?"}}
  65. test wm-aspect-1.4 {usage} {
  66.     list [catch {wm aspect . _ _ _ _ _} err] $err
  67. } {1 {wrong # args: should be "wm aspect window ?minNumer minDenom maxNumer maxDenom?"}}
  68. test wm-aspect-1.5 {usage} {
  69.     list [catch {wm aspect . bad 14 15 16} msg] $msg
  70. } {1 {expected integer but got "bad"}}
  71. test wm-aspect-1.6 {usage} {
  72.     list [catch {wm aspect . 13 foo 15 16} msg] $msg
  73. } {1 {expected integer but got "foo"}}
  74. test wm-aspect-1.7 {usage} {
  75.     list [catch {wm aspect . 13 14 bar 16} msg] $msg
  76. } {1 {expected integer but got "bar"}}
  77. test wm-aspect-1.8 {usage} {
  78.     list [catch {wm aspect . 13 14 15 baz} msg] $msg
  79. } {1 {expected integer but got "baz"}}
  80. test wm-aspect-1.9 {usage} {
  81.     list [catch {wm aspect . 0 14 15 16} msg] $msg
  82. } {1 {aspect number can't be <= 0}}
  83. test wm-aspect-1.10 {usage} {
  84.     list [catch {wm aspect . 13 0 15 16} msg] $msg
  85. } {1 {aspect number can't be <= 0}}
  86. test wm-aspect-1.11 {usage} {
  87.     list [catch {wm aspect . 13 14 0 16} msg] $msg
  88. } {1 {aspect number can't be <= 0}}
  89. test wm-aspect-1.12 {usage} {
  90.     list [catch {wm aspect . 13 14 15 0} msg] $msg
  91. } {1 {aspect number can't be <= 0}}
  92. test wm-aspect-2.1 {setting and reading values} {
  93.     set result {}
  94.     lappend result [wm aspect .t]
  95.     wm aspect .t 3 4 10 2
  96.     lappend result [wm aspect .t]
  97.     wm aspect .t {} {} {} {}
  98.     lappend result [wm aspect .t]
  99. } [list {} {3 4 10 2} {}]
  100. test wm-attributes-1.1 {usage} {
  101.     list [catch {wm attributes} err] $err
  102. } {1 {wrong # args: should be "wm option window ?arg ...?"}}
  103. test wm-attributes-1.2.1 {usage} {pcOnly} {
  104.     list [catch {wm attributes . _} err] $err
  105. } {1 {wrong # args: should be "wm attributes window ?-alpha ?double?? ?-transparentcolor ?color?? ?-disabled ?bool?? ?-toolwindow ?bool?? ?-topmost ?bool??"}}
  106. test wm-attributes-1.2.2 {usage} {pcOnly} {
  107.     list [catch {wm attributes . -alpha 1.0 -disabled} err] $err
  108. } {1 {wrong # args: should be "wm attributes window ?-alpha ?double?? ?-transparentcolor ?color?? ?-disabled ?bool?? ?-toolwindow ?bool?? ?-topmost ?bool??"}}
  109. test wm-attributes-1.2.3 {usage} {pcOnly} {
  110.     list [catch {wm attributes . -to} err] $err
  111. } {1 {wrong # args: should be "wm attributes window ?-alpha ?double?? ?-transparentcolor ?color?? ?-disabled ?bool?? ?-toolwindow ?bool?? ?-topmost ?bool??"}}
  112. test wm-attributes-1.2.4 {usage} {macOrUnix notAqua} {
  113.     list [catch {wm attributes . _} err] $err
  114. } {1 {wrong # args: should be "wm attributes window"}}
  115. test wm-attributes-1.2.5 {usage} {aqua} {
  116.     list [catch {wm attributes . _} err] $err
  117. } {1 {bad attribute "_": must be -alpha, -modified, or -titlepath}}
  118. test wm-client-1.1 {usage} {
  119.     list [catch {wm client} err] $err
  120. } {1 {wrong # args: should be "wm option window ?arg ...?"}}
  121. test wm-client-1.2 {usage} {
  122.     list [catch {wm client . _ _} err] $err
  123. } {1 {wrong # args: should be "wm client window ?name?"}}
  124. test wm-client-2.1 {setting and reading values} {
  125.     set result {}
  126.     lappend result [wm client .t]
  127.     wm client .t Miffo
  128.     lappend result [wm client .t]
  129.     wm client .t {}
  130.     lappend result [wm client .t]
  131. } [list {} Miffo {}]
  132. test wm-colormapwindows-1.1 {usage} {
  133.     list [catch {wm colormapwindows} err] $err
  134. } {1 {wrong # args: should be "wm option window ?arg ...?"}}
  135. test wm-colormapwindows-1.2 {usage} {
  136.     list [catch {wm colormapwindows . _ _} err] $err
  137. } {1 {wrong # args: should be "wm colormapwindows window ?windowList?"}}
  138. test wm-colormapwindows-1.3 {usage} {
  139.     list [catch {wm colormapwindows . "a {"} msg] $msg
  140. } {1 {unmatched open brace in list}}
  141. test wm-colormapwindows-1.4 {usage} {
  142.     list [catch {wm colormapwindows . foo} msg] $msg
  143. } {1 {bad window path name "foo"}}
  144. test wm-colormapwindows-2.1 {reading values} {
  145.     catch {destroy .t2}
  146.     toplevel .t2 -width 200 -height 200 -colormap new
  147.     wm geom .t2 +0+0
  148.     frame .t2.a -width 100 -height 30
  149.     frame .t2.b -width 100 -height 30 -colormap new
  150.     pack .t2.a .t2.b -side top
  151.     update
  152.     set x [wm colormapwindows .t2]
  153.     frame .t2.c -width 100 -height 30 -colormap new
  154.     pack .t2.c -side top
  155.     update
  156.     list $x [wm colormapwindows .t2]
  157. } {{.t2.b .t2} {.t2.b .t2.c .t2}}
  158. test wm-colormapwindows-2.2 {setting and reading values} {
  159.     catch {destroy .t2}
  160.     toplevel .t2 -width 200 -height 200
  161.     wm geom .t2 +0+0
  162.     frame .t2.a -width 100 -height 30
  163.     frame .t2.b -width 100 -height 30
  164.     frame .t2.c -width 100 -height 30
  165.     pack .t2.a .t2.b .t2.c -side top
  166.     wm colormapwindows .t2 {.t2.b .t2.a}
  167.     wm colormapwindows .t2
  168. } {.t2.b .t2.a}
  169. test wm-command-1.1 {usage} {
  170.     list [catch {wm command} err] $err
  171. } {1 {wrong # args: should be "wm option window ?arg ...?"}}
  172. test wm-command-1.2 {usage} {
  173.     list [catch {wm command . _ _} err] $err
  174. } {1 {wrong # args: should be "wm command window ?value?"}}
  175. test wm-command-1.3 {usage} {
  176.     list [catch {wm command . "a {"} msg] $msg
  177. } {1 {unmatched open brace in list}}
  178. test wm-command-2.1 {setting and reading values} {
  179.     set result {}
  180.     lappend result [wm command .t]
  181.     wm command .t [list Miffo Foo]
  182.     lappend result [wm command .t]
  183.     wm command .t {}
  184.     lappend result [wm command .t]
  185. } [list {} [list Miffo Foo] {}]
  186. test wm-deiconify-1.1 {usage} {
  187.     list [catch {wm deiconify} err] $err
  188. } {1 {wrong # args: should be "wm option window ?arg ...?"}}
  189. test wm-deiconify-1.2 {usage} {
  190.     list [catch {wm deiconify . _} err] $err
  191. } {1 {wrong # args: should be "wm deiconify window"}}
  192. test wm-deiconify-1.3 {usage} {
  193.     list [catch {wm deiconify _} err] $err
  194. } {1 {bad window path name "_"}}
  195. test wm-deiconify-1.4 {usage} {
  196.     catch {destroy .icon}
  197.     toplevel .icon -width 50 -height 50 -bg red
  198.     wm iconwindow .t .icon
  199.     set result [list [catch {wm deiconify .icon} msg] $msg]
  200.     destroy .icon
  201.     set result
  202. } {1 {can't deiconify .icon: it is an icon for .t}}
  203. test wm-deiconify-1.5 {usage} {
  204.     catch {destroy .embed}
  205.     frame .t.f -container 1
  206.     toplevel .embed -use [winfo id .t.f]
  207.     set result [list [catch {wm deiconify .embed} msg] $msg]
  208.     destroy .t.f .embed
  209.     set result
  210. } {1 {can't deiconify .embed: it is an embedded window}}
  211. test wm-deiconify-2.1 {a window that has never been mapped
  212.         should not be mapped by a call to deiconify} {
  213.     deleteWindows
  214.     toplevel .t
  215.     wm deiconify .t
  216.     winfo ismapped .t
  217. } 0
  218. test wm-deiconify-2.2 {a window that has already been
  219.         mapped should be mapped by deiconify} {
  220.     deleteWindows
  221.     toplevel .t
  222.     update idletasks
  223.     wm withdraw .t
  224.     wm deiconify .t
  225.     winfo ismapped .t
  226. } 1
  227. test wm-deiconify-2.3 {geometry for an unmapped window
  228.         should not be calculated by a call to deiconify,
  229.         it should be done at idle time} {
  230.     deleteWindows
  231.     set results {}
  232.     toplevel .t -width 200 -height 200
  233.     lappend results [wm geometry .t]
  234.     wm deiconify .t
  235.     lappend results [wm geometry .t]
  236.     update idletasks
  237.     lappend results [lindex [split 
  238.         [wm geometry .t] +] 0]
  239. } {1x1+0+0 1x1+0+0 200x200}
  240. test wm-deiconify-2.4 {invoking destroy after a deiconify
  241.         should not result in a crash because of a callback
  242.         set on the toplevel} {
  243.     deleteWindows
  244.     toplevel .t
  245.     wm withdraw .t
  246.     wm deiconify .t
  247.     destroy .t
  248.     update
  249. } {}
  250. test wm-focusmodel-1.1 {usage} {
  251.     list [catch {wm focusmodel} err] $err
  252. } {1 {wrong # args: should be "wm option window ?arg ...?"}}
  253. test wm-focusmodel-1.2 {usage} {
  254.     list [catch {wm focusmodel . _ _} err] $err
  255. } {1 {wrong # args: should be "wm focusmodel window ?active|passive?"}}
  256. test wm-focusmodel-1.3 {usage} {
  257.     list [catch {wm focusmodel . bogus} msg] $msg
  258. } {1 {bad argument "bogus": must be active or passive}}
  259. stdWindow
  260. test wm-focusmodel-2.1 {setting and reading values} {
  261.     set result {} 
  262.     lappend result [wm focusmodel .t]
  263.     wm focusmodel .t active
  264.     lappend result [wm focusmodel .t]
  265.     wm focusmodel .t passive
  266.     lappend result [wm focusmodel .t]
  267.     set result
  268. } {passive active passive}
  269. test wm-frame-1.1 {usage} {
  270.     list [catch {wm frame} err] $err
  271. } {1 {wrong # args: should be "wm option window ?arg ...?"}}
  272. test wm-frame-1.2 {usage} {
  273.     list [catch {wm frame . _} err] $err
  274. } {1 {wrong # args: should be "wm frame window"}}
  275. test wm-geometry-1.1 {usage} {
  276.     list [catch {wm geometry} err] $err
  277. } {1 {wrong # args: should be "wm option window ?arg ...?"}}
  278. test wm-geometry-1.2 {usage} {
  279.     list [catch {wm geometry . _ _} err] $err
  280. } {1 {wrong # args: should be "wm geometry window ?newGeometry?"}}
  281. test wm-geometry-1.3 {usage} {
  282.     list [catch {wm geometry . bogus} msg] $msg
  283. } {1 {bad geometry specifier "bogus"}}
  284. test wm-geometry-2.1 {setting values} {
  285.     set result {}
  286.     wm geometry .t 150x150+50+50
  287.     update
  288.     lappend result [wm geometry .t]
  289.     wm geometry .t {}
  290.     update
  291.     lappend result [string equal [wm geometry .t] "150x150+50+50"]
  292. } [list 150x150+50+50 0]
  293. test wm-grid-1.1 {usage} {
  294.     list [catch {wm grid} err] $err
  295. } {1 {wrong # args: should be "wm option window ?arg ...?"}}
  296. test wm-grid-1.2 {usage} {
  297.     list [catch {wm grid . _} err] $err
  298. } {1 {wrong # args: should be "wm grid window ?baseWidth baseHeight widthInc heightInc?"}}
  299. test wm-grid-1.3 {usage} {
  300.     list [catch {wm grid . _ _ _} err] $err
  301. } {1 {wrong # args: should be "wm grid window ?baseWidth baseHeight widthInc heightInc?"}}
  302. test wm-grid-1.4 {usage} {
  303.     list [catch {wm grid . _ _ _ _ _} err] $err
  304. } {1 {wrong # args: should be "wm grid window ?baseWidth baseHeight widthInc heightInc?"}}
  305. test wm-grid-1.5 {usage} {
  306.     list [catch {wm grid . bad 14 15 16} msg] $msg
  307. } {1 {expected integer but got "bad"}}
  308. test wm-grid-1.6 {usage} {
  309.     list [catch {wm grid . 13 foo 15 16} msg] $msg
  310. } {1 {expected integer but got "foo"}}
  311. test wm-grid-1.7 {usage} {
  312.     list [catch {wm grid . 13 14 bar 16} msg] $msg
  313. } {1 {expected integer but got "bar"}}
  314. test wm-grid-1.8 {usage} {
  315.     list [catch {wm grid . 13 14 15 baz} msg] $msg
  316. } {1 {expected integer but got "baz"}}
  317. test wm-grid-1.9 {usage} {
  318.     list [catch {wm grid . -1 14 15 16} msg] $msg
  319. } {1 {baseWidth can't be < 0}}
  320. test wm-grid-1.10 {usage} {
  321.     list [catch {wm grid . 13 -1 15 16} msg] $msg
  322. } {1 {baseHeight can't be < 0}}
  323. test wm-grid-1.11 {usage} {
  324.     list [catch {wm grid . 13 14 -1 16} msg] $msg
  325. } {1 {widthInc can't be <= 0}}
  326. test wm-grid-1.12 {usage} {
  327.     list [catch {wm grid . 13 14 15 -1} msg] $msg
  328. } {1 {heightInc can't be <= 0}}
  329. test wm-grid-2.1 {setting and reading values} {
  330.     set result {}
  331.     lappend result [wm grid .t]
  332.     wm grid .t 3 4 10 2
  333.     lappend result [wm grid .t]
  334.     wm grid .t {} {} {} {}
  335.     lappend result [wm grid .t]
  336. } [list {} {3 4 10 2} {}]
  337. test wm-group-1.1 {usage} {
  338.     list [catch {wm group} err] $err
  339. } {1 {wrong # args: should be "wm option window ?arg ...?"}}
  340. test wm-group-1.2 {usage} {
  341.     list [catch {wm group .t 12 13} msg] $msg
  342. } {1 {wrong # args: should be "wm group window ?pathName?"}}
  343. test wm-group-1.3 {usage} {
  344.     list [catch {wm group .t bogus} msg] $msg
  345. } {1 {bad window path name "bogus"}}
  346. test wm-group-2.1 {setting and reading values} {
  347.     set result {}
  348.     lappend result [wm group .t]
  349.     wm group .t .
  350.     lappend result [wm group .t]
  351.     wm group .t {}
  352.     lappend result [wm group .t]
  353. } [list {} . {}]
  354. test wm-iconbitmap-1.1 {usage} {
  355.     list [catch {wm iconbitmap} err] $err
  356. } {1 {wrong # args: should be "wm option window ?arg ...?"}}
  357. test wm-iconbitmap-1.2.1 {usage} {macOrUnix} {
  358.     list [catch {wm iconbitmap .t 12 13} msg] $msg
  359. } {1 {wrong # args: should be "wm iconbitmap window ?bitmap?"}}
  360. test wm-iconbitmap-1.2.2 {usage} {pcOnly} {
  361.     list [catch {wm iconbitmap .t 12 13 14} msg] $msg
  362. } {1 {wrong # args: should be "wm iconbitmap window ?-default? ?image?"}}
  363. test wm-iconbitmap-1.3 {usage} {pcOnly} {
  364.     list [catch {wm iconbitmap .t 12 13} msg] $msg
  365. } {1 {illegal option "12" must be "-default"}}
  366. test wm-iconbitmap-1.4 {usage} {
  367.     list [catch {wm iconbitmap .t bad-bitmap} msg] $msg
  368. } {1 {bitmap "bad-bitmap" not defined}}
  369. test wm-iconbitmap-2.1 {setting and reading values} {
  370.     set result {}
  371.     lappend result [wm iconbitmap .t]
  372.     wm iconbitmap .t hourglass
  373.     lappend result [wm iconbitmap .t]
  374.     wm iconbitmap .t {}
  375.     lappend result [wm iconbitmap .t]
  376. } [list {} hourglass {}]
  377. test wm-iconify-1.1 {usage} {
  378.     list [catch {wm iconify} err] $err
  379. } {1 {wrong # args: should be "wm option window ?arg ...?"}}
  380. test wm-iconify-1.2 {usage} {
  381.     list [catch {wm iconify .t _} msg] $msg
  382. } {1 {wrong # args: should be "wm iconify window"}}
  383. test wm-iconify-2.1 {Misc errors} {
  384.     catch {destroy .t2}
  385.     toplevel .t2
  386.     wm overrideredirect .t2 1
  387.     set result [list [catch {wm iconify .t2} msg] $msg]
  388.     destroy .t2
  389.     set result
  390. } {1 {can't iconify ".t2": override-redirect flag is set}}
  391. test wm-iconify-2.2 {Misc errors} {
  392.     catch {destroy .t2}
  393.     toplevel .t2
  394.     wm geom .t2 +0+0
  395.     wm transient .t2 .t
  396.     set result [list [catch {wm iconify .t2} msg] $msg]
  397.     destroy .t2
  398.     set result
  399. } {1 {can't iconify ".t2": it is a transient}}
  400. test wm-iconify-2.3 {Misc errors} {
  401.     catch {destroy .t2}
  402.     toplevel .t2
  403.     wm geom .t2 +0+0
  404.     wm iconwindow .t .t2
  405.     set result [list [catch {wm iconify .t2} msg] $msg]
  406.     destroy .t2
  407.     set result
  408. } {1 {can't iconify .t2: it is an icon for .t}}
  409. test wm-iconify-2.4 {Misc errors} {
  410.     catch {destroy .t2}
  411.     frame .t.f -container 1
  412.     toplevel .t2 -use [winfo id .t.f]
  413.     set result [list [catch {wm iconify .t2} msg] $msg]
  414.     destroy .t2 .r.f
  415.     set result
  416. } {1 {can't iconify .t2: it is an embedded window}}
  417. test wm-iconify-3.1 {} {
  418.     catch {destroy .t2}
  419.     toplevel .t2
  420.     wm geom .t2 -0+0
  421.     update
  422.     set result [winfo ismapped .t2]
  423.     wm iconify .t2
  424.     update
  425.     lappend result [winfo ismapped .t2]
  426.     destroy .t2
  427.     set result
  428. } {1 0}
  429. test wm-iconmask-1.1 {usage} {
  430.     list [catch {wm iconmask} err] $err
  431. } {1 {wrong # args: should be "wm option window ?arg ...?"}}
  432. test wm-iconmask-1.2 {usage} {
  433.     list [catch {wm iconmask .t 12 13} msg] $msg
  434. } {1 {wrong # args: should be "wm iconmask window ?bitmap?"}}
  435. test wm-iconmask-1.3 {usage} {
  436.     list [catch {wm iconmask .t bad-bitmap} msg] $msg
  437. } {1 {bitmap "bad-bitmap" not defined}}
  438. test wm-iconmask-2.1 {setting and reading values} {
  439.     set result {}
  440.     lappend result [wm iconmask .t]
  441.     wm iconmask .t hourglass
  442.     lappend result [wm iconmask .t]
  443.     wm iconmask .t {}
  444.     lappend result [wm iconmask .t]
  445. } [list {} hourglass {}]
  446. test wm-iconname-1.1 {usage} {
  447.     list [catch {wm iconname} err] $err
  448. } {1 {wrong # args: should be "wm option window ?arg ...?"}}
  449. test wm-iconname-1.2 {usage} {
  450.     list [catch {wm iconname .t 12 13} msg] $msg
  451. } {1 {wrong # args: should be "wm iconname window ?newName?"}}
  452. test wm-iconname-2.1 {setting and reading values} {
  453.     set result {}
  454.     lappend result [wm iconname .t]
  455.     wm iconname .t ThisIconHasAName
  456.     lappend result [wm iconname .t]
  457.     wm iconname .t {}
  458.     lappend result [wm iconname .t]
  459. } [list {} ThisIconHasAName {}]
  460. test wm-iconphoto-1.1 {usage} {
  461.     list [catch {wm iconphoto} err] $err
  462. } {1 {wrong # args: should be "wm option window ?arg ...?"}}
  463. test wm-iconphoto-1.2 {usage} {
  464.     list [catch {wm iconphoto .} msg] $msg
  465. } {1 {wrong # args: should be "wm iconphoto window ?-default? image1 ?image2 ...?"}}
  466. test wm-iconphoto-1.3 {usage} {
  467.     list [catch {wm iconphoto . notanimage} msg] $msg
  468. } {1 {can't use "notanimage" as iconphoto: not a photo image}}
  469. test wm-iconphoto-1.4 {usage} {
  470.     # we currently have no return info
  471.     list [catch {wm iconphoto . -default} msg] $msg
  472. } {1 {wrong # args: should be "wm iconphoto window ?-default? image1 ?image2 ...?"}}
  473. # All other iconphoto tests are platform specific
  474. test wm-iconposition-1.1 {usage} {
  475.     list [catch {wm iconposition} err] $err
  476. } {1 {wrong # args: should be "wm option window ?arg ...?"}}
  477. test wm-iconposition-1.2 {usage} {
  478.     list [catch {wm iconposition .t 12} msg] $msg
  479. } {1 {wrong # args: should be "wm iconposition window ?x y?"}}
  480. test wm-iconposition-1.3 {usage} {
  481.     list [catch {wm iconposition .t 12 13 14} msg] $msg
  482. } {1 {wrong # args: should be "wm iconposition window ?x y?"}}
  483. test wm-iconposition-1.4 {usage} {
  484.     list [catch {wm iconposition .t bad 13} msg] $msg
  485. } {1 {expected integer but got "bad"}}
  486. test wm-iconposition-1.5 {usage} {
  487.     list [catch {wm iconposition .t 13 lousy} msg] $msg
  488. } {1 {expected integer but got "lousy"}}
  489. test wm-iconposition-2.1 {setting and reading values} {
  490.     set result {}
  491.     lappend result [wm iconposition .t]
  492.     wm iconposition .t 10 20
  493.     lappend result [wm iconposition .t]
  494.     wm iconposition .t {} {}
  495.     lappend result [wm iconposition .t]
  496. } [list {} {10 20} {}]
  497. test wm-iconwindow-1.1 {usage} {
  498.     list [catch {wm iconwindow} err] $err
  499. } {1 {wrong # args: should be "wm option window ?arg ...?"}}
  500. test wm-iconwindow-1.2 {usage} {
  501.     list [catch {wm iconwindow .t 12 13} msg] $msg
  502. } {1 {wrong # args: should be "wm iconwindow window ?pathName?"}}
  503. test wm-iconwindow-1.3 {usage} {
  504.     list [catch {wm iconwindow .t bogus} msg] $msg
  505. } {1 {bad window path name "bogus"}}
  506. test wm-iconwindow-1.4 {usage} {
  507.     catch {destroy .b}
  508.     button .b -text Help
  509.     set result [list [catch {wm iconwindow .t .b} msg] $msg]
  510.     destroy .b
  511.     set result
  512. } {1 {can't use .b as icon window: not at top level}}
  513. test wm-iconwindow-1.5 {usage} {
  514.     catch {destroy .icon}
  515.     toplevel .icon -width 50 -height 50 -bg green
  516.     catch {destroy .t2}
  517.     toplevel .t2
  518.     wm geom .t2 -0+0
  519.     wm iconwindow .t2 .icon
  520.     set result [list [catch {wm iconwindow .t .icon} msg] $msg]
  521.     destroy .t2
  522.     destroy .icon
  523.     set result
  524. } {1 {.icon is already an icon for .t2}}
  525. test wm-iconwindow-2.1 {setting and reading values} {
  526.     set result {}
  527.     lappend result [wm iconwindow .t]
  528.     catch {destroy .icon}
  529.     toplevel .icon -width 50 -height 50 -bg green
  530.     wm iconwindow .t .icon
  531.     lappend result [wm iconwindow .t]
  532.     wm iconwindow .t {}
  533.     destroy .icon
  534.     lappend result [wm iconwindow .t]
  535. } [list {} .icon {}]
  536. test wm-maxsize-1.1 {usage} {
  537.     list [catch {wm maxsize} msg]  $msg
  538. } {1 {wrong # args: should be "wm option window ?arg ...?"}}
  539. test wm-maxsize-1.2 {usage} {
  540.     list [catch {wm maxsize . a} msg]  $msg
  541. } {1 {wrong # args: should be "wm maxsize window ?width height?"}}
  542. test wm-maxsize-1.3 {usage} {
  543.     list [catch {wm maxsize . a b c} msg]  $msg
  544. } {1 {wrong # args: should be "wm maxsize window ?width height?"}}
  545. test wm-maxsize-1.4 {usage} {
  546.     list [catch {wm maxsize . x 100} msg]  $msg
  547. } {1 {expected integer but got "x"}}
  548. test wm-maxsize-1.5 {usage} {
  549.     list [catch {wm maxsize . 100 bogus} msg]  $msg
  550. } {1 {expected integer but got "bogus"}}
  551. test wm-maxsize-1.6 {usage} {
  552.     catch {destroy .t2}
  553.     toplevel .t2
  554.     wm maxsize .t2 200 150
  555.     set result [wm maxsize .t2]
  556.     destroy .t2
  557.     set result
  558. } {200 150}
  559. test wm-minsize-1.1 {usage} {
  560.     list [catch {wm minsize} msg]  $msg
  561. } {1 {wrong # args: should be "wm option window ?arg ...?"}}
  562. test wm-minsize-1.2 {usage} {
  563.     list [catch {wm minsize . a} msg]  $msg
  564. } {1 {wrong # args: should be "wm minsize window ?width height?"}}
  565. test wm-minsize-1.3 {usage} {
  566.     list [catch {wm minsize . a b c} msg]  $msg
  567. } {1 {wrong # args: should be "wm minsize window ?width height?"}}
  568. test wm-minsize-1.4 {usage} {
  569.     list [catch {wm minsize . x 100} msg]  $msg
  570. } {1 {expected integer but got "x"}}
  571. test wm-minsize-1.5 {usage} {
  572.     list [catch {wm minsize . 100 bogus} msg]  $msg
  573. } {1 {expected integer but got "bogus"}}
  574. test wm-minsize-1.6 {usage} {
  575.     catch {destroy .t2}
  576.     toplevel .t2
  577.     wm minsize .t2 200 150
  578.     set result [wm minsize .t2]
  579.     destroy .t2
  580.     set result
  581. } {200 150}
  582. test wm-overrideredirect-1.1 {usage} {
  583.     list [catch {wm overrideredirect} msg]  $msg
  584. } {1 {wrong # args: should be "wm option window ?arg ...?"}}
  585. test wm-overrideredirect-1.2 {usage} {
  586.     list [catch {wm overrideredirect .t 1 2} msg]  $msg
  587. } {1 {wrong # args: should be "wm overrideredirect window ?boolean?"}}
  588. test wm-overrideredirect-1.3 {usage} {
  589.     list [catch {wm overrideredirect .t boo} msg]  $msg
  590. } {1 {expected boolean value but got "boo"}}
  591. test wm-overrideredirect-2.1 {setting and reading values} {
  592.     set result {}
  593.     lappend result [wm overrideredirect .t]
  594.     wm overrideredirect .t true
  595.     lappend result [wm overrideredirect .t]
  596.     wm overrideredirect .t off
  597.     lappend result [wm overrideredirect .t]
  598. } {0 1 0}
  599. test wm-positionfrom-1.1 {usage} {
  600.     list [catch {wm positionfrom} msg]  $msg
  601. } {1 {wrong # args: should be "wm option window ?arg ...?"}}
  602. test wm-positionfrom-1.2 {usage} {
  603.     list [catch {wm positionfrom .t 1 2} msg]  $msg
  604. } {1 {wrong # args: should be "wm positionfrom window ?user/program?"}}
  605. test wm-positionfrom-1.3 {usage} {
  606.     list [catch {wm positionfrom .t none} msg]  $msg
  607. } {1 {bad argument "none": must be program or user}}
  608. test wm-positionfrom-2.1 {setting and reading values} {
  609.     catch {destroy .t2}
  610.     toplevel .t2
  611.     set result {}
  612.     wm positionfrom .t user
  613.     lappend result [wm positionfrom .t]
  614.     wm positionfrom .t program
  615.     lappend result [wm positionfrom .t]
  616.     wm positionfrom .t {}
  617.     lappend result [wm positionfrom .t]
  618.     destroy .t2
  619.     set result
  620. } {user program {}}
  621. test wm-protocol-1.1 {usage} {
  622.     list [catch {wm protocol} msg]  $msg
  623. } {1 {wrong # args: should be "wm option window ?arg ...?"}}
  624. test wm-protocol-1.2 {usage} {
  625.     list [catch {wm protocol .t 1 2 3} msg]  $msg
  626. } {1 {wrong # args: should be "wm protocol window ?name? ?command?"}}
  627. test wm-protocol-2.1 {setting and reading values} {
  628.     wm protocol .t {foo a} {a b c}
  629.     wm protocol .t bar {test script for bar}
  630.     set result [wm protocol .t]
  631.     wm protocol .t {foo a} {}
  632.     wm protocol .t bar {}
  633.     set result
  634. } {bar {foo a}}
  635. test wm-protocol-2.2 {setting and reading values} {
  636.     set result {}
  637.     wm protocol .t foo {a b c}
  638.     wm protocol .t bar {test script for bar}
  639.     lappend result [wm protocol .t foo] [wm protocol .t bar]
  640.     wm protocol .t foo {}
  641.     wm protocol .t bar {}
  642.     lappend result [wm protocol .t foo] [wm protocol .t bar]
  643. } {{a b c} {test script for bar} {} {}}
  644. test wm-protocol-2.3 {setting and reading values} {
  645.     wm protocol .t foo {a b c}
  646.     wm protocol .t foo {test script}
  647.     set result [wm protocol .t foo]
  648.     wm protocol .t foo {}
  649.     set result
  650. } {test script}
  651. test wm-resizable-1.1 {usage} {
  652.     list [catch {wm resizable} msg]  $msg
  653. } {1 {wrong # args: should be "wm option window ?arg ...?"}}
  654. test wm-resizable-1.2 {usage} {
  655.     list [catch {wm resizable .t 1} msg]  $msg
  656. } {1 {wrong # args: should be "wm resizable window ?width height?"}}
  657. test wm-resizable-1.3 {usage} {
  658.     list [catch {wm resizable .t 1 2 3} msg]  $msg
  659. } {1 {wrong # args: should be "wm resizable window ?width height?"}}
  660. test wm-resizable-1.4 {usage} {
  661.     list [catch {wm resizable .t bad 0} msg]  $msg
  662. } {1 {expected boolean value but got "bad"}}
  663. test wm-resizable-1.5 {usage} {
  664.     list [catch {wm resizable .t 1 bad} msg]  $msg
  665. } {1 {expected boolean value but got "bad"}}
  666. test wm-resizable-2.1 {setting and reading values} {
  667.     wm resizable .t 0 1
  668.     set result [wm resizable .t]
  669.     wm resizable .t 1 0
  670.     lappend result [wm resizable .t]
  671.     wm resizable .t 1 1
  672.     lappend result [wm resizable .t]
  673. } {0 1 {1 0} {1 1}}
  674. test wm-sizefrom-1.1 {usage} {
  675.     list [catch {wm sizefrom} msg]  $msg
  676. } {1 {wrong # args: should be "wm option window ?arg ...?"}}
  677. test wm-sizefrom-1.2 {usage} {
  678.     list [catch {wm sizefrom .t 1 2} msg]  $msg
  679. } {1 {wrong # args: should be "wm sizefrom window ?user|program?"}}
  680. test wm-sizefrom-1.4 {usage} {
  681.     list [catch {wm sizefrom .t bad} msg]  $msg
  682. } {1 {bad argument "bad": must be program or user}}
  683. test wm-sizefrom-2.1 {setting and reading values} {
  684.     set result [list [wm sizefrom .t]]
  685.     wm sizefrom .t user
  686.     lappend result [wm sizefrom .t]
  687.     wm sizefrom .t program
  688.     lappend result [wm sizefrom .t]
  689.     wm sizefrom .t {}
  690.     lappend result [wm sizefrom .t]
  691. } {{} user program {}}
  692. test wm-stackorder-1.1 {usage} {
  693.     list [catch {wm stackorder} err] $err
  694. } {1 {wrong # args: should be "wm option window ?arg ...?"}}
  695. test wm-stackorder-1.2 {usage} {
  696.     list [catch {wm stackorder . _} err] $err
  697. } {1 {wrong # args: should be "wm stackorder window ?isabove|isbelow window?"}}
  698. test wm-stackorder-1.3 {usage} {
  699.     list [catch {wm stackorder . _ _ _} err] $err
  700. } {1 {wrong # args: should be "wm stackorder window ?isabove|isbelow window?"}}
  701. test wm-stackorder-1.4 {usage} {
  702.     list [catch {wm stackorder . is .} err] $err
  703. } {1 {ambiguous argument "is": must be isabove or isbelow}}
  704. test wm-stackorder-1.5 {usage} {
  705.     list [catch {wm stackorder _} err] $err
  706. } {1 {bad window path name "_"}}
  707. test wm-stackorder-1.6 {usage} {
  708.     list [catch {wm stackorder . isabove _} err] $err
  709. } {1 {bad window path name "_"}}
  710. test wm-stackorder-1.7 {usage} {
  711.     catch {destroy .t}
  712.     toplevel .t
  713.     button .t.b
  714.     list [catch {wm stackorder .t.b} err] $err
  715. } {1 {window ".t.b" isn't a top-level window}}
  716. test wm-stackorder-1.8 {usage} {
  717.     catch {destroy .t}
  718.     toplevel .t
  719.     button .t.b
  720.     pack .t.b
  721.     update
  722.     list [catch {wm stackorder . isabove .t.b} err] $err
  723. } {1 {window ".t.b" isn't a top-level window}}
  724. test wm-stackorder-1.9 {usage} {
  725.     catch {destroy .t}
  726.     toplevel .t
  727.     button .t.b
  728.     pack .t.b
  729.     update
  730.     list [catch {wm stackorder . isbelow .t.b} err] $err
  731. } {1 {window ".t.b" isn't a top-level window}}
  732. test wm-stackorder-1.10 {usage, isabove|isbelow toplevels must be mapped} {
  733.     catch {destroy .t}
  734.     toplevel .t ; update
  735.     wm withdraw .t
  736.     list [catch {wm stackorder .t isabove .} err] $err
  737. } {1 {window ".t" isn't mapped}}
  738. test wm-stackorder-1.11 {usage, isabove|isbelow toplevels must be mapped} {
  739.     catch {destroy .t}
  740.     toplevel .t ; update
  741.     wm withdraw .t
  742.     list [catch {wm stackorder . isbelow .t} err] $err
  743. } {1 {window ".t" isn't mapped}}
  744. deleteWindows
  745. test wm-stackorder-2.1 {} {
  746.     catch {destroy .t}
  747.     toplevel .t ; update
  748.     wm stackorder .
  749. } {. .t}
  750. test wm-stackorder-2.2 {} {
  751.     catch {destroy .t}
  752.     toplevel .t ; update
  753.     raise .
  754.     raiseDelay
  755.     wm stackorder .
  756. } {.t .}
  757. test wm-stackorder-2.3 {} {
  758.     catch {destroy .t}
  759.     toplevel .t ; update
  760.     catch {destroy .t2}
  761.     toplevel .t2 ; update
  762.     raise .
  763.     raise .t2
  764.     raiseDelay
  765.     wm stackorder .
  766. } {.t . .t2}
  767. test wm-stackorder-2.4 {} {
  768.     catch {destroy .t}
  769.     toplevel .t ; update
  770.     catch {destroy .t2}
  771.     toplevel .t2 ; update
  772.     raise .
  773.     lower .t2
  774.     raiseDelay
  775.     wm stackorder .
  776. } {.t2 .t .}
  777. test wm-stackorder-2.5 {} {
  778.     catch {destroy .parent}
  779.     toplevel .parent ; update
  780.     catch {destroy .parent.child1}
  781.     toplevel .parent.child1 ; update
  782.     catch {destroy .parent.child2}
  783.     toplevel .parent.child2 ; update
  784.     catch {destroy .extra}
  785.     toplevel .extra ; update
  786.     raise .parent
  787.     lower .parent.child2
  788.     raiseDelay
  789.     wm stackorder .parent
  790. } {.parent.child2 .parent.child1 .parent}
  791. deleteWindows
  792. test wm-stackorder-2.6 {non-toplevel widgets ignored} {
  793.     catch {destroy .t1}
  794.     toplevel .t1
  795.     button .t1.b
  796.     pack .t1.b
  797.     update
  798.     wm stackorder .
  799. } {. .t1}
  800. deleteWindows
  801. test wm-stackorder-2.7 {no children returns self} {
  802.     wm stackorder .
  803. } {.}
  804. deleteWindows
  805. test wm-stackorder-3.1 {unmapped toplevel} {
  806.     catch {destroy .t1}
  807.     toplevel .t1 ; update
  808.     catch {destroy .t2}
  809.     toplevel .t2 ; update
  810.     wm iconify .t1
  811.     wm stackorder .
  812. } {. .t2}
  813. test wm-stackorder-3.2 {unmapped toplevel} {
  814.     catch {destroy .t1}
  815.     toplevel .t1 ; update
  816.     catch {destroy .t2}
  817.     toplevel .t2 ; update
  818.     wm withdraw .t2
  819.     wm stackorder .
  820. } {. .t1}
  821. test wm-stackorder-3.3 {unmapped toplevel} {
  822.     catch {destroy .t1}
  823.     toplevel .t1 ; update
  824.     catch {destroy .t2}
  825.     toplevel .t2 ; update
  826.     wm withdraw .t2
  827.     wm stackorder .t2
  828. } {}
  829. test wm-stackorder-3.4 {unmapped toplevel} {
  830.     catch {destroy .t1}
  831.     toplevel .t1 ; update
  832.     toplevel .t1.t2 ; update
  833.     wm withdraw .t1.t2
  834.     wm stackorder .t1
  835. } {.t1}
  836. test wm-stackorder-3.5 {unmapped toplevel} {
  837.     catch {destroy .t1}
  838.     toplevel .t1 ; update
  839.     toplevel .t1.t2 ; update
  840.     wm withdraw .t1
  841.     wm stackorder .t1
  842. } {.t1.t2}
  843. test wm-stackorder-3.6 {unmapped toplevel} {
  844.     catch {destroy .t1}
  845.     toplevel .t1 ; update
  846.     toplevel .t1.t2 ; update
  847.     toplevel .t1.t2.t3 ; update
  848.     wm withdraw .t1.t2
  849.     wm stackorder .t1
  850. } {.t1 .t1.t2.t3}
  851. test wm-stackorder-3.7 {unmapped toplevel, mapped children returned} {
  852.     catch {destroy .t1}
  853.     toplevel .t1 ; update
  854.     toplevel .t1.t2 ; update
  855.     wm withdraw .t1
  856.     wm stackorder .t1
  857. } {.t1.t2}
  858. test wm-stackorder-3.8 {toplevel mapped in idle callback } {
  859.     catch {destroy .t1}
  860.     toplevel .t1
  861.     wm stackorder .
  862. } {.}
  863. deleteWindows
  864. test wm-stackorder-4.1 {wm stackorder isabove|isbelow} {
  865.     catch {destroy .t}
  866.     toplevel .t ; update
  867.     raise .t
  868.     wm stackorder . isabove .t
  869. } {0}
  870. test wm-stackorder-4.2 {wm stackorder isabove|isbelow} {
  871.     catch {destroy .t}
  872.     toplevel .t ; update
  873.     raise .t
  874.     wm stackorder . isbelow .t
  875. } {1}
  876. test wm-stackorder-4.3 {wm stackorder isabove|isbelow} {
  877.     catch {destroy .t}
  878.     toplevel .t ; update
  879.     raise .
  880.     raiseDelay
  881.     wm stackorder .t isa .
  882. } {0}
  883. test wm-stackorder-4.4 {wm stackorder isabove|isbelow} {
  884.     catch {destroy .t}
  885.     toplevel .t ; update
  886.     raise .
  887.     raiseDelay
  888.     wm stackorder .t isb .
  889. } {1}
  890. deleteWindows
  891. test wm-stackorder-5.1 {a menu is not a toplevel} {
  892.     catch {destroy .t}
  893.     toplevel .t
  894.     menu .t.m -type menubar
  895.     .t.m add cascade -label "File"
  896.     .t configure -menu .t.m
  897.     update
  898.     raise .
  899.     raiseDelay
  900.     wm stackorder .
  901. } {.t .}
  902. test wm-stackorder-5.2 {A normal toplevel can't be
  903.         raised above an overrideredirect toplevel } {
  904.     catch {destroy .t}
  905.     toplevel .t
  906.     wm overrideredirect .t 1
  907.     raise .
  908.     update
  909.     raiseDelay
  910.     wm stackorder . isabove .t
  911. } 0
  912. test wm-stackorder-5.3 {An overrideredirect window
  913.         can be explicitly lowered } {
  914.     catch {destroy .t}
  915.     toplevel .t
  916.     wm overrideredirect .t 1
  917.     lower .t
  918.     update
  919.     raiseDelay
  920.     wm stackorder .t isbelow .
  921. } 1
  922. test wm-stackorder-6.1 {An embedded toplevel does not
  923.         appear in the stacking order} {
  924.     deleteWindows
  925.     toplevel .real -container 1
  926.     toplevel .embd -bg blue -use [winfo id .real]
  927.     update
  928.     wm stackorder .
  929. } {. .real}
  930. stdWindow
  931. test wm-title-1.1 {usage} {
  932.     list [catch {wm title} msg]  $msg
  933. } {1 {wrong # args: should be "wm option window ?arg ...?"}}
  934. test wm-title-1.2 {usage} {
  935.     list [catch {wm title . 1 2} msg]  $msg
  936. } {1 {wrong # args: should be "wm title window ?newTitle?"}}
  937. test wm-title-2.1 {setting and reading values} {
  938.     destroy .t
  939.     toplevel .t
  940.     set result [wm title .t]
  941.     wm title .t Apa
  942.     lappend result [wm title .t]
  943.     wm title .t {}
  944.     lappend result [wm title .t]
  945. } {t Apa {}}
  946. test wm-transient-1.1 {usage} {
  947.     catch {destroy .t} ; toplevel .t
  948.     list [catch {wm transient .t 1 2} msg]  $msg
  949. } {1 {wrong # args: should be "wm transient window ?master?"}}
  950. test wm-transient-1.2 {usage} {
  951.     catch {destroy .t} ; toplevel .t
  952.     list [catch {wm transient .t foo} msg]  $msg
  953. } {1 {bad window path name "foo"}}
  954. test wm-transient-1.3 {usage} {
  955.     catch {destroy .t} ; toplevel .t
  956.     list [catch {wm transient foo .t} msg]  $msg
  957. } {1 {bad window path name "foo"}}
  958. test wm-transient-1.4 {usage} {
  959.     deleteWindows
  960.     toplevel .master
  961.     toplevel .subject
  962.     wm transient .subject .master
  963.     list [catch {wm iconify .subject} msg] $msg
  964. } {1 {can't iconify ".subject": it is a transient}}
  965. test wm-transient-1.5 {usage} {
  966.     deleteWindows
  967.     toplevel .icon -bg blue
  968.     toplevel .top
  969.     wm iconwindow .top .icon
  970.     toplevel .dummy
  971.     list [catch {wm transient .icon .dummy} msg] $msg
  972. } {1 {can't make ".icon" a transient: it is an icon for .top}}
  973. test wm-transient-1.6 {usage} {
  974.     deleteWindows
  975.     toplevel .icon -bg blue
  976.     toplevel .top
  977.     wm iconwindow .top .icon
  978.     toplevel .dummy
  979.     list [catch {wm transient .dummy .icon} msg] $msg
  980. } {1 {can't make ".icon" a master: it is an icon for .top}}
  981. test wm-transient-1.7 {usage} {
  982.     deleteWindows
  983.     toplevel .master
  984.     list [catch {wm transient .master .master} err] $err
  985. } {1 {can't make ".master" its own master}}
  986. test wm-transient-1.8 {usage} {
  987.     deleteWindows
  988.     toplevel .master
  989.     frame .master.f
  990.     list [catch {wm transient .master .master.f} err] $err
  991. } {1 {can't make ".master" its own master}}
  992. test wm-transient-2.1 { basic get/set of master } {
  993.     deleteWindows
  994.     set results [list]    
  995.     toplevel .master
  996.     toplevel .subject
  997.     lappend results [wm transient .subject]
  998.     wm transient .subject .master
  999.     lappend results [wm transient .subject]
  1000.     wm transient .subject {}
  1001.     lappend results [wm transient .subject]
  1002.     set results
  1003. } {{} .master {}}
  1004. test wm-transient-2.2 { first toplevel parent of
  1005.         non-toplevel master is used } {
  1006.     deleteWindows
  1007.     toplevel .master
  1008.     frame .master.f
  1009.     toplevel .subject
  1010.     wm transient .subject .master.f
  1011.     wm transient .subject
  1012. } {.master}
  1013. test wm-transient-3.1 { transient toplevel is withdrawn
  1014.         when mapped if master is withdrawn } {
  1015.     deleteWindows
  1016.     toplevel .master
  1017.     wm withdraw .master
  1018.     update
  1019.     toplevel .subject
  1020.     wm transient .subject .master
  1021.     update
  1022.     list [wm state .subject] [winfo ismapped .subject]
  1023. } {withdrawn 0}
  1024. test wm-transient-3.2 { already mapped transient toplevel
  1025.         takes on withdrawn state of master } {
  1026.     deleteWindows
  1027.     toplevel .master
  1028.     wm withdraw .master
  1029.     update
  1030.     toplevel .subject
  1031.     update
  1032.     wm transient .subject .master
  1033.     update
  1034.     list [wm state .subject] [winfo ismapped .subject]
  1035. } {withdrawn 0}
  1036. test wm-transient-3.3 { withdraw/deiconify on the master
  1037.         also does a withdraw/deiconify on the transient } {
  1038.     deleteWindows
  1039.     set results [list]
  1040.     toplevel .master
  1041.     toplevel .subject
  1042.     update
  1043.     wm transient .subject .master
  1044.     wm withdraw .master
  1045.     update
  1046.     lappend results [wm state .subject] 
  1047.         [winfo ismapped .subject]
  1048.     wm deiconify .master
  1049.     update
  1050.     lappend results [wm state .subject] 
  1051.         [winfo ismapped .subject]
  1052.     set results
  1053. } {withdrawn 0 normal 1}
  1054. test wm-transient-4.1 { transient toplevel is withdrawn
  1055.         when mapped if master is iconic } {
  1056.     deleteWindows
  1057.     toplevel .master
  1058.     wm iconify .master
  1059.     update
  1060.     toplevel .subject
  1061.     wm transient .subject .master
  1062.     update
  1063.     list [wm state .subject] [winfo ismapped .subject]
  1064. } {withdrawn 0}
  1065. test wm-transient-4.2 { already mapped transient toplevel
  1066.         is withdrawn if master is iconic } {
  1067.     deleteWindows
  1068.     toplevel .master
  1069.     wm iconify .master
  1070.     update
  1071.     toplevel .subject
  1072.     update
  1073.     wm transient .subject .master
  1074.     update
  1075.     list [wm state .subject] [winfo ismapped .subject]
  1076. } {withdrawn 0}
  1077. test wm-transient-4.3 { iconify/deiconify on the master
  1078.         does a withdraw/deiconify on the transient } {
  1079.     deleteWindows
  1080.     set results [list]
  1081.     toplevel .master
  1082.     toplevel .subject
  1083.     update
  1084.     wm transient .subject .master
  1085.     wm iconify .master
  1086.     update
  1087.     lappend results [wm state .subject] 
  1088.         [winfo ismapped .subject]
  1089.     wm deiconify .master
  1090.     update
  1091.     lappend results [wm state .subject] 
  1092.         [winfo ismapped .subject]
  1093.     set results
  1094. } {withdrawn 0 normal 1}
  1095. test wm-transient-5.1 { an error during transient command should not
  1096.         cause the map/unmap binding to be deleted } {
  1097.     deleteWindows
  1098.     set results [list]
  1099.     toplevel .master
  1100.     toplevel .subject
  1101.     update
  1102.     wm transient .subject .master
  1103.     # Expect a bad window path error here
  1104.     lappend results [catch {wm transient .subject .bad}]
  1105.     wm withdraw .master
  1106.     update
  1107.     lappend results [wm state .subject]
  1108.     wm deiconify .master
  1109.     update
  1110.     lappend results [wm state .subject]
  1111.     set results
  1112. } {1 withdrawn normal}
  1113. test wm-transient-5.2 { remove transient property when master
  1114.         is destroyed } {
  1115.     deleteWindows
  1116.     toplevel .master
  1117.     toplevel .subject
  1118.     wm transient .subject .master
  1119.     update
  1120.     destroy .master
  1121.     update
  1122.     wm transient .subject
  1123. } {}
  1124. test wm-transient-5.3 { remove transient property from window
  1125.         that had never been mapped when master is destroyed } {
  1126.     deleteWindows
  1127.     toplevel .master
  1128.     toplevel .subject
  1129.     wm transient .subject .master
  1130.     destroy .master
  1131.     wm transient .subject
  1132. } {}
  1133. test wm-transient-6.1 { a withdrawn transient does not track
  1134.         state changes in the master } {
  1135.     deleteWindows
  1136.     toplevel .master
  1137.     toplevel .subject
  1138.     update
  1139.     wm transient .subject .master
  1140.     wm withdraw .subject
  1141.     wm withdraw .master
  1142.     wm deiconify .master
  1143.     # idle handler should not map the transient
  1144.     update
  1145.     wm state .subject
  1146. } {withdrawn}
  1147. test wm-transient-6.2 { a withdrawn transient does not track
  1148.         state changes in the master } {
  1149.     set results [list]
  1150.     deleteWindows
  1151.     toplevel .master
  1152.     toplevel .subject
  1153.     update
  1154.     wm transient .subject .master
  1155.     wm withdraw .subject
  1156.     wm withdraw .master
  1157.     wm deiconify .master
  1158.     # idle handler should not map the transient
  1159.     update
  1160.     lappend results [wm state .subject]
  1161.     wm deiconify .subject
  1162.     lappend results [wm state .subject]
  1163.     wm withdraw .master
  1164.     lappend results [wm state .subject]
  1165.     wm deiconify .master
  1166.     # idle handler should map transient
  1167.     update
  1168.     lappend results [wm state .subject]
  1169. } {withdrawn normal withdrawn normal}
  1170. test wm-transient-6.3 { a withdrawn transient does not track
  1171.         state changes in the master } {
  1172.     deleteWindows
  1173.     toplevel .master
  1174.     toplevel .subject
  1175.     update
  1176.     # withdraw before making window a transient
  1177.     wm withdraw .subject
  1178.     wm transient .subject .master
  1179.     wm withdraw .master
  1180.     wm deiconify .master
  1181.     # idle handler should not map the transient
  1182.     update
  1183.     wm state .subject
  1184. } {withdrawn}
  1185. # wm-transient-7.*: See SF Tk Bug #592201 "wm transient fails with two masters"
  1186. # wm-transient-7.3 through 7.5 all caused panics on Unix in Tk 8.4b1.
  1187. # 7.1 and 7.2 added to catch (potential) future errors.
  1188. #
  1189. test wm-transient-7.1 {Destroying transient} {
  1190.     deleteWindows
  1191.     toplevel .t 
  1192.     toplevel .transient 
  1193.     wm transient .transient .t
  1194.     destroy .transient
  1195.     destroy .t
  1196.     # OK: the above did not cause a panic.
  1197. } {}
  1198. test wm-transient-7.2 {Destroying master} {
  1199.     deleteWindows
  1200.     toplevel .t
  1201.     toplevel .transient 
  1202.     wm transient .transient .t
  1203.     destroy .t
  1204.     set result [wm transient .transient]
  1205.     destroy .transient
  1206.     set result
  1207. } {}
  1208. test wm-transient-7.3 {Reassign transient, destroy old master} {
  1209.     deleteWindows
  1210.     toplevel .t1 
  1211.     toplevel .t2 
  1212.     toplevel .transient
  1213.     wm transient .transient .t1
  1214.     wm transient .transient .t2
  1215.     destroy .t1 ;# Caused panic in 8.4b1
  1216.     destroy .t2 
  1217.     destroy .transient
  1218. } {}
  1219. test wm-transient-7.4 {Reassign transient, destroy new master} {
  1220.     deleteWindows
  1221.     toplevel .t1 
  1222.     toplevel .t2 
  1223.     toplevel .transient
  1224.     wm transient .transient .t1
  1225.     wm transient .transient .t2
  1226.     destroy .t2  ;# caused panic in 8.4b1
  1227.     destroy .t1
  1228.     destroy .transient
  1229. } {}
  1230. test wm-transient-7.5 {Reassign transient, destroy transient} {
  1231.     deleteWindows
  1232.     toplevel .t1 
  1233.     toplevel .t2 
  1234.     toplevel .transient
  1235.     wm transient .transient .t1
  1236.     wm transient .transient .t2
  1237.     destroy .transient
  1238.     destroy .t2  ;# caused panic in 8.4b1
  1239.     destroy .t1 ;# so did this
  1240. } {}
  1241. test wm-state-1.1 {usage} {
  1242.     list [catch {wm state} err] $err
  1243. } {1 {wrong # args: should be "wm option window ?arg ...?"}}
  1244. test wm-state-1.2 {usage} {
  1245.     list [catch {wm state . _ _} err] $err
  1246. } {1 {wrong # args: should be "wm state window ?state?"}}
  1247. test wm-state-2.1 {initial state} {
  1248.     deleteWindows
  1249.     toplevel .t
  1250.     wm state .t
  1251. } {normal}
  1252. test wm-state-2.2 {state change before map} {
  1253.     deleteWindows
  1254.     toplevel .t
  1255.     wm state .t withdrawn
  1256.     wm state .t
  1257. } {withdrawn}
  1258. test wm-state-2.3 {state change before map} {
  1259.     deleteWindows
  1260.     toplevel .t
  1261.     wm withdraw .t
  1262.     wm state .t
  1263. } {withdrawn}
  1264. test wm-state-2.4 {state change after map} {
  1265.     deleteWindows
  1266.     toplevel .t
  1267.     update
  1268.     wm state .t withdrawn
  1269.     wm state .t
  1270. } {withdrawn}
  1271. test wm-state-2.5 {state change after map} {
  1272.     deleteWindows
  1273.     toplevel .t
  1274.     update
  1275.     wm withdraw .t
  1276.     wm state .t
  1277. } {withdrawn}
  1278. test wm-state-2.6 {state change before map} {
  1279.     deleteWindows
  1280.     toplevel .t
  1281.     wm state .t iconic
  1282.     wm state .t
  1283. } {iconic}
  1284. test wm-state-2.7 {state change before map} {
  1285.     deleteWindows
  1286.     toplevel .t
  1287.     wm iconify .t
  1288.     wm state .t
  1289. } {iconic}
  1290. test wm-state-2.8 {state change after map} {
  1291.     deleteWindows
  1292.     toplevel .t
  1293.     update
  1294.     wm state .t iconic
  1295.     wm state .t
  1296. } {iconic}
  1297. test wm-state-2.9 {state change after map} {
  1298.     deleteWindows
  1299.     toplevel .t
  1300.     update
  1301.     wm iconify .t
  1302.     wm state .t
  1303. } {iconic}
  1304. test wm-state-2.10 {state change before map} {
  1305.     deleteWindows
  1306.     toplevel .t
  1307.     wm withdraw .t
  1308.     wm state .t normal
  1309.     wm state .t
  1310. } {normal}
  1311. test wm-state-2.11 {state change before map} {
  1312.     deleteWindows
  1313.     toplevel .t
  1314.     wm withdraw .t
  1315.     wm deiconify .t
  1316.     wm state .t
  1317. } {normal}
  1318. test wm-state-2.12 {state change after map} {
  1319.     deleteWindows
  1320.     toplevel .t
  1321.     update
  1322.     wm withdraw .t
  1323.     wm state .t normal
  1324.     wm state .t
  1325. } {normal}
  1326. test wm-state-2.13 {state change after map} {
  1327.     deleteWindows
  1328.     toplevel .t
  1329.     update
  1330.     wm withdraw .t
  1331.     wm deiconify .t
  1332.     wm state .t
  1333. } {normal}
  1334. test wm-state-2.14 {state change before map} {
  1335.     deleteWindows
  1336.     toplevel .t
  1337.     wm iconify .t
  1338.     wm state .t normal
  1339.     wm state .t
  1340. } {normal}
  1341. test wm-state-2.15 {state change before map} {
  1342.     deleteWindows
  1343.     toplevel .t
  1344.     wm iconify .t
  1345.     wm deiconify .t
  1346.     wm state .t
  1347. } {normal}
  1348. test wm-state-2.16 {state change after map} {
  1349.     deleteWindows
  1350.     toplevel .t
  1351.     update
  1352.     wm iconify .t
  1353.     wm state .t normal
  1354.     wm state .t
  1355. } {normal}
  1356. test wm-state-2.17 {state change after map} {
  1357.     deleteWindows
  1358.     toplevel .t
  1359.     update
  1360.     wm iconify .t
  1361.     wm deiconify .t
  1362.     wm state .t
  1363. } {normal}
  1364. test wm-state-2.18 {state change after map} {pcOnly} {
  1365.     deleteWindows
  1366.     toplevel .t
  1367.     update
  1368.     wm state .t zoomed
  1369.     wm state .t
  1370. } {zoomed}
  1371. test wm-withdraw-1.1 {usage} {
  1372.     list [catch {wm withdraw} err] $err
  1373. } {1 {wrong # args: should be "wm option window ?arg ...?"}}
  1374. test wm-withdraw-1.2 {usage} {
  1375.     list [catch {wm withdraw . _} msg] $msg
  1376. } {1 {wrong # args: should be "wm withdraw window"}}
  1377. test wm-withdraw-2.1 {Misc errors} {
  1378.     deleteWindows
  1379.     toplevel .t
  1380.     toplevel .t2
  1381.     wm iconwindow .t .t2
  1382.     set result [list [catch {wm withdraw .t2} msg] $msg]
  1383.     destroy .t2
  1384.     set result
  1385. } {1 {can't withdraw .t2: it is an icon for .t}}
  1386. test wm-withdraw-3.1 {} {
  1387.     update
  1388.     set result {}
  1389.     wm withdraw .t
  1390.     lappend result [wm state .t] [winfo ismapped .t]
  1391.     wm deiconify .t
  1392.     lappend result [wm state .t] [winfo ismapped .t]
  1393. } {withdrawn 0 normal 1}
  1394. test wm-deletion-epoch-1.1 {Deletion epoch on multiple displays} {altDisplay} {
  1395.     # See Tk Bug #671330 "segfault when e.g. deiconifying destroyed window"
  1396.     deleteWindows
  1397.     set w [toplevel .t -screen $env(TK_ALT_DISPLAY)]
  1398.     wm deiconify $w         ;# this caches the WindowRep
  1399.     destroy .t
  1400.     list [catch {wm deiconify $w} msg] $msg
  1401. } {1 {bad window path name ".t"}}
  1402. # FIXME:
  1403. # Test delivery of virtual events to the WM. We could check to see
  1404. # if the window was raised after a button click for example.
  1405. # This sort of testing may not be possible.
  1406. deleteWindows
  1407. tcltest::cleanupTests
  1408. return