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

通讯编程

开发平台:

Visual C++

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