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

通讯编程

开发平台:

Visual C++

  1. # This file is a Tcl script to test spinbox widgets in Tk.  It is
  2. # organized in the standard fashion for Tcl tests.
  3. #
  4. # Copyright (c) 1998-2000 by Scriptics Corporation.
  5. # All rights reserved.
  6. #
  7. # RCS: @(#) $Id: spinbox.test,v 1.5.2.1 2003/03/13 19:33:48 dgp Exp $
  8. package require tcltest 2.1
  9. namespace import -force tcltest::configure
  10. namespace import -force tcltest::testsDirectory
  11. configure -testdir [file join [pwd] [file dirname [info script]]]
  12. configure -loadfile [file join [testsDirectory] constraints.tcl]
  13. tcltest::loadTestedCommands
  14. proc scroll args {
  15.     global scrollInfo
  16.     set scrollInfo $args
  17. }
  18. # Create additional widget that's used to hold the selection at times.
  19. spinbox .sel
  20. .sel insert end "This is some sample text"
  21. # Font names
  22. set big -adobe-helvetica-medium-r-normal--24-240-75-75-p-*-iso8859-1
  23. set fixed -adobe-courier-medium-r-normal--12-120-75-75-m-*-iso8859-1
  24. # Create entries in the option database to be sure that geometry options
  25. # like border width have predictable values.
  26. option add *Spinbox.borderWidth 2
  27. option add *Spinbox.highlightThickness 2
  28. option add *Spinbox.font {Helvetica -12}
  29. spinbox .e -bd 2 -relief sunken
  30. pack .e
  31. update
  32. set i 1
  33. foreach test {
  34.     {-activebackground #ff0000 #ff0000 non-existent
  35.     {unknown color name "non-existent"}}
  36.     {-background #ff0000 #ff0000 non-existent
  37.     {unknown color name "non-existent"}}
  38.     {-bd 4 4 badValue {bad screen distance "badValue"}}
  39.     {-bg #ff0000 #ff0000 non-existent {unknown color name "non-existent"}}
  40.     {-borderwidth 1.3 1 badValue {bad screen distance "badValue"}}
  41.     {-buttonbackground #ff0000 #ff0000 non-existent
  42.     {unknown color name "non-existent"}}
  43.     {-buttoncursor arrow arrow badValue {bad cursor spec "badValue"}}
  44.     {-command {a command} {a command} {} {}}
  45.     {-cursor arrow arrow badValue {bad cursor spec "badValue"}}
  46.     {-disabledbackground green green non-existent 
  47. {unknown color name "non-existent"}}
  48.     {-disabledforeground #110022 #110022 bogus {unknown color name "bogus"}}
  49.     {-exportselection yes 1 xyzzy {expected boolean value but got "xyzzy"}}
  50.     {-fg #110022 #110022 bogus {unknown color name "bogus"}}
  51.     {-font -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-*
  52. -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-* {}
  53. {font "" doesn't exist}}
  54.     {-foreground #110022 #110022 bogus {unknown color name "bogus"}}
  55.     {-format %0.5f %0.5f %d {bad spinbox format specifier "%d"}}
  56.     {-from -10 -10.0 bogus {expected floating-point number but got "bogus"}}
  57.     {-highlightbackground #123456 #123456 ugly {unknown color name "ugly"}}
  58.     {-highlightcolor #123456 #123456 bogus {unknown color name "bogus"}}
  59.     {-highlightthickness 6 6 bogus {bad screen distance "bogus"}}
  60.     {-highlightthickness -2 0 {} {}}
  61.     {-increment 1.0 1.0 bogus {expected floating-point number but got "bogus"}}
  62.     {-insertbackground #110022 #110022 bogus {unknown color name "bogus"}}
  63.     {-insertborderwidth 1.3 1 2.6x {bad screen distance "2.6x"}}
  64.     {-insertofftime 100 100 3.2 {expected integer but got "3.2"}}
  65.     {-insertontime 100 100 3.2 {expected integer but got "3.2"}}
  66.     {-invalidcommand "a command" "a command" {} {}}
  67.     {-invcmd "a command" "a command" {} {}}
  68.     {-justify right right bogus {bad justification "bogus": must be left, right, or center}}
  69.     {-readonlybackground green green non-existent 
  70. {unknown color name "non-existent"}}
  71.     {-relief groove groove 1.5 {bad relief "1.5": must be flat, groove, raised, ridge, solid, or sunken}}
  72.     {-repeatdelay 500 500 3p {expected integer but got "3p"}}
  73.     {-repeatinterval -500 -500 3p {expected integer but got "3p"}}
  74.     {-selectbackground #110022 #110022 bogus {unknown color name "bogus"}}
  75.     {-selectborderwidth 1.3 1 badValue {bad screen distance "badValue"}}
  76.     {-selectforeground #654321 #654321 bogus {unknown color name "bogus"}}
  77.     {-state n normal bogus {bad state "bogus": must be disabled, normal, or readonly}}
  78.     {-takefocus "any string" "any string" {} {}}
  79.     {-textvariable i i {} {}}
  80.     {-to 14.9 14.9 bogus {expected floating-point number but got "bogus"}}
  81.     {-validate "key" "key" "bogus" {bad validate "bogus": must be all, key, focus, focusin, focusout, or none}}
  82.     {-validatecommand "a command" "a command" {} {}}
  83.     {-values {mon tue wed thur} {mon tue wed thur} {bad {}list} {list element in braces followed by "list" instead of space}}
  84.     {-vcmd "a command" "a command" {} {}}
  85.     {-width 402 402 3p {expected integer but got "3p"}}
  86.     {-wrap yes 1 xyzzy {expected boolean value but got "xyzzy"}}
  87.     {-xscrollcommand {Some command} {Some command} {} {}}
  88. } {
  89.     set name [lindex $test 0]
  90.     test spinbox-1.$i {configuration options} {
  91. .e configure $name [lindex $test 1]
  92. list [lindex [.e configure $name] 4] [.e cget $name]
  93.     } [list [lindex $test 2] [lindex $test 2]]
  94.     incr i
  95.     if {[lindex $test 3] != ""} {
  96. test spinbox-1.$i {configuration options} {
  97.     list [catch {.e configure $name [lindex $test 3]} msg] $msg
  98. } [list 1 [lindex $test 4]]
  99.     }
  100.     .e configure $name [lindex [.e configure $name] 3]
  101.     incr i
  102. }
  103. test spinbox-2.1 {Tk_SpinboxCmd procedure} {
  104.     list [catch {spinbox} msg] $msg
  105. } {1 {wrong # args: should be "spinbox pathName ?options?"}}
  106. test spinbox-2.2 {Tk_SpinboxCmd procedure} {
  107.     list [catch {spinbox gorp} msg] $msg
  108. } {1 {bad window path name "gorp"}}
  109. test spinbox-2.3 {Tk_SpinboxCmd procedure} {
  110.     catch {destroy .e}
  111.     spinbox .e
  112.     list [winfo exists .e] [winfo class .e] [info commands .e]
  113. } {1 Spinbox .e}
  114. test spinbox-2.4 {Tk_SpinboxCmd procedure} {
  115.     catch {destroy .e}
  116.     list [catch {spinbox .e -gorp foo} msg] $msg [winfo exists .e] 
  117.     [info commands .e]
  118. } {1 {unknown option "-gorp"} 0 {}}
  119. test spinbox-2.5 {Tk_SpinboxCmd procedure} {
  120.     catch {destroy .e}
  121.     spinbox .e
  122. } {.e}
  123. catch {destroy .e}
  124. spinbox .e -font $fixed
  125. pack .e
  126. update
  127. set cx [font measure $fixed a]
  128. set cy [font metrics $fixed -linespace]
  129. set ux [font measure $fixed u4e4e]
  130. test spinbox-3.1 {SpinboxWidgetCmd procedure} {
  131.     list [catch {.e} msg] $msg
  132. } {1 {wrong # args: should be ".e option ?arg arg ...?"}}
  133. test spinbox-3.2 {SpinboxWidgetCmd procedure, "bbox" widget command} {
  134.     list [catch {.e bbox} msg] $msg
  135. } {1 {wrong # args: should be ".e bbox index"}}
  136. test spinbox-3.3 {SpinboxWidgetCmd procedure, "bbox" widget command} {
  137.     list [catch {.e bbox a b} msg] $msg
  138. } {1 {wrong # args: should be ".e bbox index"}}
  139. test spinbox-3.4 {SpinboxWidgetCmd procedure, "bbox" widget command} {
  140.     list [catch {.e bbox bogus} msg] $msg
  141. } {1 {bad spinbox index "bogus"}}
  142. test spinbox-3.5 {SpinboxWidgetCmd procedure, "bbox" widget command} {
  143.     .e delete 0 end
  144.     .e bbox 0
  145. } [list 5 5 0 $cy]
  146. test spinbox-3.6 {SpinboxWidgetCmd procedure, "bbox" widget command} {
  147.     # Tcl_UtfAtIndex(): no utf chars
  148.     .e delete 0 end
  149.     .e insert 0 "abc"
  150.     list [.e bbox 3] [.e bbox end]
  151. } [list "[expr 5+2*$cx] 5 $cx $cy" "[expr 5+2*$cx] 5 $cx $cy"]
  152. test spinbox-3.7 {SpinboxWidgetCmd procedure, "bbox" widget command} {
  153.     # Tcl_UtfAtIndex(): utf at end
  154.     .e delete 0 end
  155.     .e insert 0 "abu4e4e"
  156.     .e bbox end
  157. } "[expr 5+2*$cx] 5 $ux $cy"
  158. test spinbox-3.8 {SpinboxWidgetCmd procedure, "bbox" widget command} {
  159.     # Tcl_UtfAtIndex(): utf before index
  160.     .e delete 0 end
  161.     .e insert 0 "abu4e4ec"
  162.     .e bbox 3
  163. } "[expr 5+2*$cx+$ux] 5 $cx $cy"
  164. test spinbox-3.9 {SpinboxWidgetCmd procedure, "bbox" widget command} {
  165.     # Tcl_UtfAtIndex(): no chars
  166.     .e delete 0 end
  167.     .e bbox end
  168. } "5 5 0 $cy"
  169. test spinbox-3.10 {SpinboxWidgetCmd procedure, "bbox" widget command} {
  170.     .e delete 0 end
  171.     .e insert 0 "abcdefghiju4e4eklmnop"
  172.     list [.e bbox 0] [.e bbox 1] [.e bbox 10] [.e bbox end]
  173. } [list "5 5 $cx $cy" "[expr 5+$cx] 5 $cx $cy" "[expr 5+10*$cx] 5 $ux $cy" "[expr 5+$ux+15*$cx] 5 $cx $cy"]
  174. test spinbox-3.11 {SpinboxWidgetCmd procedure, "cget" widget command} {
  175.     list [catch {.e cget} msg] $msg
  176. } {1 {wrong # args: should be ".e cget option"}}
  177. test spinbox-3.12 {SpinboxWidgetCmd procedure, "cget" widget command} {
  178.     list [catch {.e cget a b} msg] $msg
  179. } {1 {wrong # args: should be ".e cget option"}}
  180. test spinbox-3.13 {SpinboxWidgetCmd procedure, "cget" widget command} {
  181.     list [catch {.e cget -gorp} msg] $msg
  182. } {1 {unknown option "-gorp"}}
  183. test spinbox-3.14 {SpinboxWidgetCmd procedure, "cget" widget command} {
  184.     .e configure -bd 4
  185.     .e cget -bd
  186. } {4}
  187. test spinbox-3.15 {SpinboxWidgetCmd procedure, "configure" widget command} {
  188.     llength [.e configure]
  189. } {49}
  190. test spinbox-3.16 {SpinboxWidgetCmd procedure, "configure" widget command} {
  191.     list [catch {.e configure -foo} msg] $msg
  192. } {1 {unknown option "-foo"}}
  193. test spinbox-3.17 {SpinboxWidgetCmd procedure, "configure" widget command} {
  194.     .e configure -bd 4
  195.     .e configure -bg #ffffff
  196.     lindex [.e configure -bd] 4
  197. } {4}
  198. test spinbox-3.18 {SpinboxWidgetCmd procedure, "delete" widget command} {
  199.     list [catch {.e delete} msg] $msg
  200. } {1 {wrong # args: should be ".e delete firstIndex ?lastIndex?"}}
  201. test spinbox-3.19 {SpinboxWidgetCmd procedure, "delete" widget command} {
  202.     list [catch {.e delete a b c} msg] $msg
  203. } {1 {wrong # args: should be ".e delete firstIndex ?lastIndex?"}}
  204. test spinbox-3.20 {SpinboxWidgetCmd procedure, "delete" widget command} {
  205.     list [catch {.e delete foo} msg] $msg
  206. } {1 {bad spinbox index "foo"}}
  207. test spinbox-3.21 {SpinboxWidgetCmd procedure, "delete" widget command} {
  208.     list [catch {.e delete 0 bar} msg] $msg
  209. } {1 {bad spinbox index "bar"}}
  210. test spinbox-3.22 {SpinboxWidgetCmd procedure, "delete" widget command} {
  211.     .e delete 0 end
  212.     .e insert end "01234567890"
  213.     .e delete 2 4
  214.     .e get
  215. } {014567890}
  216. test spinbox-3.23 {SpinboxWidgetCmd procedure, "delete" widget command} {
  217.     .e delete 0 end
  218.     .e insert end "01234567890"
  219.     .e delete 6
  220.     .e get
  221. } {0123457890}
  222. test spinbox-3.24 {SpinboxWidgetCmd procedure, "delete" widget command} {
  223.     # UTF
  224.     set x {}
  225.     .e delete 0 end
  226.     .e insert end "01234u4e4e67890"
  227.     .e delete 6
  228.     lappend x [.e get]
  229.     .e delete 0 end
  230.     .e insert end "012345u4e4e7890"
  231.     .e delete 6
  232.     lappend x [.e get]
  233.     .e delete 0 end
  234.     .e insert end "0123456u4e4e890"
  235.     .e delete 6
  236.     lappend x [.e get]
  237. } [list "01234u4e4e7890" "0123457890" "012345u4e4e890"]
  238. test spinbox-3.25 {SpinboxWidgetCmd procedure, "delete" widget command} {
  239.     .e delete 0 end
  240.     .e insert end "01234567890"
  241.     .e delete 6 5
  242.     .e get
  243. } {01234567890}
  244. test spinbox-3.26 {SpinboxWidgetCmd procedure, "delete" widget command} {
  245.     .e delete 0 end
  246.     .e insert end "01234567890"
  247.     .e configure -state disabled
  248.     .e delete 2 8
  249.     .e configure -state normal
  250.     .e get
  251. } {01234567890}
  252. test spinbox-3.27 {SpinboxWidgetCmd procedure, "get" widget command} {
  253.     list [catch {.e get foo} msg] $msg
  254. } {1 {wrong # args: should be ".e get"}}
  255. test spinbox-3.28 {SpinboxWidgetCmd procedure, "icursor" widget command} {
  256.     list [catch {.e icursor} msg] $msg
  257. } {1 {wrong # args: should be ".e icursor pos"}}
  258. test spinbox-3.29 {SpinboxWidgetCmd procedure, "icursor" widget command} {
  259.     list [catch {.e icursor foo} msg] $msg
  260. } {1 {bad spinbox index "foo"}}
  261. test spinbox-3.30 {SpinboxWidgetCmd procedure, "icursor" widget command} {
  262.     .e delete 0 end
  263.     .e insert end "01234567890"
  264.     .e icursor 4
  265.     .e index insert
  266. } {4}
  267. test spinbox-3.31 {SpinboxWidgetCmd procedure, "index" widget command} {
  268.     list [catch {.e in} msg] $msg
  269. } {1 {ambiguous option "in": must be bbox, cget, configure, delete, get, icursor, identify, index, insert, invoke, scan, selection, set, validate, or xview}}
  270. test spinbox-3.32 {SpinboxWidgetCmd procedure, "index" widget command} {
  271.     list [catch {.e index} msg] $msg
  272. } {1 {wrong # args: should be ".e index string"}}
  273. test spinbox-3.33 {SpinboxWidgetCmd procedure, "index" widget command} {
  274.     list [catch {.e index foo} msg] $msg
  275. } {1 {bad spinbox index "foo"}}
  276. test spinbox-3.34 {SpinboxWidgetCmd procedure, "index" widget command} {
  277.     list [catch {.e index 0} msg] $msg
  278. } {0 0}
  279. test spinbox-3.35 {SpinboxWidgetCmd procedure, "index" widget command} {
  280.     # UTF
  281.     .e delete 0 end
  282.     .e insert 0 abcu4e4eu0153def
  283.     list [.e index 3] [.e index 4] [.e index end]
  284. } {3 4 8}
  285. test spinbox-3.36 {SpinboxWidgetCmd procedure, "insert" widget command} {
  286.     list [catch {.e insert a} msg] $msg
  287. } {1 {wrong # args: should be ".e insert index text"}}
  288. test spinbox-3.37 {SpinboxWidgetCmd procedure, "insert" widget command} {
  289.     list [catch {.e insert a b c} msg] $msg
  290. } {1 {wrong # args: should be ".e insert index text"}}
  291. test spinbox-3.38 {SpinboxWidgetCmd procedure, "insert" widget command} {
  292.     list [catch {.e insert foo Text} msg] $msg
  293. } {1 {bad spinbox index "foo"}}
  294. test spinbox-3.39 {SpinboxWidgetCmd procedure, "insert" widget command} {
  295.     .e delete 0 end
  296.     .e insert end "01234567890"
  297.     .e insert 3 xxx
  298.     .e get
  299. } {012xxx34567890}
  300. test spinbox-3.40 {SpinboxWidgetCmd procedure, "insert" widget command} {
  301.     .e delete 0 end
  302.     .e insert end "01234567890"
  303.     .e configure -state disabled
  304.     .e insert 3 xxx
  305.     .e configure -state normal
  306.     .e get
  307. } {01234567890}
  308. test spinbox-3.41 {SpinboxWidgetCmd procedure, "insert" widget command} {
  309.     list [catch {.e insert a b c} msg] $msg
  310. } {1 {wrong # args: should be ".e insert index text"}}
  311. test spinbox-3.42 {SpinboxWidgetCmd procedure, "scan" widget command} {
  312.     list [catch {.e scan a} msg] $msg
  313. } {1 {wrong # args: should be ".e scan mark|dragto x"}}
  314. test spinbox-3.43 {SpinboxWidgetCmd procedure, "scan" widget command} {
  315.     list [catch {.e scan a b c} msg] $msg
  316. } {1 {wrong # args: should be ".e scan mark|dragto x"}}
  317. test spinbox-3.44 {SpinboxWidgetCmd procedure, "scan" widget command} {
  318.     list [catch {.e scan foobar 20} msg] $msg
  319. } {1 {bad scan option "foobar": must be mark or dragto}}
  320. test spinbox-3.45 {SpinboxWidgetCmd procedure, "scan" widget command} {
  321.     list [catch {.e scan mark 20.1} msg] $msg
  322. } {1 {expected integer but got "20.1"}}
  323. # This test is non-portable because character sizes vary.
  324. test spinbox-3.46 {SpinboxWidgetCmd procedure, "scan" widget command} {fonts} {
  325.     .e delete 0 end
  326.     update
  327.     .e insert end "This is quite a long string, in fact a "
  328.     .e insert end "very very long string"
  329.     .e scan mark 30
  330.     .e scan dragto 28
  331.     .e index @0
  332. } {2}
  333. test spinbox-3.47 {SpinboxWidgetCmd procedure, "select" widget command} {
  334.     list [catch {.e select} msg] $msg
  335. } {1 {wrong # args: should be ".e selection option ?index?"}}
  336. test spinbox-3.48 {SpinboxWidgetCmd procedure, "select" widget command} {
  337.     list [catch {.e select foo} msg] $msg
  338. } {1 {bad selection option "foo": must be adjust, clear, element, from, present, range, or to}}
  339. test spinbox-3.49 {SpinboxWidgetCmd procedure, "select clear" widget command} {
  340.     list [catch {.e select clear gorp} msg] $msg
  341. } {1 {wrong # args: should be ".e selection clear"}}
  342. test spinbox-3.50 {SpinboxWidgetCmd procedure, "select clear" widget command} {
  343.     .e delete 0 end
  344.     .e insert end "0123456789"
  345.     .e select from 1
  346.     .e select to 4
  347.     update
  348.     .e select clear
  349.     list [catch {selection get} msg] $msg [selection own]
  350. } {1 {PRIMARY selection doesn't exist or form "STRING" not defined} .e}
  351. test spinbox-3.51 {SpinboxWidgetCmd procedure, "selection present" widget command} {
  352.     list [catch {.e selection present foo} msg] $msg
  353. } {1 {wrong # args: should be ".e selection present"}}
  354. test spinbox-3.52 {SpinboxWidgetCmd procedure, "selection present" widget command} {
  355.     .e delete 0 end
  356.     .e insert end 0123456789
  357.     .e select from 3
  358.     .e select to 6
  359.     .e selection present
  360. } {1}
  361. test spinbox-3.53 {SpinboxWidgetCmd procedure, "selection present" widget command} {
  362.     .e delete 0 end
  363.     .e insert end 0123456789
  364.     .e select from 3
  365.     .e select to 6
  366.     .e configure -exportselection false
  367.     .e selection present
  368. } {1}
  369. .e configure -exportselection true
  370. test spinbox-3.54 {SpinboxWidgetCmd procedure, "selection present" widget command} {
  371.     .e delete 0 end
  372.     .e insert end 0123456789
  373.     .e select from 3
  374.     .e select to 6
  375.     .e delete 0 end
  376.     .e selection present
  377. } {0}
  378. test spinbox-3.55 {SpinboxWidgetCmd procedure, "selection adjust" widget command} {
  379.     list [catch {.e select adjust x} msg] $msg
  380. } {1 {bad spinbox index "x"}}
  381. test spinbox-3.56 {SpinboxWidgetCmd procedure, "selection adjust" widget command} {
  382.     list [catch {.e select adjust 2 3} msg] $msg
  383. } {1 {wrong # args: should be ".e selection adjust index"}}
  384. test spinbox-3.57 {SpinboxWidgetCmd procedure, "selection adjust" widget command} {
  385.     .e delete 0 end
  386.     .e insert end "0123456789"
  387.     .e select from 1
  388.     .e select to 5
  389.     update
  390.     .e select adjust 4
  391.     selection get
  392. } {123}
  393. test spinbox-3.58 {SpinboxWidgetCmd procedure, "selection adjust" widget command} {
  394.     .e delete 0 end
  395.     .e insert end "0123456789"
  396.     .e select from 1
  397.     .e select to 5
  398.     update
  399.     .e select adjust 2
  400.     selection get
  401. } {234}
  402. test spinbox-3.59 {SpinboxWidgetCmd procedure, "selection from" widget command} {
  403.     list [catch {.e select from 2 3} msg] $msg
  404. } {1 {wrong # args: should be ".e selection from index"}}
  405. test spinbox-3.60 {SpinboxWidgetCmd procedure, "selection range" widget command} {
  406.     list [catch {.e select range 2} msg] $msg
  407. } {1 {wrong # args: should be ".e selection range start end"}}
  408. test spinbox-3.61 {SpinboxWidgetCmd procedure, "selection range" widget command} {
  409.     list [catch {.e selection range 2 3 4} msg] $msg
  410. } {1 {wrong # args: should be ".e selection range start end"}}
  411. test spinbox-3.62 {SpinboxWidgetCmd procedure, "selection range" widget command} {
  412.     .e delete 0 end
  413.     .e insert end 0123456789
  414.     .e select from 1
  415.     .e select to 5
  416.     .e select range 4 4
  417.     list [catch {.e index sel.first} msg] $msg
  418. } {1 {selection isn't in widget .e}}
  419. test spinbox-3.63 {SpinboxWidgetCmd procedure, "selection range" widget command} {
  420.     .e delete 0 end
  421.     .e insert end 0123456789
  422.     .e select from 3
  423.     .e select to 7
  424.     .e select range 2 9
  425.     list [.e index sel.first] [.e index sel.last] [.e index anchor]
  426. } {2 9 3}
  427. .e delete 0 end
  428. .e insert end "This is quite a long text string, so long that it "
  429. .e insert end "runs off the end of the window quite a bit."
  430. test spinbox-3.64 {SpinboxWidgetCmd procedure, "selection to" widget command} {
  431.     list [catch {.e select to 2 3} msg] $msg
  432. } {1 {wrong # args: should be ".e selection to index"}}
  433. test spinbox-3.65 {SpinboxWidgetCmd procedure, "xview" widget command} {
  434.     .e xview 5
  435.     .e xview
  436. } {0.0537634 0.268817}
  437. test spinbox-3.66 {SpinboxWidgetCmd procedure, "xview" widget command} {
  438.     list [catch {.e xview gorp} msg] $msg
  439. } {1 {bad spinbox index "gorp"}}
  440. test spinbox-3.67 {SpinboxWidgetCmd procedure, "xview" widget command} {
  441.     .e xview 0
  442.     .e icursor 10
  443.     .e xview insert
  444.     .e xview
  445. } {0.107527 0.322581}
  446. test spinbox-3.68 {SpinboxWidgetCmd procedure, "xview" widget command} {
  447.     list [catch {.e xview moveto foo bar} msg] $msg
  448. } {1 {wrong # args: should be ".e xview moveto fraction"}}
  449. test spinbox-3.69 {SpinboxWidgetCmd procedure, "xview" widget command} {
  450.     list [catch {.e xview moveto foo} msg] $msg
  451. } {1 {expected floating-point number but got "foo"}}
  452. test spinbox-3.70 {SpinboxWidgetCmd procedure, "xview" widget command} {
  453.     .e xview moveto 0.5
  454.     .e xview
  455. } {0.505376 0.72043}
  456. test spinbox-3.71 {SpinboxWidgetCmd procedure, "xview" widget command} {
  457.     list [catch {.e xview scroll 24} msg] $msg
  458. } {1 {wrong # args: should be ".e xview scroll number units|pages"}}
  459. test spinbox-3.72 {SpinboxWidgetCmd procedure, "xview" widget command} {
  460.     list [catch {.e xview scroll gorp units} msg] $msg
  461. } {1 {expected integer but got "gorp"}}
  462. test spinbox-3.73 {SpinboxWidgetCmd procedure, "xview" widget command} {
  463.     .e xview moveto 0
  464.     .e xview scroll 1 pages
  465.     .e xview
  466. } {0.193548 0.408602}
  467. test spinbox-3.74 {SpinboxWidgetCmd procedure, "xview" widget command} {
  468.     .e xview moveto .9
  469.     update
  470.     .e xview scroll -2 p
  471.     .e xview
  472. } {0.397849 0.612903}
  473. test spinbox-3.75 {SpinboxWidgetCmd procedure, "xview" widget command} {
  474.     .e xview 30
  475.     update
  476.     .e xview scroll 2 units 
  477.     .e index @0
  478. } {32}
  479. test spinbox-3.76 {SpinboxWidgetCmd procedure, "xview" widget command} {
  480.     .e xview 30
  481.     update
  482.     .e xview scroll -1 units 
  483.     .e index @0
  484. } {29}
  485. test spinbox-3.77 {SpinboxWidgetCmd procedure, "xview" widget command} {
  486.     list [catch {.e xview scroll 23 foobars} msg] $msg
  487. } {1 {bad argument "foobars": must be units or pages}}
  488. test spinbox-3.78 {SpinboxWidgetCmd procedure, "xview" widget command} {
  489.     list [catch {.e xview eat 23 hamburgers} msg] $msg
  490. } {1 {unknown option "eat": must be moveto or scroll}}
  491. test spinbox-3.79 {SpinboxWidgetCmd procedure, "xview" widget command} {
  492.     .e xview 0
  493.     update
  494.     .e xview -4
  495.     .e index @0
  496. } {0}
  497. test spinbox-3.80 {SpinboxWidgetCmd procedure, "xview" widget command} {
  498.     .e xview 300
  499.     .e index @0
  500. } {73}
  501. .e insert 10 u4e4e
  502. test spinbox-3.81 {SpinboxWidgetCmd procedure, "xview" widget command} {
  503.     # UTF
  504.     # If Tcl_NumUtfChars wasn't used, wrong answer would be:
  505.     # 0.106383 0.117021 0.117021
  506.     set x {}
  507.     .e xview moveto .1
  508.     lappend x [lindex [.e xview] 0]
  509.     .e xview moveto .11
  510.     lappend x [lindex [.e xview] 0]
  511.     .e xview moveto .12
  512.     lappend x [lindex [.e xview] 0]
  513. } {0.0957447 0.106383 0.117021}
  514. test spinbox-3.82 {SpinboxWidgetCmd procedure} {
  515.     list [catch {.e gorp} msg] $msg
  516. } {1 {bad option "gorp": must be bbox, cget, configure, delete, get, icursor, identify, index, insert, invoke, scan, selection, set, validate, or xview}}
  517. frame .f -width 200 -height 50 -relief raised -bd 2
  518. pack .f -side right
  519. test spinbox-5.1 {ConfigureSpinbox procedure, -textvariable} {
  520.     catch {destroy .e}
  521.     set x 12345
  522.     spinbox .e -textvariable x
  523.     .e get
  524. } {12345}
  525. test spinbox-5.2 {ConfigureSpinbox procedure, -textvariable} {
  526.     catch {destroy .e}
  527.     set x 12345
  528.     spinbox .e -textvariable x
  529.     set y abcde
  530.     .e configure -textvariable y
  531.     set x 54321
  532.     .e get
  533. } {abcde}
  534. test spinbox-5.3 {ConfigureSpinbox procedure, -textvariable} {
  535.     catch {destroy .e}
  536.     catch {unset x}
  537.     spinbox .e
  538.     .e insert 0 "Some text"
  539.     .e configure -textvariable x
  540.     set x
  541. } {Some text}
  542. test spinbox-5.4 {ConfigureSpinbox procedure, -textvariable} {
  543.     proc override args {
  544. global x
  545. set x 12345
  546.     }
  547.     catch {destroy .e}
  548.     catch {unset x}
  549.     trace variable x w override
  550.     spinbox .e
  551.     .e insert 0 "Some text"
  552.     .e configure -textvariable x
  553.     set result [list $x [.e get]]
  554.     unset x;  rename override {}
  555.     set result
  556. } {12345 12345}
  557. test spinbox-5.5 {ConfigureSpinbox procedure} {
  558.     catch {destroy .e}
  559.     spinbox .e -exportselection false
  560.     pack .e
  561.     .e insert end "0123456789"
  562.     .sel select from 0
  563.     .sel select to 10
  564.     set x {}
  565.     lappend x [selection get]
  566.     .e select from 1
  567.     .e select to 5
  568.     lappend x [selection get]
  569.     .e configure -exportselection 1
  570.     lappend x [selection get]
  571.     set x
  572. } {{This is so} {This is so} 1234}
  573. test spinbox-5.6 {ConfigureSpinbox procedure} {
  574.     catch {destroy .e}
  575.     spinbox .e
  576.     pack .e
  577.     .e insert end "0123456789"
  578.     .e select from 1
  579.     .e select to 5
  580.     .e configure -exportselection 0
  581.     list [catch {selection get} msg] $msg [.e index sel.first] 
  582.     [.e index sel.last]
  583. } {1 {PRIMARY selection doesn't exist or form "STRING" not defined} 1 5}
  584. test spinbox-5.7 {ConfigureSpinbox procedure} {
  585.     catch {destroy .e}
  586.     spinbox .e -font $fixed -width 4 -xscrollcommand scroll
  587.     pack .e
  588.     .e insert end "01234567890"
  589.     update
  590.     .e configure -width 5
  591.     set scrollInfo
  592. } {0 0.363636}
  593. test spinbox-5.8 {ConfigureSpinbox procedure} {fonts} {
  594.     catch {destroy .e}
  595.     spinbox .e -width 0
  596.     pack .e
  597.     .e insert end "0123"
  598.     update
  599.     .e configure -font $big
  600.     update
  601.     winfo geom .e
  602. } {79x37+0+0}
  603. test spinbox-5.9 {ConfigureSpinbox procedure} {fonts} {
  604.     catch {destroy .e}
  605.     spinbox .e -font $fixed -bd 2 -relief raised
  606.     pack .e
  607.     .e insert end "0123"
  608.     update
  609.     list [.e index @10] [.e index @11] [.e index @12] [.e index @13]
  610. } {0 0 1 1}
  611. test spinbox-5.10 {ConfigureSpinbox procedure} {fonts} {
  612.     catch {destroy .e}
  613.     spinbox .e -font $fixed -bd 2 -relief flat
  614.     pack .e
  615.     .e insert end "0123"
  616.     update
  617.     list [.e index @10] [.e index @11] [.e index @12] [.e index @13]
  618. } {0 0 1 1}
  619. test spinbox-5.11 {ConfigureSpinbox procedure} {
  620.     # If "0" in selected font had 0 width, caused divide-by-zero error.
  621.     catch {destroy .e}
  622.     pack [spinbox .e -font {{open look glyph}}]
  623.     .e scan dragto 30
  624.     update
  625. } {}    
  626. # No tests for DisplaySpinbox.
  627. test spinbox-6.1 {SpinboxComputeGeometry procedure} {fonts} {
  628.     catch {destroy .e}
  629.     spinbox .e -font $fixed -bd 2 -relief raised -width 20 -highlightthickness 3
  630.     pack .e
  631.     .e insert end 012t45
  632.     update
  633.     list [.e index @61] [.e index @62]
  634. } {3 4}
  635. test spinbox-6.2 {SpinboxComputeGeometry procedure} {fonts} {
  636.     catch {destroy .e}
  637.     spinbox .e -font $fixed -bd 2 -relief raised -width 20 -justify center 
  638.     -highlightthickness 3
  639.     pack .e
  640.     .e insert end 012t45
  641.     update
  642.     list [.e index @96] [.e index @97]
  643. } {3 4}
  644. test spinbox-6.3 {SpinboxComputeGeometry procedure} {fonts} {
  645.     catch {destroy .e}
  646.     spinbox .e -font $fixed -bd 2 -relief raised -width 20 -justify right 
  647.     -highlightthickness 3
  648.     pack .e
  649.     .e insert end 012t45
  650.     update
  651.     list [.e index @131] [.e index @132]
  652. } {3 4}
  653. test spinbox-6.4 {SpinboxComputeGeometry procedure} {
  654.     catch {destroy .e}
  655.     spinbox .e -font $fixed -bd 2 -relief raised -width 5
  656.     pack .e
  657.     .e insert end "01234567890"
  658.     update
  659.     .e xview 6
  660.     .e index @0
  661. } {6}
  662. test spinbox-6.5 {SpinboxComputeGeometry procedure} {
  663.     catch {destroy .e}
  664.     spinbox .e -font $fixed -bd 2 -relief raised -width 5
  665.     pack .e
  666.     .e insert end "01234567890"
  667.     update
  668.     .e xview 7
  669.     .e index @0
  670. } {6}
  671. test spinbox-6.6 {SpinboxComputeGeometry procedure} {fonts} {
  672.     catch {destroy .e}
  673.     spinbox .e -font $fixed -bd 2 -relief raised -width 10
  674.     pack .e
  675.     .e insert end "01234t67890"
  676.     update
  677.     .e xview 3
  678.     list [.e index @39] [.e index @40]
  679. } {5 6}
  680. test spinbox-6.7 {SpinboxComputeGeometry procedure} {fonts} {
  681.     catch {destroy .e}
  682.     spinbox .e -font $big -bd 3 -relief raised -width 5
  683.     pack .e
  684.     .e insert end "01234567"
  685.     update
  686.     list [winfo reqwidth .e] [winfo reqheight .e]
  687. } {94 39}
  688. test spinbox-6.8 {SpinboxComputeGeometry procedure} {fonts} {
  689.     catch {destroy .e}
  690.     spinbox .e -font $big -bd 3 -relief raised -width 0
  691.     pack .e
  692.     .e insert end "01234567"
  693.     update
  694.     list [winfo reqwidth .e] [winfo reqheight .e]
  695. } {133 39}
  696. test spinbox-6.9 {SpinboxComputeGeometry procedure} {fonts} {
  697.     catch {destroy .e}
  698.     spinbox .e -font $big -bd 3 -relief raised -width 0 -highlightthickness 2
  699.     pack .e
  700.     update
  701.     list [winfo reqwidth .e] [winfo reqheight .e]
  702. } {42 39}
  703. catch {destroy .e}
  704. spinbox .e -width 10 -font $fixed -textvariable contents -xscrollcommand scroll
  705. pack .e
  706. focus .e
  707. test spinbox-7.1 {InsertChars procedure} {
  708.     .e delete 0 end
  709.     .e insert 0 abcde
  710.     .e insert 2 XXX
  711.     update
  712.     list [.e get] $contents $scrollInfo
  713. } {abXXXcde abXXXcde {0 1}}
  714. test spinbox-7.2 {InsertChars procedure} {
  715.     .e delete 0 end
  716.     .e insert 0 abcde
  717.     .e insert 500 XXX
  718.     update
  719.     list [.e get] $contents $scrollInfo
  720. } {abcdeXXX abcdeXXX {0 1}}
  721. test spinbox-7.3 {InsertChars procedure} {
  722.     .e delete 0 end
  723.     .e insert 0 0123456789
  724.     .e select from 2
  725.     .e select to 6
  726.     .e insert 2 XXX
  727.     set x "[.e index sel.first] [.e index sel.last]"
  728.     .e select to 8
  729.     lappend x [.e index sel.first] [.e index sel.last]
  730. } {5 9 5 8}
  731. test spinbox-7.4 {InsertChars procedure} {
  732.     .e delete 0 end
  733.     .e insert 0 0123456789
  734.     .e select from 2
  735.     .e select to 6
  736.     .e insert 3 XXX
  737.     set x "[.e index sel.first] [.e index sel.last]"
  738.     .e select to 8
  739.     lappend x [.e index sel.first] [.e index sel.last]
  740. } {2 9 2 8}
  741. test spinbox-7.5 {InsertChars procedure} {
  742.     .e delete 0 end
  743.     .e insert 0 0123456789
  744.     .e select from 2
  745.     .e select to 6
  746.     .e insert 5 XXX
  747.     set x "[.e index sel.first] [.e index sel.last]"
  748.     .e select to 8
  749.     lappend x [.e index sel.first] [.e index sel.last]
  750. } {2 9 2 8}
  751. test spinbox-7.6 {InsertChars procedure} {
  752.     .e delete 0 end
  753.     .e insert 0 0123456789
  754.     .e select from 2
  755.     .e select to 6
  756.     .e insert 6 XXX
  757.     set x "[.e index sel.first] [.e index sel.last]"
  758.     .e select to 5
  759.     lappend x [.e index sel.first] [.e index sel.last]
  760. } {2 6 2 5}
  761. test spinbox-7.7 {InsertChars procedure} {
  762.     .e delete 0 end
  763.     .e insert 0 0123456789
  764.     .e icursor 4
  765.     .e insert 4 XXX
  766.     .e index insert
  767. } {7}
  768. test spinbox-7.8 {InsertChars procedure} {
  769.     .e delete 0 end
  770.     .e insert 0 0123456789
  771.     .e icursor 4
  772.     .e insert 5 XXX
  773.     .e index insert
  774. } {4}
  775. test spinbox-7.9 {InsertChars procedure} {
  776.     .e delete 0 end
  777.     .e insert 0 "This is a very long string"
  778.     update
  779.     .e xview 4
  780.     .e insert 3 XXX
  781.     .e index @0
  782. } {7}
  783. test spinbox-7.10 {InsertChars procedure} {
  784.     .e delete 0 end
  785.     .e insert 0 "This is a very long string"
  786.     update
  787.     .e xview 4
  788.     .e insert 4 XXX
  789.     .e index @0
  790. } {4}
  791. .e configure -width 0
  792. test spinbox-7.11 {InsertChars procedure} {fonts} {
  793.     .e delete 0 end
  794.     .e insert 0 "xyzzy"
  795.     update
  796.     .e insert 2 00
  797.     winfo reqwidth .e
  798. } {70}
  799. .e configure -width 10
  800. test spinbox-8.1 {DeleteChars procedure} {
  801.     .e delete 0 end
  802.     .e insert 0 abcde
  803.     .e delete 2 4
  804.     update
  805.     list [.e get] $contents $scrollInfo
  806. } {abe abe {0 1}}
  807. test spinbox-8.2 {DeleteChars procedure} {
  808.     .e delete 0 end
  809.     .e insert 0 abcde
  810.     .e delete -2 2
  811.     update
  812.     list [.e get] $contents $scrollInfo
  813. } {cde cde {0 1}}
  814. test spinbox-8.3 {DeleteChars procedure} {
  815.     .e delete 0 end
  816.     .e insert 0 abcde
  817.     .e delete 3 1000
  818.     update
  819.     list [.e get] $contents $scrollInfo
  820. } {abc abc {0 1}}
  821. test spinbox-8.4 {DeleteChars procedure} {
  822.     .e delete 0 end
  823.     .e insert 0 0123456789abcde
  824.     .e select from 3
  825.     .e select to 8
  826.     .e delete 1 3
  827.     update
  828.     set x "[.e index sel.first] [.e index sel.last]"
  829.     .e select to 5
  830.     lappend x [.e index sel.first] [.e index sel.last]
  831. } {1 6 1 5}
  832. test spinbox-8.5 {DeleteChars procedure} {
  833.     .e delete 0 end
  834.     .e insert 0 0123456789abcde
  835.     .e select from 3
  836.     .e select to 8
  837.     .e delete 1 4
  838.     update
  839.     set x "[.e index sel.first] [.e index sel.last]"
  840.     .e select to 4
  841.     lappend x [.e index sel.first] [.e index sel.last]
  842. } {1 5 1 4}
  843. test spinbox-8.6 {DeleteChars procedure} {
  844.     .e delete 0 end
  845.     .e insert 0 0123456789abcde
  846.     .e select from 3
  847.     .e select to 8
  848.     .e delete 1 7
  849.     update
  850.     set x "[.e index sel.first] [.e index sel.last]"
  851.     .e select to 5
  852.     lappend x [.e index sel.first] [.e index sel.last]
  853. } {1 2 1 5}
  854. test spinbox-8.7 {DeleteChars procedure} {
  855.     .e delete 0 end
  856.     .e insert 0 0123456789abcde
  857.     .e select from 3
  858.     .e select to 8
  859.     .e delete 1 8
  860.     list [catch {.e index sel.first} msg] $msg
  861. } {1 {selection isn't in widget .e}}
  862. test spinbox-8.8 {DeleteChars procedure} {
  863.     .e delete 0 end
  864.     .e insert 0 0123456789abcde
  865.     .e select from 3
  866.     .e select to 8
  867.     .e delete 3 7
  868.     update
  869.     set x "[.e index sel.first] [.e index sel.last]"
  870.     .e select to 8
  871.     lappend x [.e index sel.first] [.e index sel.last]
  872. } {3 4 3 8}
  873. test spinbox-8.9 {DeleteChars procedure} {
  874.     .e delete 0 end
  875.     .e insert 0 0123456789abcde
  876.     .e select from 3
  877.     .e select to 8
  878.     .e delete 3 8
  879.     list [catch {.e index sel.first} msg] $msg
  880. } {1 {selection isn't in widget .e}}
  881. test spinbox-8.10 {DeleteChars procedure} {
  882.     .e delete 0 end
  883.     .e insert 0 0123456789abcde
  884.     .e select from 8
  885.     .e select to 3
  886.     .e delete 5 8
  887.     update
  888.     set x "[.e index sel.first] [.e index sel.last]"
  889.     .e select to 8
  890.     lappend x [.e index sel.first] [.e index sel.last]
  891. } {3 5 5 8}
  892. test spinbox-8.11 {DeleteChars procedure} {
  893.     .e delete 0 end
  894.     .e insert 0 0123456789abcde
  895.     .e select from 8
  896.     .e select to 3
  897.     .e delete 8 10
  898.     update
  899.     set x "[.e index sel.first] [.e index sel.last]"
  900.     .e select to 4
  901.     lappend x [.e index sel.first] [.e index sel.last]
  902. } {3 8 4 8}
  903. test spinbox-8.12 {DeleteChars procedure} {
  904.     .e delete 0 end
  905.     .e insert 0 0123456789abcde
  906.     .e icursor 4
  907.     .e delete 1 4
  908.     .e index insert
  909. } {1}
  910. test spinbox-8.13 {DeleteChars procedure} {
  911.     .e delete 0 end
  912.     .e insert 0 0123456789abcde
  913.     .e icursor 4
  914.     .e delete 1 5
  915.     .e index insert
  916. } {1}
  917. test spinbox-8.14 {DeleteChars procedure} {
  918.     .e delete 0 end
  919.     .e insert 0 0123456789abcde
  920.     .e icursor 4
  921.     .e delete 4 6
  922.     .e index insert
  923. } {4}
  924. test spinbox-8.15 {DeleteChars procedure} {
  925.     .e delete 0 end
  926.     .e insert 0 "This is a very long string"
  927.     .e xview 4
  928.     .e delete 1 4
  929.     .e index @0
  930. } {1}
  931. test spinbox-8.16 {DeleteChars procedure} {
  932.     .e delete 0 end
  933.     .e insert 0 "This is a very long string"
  934.     .e xview 4
  935.     .e delete 1 5
  936.     .e index @0
  937. } {1}
  938. test spinbox-8.17 {DeleteChars procedure} {
  939.     .e delete 0 end
  940.     .e insert 0 "This is a very long string"
  941.     .e xview 4
  942.     .e delete 4 6
  943.     .e index @0
  944. } {4}
  945. .e configure -width 0
  946. test spinbox-8.18 {DeleteChars procedure} {fonts} {
  947.     .e delete 0 end
  948.     .e insert 0 "xyzzy"
  949.     update
  950.     .e delete 2 4
  951.     winfo reqwidth .e
  952. } {42}
  953. test spinbox-9.1 {SpinboxValueChanged procedure} {
  954.     catch {destroy .e}
  955.     proc override args {
  956. global x
  957. set x 12345
  958.     }
  959.     catch {unset x}
  960.     trace variable x w override
  961.     spinbox .e -textvariable x
  962.     .e insert 0 foo
  963.     set result [list $x [.e get]]
  964.     unset x; rename override {}
  965.     set result
  966. } {12345 12345}
  967. catch {destroy .e}
  968. spinbox .e
  969. pack .e
  970. .e configure -width 0
  971. test spinbox-10.1 {SpinboxSetValue procedure} {fonts} {
  972.     set x abcde
  973.     set y ab
  974.     .e configure -textvariable x
  975.     update
  976.     .e configure -textvariable y
  977.     update
  978.     list [.e get] [winfo reqwidth .e]
  979. } {ab 35}
  980. test spinbox-10.2 {SpinboxSetValue procedure, updating selection} {
  981.     catch {destroy .e}
  982.     spinbox .e -textvariable x
  983.     .e insert 0 "abcdefghjklmnopqrstu"
  984.     .e selection range 4 10
  985.     set x "a"
  986.     list [catch {.e index sel.first} msg] $msg
  987. } {1 {selection isn't in widget .e}}
  988. test spinbox-10.3 {SpinboxSetValue procedure, updating selection} {
  989.     catch {destroy .e}
  990.     spinbox .e -textvariable x
  991.     .e insert 0 "abcdefghjklmnopqrstu"
  992.     .e selection range 4 10
  993.     set x "abcdefg"
  994.     list [.e index sel.first] [.e index sel.last]
  995. } {4 7}
  996. test spinbox-10.4 {SpinboxSetValue procedure, updating selection} {
  997.     catch {destroy .e}
  998.     spinbox .e -textvariable x
  999.     .e insert 0 "abcdefghjklmnopqrstu"
  1000.     .e selection range 4 10
  1001.     set x "abcdefghijklmn"
  1002.     list [.e index sel.first] [.e index sel.last]
  1003. } {4 10}
  1004. test spinbox-10.5 {SpinboxSetValue procedure, updating display position} {
  1005.     catch {destroy .e}
  1006.     spinbox .e -width 10 -font $fixed -textvariable x
  1007.     pack .e
  1008.     .e insert 0 "abcdefghjklmnopqrstuvwxyz"
  1009.     .e xview 10
  1010.     update
  1011.     set x "abcdefg"
  1012.     update
  1013.     .e index @0
  1014. } {0}
  1015. test spinbox-10.6 {SpinboxSetValue procedure, updating display position} {
  1016.     catch {destroy .e}
  1017.     spinbox .e -width 10 -font $fixed -textvariable x
  1018.     pack .e
  1019.     .e insert 0 "abcdefghjklmnopqrstuvwxyz"
  1020.     .e xview 10
  1021.     update
  1022.     set x "1234567890123456789012"
  1023.     update
  1024.     .e index @0
  1025. } {10}
  1026. test spinbox-10.7 {SpinboxSetValue procedure, updating insertion cursor} {
  1027.     catch {destroy .e}
  1028.     spinbox .e -width 10 -font $fixed -textvariable x
  1029.     pack .e
  1030.     .e insert 0 "abcdefghjklmnopqrstuvwxyz"
  1031.     .e icursor 5
  1032.     set x "123"
  1033.     .e index insert
  1034. } {3}
  1035. test spinbox-10.8 {SpinboxSetValue procedure, updating insertion cursor} {
  1036.     catch {destroy .e}
  1037.     spinbox .e -width 10 -font $fixed -textvariable x
  1038.     pack .e
  1039.     .e insert 0 "abcdefghjklmnopqrstuvwxyz"
  1040.     .e icursor 5
  1041.     set x "123456"
  1042.     .e index insert
  1043. } {5}
  1044. test spinbox-11.1 {SpinboxEventProc procedure} {
  1045.     catch {destroy .e}
  1046.     spinbox .e
  1047.     .e insert 0 abcdefg
  1048.     destroy .e
  1049.     update
  1050. } {}
  1051. test spinbox-11.2 {SpinboxEventProc procedure} {
  1052.     deleteWindows
  1053.     spinbox .e1 -fg #112233
  1054.     rename .e1 .e2
  1055.     set x {}
  1056.     lappend x [winfo children .]
  1057.     lappend x [.e2 cget -fg]
  1058.     destroy .e1
  1059.     lappend x [info command .e*] [winfo children .]
  1060. } {.e1 #112233 {} {}}
  1061. test spinbox-12.1 {SpinboxCmdDeletedProc procedure} {
  1062.     deleteWindows
  1063.     button .e1 -text "xyz_123"
  1064.     rename .e1 {}
  1065.     list [info command .e*] [winfo children .]
  1066. } {{} {}}
  1067. catch {destroy .e}
  1068. spinbox .e -font $fixed -width 5 -bd 2 -relief sunken
  1069. pack .e
  1070. .e insert 0 012345678901234567890
  1071. .e xview 4
  1072. update
  1073. test spinbox-13.1 {GetSpinboxIndex procedure} {
  1074.     .e index end
  1075. } {21}
  1076. test spinbox-13.2 {GetSpinboxIndex procedure} {
  1077.     list [catch {.e index abogus} msg] $msg
  1078. } {1 {bad spinbox index "abogus"}}
  1079. test spinbox-13.3 {GetSpinboxIndex procedure} {
  1080.     .e select from 1
  1081.     .e select to 6
  1082.     .e index anchor
  1083. } {1}
  1084. test spinbox-13.4 {GetSpinboxIndex procedure} {
  1085.     .e select from 4
  1086.     .e select to 1
  1087.     .e index anchor
  1088. } {4}
  1089. test spinbox-13.5 {GetSpinboxIndex procedure} {
  1090.     .e select from 3
  1091.     .e select to 15
  1092.     .e select adjust 4
  1093.     .e index anchor
  1094. } {15}
  1095. test spinbox-13.6 {GetSpinboxIndex procedure} {
  1096.     list [catch {.e index ebogus} msg] $msg
  1097. } {1 {bad spinbox index "ebogus"}}
  1098. test spinbox-13.7 {GetSpinboxIndex procedure} {
  1099.     .e icursor 2
  1100.     .e index insert
  1101. } {2}
  1102. test spinbox-13.8 {GetSpinboxIndex procedure} {
  1103.     list [catch {.e index ibogus} msg] $msg
  1104. } {1 {bad spinbox index "ibogus"}}
  1105. test spinbox-13.9 {GetSpinboxIndex procedure} {
  1106.     .e select from 1
  1107.     .e select to 6
  1108.     list [.e index sel.first] [.e index sel.last]
  1109. } {1 6}
  1110. selection clear .e
  1111. test spinbox-13.10 {GetSpinboxIndex procedure} {unixOnly} {
  1112.     # On unix, when selection is cleared, spinbox widget's internal 
  1113.     # selection range is reset.
  1114.     list [catch {.e index sel.first} msg] $msg
  1115. } {1 {selection isn't in widget .e}}
  1116. test spinbox-13.11 {GetSpinboxIndex procedure} {macOrPc} {
  1117.     # On mac and pc, when selection is cleared, spinbox widget remembers
  1118.     # last selected range.  When selection ownership is restored to 
  1119.     # spinbox, the old range will be rehighlighted.
  1120.     list [catch {selection get}] [.e index sel.first]
  1121. } {1 1}
  1122. test spinbox-13.12 {GetSpinboxIndex procedure} {unixOnly} {
  1123.     list [catch {.e index sbogus} msg] $msg
  1124. } {1 {selection isn't in widget .e}}
  1125. test spinbox-13.13 {GetSpinboxIndex procedure} {macOrPc} {
  1126.     list [catch {.e index sbogus} msg] $msg
  1127. } {1 {bad spinbox index "sbogus"}}
  1128. test spinbox-13.14 {GetSpinboxIndex procedure} {macOrPc} {
  1129.     list [catch {selection get}] [catch {.e index sbogus}]
  1130. } {1 1}
  1131. test spinbox-13.15 {GetSpinboxIndex procedure} {
  1132.     list [catch {.e index @xyz} msg] $msg
  1133. } {1 {bad spinbox index "@xyz"}}
  1134. test spinbox-13.16 {GetSpinboxIndex procedure} {fonts} {
  1135.     .e index @4
  1136. } {4}
  1137. test spinbox-13.17 {GetSpinboxIndex procedure} {fonts} {
  1138.     .e index @11
  1139. } {4}
  1140. test spinbox-13.18 {GetSpinboxIndex procedure} {fonts} {
  1141.     .e index @12
  1142. } {5}
  1143. test spinbox-13.19 {GetSpinboxIndex procedure} {fonts} {
  1144.     # 11 is the minimum button width
  1145.     .e index @[expr [winfo width .e] - 6 - 11]
  1146. } {8}
  1147. test spinbox-13.20 {GetSpinboxIndex procedure} {fonts} {
  1148.     .e index @[expr [winfo width .e] - 5]
  1149. } {9}
  1150. test spinbox-13.21 {GetSpinboxIndex procedure} {
  1151.     .e index @1000
  1152. } {9}
  1153. test spinbox-13.22 {GetSpinboxIndex procedure} {
  1154.     list [catch {.e index 1xyz} msg] $msg
  1155. } {1 {bad spinbox index "1xyz"}}
  1156. test spinbox-13.23 {GetSpinboxIndex procedure} {
  1157.     .e index -10
  1158. } {0}
  1159. test spinbox-13.24 {GetSpinboxIndex procedure} {
  1160.     .e index 12
  1161. } {12}
  1162. test spinbox-13.25 {GetSpinboxIndex procedure} {
  1163.     .e index 49
  1164. } {21}
  1165. # XXX Still need to write tests for SpinboxScanTo and SpinboxSelectTo.
  1166. set x {}
  1167. for {set i 1} {$i <= 500} {incr i} {
  1168.     append x "This is line $i, out of 500n"
  1169. }
  1170. test spinbox-14.1 {SpinboxFetchSelection procedure} {
  1171.     catch {destroy .e}
  1172.     spinbox .e
  1173.     .e insert end "This is a test string"
  1174.     .e select from 1
  1175.     .e select to 18
  1176.     selection get
  1177. } {his is a test str}
  1178. test spinbox-14.3 {SpinboxFetchSelection procedure} {
  1179.     catch {destroy .e}
  1180.     spinbox .e
  1181.     .e insert end $x
  1182.     .e select from 0
  1183.     .e select to end
  1184.     string compare [selection get] $x
  1185. } 0
  1186. test spinbox-15.1 {SpinboxLostSelection} {
  1187.     catch {destroy .e}
  1188.     spinbox .e
  1189.     .e insert 0 "Text"
  1190.     .e select from 0
  1191.     .e select to 4
  1192.     set result [selection get]
  1193.     selection clear
  1194.     .e select from 0
  1195.     .e select to 4
  1196.     lappend result [selection get]
  1197. } {Text Text}
  1198. # No tests for EventuallyRedraw.
  1199. catch {destroy .e}
  1200. spinbox .e -width 10 -xscrollcommand scroll
  1201. pack .e
  1202. update
  1203. test spinbox-16.1 {SpinboxVisibleRange procedure} {fonts} {
  1204.     .e delete 0 end
  1205.     .e insert 0 .............................
  1206.     .e xview
  1207. } {0 0.827586}
  1208. test spinbox-15.4 {SpinboxVisibleRange procedure} {
  1209.     .e delete 0 end
  1210.     .e xview
  1211. } {0 1}
  1212. catch {destroy .e}
  1213. spinbox .e -width 10 -xscrollcommand scroll -font $fixed
  1214. pack .e
  1215. update
  1216. test spinbox-17.1 {SpinboxUpdateScrollbar procedure} {
  1217.     .e delete 0 end
  1218.     .e insert 0 123
  1219.     update
  1220.     set scrollInfo
  1221. } {0 1}
  1222. test spinbox-17.2 {SpinboxUpdateScrollbar procedure} {
  1223.     .e delete 0 end
  1224.     .e insert 0 0123456789abcdef
  1225.     .e xview 3
  1226.     update
  1227.     set scrollInfo
  1228. } {0.1875 0.8125}
  1229. test spinbox-17.3 {SpinboxUpdateScrollbar procedure} {
  1230.     .e delete 0 end
  1231.     .e insert 0 abcdefghijklmnopqrs
  1232.     .e xview 6
  1233.     update
  1234.     set scrollInfo
  1235. } {0.315789 0.842105}
  1236. test spinbox-17.4 {SpinboxUpdateScrollbar procedure} {
  1237.     destroy .e
  1238.     set x "Background error did not happen"
  1239.     proc bgerror msg {
  1240. global x
  1241. set x $msg
  1242.     }
  1243.     spinbox .e -width 5 -xscrollcommand thisisnotacommand
  1244.     pack .e
  1245.     update
  1246.     rename bgerror {}
  1247.     list $x $errorInfo
  1248. } {{invalid command name "thisisnotacommand"} {invalid command name "thisisnotacommand"
  1249.     while executing
  1250. "thisisnotacommand 0 1"
  1251.     (horizontal scrolling command executed by .e)}}
  1252. set l [interp hidden]
  1253. deleteWindows
  1254. test spinbox-18.1 {Spinbox widget vs hiding} {
  1255.     destroy .e
  1256.     spinbox .e
  1257.     interp hide {} .e
  1258.     destroy .e
  1259.     list [winfo children .] [interp hidden]
  1260. } [list {} $l]    
  1261. ##
  1262. ## Spinbox widget VALIDATION tests
  1263. ##
  1264. destroy .e
  1265. catch {unset ::e}
  1266. catch {unset ::vVals}
  1267. spinbox .e -validate all 
  1268. -validatecommand [list doval %W %d %i %P %s %S %v %V] 
  1269. -invalidcommand bell 
  1270. -textvariable ::e 
  1271. -background red -foreground white
  1272. pack .e
  1273. proc doval {W d i P s S v V} {
  1274.     set ::vVals [list $W $d $i $P $s $S $v $V]
  1275.     return 1
  1276. }
  1277. # The validation tests build each one upon the previous, so cascading
  1278. # failures aren't good
  1279. #
  1280. test spinbox-19.1 {spinbox widget validation} {
  1281.     .e insert 0 a
  1282.     set ::vVals
  1283. } {.e 1 0 a {} a all key}
  1284. test spinbox-19.2 {spinbox widget validation} {
  1285.     .e insert 1 b
  1286.     set ::vVals
  1287. } {.e 1 1 ab a b all key}
  1288. test spinbox-19.3 {spinbox widget validation} {
  1289.     .e insert end c
  1290.     set ::vVals
  1291. } {.e 1 2 abc ab c all key}
  1292. test spinbox-19.4 {spinbox widget validation} {
  1293.     .e insert 1 123
  1294.     list $::vVals $::e
  1295. } {{.e 1 1 a123bc abc 123 all key} a123bc}
  1296. test spinbox-19.5 {spinbox widget validation} {
  1297.     .e delete 2
  1298.     set ::vVals
  1299. } {.e 0 2 a13bc a123bc 2 all key}
  1300. test spinbox-19.6 {spinbox widget validation} {
  1301.     .e configure -validate key
  1302.     .e delete 1 3
  1303.     set ::vVals
  1304. } {.e 0 1 abc a13bc 13 key key}
  1305. test spinbox-19.7 {spinbox widget validation} {
  1306.     set ::vVals {}
  1307.     .e configure -validate focus
  1308.     .e insert end d
  1309.     set ::vVals
  1310. } {}
  1311. test spinbox-19.8 {spinbox widget validation} {
  1312.     focus -force .e
  1313.     # update necessary to process FocusIn event
  1314.     update
  1315.     set ::vVals
  1316. } {.e -1 -1 abcd abcd {} focus focusin}
  1317. test spinbox-19.9 {spinbox widget validation} {
  1318.     focus -force .
  1319.     # update necessary to process FocusOut event
  1320.     update
  1321.     set ::vVals
  1322. } {.e -1 -1 abcd abcd {} focus focusout}
  1323. .e configure -validate all
  1324. test spinbox-19.10 {spinbox widget validation} {
  1325.     focus -force .e
  1326.     # update necessary to process FocusIn event
  1327.     update
  1328.     set ::vVals
  1329. } {.e -1 -1 abcd abcd {} all focusin}
  1330. test spinbox-19.11 {spinbox widget validation} {
  1331.     focus -force .
  1332.     # update necessary to process FocusOut event
  1333.     update
  1334.     set ::vVals
  1335. } {.e -1 -1 abcd abcd {} all focusout}
  1336. .e configure -validate focusin
  1337. test spinbox-19.12 {spinbox widget validation} {
  1338.     focus -force .e
  1339.     # update necessary to process FocusIn event
  1340.     update
  1341.     set ::vVals
  1342. } {.e -1 -1 abcd abcd {} focusin focusin}
  1343. test spinbox-19.13 {spinbox widget validation} {
  1344.     set ::vVals {}
  1345.     focus -force .
  1346.     # update necessary to process FocusOut event
  1347.     update
  1348.     set ::vVals
  1349. } {}
  1350. .e configure -validate focuso
  1351. test spinbox-19.14 {spinbox widget validation} {
  1352.     focus -force .e
  1353.     # update necessary to process FocusIn event
  1354.     update
  1355.     set ::vVals
  1356. } {}
  1357. test spinbox-19.15 {spinbox widget validation} {
  1358.     focus -force .
  1359.     # update necessary to process FocusOut event
  1360.     update
  1361.     set ::vVals
  1362. } {.e -1 -1 abcd abcd {} focusout focusout}
  1363. test spinbox-19.16 {spinbox widget validation} {
  1364.     list [.e validate] $::vVals
  1365. } {1 {.e -1 -1 abcd abcd {} all forced}}
  1366. test spinbox-19.17 {spinbox widget validation} {
  1367.     set ::e newdata
  1368.     list [.e cget -validate] $::vVals
  1369. } {focusout {.e -1 -1 newdata abcd {} focusout forced}}
  1370. proc doval {W d i P s S v V} {
  1371.     set ::vVals [list $W $d $i $P $s $S $v $V]
  1372.     return 0
  1373. }
  1374. .e configure -validate all
  1375. test spinbox-19.18 {spinbox widget validation} {
  1376.     set ::e nextdata
  1377.     list [.e cget -validate] $::vVals
  1378. } {none {.e -1 -1 nextdata newdata {} all forced}}
  1379. proc doval {W d i P s S v V} {
  1380.     set ::vVals [list $W $d $i $P $s $S $v $V]
  1381.     set ::e mydata
  1382.     return 1
  1383. }
  1384. .e configure -validate all
  1385. ## This sets validate to none because it shows that we prevent a possible
  1386. ## loop condition in the validation, when the spinbox textvar is also set
  1387. test spinbox-19.19 {spinbox widget validation} {
  1388.     .e validate
  1389.     list [.e cget -validate] [.e get] $::vVals
  1390. } {none mydata {.e -1 -1 nextdata nextdata {} all forced}}
  1391. .e configure -validate all
  1392. ## This leaves validate alone because we trigger validation through the
  1393. ## textvar (a write trace), and the write during validation triggers
  1394. ## nothing (by definition of avoiding loops on var traces).  This is
  1395. ## one of those "dangerous" conditions where the user will have a
  1396. ## different value in the spinbox widget shown as is in the textvar.
  1397. test spinbox-19.20 {spinbox widget validation} {
  1398.     set ::e testdata
  1399.     list [.e cget -validate] [.e get] $::e $::vVals
  1400. } {all testdata mydata {.e -1 -1 testdata mydata {} all forced}}
  1401. # A format specifier is allowed to be of the form %[-+ 0]{0,1}d.?d?f
  1402. #
  1403. destroy .e
  1404. spinbox .e
  1405. test spinbox-20.1 {spinbox config, -format specifier} {
  1406.     list [catch {.e config -format %2f} msg] $msg
  1407. } {0 {}}
  1408. test spinbox-20.2 {spinbox config, -format specifier} {
  1409.     list [catch {.e config -format %2.2f} msg] $msg
  1410. } {0 {}}
  1411. test spinbox-20.3 {spinbox config, -format specifier} {
  1412.     list [catch {.e config -format %.2f} msg] $msg
  1413. } {0 {}}
  1414. test spinbox-20.4 {spinbox config, -format specifier} {
  1415.     list [catch {.e config -format %2.f} msg] $msg
  1416. } {0 {}}
  1417. test spinbox-20.5 {spinbox config, -format specifier} {
  1418.     list [catch {.e config -format %2e-1f} msg] $msg
  1419. } {1 {bad spinbox format specifier "%2e-1f"}}
  1420. test spinbox-20.6 {spinbox config, -format specifier} {
  1421.     list [catch {.e config -format 2.2} msg] $msg
  1422. } {1 {bad spinbox format specifier "2.2"}}
  1423. test spinbox-20.7 {spinbox config, -format specifier} {
  1424.     list [catch {.e config -format %2.-2f} msg] $msg
  1425. } {1 {bad spinbox format specifier "%2.-2f"}}
  1426. test spinbox-20.8 {spinbox config, -format specifier} {
  1427.     list [catch {.e config -format %-2.02f} msg] $msg
  1428. } {0 {}}
  1429. test spinbox-20.9 {spinbox config, -format specifier} {
  1430.     list [catch {.e config -format "% 2.02f"} msg] $msg
  1431. } {0 {}}
  1432. test spinbox-20.10 {spinbox config, -format specifier} {
  1433.     list [catch {.e config -format "% -2.200f"} msg] $msg
  1434. } {0 {}}
  1435. test spinbox-20.11 {spinbox config, -format specifier} {
  1436.     list [catch {.e config -format "%09.200f"} msg] $msg
  1437. } {0 {}}
  1438. test spinbox-20.12 {spinbox config, -format specifier does something} {
  1439.     set out {}
  1440.     .e config -format "%02.f"
  1441.     .e config -values {} -from 0 -to 10 -increment 1
  1442.     lappend out [.e set 0]; # set currently doesn't force format
  1443.     .e invoke buttonup
  1444.     lappend out [.e set]; # but after invoke it should be formatted
  1445.     lappend out [.e set 3]; # set currently doesn't force format
  1446.     .e config -format "%03.f"
  1447.     lappend out [.e set]; # changing -format should cause formatting
  1448. } {0 01 3 003}
  1449. test spinbox-21.1 {spinbox button, out of range checking} {
  1450.     destroy .e
  1451.     spinbox .e -from -10 -to 20 -increment 2
  1452.     set out {}
  1453.     lappend out [.e get]; # -10
  1454.     .e delete 0 end
  1455.     .e insert 0 25; # set outside of range
  1456.     .e invoke buttondown; # should constrain
  1457.     lappend out [.e get]; # 20
  1458.     .e delete 0 end
  1459.     .e insert 0 25; # set outside of range
  1460.     .e invoke buttonup; # should constrain
  1461.     lappend out [.e get]; # 20
  1462.     .e delete 0 end
  1463.     .e insert 0 -100; # set outside of range
  1464.     .e invoke buttonup; # should constrain
  1465.     lappend out [.e get]; # -10
  1466.     .e delete 0 end
  1467.     .e insert 0 -100; # set outside of range
  1468.     .e invoke buttondown; # should constrain
  1469.     lappend out [.e get]; # -10
  1470.     .e delete 0 end
  1471.     .e insert 0 bogus; # set to a bogus value
  1472.     .e invoke buttondown; # should use fromValue
  1473.     lappend out [.e get]; # -10
  1474.     .e delete 0 end
  1475.     .e insert 0 19; # set just inside of range
  1476.     .e invoke buttonup; # no wrap
  1477.     lappend out [.e get]; # 20
  1478.     .e invoke buttonup; # no wrap
  1479.     lappend out [.e get]; # 20
  1480.     .e invoke buttondown
  1481.     lappend out [.e get]; # 18
  1482.     .e delete 0 end
  1483.     .e insert 0 -9; # set just inside of range
  1484.     .e invoke buttondown; # no wrap
  1485.     lappend out [.e get]; # -10
  1486.     .e invoke buttondown; # no wrap
  1487.     lappend out [.e get]; # -10
  1488.     .e invoke buttonup; # no wrap
  1489.     lappend out [.e get]; # -8
  1490.     .e configure -wrap 1
  1491.     .e delete 0 end
  1492.     .e insert 0 19; # set just inside of range
  1493.     .e invoke buttonup; # wrap
  1494.     lappend out [.e get]; # -10
  1495.     .e invoke buttonup
  1496.     lappend out [.e get]; # -8
  1497.     .e invoke buttondown
  1498.     lappend out [.e get]; # -10
  1499.     .e delete 0 end
  1500.     .e insert 0 -9; # set just inside of range
  1501.     .e invoke buttondown; # wrap
  1502.     lappend out [.e get]; # 20
  1503.     .e invoke buttondown
  1504.     lappend out [.e get]; # 18
  1505.     .e invoke buttonup; # no wrap
  1506.     lappend out [.e get]; # 20
  1507. } {-10 20 20 -10 -10 -10 20 20 18 -10 -10 -8 -10 -8 -10 20 18 20}
  1508. test spinbox-22.1 {spinbox config, -from changes SF bug 559078} {
  1509.     set val 5
  1510.     destroy .s
  1511.     spinbox .s -from 1 -to 10 -textvariable val
  1512.     set val
  1513. } {5}
  1514. test spinbox-22.2 {spinbox config, -from changes SF bug 559078} {
  1515.     .s configure -from 3 -to 10
  1516.     set val
  1517. } {5}
  1518. test spinbox-22.3 {spinbox config, -from changes SF bug 559078} {
  1519.     .s configure -from 6 -to 10
  1520.     set val
  1521. } {6}
  1522. test entry-23.1 {selection present while disabled, bug 637828} {
  1523.     destroy .e
  1524.     entry .e
  1525.     .e insert end 0123456789
  1526.     .e select from 3
  1527.     .e select to 6
  1528.     set out [.e selection present]
  1529.     .e configure -state disabled
  1530.     # still return 1 when disabled, because 'selection get' will work,
  1531.     # but selection cannot be changed (new behavior since 8.4)
  1532.     .e select to 9
  1533.     lappend out [.e selection present] [selection get]
  1534. } {1 1 345}
  1535. destroy .e
  1536. catch {unset ::e ::vVals}
  1537. ##
  1538. ## End validation tests
  1539. ##
  1540. # XXX Still need to write tests for SpinboxBlinkProc, SpinboxFocusProc,
  1541. # and SpinboxTextVarProc.
  1542. option clear
  1543. # cleanup
  1544. ::tcltest::cleanupTests
  1545. return