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

通讯编程

开发平台:

Visual C++

  1. # This file is a Tcl script to test the code in the file tkText.c.
  2. # This file is organized in the standard fashion for Tcl tests.
  3. #
  4. # Copyright (c) 1992-1994 The Regents of the University of California.
  5. # Copyright (c) 1994-1996 Sun Microsystems, Inc.
  6. # Copyright (c) 1998-1999 by Scriptics Corporation.
  7. # All rights reserved.
  8. #
  9. # RCS: @(#) $Id: text.test,v 1.19.2.2 2007/12/13 00:31:34 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. # Create entries in the option database to be sure that geometry options
  17. # like border width have predictable values.
  18. option add *Text.borderWidth 2
  19. option add *Text.highlightThickness 2
  20. option add *Text.font {Courier -12}
  21. text .t -width 20 -height 10
  22. pack append . .t {top expand fill}
  23. update
  24. .t debug on
  25. wm geometry . {}
  26. # The statements below reset the main window;  it's needed if the window
  27. # manager is mwm to make mwm forget about a previous minimum size setting.
  28. wm withdraw .
  29. wm minsize . 1 1
  30. wm positionfrom . user
  31. wm deiconify .
  32. entry .t.e
  33. .t.e insert end abcdefg
  34. .t.e select from 0
  35. .t insert 1.0 "Line 1
  36. abcdefghijklm
  37. 12345
  38. Line 4
  39. bOy GIrl .#@? x_yz
  40. !@#$%
  41. Line 7"
  42. catch {destroy .t2}
  43. text .t2
  44. set i 0
  45. foreach test {
  46.     {-autoseparators yes 1 nah}
  47.     {-background #ff00ff #ff00ff <gorp>}
  48.     {-bd 4 4 foo}
  49.     {-bg blue blue #xx}
  50.     {-borderwidth 7 7 ++}
  51.     {-cursor watch watch lousy}
  52.     {-exportselection no 0 maybe}
  53.     {-fg red red stupid}
  54.     {-font fixed fixed {}}
  55.     {-foreground #012 #012 bogus}
  56.     {-height 5 5 bad}
  57.     {-highlightbackground #123 #123 bogus}
  58.     {-highlightcolor #234 #234 bogus}
  59.     {-highlightthickness -2 0 bad}
  60.     {-insertbackground green green <bogus>}
  61.     {-insertborderwidth 45 45 bogus}
  62.     {-insertofftime 100 100 2.4}
  63.     {-insertontime 47 47 e1}
  64.     {-insertwidth 2.3 2 47d}
  65.     {-maxundo 5 5 noway}
  66.     {-padx 3.4 3 2.4.}
  67.     {-pady 82 82 bogus}
  68.     {-relief raised raised bumpy}
  69.     {-selectbackground #ffff01234567 #ffff01234567 bogus}
  70.     {-selectborderwidth 21 21 3x}
  71.     {-selectforeground yellow yellow #12345}
  72.     {-spacing1 20 20 1.3x}
  73.     {-spacing1 -5 0 bogus}
  74.     {-spacing2 5 5 bogus}
  75.     {-spacing2 -1 0 bogus}
  76.     {-spacing3 20 20 bogus}
  77.     {-spacing3 -10 0 bogus}
  78.     {-state d disabled foo}
  79.     {-tabs {1i 2i 3i 4i} {1i 2i 3i 4i} bad_tabs}
  80.     {-undo 1 1 eh}
  81.     {-width 73 73 2.4}
  82.     {-wrap w word bad_wrap}
  83. } {
  84.     test text-1.[incr i] {text options} {
  85. set result {}
  86. lappend result [catch {.t2 configure [lindex $test 0] [lindex $test 3]}]
  87. .t2 configure [lindex $test 0] [lindex $test 1]
  88. lappend result [.t2 cget [lindex $test 0]]
  89.     } [list 1 [lindex $test 2]]
  90. }
  91. test text-1.[incr i] {text options} {
  92.     .t2 configure -takefocus "any old thing"
  93.     .t2 cget -takefocus
  94. } {any old thing}
  95. test text-1.[incr i] {text options} {
  96.     .t2 configure -xscrollcommand "x scroll command"
  97.     .t2 configure -xscrollcommand
  98. } {-xscrollcommand xScrollCommand ScrollCommand {} {x scroll command}}
  99. test text-1.[incr i] {text options} {
  100.     .t2 configure -yscrollcommand "test command"
  101.     .t2 configure -yscrollcommand
  102. } {-yscrollcommand yScrollCommand ScrollCommand {} {test command}}
  103. test text-1.[incr i] {text options} {
  104.     set result {}
  105.     foreach i [.t2 configure] {
  106. lappend result [lindex $i 4]
  107.     }
  108.     set result
  109. } {1 blue {} {} 7 watch 0 {} fixed #012 5 #123 #234 0 green 45 100 47 2 5 3 82 raised #ffff01234567 21 yellow 0 0 0 0 disabled {1i 2i 3i 4i} {any old thing} 1 73 word {x scroll command} {test command}}
  110. test text-2.1 {Tk_TextCmd procedure} {
  111.     list [catch {text} msg] $msg
  112. } {1 {wrong # args: should be "text pathName ?options?"}}
  113. test text-2.2 {Tk_TextCmd procedure} {
  114.     list [catch {text foobar} msg] $msg
  115. } {1 {bad window path name "foobar"}}
  116. test text-2.3 {Tk_TextCmd procedure} {
  117.     catch {destroy .t2}
  118.     list [catch {text .t2 -gorp nofun} msg] $msg [winfo exists .t2]
  119. } {1 {unknown option "-gorp"} 0}
  120. test text-2.4 {Tk_TextCmd procedure} {
  121.     catch {destroy .t2}
  122.     list [catch {text .t2 -bd 2 -fg red} msg] $msg 
  123. [lindex [.t2 config -bd] 4] [lindex [.t2 config -fg] 4]
  124. } {0 .t2 2 red}
  125. if {$tcl_platform(platform) == "macintosh"} {
  126.     set relief solid
  127. } elseif {$tcl_platform(platform) == "windows"} {
  128.     set relief flat
  129. } else {
  130.     set relief raised
  131. }
  132. test text-2.5 {Tk_TextCmd procedure} {
  133.     catch {destroy .t2}
  134.     text .t2
  135.     .t2 tag cget sel -relief 
  136. } $relief
  137. test text-2.6 {Tk_TextCmd procedure} {
  138.     catch {destroy .t2}
  139.     list [text .t2] [winfo class .t2]
  140. } {.t2 Text}
  141. test text-3.1 {TextWidgetCmd procedure, basics} {
  142.     list [catch {.t} msg] $msg
  143. } {1 {wrong # args: should be ".t option ?arg arg ...?"}}
  144. test text-3.2 {TextWidgetCmd procedure} {
  145.     list [catch {.t gorp 1.0 z 1.2} msg] $msg
  146. } {1 {bad option "gorp": must be bbox, cget, compare, configure, debug, delete, dlineinfo, dump, edit, get, image, index, insert, mark, scan, search, see, tag, window, xview, or yview}}
  147. test text-4.1 {TextWidgetCmd procedure, "bbox" option} {
  148.     list [catch {.t bbox} msg] $msg
  149. } {1 {wrong # args: should be ".t bbox index"}}
  150. test text-4.2 {TextWidgetCmd procedure, "bbox" option} {
  151.     list [catch {.t bbox a b} msg] $msg
  152. } {1 {wrong # args: should be ".t bbox index"}}
  153. test text-4.3 {TextWidgetCmd procedure, "bbox" option} {
  154.     list [catch {.t bbox bad_mark} msg] $msg
  155. } {1 {bad text index "bad_mark"}}
  156. test text-5.1 {TextWidgetCmd procedure, "cget" option} {
  157.     list [catch {.t cget} msg] $msg
  158. } {1 {wrong # args: should be ".t cget option"}}
  159. test text-5.2 {TextWidgetCmd procedure, "cget" option} {
  160.     list [catch {.t cget a b} msg] $msg
  161. } {1 {wrong # args: should be ".t cget option"}}
  162. test text-5.3 {TextWidgetCmd procedure, "cget" option} {
  163.     list [catch {.t cget -gorp} msg] $msg
  164. } {1 {unknown option "-gorp"}}
  165. test text-5.4 {TextWidgetCmd procedure, "cget" option} {
  166.     .t configure -bd 17
  167.     .t cget -bd
  168. } {17}
  169. .t configure -bd [lindex [.t configure -bd] 3]
  170. test text-6.1 {TextWidgetCmd procedure, "compare" option} {
  171.     list [catch {.t compare a b} msg] $msg
  172. } {1 {wrong # args: should be ".t compare index1 op index2"}}
  173. test text-6.2 {TextWidgetCmd procedure, "compare" option} {
  174.     list [catch {.t compare a b c d} msg] $msg
  175. } {1 {wrong # args: should be ".t compare index1 op index2"}}
  176. test text-6.3 {TextWidgetCmd procedure, "compare" option} {
  177.     list [catch {.t compare @x == 1.0} msg] $msg
  178. } {1 {bad text index "@x"}}
  179. test text-6.4 {TextWidgetCmd procedure, "compare" option} {
  180.     list [catch {.t compare 1.0 < @y} msg] $msg
  181. } {1 {bad text index "@y"}}
  182. test text-6.5 {TextWidgetCmd procedure, "compare" option} {
  183.     list [.t compare 1.1 < 1.0] [.t compare 1.1 < 1.1] [.t compare 1.1 < 1.2]
  184. } {0 0 1}
  185. test text-6.6 {TextWidgetCmd procedure, "compare" option} {
  186.     list [.t compare 1.1 <= 1.0] [.t compare 1.1 <= 1.1] [.t compare 1.1 <= 1.2]
  187. } {0 1 1}
  188. test text-6.7 {TextWidgetCmd procedure, "compare" option} {
  189.     list [.t compare 1.1 == 1.0] [.t compare 1.1 == 1.1] [.t compare 1.1 == 1.2]
  190. } {0 1 0}
  191. test text-6.8 {TextWidgetCmd procedure, "compare" option} {
  192.     list [.t compare 1.1 >= 1.0] [.t compare 1.1 >= 1.1] [.t compare 1.1 >= 1.2]
  193. } {1 1 0}
  194. test text-6.9 {TextWidgetCmd procedure, "compare" option} {
  195.     list [.t compare 1.1 > 1.0] [.t compare 1.1 > 1.1] [.t compare 1.1 > 1.2]
  196. } {1 0 0}
  197. test text-6.10 {TextWidgetCmd procedure, "compare" option} {
  198.     list [.t com 1.1 != 1.0] [.t compare 1.1 != 1.1] [.t compare 1.1 != 1.2]
  199. } {1 0 1}
  200. test text-6.11 {TextWidgetCmd procedure, "compare" option} {
  201.     list [catch {.t compare 1.0 <x 1.2} msg] $msg
  202. } {1 {bad comparison operator "<x": must be <, <=, ==, >=, >, or !=}}
  203. test text-6.12 {TextWidgetCmd procedure, "compare" option} {
  204.     list [catch {.t compare 1.0 >> 1.2} msg] $msg
  205. } {1 {bad comparison operator ">>": must be <, <=, ==, >=, >, or !=}}
  206. test text-6.13 {TextWidgetCmd procedure, "compare" option} {
  207.     list [catch {.t compare 1.0 z 1.2} msg] $msg
  208. } {1 {bad comparison operator "z": must be <, <=, ==, >=, >, or !=}}
  209. test text-6.14 {TextWidgetCmd procedure, "compare" option} {
  210.     list [catch {.t co 1.0 z 1.2} msg] $msg
  211. } {1 {bad option "co": must be bbox, cget, compare, configure, debug, delete, dlineinfo, dump, edit, get, image, index, insert, mark, scan, search, see, tag, window, xview, or yview}}
  212. # "configure" option is already covered above
  213. test text-7.1 {TextWidgetCmd procedure, "debug" option} {
  214.     list [catch {.t debug 0 1} msg] $msg
  215. } {1 {wrong # args: should be ".t debug boolean"}}
  216. test text-7.2 {TextWidgetCmd procedure, "debug" option} {
  217.     list [catch {.t de 0 1} msg] $msg
  218. } {1 {bad option "de": must be bbox, cget, compare, configure, debug, delete, dlineinfo, dump, edit, get, image, index, insert, mark, scan, search, see, tag, window, xview, or yview}}
  219. test text-7.3 {TextWidgetCmd procedure, "debug" option} {
  220.     .t debug true
  221.     .t deb
  222. } 1
  223. test text-7.4 {TextWidgetCmd procedure, "debug" option} {
  224.     .t debug false
  225.     .t debug
  226. } 0
  227. .t debug
  228. test text-8.1 {TextWidgetCmd procedure, "delete" option} {
  229.     list [catch {.t delete} msg] $msg
  230. } {1 {wrong # args: should be ".t delete index1 ?index2 ...?"}}
  231. test text-8.2 {TextWidgetCmd procedure, "delete" option} {
  232.     list [catch {.t delete a b c} msg] $msg
  233. } {1 {bad text index "a"}}
  234. test text-8.3 {TextWidgetCmd procedure, "delete" option} {
  235.     list [catch {.t delete @x 2.2} msg] $msg
  236. } {1 {bad text index "@x"}}
  237. test text-8.4 {TextWidgetCmd procedure, "delete" option} {
  238.     list [catch {.t delete 2.3 @y} msg] $msg
  239. } {1 {bad text index "@y"}}
  240. test text-8.5 {TextWidgetCmd procedure, "delete" option} {
  241.     .t configure -state disabled
  242.     .t delete 2.3
  243.     .t g 2.0 2.end
  244. } abcdefghijklm
  245. .t configure -state normal
  246. test text-8.6 {TextWidgetCmd procedure, "delete" option} {
  247.     .t delete 2.3
  248.     .t get 2.0 2.end
  249. } abcefghijklm
  250. test text-8.7 {TextWidgetCmd procedure, "delete" option} {
  251.     .t delete 2.1 2.3
  252.     .t get 2.0 2.end
  253. } aefghijklm
  254. test text-8.8 {TextWidgetCmd procedure, "delete" option} {
  255.     # All indices are checked before we actually delete anything
  256.     list [catch {.t delete 2.1 2.3 foo} msg] $msg 
  257.     [.t get 2.0 2.end]
  258. } {1 {bad text index "foo"} aefghijklm}
  259. set prevtext [.t get 1.0 end-1c]
  260. test text-8.9 {TextWidgetCmd procedure, "delete" option} {
  261.     # auto-forward one byte if the last "pair" is just one
  262.     .t delete 1.0 end; .t insert 1.0 "foonabcdefghijklm"
  263.     .t delete 2.1 2.3 2.3
  264.     .t get 1.0 end-1c
  265. } foonaefghijklm
  266. test text-8.10 {TextWidgetCmd procedure, "delete" option} {
  267.     # all indices will be ordered before deletion
  268.     .t delete 1.0 end; .t insert 1.0 "foonabcdefghijklm"
  269.     .t delete 2.0 2.3 2.7 2.9 2.4
  270.     .t get 1.0 end-1c
  271. } foondfgjklm
  272. test text-8.11 {TextWidgetCmd procedure, "delete" option} {
  273.     # and check again with even pairs
  274.     .t delete 1.0 end; .t insert 1.0 "foonabcdefghijklm"
  275.     .t delete 2.0 2.2 2.7 2.9 2.4 2.5
  276.     .t get 1.0 end-1c
  277. } fooncdfgjklm
  278. test text-8.12 {TextWidgetCmd procedure, "delete" option} {
  279.     # we should get the longest range on equal start indices
  280.     .t delete 1.0 end; .t insert 1.0 "foonabcdefghijklm"
  281.     .t delete 2.0 2.2 2.0 2.5 2.0 2.3 2.8 2.7
  282.     .t get 1.0 end-1c
  283. } foonfghijklm
  284. test text-8.13 {TextWidgetCmd procedure, "delete" option} {
  285.     # we should get the longest range on equal start indices
  286.     .t delete 1.0 end; .t insert 1.0 "foonabcdefghijklm"
  287.     .t delete 2.0 2.2 1.2 2.6 2.0 2.5
  288.     .t get 1.0 end-1c
  289. } foghijklm
  290. test text-8.14 {TextWidgetCmd procedure, "delete" option} {
  291.     # we should get the longest range on equal start indices
  292.     .t delete 1.0 end; .t insert 1.0 "foonabcdefghijklm"
  293.     .t delete 2.0 2.2 2.0 2.5 1.1 2.3 2.8 2.7
  294.     .t get 1.0 end-1c
  295. } ffghijklm
  296. test text-8.15 {TextWidgetCmd procedure, "delete" option} {
  297.     # we should get the watch for overlapping ranges - they should
  298.     # essentially be merged into one span.
  299.     .t delete 1.0 end; .t insert 1.0 "foonabcdefghijklm"
  300.     .t delete 2.0 2.6 2.2 2.8
  301.     .t get 1.0 end-1c
  302. } foonijklm
  303. test text-8.16 {TextWidgetCmd procedure, "delete" option} {
  304.     # we should get the watch for overlapping ranges - they should
  305.     # essentially be merged into one span.
  306.     .t delete 1.0 end; .t insert 1.0 "foonabcdefghijklm"
  307.     .t delete 2.0 2.6 2.2 2.4
  308.     .t get 1.0 end-1c
  309. } foonghijklm
  310. .t delete 1.0 end; .t insert 1.0 $prevtext
  311. test text-9.1 {TextWidgetCmd procedure, "get" option} {
  312.     list [catch {.t get} msg] $msg
  313. } {1 {wrong # args: should be ".t get index1 ?index2 ...?"}}
  314. test text-9.2 {TextWidgetCmd procedure, "get" option} {
  315.     list [catch {.t get a b c} msg] $msg
  316. } {1 {bad text index "a"}}
  317. test text-9.3 {TextWidgetCmd procedure, "get" option} {
  318.     list [catch {.t get @q 3.1} msg] $msg
  319. } {1 {bad text index "@q"}}
  320. test text-9.4 {TextWidgetCmd procedure, "get" option} {
  321.     list [catch {.t get 3.1 @r} msg] $msg
  322. } {1 {bad text index "@r"}}
  323. test text-9.5 {TextWidgetCmd procedure, "get" option} {
  324.     .t get 5.7 5.3
  325. } {}
  326. test text-9.6 {TextWidgetCmd procedure, "get" option} {
  327.     .t get 5.3 5.5
  328. } { G}
  329. test text-9.7 {TextWidgetCmd procedure, "get" option} {
  330.     .t get 5.3 end
  331. } { GIrl .#@? x_yz
  332. !@#$%
  333. Line 7
  334. }
  335. .t mark set a 5.3
  336. .t mark set b 5.3
  337. .t mark set c 5.5
  338. test text-9.8 {TextWidgetCmd procedure, "get" option} {
  339.     .t get 5.2 5.7
  340. } {y GIr}
  341. test text-9.9 {TextWidgetCmd procedure, "get" option} {
  342.     .t get 5.2
  343. } {y}
  344. test text-9.10 {TextWidgetCmd procedure, "get" option} {
  345.     .t get 5.2 5.4
  346. } {y }
  347. test text-9.11 {TextWidgetCmd procedure, "get" option} {
  348.     .t get 5.2 5.4 5.4
  349. } {{y } G}
  350. test text-9.12 {TextWidgetCmd procedure, "get" option} {
  351.     .t get 5.2 5.4 5.4 5.5
  352. } {{y } G}
  353. test text-9.13 {TextWidgetCmd procedure, "get" option} {
  354.     .t get 5.2 5.4 5.5 "5.5+5c"
  355. } {{y } {Irl .}}
  356. test text-9.14 {TextWidgetCmd procedure, "get" option} {
  357.     .t get 5.2 5.4 5.4 5.5 end-3c
  358. } {{y } G { }}
  359. test text-9.15 {TextWidgetCmd procedure, "get" option} {
  360.     .t get 5.2 5.4 5.4 5.5 end-3c end
  361. } {{y } G { 7
  362. }}
  363. test text-9.17 {TextWidgetCmd procedure, "get" option} {
  364.     list [catch {.t get 5.2 5.4 5.5 foo} msg] $msg
  365. } {1 {bad text index "foo"}}
  366. test text-10.1 {TextWidgetCmd procedure, "index" option} {
  367.     list [catch {.t index} msg] $msg
  368. } {1 {wrong # args: should be ".t index index"}}
  369. test text-10.2 {TextWidgetCmd procedure, "index" option} {
  370.     list [catch {.t ind a b} msg] $msg
  371. } {1 {wrong # args: should be ".t index index"}}
  372. test text-10.3 {TextWidgetCmd procedure, "index" option} {
  373.     list [catch {.t in a b} msg] $msg
  374. } {1 {bad option "in": must be bbox, cget, compare, configure, debug, delete, dlineinfo, dump, edit, get, image, index, insert, mark, scan, search, see, tag, window, xview, or yview}}
  375. test text-10.4 {TextWidgetCmd procedure, "index" option} {
  376.     list [catch {.t index @xyz} msg] $msg
  377. } {1 {bad text index "@xyz"}}
  378. test text-10.5 {TextWidgetCmd procedure, "index" option} {
  379.     .t index 1.2
  380. } 1.2
  381. test text-11.1 {TextWidgetCmd procedure, "insert" option} {
  382.     list [catch {.t insert 1.2} msg] $msg
  383. } {1 {wrong # args: should be ".t insert index chars ?tagList chars tagList ...?"}}
  384. test text-11.2 {TextWidgetCmd procedure, "insert" option} {
  385.     .t config -state disabled
  386.     .t insert 1.2 xyzzy
  387.     .t get 1.0 1.end
  388. } {Line 1}
  389. .t config -state normal
  390. test text-11.3 {TextWidgetCmd procedure, "insert" option} {
  391.     .t insert 1.2 xyzzy
  392.     .t get 1.0 1.end
  393. } {Lixyzzyne 1}
  394. test text-11.4 {TextWidgetCmd procedure, "insert" option} {
  395.     .t delete 1.0 end
  396.     .t insert 1.0 "Sample text" x
  397.     .t tag ranges x
  398. } {1.0 1.11}
  399. test text-11.5 {TextWidgetCmd procedure, "insert" option} {
  400.     .t delete 1.0 end
  401.     .t insert 1.0 "Sample text" x
  402.     .t insert 1.2 "XYZ" y
  403.     list [.t tag ranges x] [.t tag ranges y]
  404. } {{1.0 1.2 1.5 1.14} {1.2 1.5}}
  405. test text-11.6 {TextWidgetCmd procedure, "insert" option} {
  406.     .t delete 1.0 end
  407.     .t insert 1.0 "Sample text" {x y z}
  408.     list [.t tag ranges x] [.t tag ranges y] [.t tag ranges z]
  409. } {{1.0 1.11} {1.0 1.11} {1.0 1.11}}
  410. test text-11.7 {TextWidgetCmd procedure, "insert" option} {
  411.     .t delete 1.0 end
  412.     .t insert 1.0 "Sample text" {x y z}
  413.     .t insert 1.3 "A" {a b z}
  414.     list [.t tag ranges a] [.t tag ranges b] [.t tag ranges x] [.t tag ranges y] [.t tag ranges z]
  415. } {{1.3 1.4} {1.3 1.4} {1.0 1.3 1.4 1.12} {1.0 1.3 1.4 1.12} {1.0 1.12}}
  416. test text-11.8 {TextWidgetCmd procedure, "insert" option} {
  417.     .t delete 1.0 end
  418.     list [catch {.t insert 1.0 "Sample text" "a {b"} msg] $msg
  419. } {1 {unmatched open brace in list}}
  420. test text-11.9 {TextWidgetCmd procedure, "insert" option} {
  421.     .t delete 1.0 end
  422.     .t insert 1.0 "First" bold " " {} second "x y z" " third"
  423.     list [.t get 1.0 1.end] [.t tag ranges bold] [.t tag ranges x] 
  424.     [.t tag ranges y] [.t tag ranges z]
  425. } {{First second third} {1.0 1.5} {1.6 1.12} {1.6 1.12} {1.6 1.12}}
  426. test text-11.10 {TextWidgetCmd procedure, "insert" option} {
  427.     .t delete 1.0 end
  428.     .t insert 1.0 "First" bold " second" silly
  429.     list [.t get 1.0 1.end] [.t tag ranges bold] [.t tag ranges silly]
  430. } {{First second} {1.0 1.5} {1.5 1.12}}
  431. # Edit, mark, scan, search, see, tag, window, xview, and yview actions are tested elsewhere.
  432. test text-12.1 {ConfigureText procedure} {
  433.     list [catch {.t2 configure -state foobar} msg] $msg
  434. } {1 {bad state value "foobar": must be normal or disabled}}
  435. test text-12.2 {ConfigureText procedure} {
  436.     .t2 configure -spacing1 -2 -spacing2 1 -spacing3 1
  437.     list [.t2 cget -spacing1] [.t2 cget -spacing2] [.t2 cget -spacing3]
  438. } {0 1 1}
  439. test text-12.3 {ConfigureText procedure} {
  440.     .t2 configure -spacing1 1 -spacing2 -1 -spacing3 1
  441.     list [.t2 cget -spacing1] [.t2 cget -spacing2] [.t2 cget -spacing3]
  442. } {1 0 1}
  443. test text-12.4 {ConfigureText procedure} {
  444.     .t2 configure -spacing1 1 -spacing2 1 -spacing3 -3
  445.     list [.t2 cget -spacing1] [.t2 cget -spacing2] [.t2 cget -spacing3]
  446. } {1 1 0}
  447. test text-12.5 {ConfigureText procedure} {
  448.     set x [list [catch {.t2 configure -tabs {30 foo}} msg] $msg $errorInfo]
  449.     .t2 configure -tabs {10 20 30}
  450.     set x
  451. } {1 {bad tab alignment "foo": must be left, right, center, or numeric} {bad tab alignment "foo": must be left, right, center, or numeric
  452.     (while processing -tabs option)
  453.     invoked from within
  454. ".t2 configure -tabs {30 foo}"}}
  455. test text-12.6 {ConfigureText procedure} {
  456.     .t2 configure -tabs {10 20 30}
  457.     .t2 configure -tabs {}
  458.     .t2 cget -tabs
  459. } {}
  460. test text-12.7 {ConfigureText procedure} {
  461.     list [catch {.t2 configure -wrap bogus} msg] $msg
  462. } {1 {bad wrap mode "bogus": must be char, none, or word}}
  463. test text-12.8 {ConfigureText procedure} {
  464.     .t2 configure -selectborderwidth 17 -selectforeground #332211 
  465.     -selectbackground #abc
  466.     list [lindex [.t2 tag config sel -borderwidth] 4] 
  467. [lindex [.t2 tag config sel -foreground] 4] 
  468. [lindex [.t2 tag config sel -background] 4]
  469. } {17 #332211 #abc}
  470. test text-12.9 {ConfigureText procedure} {
  471.     .t2 configure -selectborderwidth {}
  472.     .t2 tag cget sel -borderwidth
  473. } {}
  474. test text-12.10 {ConfigureText procedure} {
  475.     list [catch {.t2 configure -selectborderwidth foo} msg] $msg
  476. } {1 {bad screen distance "foo"}}
  477. test text-12.11 {ConfigureText procedure} {
  478.     catch {destroy .t2}
  479.     .t.e select to 2
  480.     text .t2 -exportselection 1
  481.     selection get
  482. } {ab}
  483. test text-12.12 {ConfigureText procedure} {
  484.     catch {destroy .t2}
  485.     .t.e select to 2
  486.     text .t2 -exportselection 0
  487.     .t2 insert insert 1234657890
  488.     .t2 tag add sel 1.0 1.4
  489.     selection get
  490. } {ab}
  491. test text-12.13 {ConfigureText procedure} {
  492.     catch {destroy .t2}
  493.     .t.e select to 1
  494.     text .t2 -exportselection 1
  495.     .t2 insert insert 1234657890
  496.     .t2 tag add sel 1.0 1.4
  497.     selection get
  498. } {1234}
  499. test text-12.14 {ConfigureText procedure} {
  500.     catch {destroy .t2}
  501.     .t.e select to 1
  502.     text .t2 -exportselection 0
  503.     .t2 insert insert 1234657890
  504.     .t2 tag add sel 1.0 1.4
  505.     .t2 configure -exportselection 1
  506.     selection get
  507. } {1234}
  508. test text-12.15 {ConfigureText procedure} {
  509.     catch {destroy .t2}
  510.     text .t2 -exportselection 1
  511.     .t2 insert insert 1234657890
  512.     .t2 tag add sel 1.0 1.4
  513.     set result [selection get]
  514.     .t2 configure -exportselection 0
  515.     lappend result [catch {selection get} msg] $msg
  516. } {1234 1 {PRIMARY selection doesn't exist or form "STRING" not defined}}
  517. test text-12.16 {ConfigureText procedure} {fonts} {
  518.     # This test is non-portable because the window size will vary depending
  519.     # on the font size, which can vary.
  520.     catch {destroy .t2}
  521.     toplevel .t2
  522.     text .t2.t -width 20 -height 10
  523.     pack append .t2 .t2.t top
  524.     wm geometry .t2 +0+0
  525.     update
  526.     wm geometry .t2
  527. } {150x140+0+0}
  528. test text-12.17 {ConfigureText procedure} {
  529.     # This test was failing Windows because the title bar on .t2
  530.     # was a certain minimum size and it was interfering with the size
  531.     # requested by the -setgrid.  The "overrideredirect" gets rid of the
  532.     # titlebar so the toplevel can shrink to the appropriate size.
  533.     catch {destroy .t2}
  534.     toplevel .t2
  535.     wm overrideredirect .t2 1
  536.     text .t2.t -width 20 -height 10 -setgrid 1
  537.     pack append .t2 .t2.t top
  538.     wm geometry .t2 +0+0
  539.     update
  540.     wm geometry .t2
  541. } {20x10+0+0}
  542. test text-12.18 {ConfigureText procedure} {
  543.     # This test was failing on Windows because the title bar on .t2
  544.     # was a certain minimum size and it was interfering with the size
  545.     # requested by the -setgrid.  The "overrideredirect" gets rid of the
  546.     # titlebar so the toplevel can shrink to the appropriate size.
  547.     catch {destroy .t2}
  548.     toplevel .t2
  549.     wm overrideredirect .t2 1
  550.     text .t2.t -width 20 -height 10 -setgrid 1
  551.     pack append .t2 .t2.t top
  552.     wm geometry .t2 +0+0
  553.     update
  554.     set result [wm geometry .t2]
  555.     wm geometry .t2 15x8
  556.     update
  557.     lappend result [wm geometry .t2]
  558.     .t2.t configure -wrap word
  559.     update
  560.     lappend result [wm geometry .t2]
  561. } {20x10+0+0 15x8+0+0 15x8+0+0}
  562. test text-13.1 {TextWorldChanged procedure, spacing options} fonts {
  563.     catch {destroy .t2}
  564.     text .t2 -width 20 -height 10
  565.     set result [winfo reqheight .t2]
  566.     .t2 configure -spacing1 2
  567.     lappend result [winfo reqheight .t2]
  568.     .t2  configure -spacing3 1
  569.     lappend result [winfo reqheight .t2]
  570.     .t2 configure -spacing1 0
  571.     lappend result [winfo reqheight .t2]
  572. } {140 160 170 150}
  573. test text-14.1 {TextEventProc procedure} {
  574.     text .tx1 -bg #543210
  575.     rename .tx1 .tx2
  576.     set x {}
  577.     lappend x [winfo exists .tx1]
  578.     lappend x [.tx2 cget -bg]
  579.     destroy .tx1
  580.     lappend x [info command .tx*] [winfo exists .tx1] [winfo exists .tx2]
  581. } {1 #543210 {} 0 0}
  582. test text-15.1 {TextCmdDeletedProc procedure} {
  583.     text .tx1
  584.     rename .tx1 {}
  585.     list [info command .tx*] [winfo exists .tx1]
  586. } {{} 0}
  587. test text-15.2 {TextCmdDeletedProc procedure, disabling -setgrid} fonts {
  588.     catch {destroy .top}
  589.     toplevel .top
  590.     wm geom .top +0+0
  591.     text .top.t -setgrid 1 -width 20 -height 10
  592.     pack .top.t
  593.     update
  594.     set x [wm geometry .top]
  595.     rename .top.t {}
  596.     update
  597.     lappend x [wm geometry .top]
  598.     destroy .top
  599.     set x
  600. } {20x10+0+0 150x140+0+0}
  601. test text-16.1 {InsertChars procedure} {
  602.     catch {destroy .t2}
  603.     text .t2
  604.     .t2 insert 2.0 abcdn
  605.     .t2 get 1.0 end
  606. } {abcd
  607. }
  608. test text-16.2 {InsertChars procedure} {
  609.     catch {destroy .t2}
  610.     text .t2
  611.     .t2 insert 1.0 abcdn
  612.     .t2 insert end 123n
  613.     .t2 get 1.0 end
  614. } {abcd
  615. 123
  616. }
  617. test text-16.3 {InsertChars procedure} {
  618.     catch {destroy .t2}
  619.     text .t2
  620.     .t2 insert 1.0 abcdn
  621.     .t2 insert 10.0 123
  622.     .t2 get 1.0 end
  623. } {abcd
  624. 123
  625. }
  626. test text-16.4 {InsertChars procedure, inserting on top visible line} {
  627.     catch {destroy .t2}
  628.     text .t2 -width 20 -height 4 -wrap word
  629.     pack .t2
  630.     .t2 insert insert "Now is the time for all great men to come to the "
  631.     .t2 insert insert "aid of their party.n"
  632.     .t2 insert insert "Now is the time for all great men.n"
  633.     .t2 see end
  634.     update
  635.     .t2 insert 1.0 "Shortn"
  636.     .t2 index @0,0
  637. } {2.56}
  638. test text-16.5 {InsertChars procedure, inserting on top visible line} {
  639.     catch {destroy .t2}
  640.     text .t2 -width 20 -height 4 -wrap word
  641.     pack .t2
  642.     .t2 insert insert "Now is the time for all great men to come to the "
  643.     .t2 insert insert "aid of their party.n"
  644.     .t2 insert insert "Now is the time for all great men.n"
  645.     .t2 see end
  646.     update
  647.     .t2 insert 1.55 "Shortn"
  648.     .t2 index @0,0
  649. } {2.0}
  650. test text-16.6 {InsertChars procedure, inserting on top visible line} {
  651.     catch {destroy .t2}
  652.     text .t2 -width 20 -height 4 -wrap word
  653.     pack .t2
  654.     .t2 insert insert "Now is the time for all great men to come to the "
  655.     .t2 insert insert "aid of their party.n"
  656.     .t2 insert insert "Now is the time for all great men.n"
  657.     .t2 see end
  658.     update
  659.     .t2 insert 1.56 "Shortn"
  660.     .t2 index @0,0
  661. } {1.56}
  662. test text-16.7 {InsertChars procedure, inserting on top visible line} {
  663.     catch {destroy .t2}
  664.     text .t2 -width 20 -height 4 -wrap word
  665.     pack .t2
  666.     .t2 insert insert "Now is the time for all great men to come to the "
  667.     .t2 insert insert "aid of their party.n"
  668.     .t2 insert insert "Now is the time for all great men.n"
  669.     .t2 see end
  670.     update
  671.     .t2 insert 1.57 "Shortn"
  672.     .t2 index @0,0
  673. } {1.56}
  674. catch {destroy .t2}
  675. proc setup {} {
  676.     .t delete 1.0 end
  677.     .t insert 1.0 "Line 1
  678. abcde
  679. 12345
  680. Line 4"
  681. }
  682. .t delete 1.0 end
  683. test text-17.1 {DeleteChars procedure} {
  684.     .t get 1.0 end
  685. } {
  686. }
  687. test text-17.2 {DeleteChars procedure} {
  688.     list [catch {.t delete foobar} msg] $msg
  689. } {1 {bad text index "foobar"}}
  690. test text-17.3 {DeleteChars procedure} {
  691.     list [catch {.t delete 1.0 lousy} msg] $msg
  692. } {1 {bad text index "lousy"}}
  693. test text-17.4 {DeleteChars procedure} {
  694.     setup
  695.     .t delete 2.1
  696.     .t get 1.0 end
  697. } {Line 1
  698. acde
  699. 12345
  700. Line 4
  701. }
  702. test text-17.5 {DeleteChars procedure} {
  703.     setup
  704.     .t delete 2.3
  705.     .t get 1.0 end
  706. } {Line 1
  707. abce
  708. 12345
  709. Line 4
  710. }
  711. test text-17.6 {DeleteChars procedure} {
  712.     setup
  713.     .t delete 2.end
  714.     .t get 1.0 end
  715. } {Line 1
  716. abcde12345
  717. Line 4
  718. }
  719. test text-17.7 {DeleteChars procedure} {
  720.     setup
  721.     .t tag add sel 4.2 end
  722.     .t delete 4.2 end
  723.     list [.t tag ranges sel] [.t get 1.0 end]
  724. } {{} {Line 1
  725. abcde
  726. 12345
  727. Li
  728. }}
  729. test text-17.8 {DeleteChars procedure} {
  730.     setup
  731.     .t tag add sel 1.0 end
  732.     .t delete 4.0 end
  733.     list [.t tag ranges sel] [.t get 1.0 end]
  734. } {{1.0 3.5} {Line 1
  735. abcde
  736. 12345
  737. }}
  738. test text-17.9 {DeleteChars procedure} {
  739.     setup
  740.     .t delete 2.2 2.2
  741.     .t get 1.0 end
  742. } {Line 1
  743. abcde
  744. 12345
  745. Line 4
  746. }
  747. test text-17.10 {DeleteChars procedure} {
  748.     setup
  749.     .t delete 2.3 2.1
  750.     .t get 1.0 end
  751. } {Line 1
  752. abcde
  753. 12345
  754. Line 4
  755. }
  756. test text-17.11 {DeleteChars procedure} {
  757.     catch {destroy .t2}
  758.     toplevel .t2
  759.     text .t2.t -width 20 -height 5
  760.     pack append .t2 .t2.t top
  761.     wm geometry .t2 +0+0
  762.     .t2.t insert 1.0 "abcn123nxnynznqnrns"
  763.     update
  764.     .t2.t delete 1.0 3.0
  765.     list [.t2.t index @0,0] [.t2.t get @0,0]
  766. } {1.0 x}
  767. test text-17.12 {DeleteChars procedure} {
  768.     catch {destroy .t2}
  769.     toplevel .t2
  770.     text .t2.t -width 20 -height 5
  771.     pack append .t2 .t2.t top
  772.     wm geometry .t2 +0+0
  773.     .t2.t insert 1.0 "abcn123nxnynznqnrns"
  774.     .t2.t yview 3.0
  775.     update
  776.     .t2.t delete 2.0 4.0
  777.     list [.t2.t index @0,0] [.t2.t get @0,0]
  778. } {2.0 y}
  779. catch {destroy .t2}
  780. toplevel .t2
  781. text .t2.t -width 1 -height 10 -wrap char
  782. frame .t2.f -width 200 -height 20 -relief raised -bd 2
  783. pack .t2.f .t2.t -side left
  784. wm geometry .t2 +0+0
  785. update
  786. test text-17.13 {DeleteChars procedure, updates affecting topIndex} {
  787.     .t2.t delete 1.0 end
  788.     .t2.t insert end "abcden12345nqrstuv"
  789.     .t2.t yview 2.1
  790.     .t2.t delete 1.4 2.3
  791.     .t2.t index @0,0
  792. } {1.2}
  793. test text-17.14 {DeleteChars procedure, updates affecting topIndex} {
  794.     .t2.t delete 1.0 end
  795.     .t2.t insert end "abcden12345nqrstuv"
  796.     .t2.t yview 2.1
  797.     .t2.t delete 2.3 2.4
  798.     .t2.t index @0,0
  799. } {2.0}
  800. test text-17.15 {DeleteChars procedure, updates affecting topIndex} {
  801.     .t2.t delete 1.0 end
  802.     .t2.t insert end "abcden12345nqrstuv"
  803.     .t2.t yview 1.3
  804.     .t2.t delete 1.0 1.2
  805.     .t2.t index @0,0
  806. } {1.1}
  807. test text-17.16 {DeleteChars procedure, updates affecting topIndex} {
  808.     catch {destroy .t2}
  809.     toplevel .t2
  810.     text .t2.t -width 6 -height 10 -wrap word
  811.     frame .t2.f -width 200 -height 20 -relief raised -bd 2
  812.     pack .t2.f .t2.t -side left
  813.     wm geometry .t2 +0+0
  814.     update
  815.     .t2.t insert end "abc defn01 2345 678 9101112nLine 3nLine 4nLine 5n6n7n8n"
  816.     .t2.t yview 2.4
  817.     .t2.t delete 2.5
  818.     set x [.t2.t index @0,0]
  819.     .t2.t delete 2.5
  820.     list $x [.t2.t index @0,0]
  821. } {2.3 2.0}
  822. .t delete 1.0 end
  823. foreach i {a b c d e f g h i j k l m n o p q r s t u v w x y z} {
  824.     .t insert end $i.0$i.1$i.2$i.3$i.4n
  825. }
  826. test text-18.1 {TextFetchSelection procedure} {
  827.     .t tag add sel 1.3 3.4
  828.     selection get
  829. } {a.1a.2a.3a.4
  830. b.0b.1b.2b.3b.4
  831. c.0c}
  832. test text-18.2 {TextFetchSelection procedure} {
  833.     .t tag add x 1.2
  834.     .t tag add x 1.4
  835.     .t tag add x 2.0
  836.     .t tag add x 2.3
  837.     .t tag remove sel 1.0 end
  838.     .t tag add sel 1.0 3.4
  839.     selection get
  840. } {a.0a.1a.2a.3a.4
  841. b.0b.1b.2b.3b.4
  842. c.0c}
  843. test text-18.3 {TextFetchSelection procedure} {
  844.     .t tag remove sel 1.0 end
  845.     .t tag add sel 13.3
  846.     selection get
  847. } {m}
  848. test text-18.4 {TextFetchSelection procedure} {
  849.     .t tag remove x 1.0 end
  850.     .t tag add sel 1.0 3.4
  851.     .t tag remove sel 1.0 end
  852.     .t tag add sel 1.2 1.5
  853.     .t tag add sel 2.4 3.1
  854.     .t tag add sel 10.0 10.end
  855.     .t tag add sel 13.3
  856.     selection get
  857. } {0a..1b.2b.3b.4
  858. cj.0j.1j.2j.3j.4m}
  859. set x ""
  860. for {set i 1} {$i < 200} {incr i} {
  861.     append x "This is line $i, padded to just about 53 characters.n"
  862. }
  863. test text-18.5 {TextFetchSelection procedure, long selections} {
  864.     .t delete 1.0 end
  865.     .t insert end $x
  866.     .t tag add sel 1.0 end
  867.     selection get
  868. } $xn
  869. test text-19.1 {TkTextLostSelection procedure} {unixOnly} {
  870.     catch {destroy .t2}
  871.     text .t2
  872.     .t2 insert 1.0 "abcndefnghijkn1234"
  873.     .t2 tag add sel 1.2 3.3
  874.     .t.e select to 1
  875.     .t2 tag ranges sel
  876. } {}
  877. test text-19.2 {TkTextLostSelection procedure} {macOrPc} {
  878.     catch {destroy .t2}
  879.     text .t2
  880.     .t2 insert 1.0 "abcndefnghijkn1234"
  881.     .t2 tag add sel 1.2 3.3
  882.     .t.e select to 1
  883.     .t2 tag ranges sel
  884. } {1.2 3.3}
  885. catch {destroy .t2}
  886. test text-19.3 {TkTextLostSelection procedure} {
  887.     catch {destroy .t2}
  888.     text .t2
  889.     .t2 insert 1.0 "abcdefnghijkn1234"
  890.     .t2 tag add sel 1.0 1.3
  891.     set x [selection get]
  892.     selection clear
  893.     lappend x [catch {selection get} msg] $msg
  894.     .t2 tag add sel 1.0 1.3
  895.     lappend x [selection get]
  896. } {abc 1 {PRIMARY selection doesn't exist or form "STRING" not defined} abc}
  897. .t delete 1.0 end
  898. .t insert end "xxyz xyz x. thenfoo -forward bar xxxxx BaR foonxyz xxyzx"
  899. test text-20.1 {TextSearchCmd procedure, argument parsing} {
  900.     list [catch {.t search -} msg] $msg
  901. } {1 {bad switch "-": must be --, -backward, -count, -elide, -exact, -forward, -nocase, or -regexp}}
  902. test text-20.2 {TextSearchCmd procedure, -backwards option} {
  903.     .t search -backwards xyz 1.4
  904. } {1.1}
  905. test text-20.3 {TextSearchCmd procedure, -forwards option} {
  906.     .t search -forwards xyz 1.4
  907. } {1.5}
  908. test text-20.4 {TextSearchCmd procedure, -exact option} {
  909.     .t search -f -exact x. 1.0
  910. } {1.9}
  911. test text-20.5 {TextSearchCmd procedure, -regexp option} {
  912.     .t search -b -regexp x.z 1.4
  913. } {1.1}
  914. test text-20.6 {TextSearchCmd procedure, -count option} {
  915.     set length unmodified
  916.     list [.t search -count length x. 1.4] $length
  917. } {1.9 2}
  918. test text-20.7 {TextSearchCmd procedure, -count option} {
  919.     list [catch {.t search -count} msg] $msg
  920. } {1 {no value given for "-count" option}}
  921. test text-20.8 {TextSearchCmd procedure, -nocase option} {
  922.     list [.t search -nocase BaR 1.1] [.t search BaR 1.1]
  923. } {2.13 2.23}
  924. test text-20.9 {TextSearchCmd procedure, -nocase option} {
  925.     .t search -n BaR 1.1
  926. } {2.13}
  927. test text-20.10 {TextSearchCmd procedure, -- option} {
  928.     .t search -- -forward 1.0
  929. } {2.4}
  930. test text-20.11 {TextSearchCmd procedure, argument parsing} {
  931.     list [catch {.t search abc} msg] $msg
  932. } {1 {wrong # args: should be ".t search ?switches? pattern index ?stopIndex?"}}
  933. test text-20.12 {TextSearchCmd procedure, argument parsing} {
  934.     list [catch {.t search abc d e f} msg] $msg
  935. } {1 {wrong # args: should be ".t search ?switches? pattern index ?stopIndex?"}}
  936. test text-20.13 {TextSearchCmd procedure, check index} {
  937.     list [catch {.t search abc gorp} msg] $msg
  938. } {1 {bad text index "gorp"}}
  939. test text-20.14 {TextSearchCmd procedure, startIndex == "end"} {
  940.     .t search non-existent end
  941. } {}
  942. test text-20.15 {TextSearchCmd procedure, startIndex == "end"} {
  943.     .t search non-existent end
  944. } {}
  945. test text-20.16 {TextSearchCmd procedure, bad stopIndex} {
  946.     list [catch {.t search abc 1.0 lousy} msg] $msg
  947. } {1 {bad text index "lousy"}}
  948. test text-20.17 {TextSearchCmd procedure, pattern case conversion} {
  949.     list [.t search -nocase BAR 1.1] [.t search BAR 1.1]
  950. } {2.13 {}}
  951. test text-20.18 {TextSearchCmd procedure, bad regular expression pattern} {
  952.     list [catch {.t search -regexp a( 1.0} msg] $msg
  953. } {1 {couldn't compile regular expression pattern: parentheses () not balanced}}
  954. test text-20.19 {TextSearchCmd procedure, skip dummy last line} {
  955.     .t search -backwards BaR end 1.0
  956. } {2.23}
  957. test text-20.20 {TextSearchCmd procedure, skip dummy last line} {
  958.     .t search -backwards n end 1.0
  959. } {3.9}
  960. test text-20.21 {TextSearchCmd procedure, skip dummy last line} {
  961.     .t search n end
  962. } {1.15}
  963. test text-20.22 {TextSearchCmd procedure, skip dummy last line} {
  964.     .t search -back n 1.0
  965. } {3.9}
  966. test text-20.23 {TextSearchCmd procedure, extract line contents} {
  967.     .t tag add foo 1.2
  968.     .t tag add x 1.3
  969.     .t mark set silly 1.2
  970.     .t search xyz 3.6
  971. } {1.1}
  972. test text-20.24 {TextSearchCmd procedure, stripping newlines} {
  973.     .t search then 1.0
  974. } {1.12}
  975. test text-20.25 {TextSearchCmd procedure, stripping newlines} {
  976.     .t search -regexp then 1.0
  977. } {}
  978. test text-20.26 {TextSearchCmd procedure, stripping newlines} {
  979.     .t search -regexp {the$} 1.0
  980. } {1.12}
  981. test text-20.27 {TextSearchCmd procedure, stripping newlines} {
  982.     .t search -regexp n 1.0
  983. } {}
  984. test text-20.28 {TextSearchCmd procedure, line case conversion} {
  985.     list [.t search -nocase bar 2.18] [.t search bar 2.18]
  986. } {2.23 2.13}
  987. test text-20.29 {TextSearchCmd procedure, firstChar and lastChar} {
  988.     .t search -backwards xyz 1.6
  989. } {1.5}
  990. test text-20.30 {TextSearchCmd procedure, firstChar and lastChar} {
  991.     .t search -backwards xyz 1.5
  992. } {1.1}
  993. test text-20.31 {TextSearchCmd procedure, firstChar and lastChar} {
  994.     .t search xyz 1.5
  995. } {1.5}
  996. test text-20.32 {TextSearchCmd procedure, firstChar and lastChar} {
  997.     .t search xyz 1.6
  998. } {3.0}
  999. test text-20.33 {TextSearchCmd procedure, firstChar and lastChar} {
  1000.     .t search {} 1.end
  1001. } {1.15}
  1002. test text-20.34 {TextSearchCmd procedure, firstChar and lastChar} {
  1003.     .t search f 1.end
  1004. } {2.0}
  1005. test text-20.35 {TextSearchCmd procedure, firstChar and lastChar} {
  1006.     .t search {} end
  1007. } {1.0}
  1008. test text-20.36 {TextSearchCmd procedure, regexp finds empty lines} {
  1009.     # Test for fix of bug #1643
  1010.     .t insert end "n"
  1011.     tk::TextSetCursor .t 4.0
  1012.     .t search -forward -regexp {^$} insert end
  1013. } {4.0}
  1014.     
  1015. catch {destroy .t2}
  1016. toplevel .t2
  1017. wm geometry .t2 +0+0
  1018. text .t2.t -width 30 -height 10
  1019. pack .t2.t
  1020. .t2.t insert 1.0 "This is a linenand this is another"
  1021. .t2.t insert end "nand this is yet another"
  1022. frame .t2.f -width 20 -height 20 -bd 2 -relief raised
  1023. .t2.t window create 2.5 -window .t2.f
  1024. test text-20.36 {TextSearchCmd procedure, firstChar and lastChar} {
  1025.     .t2.t search his 2.6
  1026. } {2.6}
  1027. test text-20.37 {TextSearchCmd procedure, firstChar and lastChar} {
  1028.     .t2.t search this 2.6
  1029. } {3.4}
  1030. test text-20.38 {TextSearchCmd procedure, firstChar and lastChar} {
  1031.     .t2.t search is 2.6
  1032. } {2.7}
  1033. test text-20.39 {TextSearchCmd procedure, firstChar and lastChar} {
  1034.     .t2.t search his 2.7
  1035. } {3.5}
  1036. test text-20.40 {TextSearchCmd procedure, firstChar and lastChar} {
  1037.     .t2.t search -backwards "his is another" 2.6
  1038. } {2.6}
  1039. test text-20.41 {TextSearchCmd procedure, firstChar and lastChar} {
  1040.     .t2.t search -backwards "his is" 2.6
  1041. } {1.1}
  1042. destroy .t2
  1043. test text-20.42 {TextSearchCmd procedure, firstChar and lastChar} {
  1044.     .t search -backwards forw 2.5
  1045. } {2.5}
  1046. test text-20.43 {TextSearchCmd procedure, firstChar and lastChar} {
  1047.     .t search forw 2.5
  1048. } {2.5}
  1049. test text-20.44 {TextSearchCmd procedure, firstChar and lastChar} {
  1050.     catch {destroy .t2}
  1051.     text .t2
  1052.     list [.t2 search a 1.0] [.t2 search -backward a 1.0]
  1053. } {{} {}}
  1054. test text-20.45 {TextSearchCmd procedure, regexp match length} {
  1055.     set length unchanged
  1056.     list [.t search -regexp -count length x(.)(.*)z 1.1] $length
  1057. } {1.1 7}
  1058. test text-20.46 {TextSearchCmd procedure, regexp match length} {
  1059.     set length unchanged
  1060.     list [.t search -regexp -backward -count length fo* 2.5] $length
  1061. } {2.0 3}
  1062. test text-20.47 {TextSearchCmd procedure, checking stopIndex} {
  1063.     list [.t search bar 2.1 2.13] [.t search bar 2.1 2.14] 
  1064.     [.t search bar 2.12 2.14] [.t search bar 2.14 2.14]
  1065. } {{} 2.13 2.13 {}}
  1066. test text-20.48 {TextSearchCmd procedure, checking stopIndex} {
  1067.     list [.t search -backwards bar 2.20 2.13] 
  1068.     [.t search -backwards bar 2.20 2.14] 
  1069.     [.t search -backwards bar 2.14 2.13] 
  1070.     [.t search -backwards bar 2.13 2.13]
  1071. } {2.13 {} 2.13 {}}
  1072. test text-20.49 {TextSearchCmd procedure, embedded windows and index/count} {
  1073.     frame .t.f1 -width 20 -height 20 -relief raised -bd 2
  1074.     frame .t.f2 -width 20 -height 20 -relief raised -bd 2
  1075.     frame .t.f3 -width 20 -height 20 -relief raised -bd 2
  1076.     frame .t.f4 -width 20 -height 20 -relief raised -bd 2
  1077.     .t window create 2.10 -window .t.f3
  1078.     .t window create 2.8 -window .t.f2
  1079.     .t window create 2.8 -window .t.f1
  1080.     .t window create 2.1 -window .t.f4
  1081.     set result ""
  1082.     lappend result [.t search -count x forward 1.0] $x
  1083.     lappend result [.t search -count x wa 1.0] $x
  1084.     .t delete 2.1
  1085.     .t delete 2.8 2.10
  1086.     .t delete 2.10
  1087.     set result
  1088. } {2.6 10 2.11 2}
  1089. test text-20.50 {TextSearchCmd procedure, error setting variable} {
  1090.     catch {unset a}
  1091.     set a 44
  1092.     list [catch {.t search -count a(2) xyz 1.0} msg] $msg
  1093. } {1 {can't set "a(2)": variable isn't array}}
  1094. test text-20.51 {TextSearchCmd procedure, wrap-around} {
  1095.     .t search -backwards xyz 1.1
  1096. } {3.5}
  1097. test text-20.52 {TextSearchCmd procedure, wrap-around} {
  1098.     .t search -backwards xyz 1.1 1.0
  1099. } {}
  1100. test text-20.53 {TextSearchCmd procedure, wrap-around} {
  1101.     .t search xyz 3.6
  1102. } {1.1}
  1103. test text-20.54 {TextSearchCmd procedure, wrap-around} {
  1104.     .t search xyz 3.6 end
  1105. } {}
  1106. test text-20.55 {TextSearchCmd procedure, no match} {
  1107.     .t search non_existent 3.5
  1108. } {}
  1109. test text-20.56 {TextSearchCmd procedure, no match} {
  1110.     .t search -regexp non_existent 3.5
  1111. } {}
  1112. test text-20.57 {TextSearchCmd procedure, special cases} {
  1113.     .t search -back x 1.1
  1114. } {1.0}
  1115. test text-20.58 {TextSearchCmd procedure, special cases} {
  1116.     .t search -back x 1.0
  1117. } {3.8}
  1118. test text-20.59 {TextSearchCmd procedure, special cases} {
  1119.     .t search n {end-2c}
  1120. } {3.9}
  1121. test text-20.60 {TextSearchCmd procedure, special cases} {
  1122.     .t search n end
  1123. } {1.15}
  1124. test text-20.61 {TextSearchCmd procedure, special cases} {
  1125.     .t search x 1.0
  1126. } {1.0}
  1127. test text-20.62 {TextSearchCmd, freeing copy of pattern} {
  1128.     # This test doesn't return a result, but it will generate
  1129.     # a core leak if the pattern copy isn't properly freed.
  1130.     set p abcdefg1234567890
  1131.     set p $p$p$p$p$p$p$p$p
  1132.     set p $p$p$p$p$p
  1133.     .t search -nocase $p 1.0
  1134. } {}
  1135. test text-20.63 {TextSearchCmd, unicode} {
  1136.     .t delete 1.0 end
  1137.     .t insert end "foou30c9u30cabar"
  1138.     .t search u30c9u30ca 1.0
  1139. } 1.3
  1140. test text-20.64 {TextSearchCmd, unicode} {
  1141.     .t delete 1.0 end
  1142.     .t insert end "foou30c9u30cabar"
  1143.     list [.t search -count n u30c9u30ca 1.0] $n
  1144. } {1.3 2}
  1145. test text-20.65 {TextSearchCmd, unicode with non-text segments} {
  1146.     .t delete 1.0 end
  1147.     button .b1 -text baz
  1148.     .t insert end "foou30c9"
  1149.     .t window create end -window .b1
  1150.     .t insert end "u30cabar"
  1151.     set result [list [.t search -count n u30c9u30ca 1.0] $n]
  1152.     destroy .b1
  1153.     set result
  1154. } {1.3 3}
  1155. test text-20.66 {TextSearchCmd, hidden text does not affect match index} {
  1156.     deleteWindows
  1157.     pack [text .t2]
  1158.     .t2 insert end "12345H7890"
  1159.     .t2 search 7 1.0
  1160. } 1.6
  1161. test text-20.67 {TextSearchCmd, hidden text does not affect match index} {
  1162.     deleteWindows
  1163.     pack [text .t2]
  1164.     .t2 insert end "12345H7890"
  1165.     .t2 tag configure hidden -elide true
  1166.     .t2 tag add hidden 1.5
  1167.     .t2 search 7 1.0
  1168. } 1.6
  1169. test text-20.68 {TextSearchCmd, hidden text does not affect match index} {
  1170.     deleteWindows
  1171.     pack [text .t2]
  1172.     .t2 insert end "foobarnbarbaznbazboo"
  1173.     .t2 search boo 1.0
  1174. } 3.3
  1175. test text-20.69 {TextSearchCmd, hidden text does not affect match index} {
  1176.     deleteWindows
  1177.     pack [text .t2]
  1178.     .t2 insert end "foobarnbarbaznbazboo"
  1179.     .t2 tag configure hidden -elide true
  1180.     .t2 tag add hidden 2.0 3.0
  1181.     .t2 search boo 1.0
  1182. } 3.3
  1183. test text-20.70 {TextSearchCmd, -regexp -nocase searches} {
  1184.     catch {destroy .t}
  1185.     pack [text .t]
  1186.     .t insert end "word1 word2"
  1187.     set res [.t search -nocase -regexp {mword.} 1.0 end]
  1188.     destroy .t
  1189.     set res
  1190. } 1.0
  1191. test text-20.71 {TextSearchCmd, -regexp -nocase searches} {
  1192.     catch {destroy .t}
  1193.     pack [text .t]
  1194.     .t insert end "word1 word2"
  1195.     set res [.t search -nocase -regexp {word.M} 1.0 end]
  1196.     destroy .t
  1197.     set res
  1198. } 1.0
  1199. test text-20.72 {TextSearchCmd, -regexp -nocase searches} {
  1200.     catch {destroy .t}
  1201.     pack [text .t]
  1202.     .t insert end "word1 word2"
  1203.     set res [.t search -nocase -regexp {word.W} 1.0 end]
  1204.     destroy .t
  1205.     set res
  1206. } 1.0
  1207.     
  1208. deleteWindows
  1209. text .t2 -highlightthickness 0 -bd 0 -relief flat -padx 0 -width 100
  1210. pack .t2
  1211. .t2 insert end "1t2t3t4t55.5"
  1212. test text-21.1 {TkTextGetTabs procedure} {
  1213.     list [catch {.t2 configure -tabs "{{}"} msg] $msg
  1214. } {1 {unmatched open brace in list}}
  1215. test text-21.2 {TkTextGetTabs procedure} {
  1216.     list [catch {.t2 configure -tabs xyz} msg] $msg
  1217. } {1 {bad screen distance "xyz"}}
  1218. test text-21.3 {TkTextGetTabs procedure} {
  1219.     .t2 configure -tabs {100 200}
  1220.     update idletasks
  1221.     list [lindex [.t2 bbox 1.2] 0] [lindex [.t2 bbox 1.4] 0]
  1222. } {100 200}
  1223. test text-21.4 {TkTextGetTabs procedure} {
  1224.     .t2 configure -tabs {100 right 200 left 300 center 400 numeric}
  1225.     update idletasks
  1226.     list [expr [lindex [.t2 bbox 1.2] 0] + [lindex [.t2 bbox 1.2] 2]] 
  1227.     [lindex [.t2 bbox 1.4] 0] 
  1228.     [expr [lindex [.t2 bbox 1.6] 0] + [lindex [.t2 bbox 1.6] 2]/2] 
  1229.     [lindex [.t2 bbox 1.10] 0]
  1230. } {100 200 300 400}
  1231. test text-21.5 {TkTextGetTabs procedure} {
  1232.     .t2 configure -tabs {105 r 205 l 305 c 405 n}
  1233.     update idletasks
  1234.     list [expr [lindex [.t2 bbox 1.2] 0] + [lindex [.t2 bbox 1.2] 2]] 
  1235.     [lindex [.t2 bbox 1.4] 0] 
  1236.     [expr [lindex [.t2 bbox 1.6] 0] + [lindex [.t2 bbox 1.6] 2]/2] 
  1237.     [lindex [.t2 bbox 1.10] 0]
  1238. } {105 205 305 405}
  1239. test text-21.6 {TkTextGetTabs procedure} {
  1240.     list [catch {.t2 configure -tabs {100 left 200 lork}} msg] $msg
  1241. } {1 {bad tab alignment "lork": must be left, right, center, or numeric}}
  1242. test text-21.7 {TkTextGetTabs procedure} {
  1243.     list [catch {.t2 configure -tabs {100 !44 200 lork}} msg] $msg
  1244. } {1 {bad screen distance "!44"}}
  1245. deleteWindows
  1246. text .t
  1247. pack .t
  1248. .t insert 1.0 "One Line"
  1249. .t mark set insert 1.0
  1250. test text-22.1 {TextDumpCmd procedure, bad args} {
  1251.     list [catch {.t dump} msg] $msg
  1252. } {1 {Usage: .t dump ?-all -image -text -mark -tag -window? ?-command script? index ?index2?}}
  1253. test text-22.2 {TextDumpCmd procedure, bad args} {
  1254.     list [catch {.t dump -all} msg] $msg
  1255. } {1 {Usage: .t dump ?-all -image -text -mark -tag -window? ?-command script? index ?index2?}}
  1256. test text-22.3 {TextDumpCmd procedure, bad args} {
  1257.     list [catch {.t dump -command} msg] $msg
  1258. } {1 {Usage: .t dump ?-all -image -text -mark -tag -window? ?-command script? index ?index2?}}
  1259. test text-22.4 {TextDumpCmd procedure, bad args} {
  1260.     list [catch {.t dump -bogus} msg] $msg
  1261. } {1 {Usage: .t dump ?-all -image -text -mark -tag -window? ?-command script? index ?index2?}}
  1262. test text-22.5 {TextDumpCmd procedure, bad args} {
  1263.     list [catch {.t dump bogus} msg] $msg
  1264. } {1 {bad text index "bogus"}}
  1265. test text-22.6 {TextDumpCmd procedure, one index} {
  1266.     .t dump -text 1.2
  1267. } {text e 1.2}
  1268. test text-22.7 {TextDumpCmd procedure, two indices} {
  1269.     .t dump -text 1.0 1.end
  1270. } {text {One Line} 1.0}
  1271. test text-22.8 {TextDumpCmd procedure, "end" index} {
  1272.     .t dump -text 1.end end
  1273. } {text {
  1274. } 1.8}
  1275. test text-22.9 {TextDumpCmd procedure, same indices} {
  1276.     .t dump 1.5 1.5
  1277. } {}
  1278. test text-22.10 {TextDumpCmd procedure, negative range} {
  1279.     .t dump 1.5 1.0
  1280. } {}
  1281. .t delete 1.0 end
  1282. .t insert end "Line OnenLine TwonLine ThreenLine Four"
  1283. .t mark set insert 1.0
  1284. .t mark set current 1.0
  1285. test text-22.11 {TextDumpCmd procedure, stop at begin-line} {
  1286.     .t dump -text 1.0 2.0
  1287. } {text {Line One
  1288. } 1.0}
  1289. test text-22.12 {TextDumpCmd procedure, span multiple lines} {
  1290.     .t dump -text 1.5 3.end
  1291. } {text {One
  1292. } 1.5 text {Line Two
  1293. } 2.0 text {Line Three} 3.0}
  1294. .t tag add x 2.0 2.end
  1295. .t tag add y 1.0 end
  1296. .t mark set m 2.4
  1297. .t mark set n 4.0
  1298. .t mark set END end
  1299. test text-22.13 {TextDumpCmd procedure, tags only} {
  1300.     .t dump -tag 2.1 2.8
  1301. } {}
  1302. test text-22.14 {TextDumpCmd procedure, tags only} {
  1303.     .t dump -tag 2.0 2.8
  1304. } {tagon x 2.0}
  1305. test text-22.15 {TextDumpCmd procedure, tags only} {
  1306.     .t dump -tag 1.0 4.end
  1307. } {tagon y 1.0 tagon x 2.0 tagoff x 2.8}
  1308. test text-22.16 {TextDumpCmd procedure, tags only} {
  1309.     .t dump -tag 1.0 end
  1310. } {tagon y 1.0 tagon x 2.0 tagoff x 2.8 tagoff y 5.0}
  1311. .t mark set insert 1.0
  1312. .t mark set current 1.0
  1313. test text-22.17 {TextDumpCmd procedure, marks only} {
  1314.     .t dump -mark 1.1 1.8
  1315. } {}
  1316. test text-22.18 {TextDumpCmd procedure, marks only} {
  1317.     .t dump -mark 2.0 2.8
  1318. } {mark m 2.4}
  1319. test text-22.19 {TextDumpCmd procedure, marks only} {
  1320.     .t dump -mark 1.1 4.end
  1321. } {mark m 2.4 mark n 4.0}
  1322. test text-22.20 {TextDumpCmd procedure, marks only} {
  1323.     .t dump -mark 1.0 end
  1324. } {mark current 1.0 mark insert 1.0 mark m 2.4 mark n 4.0 mark END 5.0}
  1325. button .hello -text Hello
  1326. .t window create 3.end -window .hello
  1327. for {set i 0} {$i < 100} {incr i} {
  1328.     .t insert end "-n"
  1329. }
  1330. .t window create 100.0 -create { }
  1331. test text-22.21 {TextDumpCmd procedure, windows only} {
  1332.     .t dump -window 1.0 5.0
  1333. } {window .hello 3.10}
  1334. test text-22.22 {TextDumpCmd procedure, windows only} {
  1335.     .t dump -window 5.0 end
  1336. } {window {} 100.0}
  1337. .t delete 1.0 end
  1338. eval {.t mark unset} [.t mark names]
  1339. .t insert end "Line OnenLine TwonLine ThreenLine Four"
  1340. .t mark set insert 1.0
  1341. .t mark set current 1.0
  1342. .t tag add x 2.0 2.end
  1343. .t mark set m 2.4
  1344. proc Append {varName key value index} {
  1345.     upvar #0 $varName x
  1346.     lappend x $key $index $value
  1347. }
  1348. test text-22.23 {TextDumpCmd procedure, command script} {
  1349.     set x {}
  1350.     .t dump -command {Append x} -all 1.0 end
  1351.     set x
  1352. } {mark 1.0 current mark 1.0 insert text 1.0 {Line One
  1353. } tagon 2.0 x text 2.0 Line mark 2.4 m text 2.4 { Two} tagoff 2.8 x text 2.8 {
  1354. } text 3.0 {Line Three
  1355. } text 4.0 {Line Four
  1356. }}
  1357. test text-22.24 {TextDumpCmd procedure, command script} {
  1358.     set x {}
  1359.     .t dump -mark -command {Append x} 1.0 end
  1360.     set x
  1361. } {mark 1.0 current mark 1.0 insert mark 2.4 m}
  1362. catch {unset x}
  1363. test text-22.25 {TextDumpCmd procedure, unicode characters} {
  1364.     catch {destroy .t}
  1365.     text .t
  1366.     .t delete 1.0 end
  1367.     .t insert 1.0 xb1xb1xb1
  1368.     .t dump -all 1.0 2.0
  1369. } "text xb1xb1xb1 1.0 mark insert 1.3 mark current 1.3 text {n} 1.3"
  1370. test text-22.26 {TextDumpCmd procedure, unicode characters} {
  1371.     catch {destroy .t}
  1372.     text .t
  1373.     .t delete 1.0 end
  1374.     .t insert 1.0 abcxb1xb1xb1
  1375.     .t dump -all 1.0 2.0
  1376. } "text abcxb1xb1xb1 1.0 mark insert 1.6 mark current 1.6 text {n} 1.6"
  1377. set l [interp hidden]
  1378. deleteWindows
  1379. test text-23.1 {text widget vs hidden commands} {
  1380.     catch {destroy .t}
  1381.     text .t
  1382.     interp hide {} .t
  1383.     destroy .t
  1384.     list [winfo children .] [interp hidden]
  1385. } [list {} $l]
  1386. test text-24.1 {bug fix - 1642} {
  1387.     catch {destroy .t}
  1388.     text .t
  1389.     pack .t
  1390.     .t insert end "line 1n"
  1391.     .t insert end "line 2n"
  1392.     .t insert end "line 3n"
  1393.     .t insert end "line 4n"
  1394.     .t insert end "line 5n"
  1395.     tk::TextSetCursor .t 3.0
  1396.     .t search -backward -regexp "$" insert 1.0
  1397. } {2.6}
  1398. test text-25.1 {TextEditCmd procedure, argument parsing} {
  1399.     list [catch {.t edit} msg] $msg
  1400. } {1 {wrong # args: should be ".t edit option ?arg arg ...?"}}
  1401. test text-25.2 {TextEditCmd procedure, argument parsing} {
  1402.     list [catch {.t edit gorp} msg] $msg
  1403. } {1 {bad edit option "gorp": must be modified, redo, reset, separator or undo}}
  1404. test text-25.3 {TextEditUndo procedure, undoing changes} {
  1405.     catch {destroy .t}
  1406.     text .t -undo 1
  1407.     pack .t
  1408.     .t insert end "line 1n"
  1409.     .t delete 1.4 1.6
  1410.     .t insert end "should be gone after undon"
  1411.     .t edit undo
  1412.     .t get 1.0 end
  1413. } "linenn"
  1414. test text-25.4 {TextEditRedo procedure, redoing changes} {
  1415.     catch {destroy .t}
  1416.     text .t -undo 1
  1417.     pack .t
  1418.     .t insert end "line 1n"
  1419.     .t delete 1.4 1.6
  1420.     .t insert end "should be back after redon"
  1421.     .t edit undo
  1422.     .t edit redo
  1423.     .t get 1.0 end
  1424. } "linenshould be back after redonn"
  1425. test text-25.5 {TextEditUndo procedure, resetting stack} {
  1426.     catch {destroy .t}
  1427.     text .t -undo 1
  1428.     pack .t
  1429.     .t insert end "line 1n"
  1430.     .t delete 1.4 1.6
  1431.     .t insert end "should be back after redon"
  1432.     .t edit reset
  1433.     catch {.t edit undo} msg
  1434.     set msg
  1435. } "nothing to undo"
  1436. test text-25.6 {TextEditCmd procedure, insert separator} {
  1437.     catch {destroy .t}
  1438.     text .t -undo 1
  1439.     pack .t
  1440.     .t insert end "line 1n"
  1441.     .t edit separator
  1442.     .t insert end "line 2n"
  1443.     .t edit undo
  1444.     .t get 1.0 end
  1445. } "line 1nn"
  1446. test text-25.7 {-autoseparators configuration option} {
  1447.     catch {destroy .t}
  1448.     text .t -undo 1 -autoseparators 0
  1449.     pack .t
  1450.     .t insert end "line 1n"
  1451.     .t delete 1.4 1.6
  1452.     .t insert end "line 2n"
  1453.     .t edit undo
  1454.     .t get 1.0 end
  1455. } "n"
  1456. test text-25.8 {TextEditCmd procedure, modified flag} {
  1457.     catch {destroy .t}
  1458.     text .t
  1459.     pack .t
  1460.     .t insert end "line 1n"
  1461.     .t edit modified
  1462. } {1}
  1463. test text-25.9 {TextEditCmd procedure, reset modified flag} {
  1464.     catch {destroy .t}
  1465.     text .t
  1466.     pack .t
  1467.     .t insert end "line 1n"
  1468.     .t edit modified 0
  1469.     .t edit modified
  1470. } {0}
  1471. test text-25.10 {TextEditCmd procedure, set modified flag} {
  1472.     catch {destroy .t}
  1473.     text .t
  1474.     pack .t
  1475.     .t edit modified 1
  1476.     .t edit modified
  1477. } {1}
  1478. test text-25.10.1 {TextEditCmd procedure, set modified flag repeat} {
  1479.     catch {destroy .t}
  1480.     text .t
  1481.     pack .t
  1482.     set ::retval {}
  1483.     bind .t <<Modified>> "lappend ::retval modified"
  1484.     # Shouldn't require [update idle] to trigger event [Bug 1809538]
  1485.     lappend ::retval [.t edit modified]
  1486.     .t edit modified 1
  1487.     update idletasks
  1488.     lappend ::retval [.t edit modified]
  1489.     .t edit modified 1 ; # binding should only fire once [Bug 1799782]
  1490.     update idletasks
  1491.     lappend ::retval [.t edit modified]
  1492. } {0 modified 1 1}
  1493. test text-25.11 {<<Modified>> virtual event} {
  1494.     set ::retval unmodified
  1495.     catch {destroy .t}
  1496.     text .t -undo 1
  1497.     pack .t
  1498.     bind .t <<Modified>> "set ::retval modified"
  1499.     update idletasks
  1500.     .t insert end "nothing specialn"
  1501.     set ::retval
  1502. } {modified}
  1503. test text-25.11.1 {<<Modified>> virtual event - insert before Modified} {
  1504.     set ::retval {}
  1505.     destroy .t
  1506.     pack [text .t -undo 1]
  1507.     bind .t <<Modified>> { set ::retval [.t get 1.0 end-1c] }
  1508.     update idletasks
  1509.     .t insert end "nothing special"
  1510.     set ::retval
  1511. } {nothing special}
  1512. test text-25.11.2 {<<Modified>> virtual event - delete before Modified} {
  1513.     # Bug 1737288, make sure we delete chars before triggering <<Modified>>
  1514.     set ::retval {}
  1515.     destroy .t
  1516.     pack [text .t -undo 1]
  1517.     bind .t <<Modified>> { set ::retval [.t get 1.0 end-1c] }
  1518.     .t insert end "nothing special"
  1519.     .t edit modified 0
  1520.     .t delete 1.0 1.2
  1521.     set ::retval
  1522. } {thing special}
  1523. test text-25.12 {<<Selection>> virtual event} {
  1524.     set ::retval no_selection
  1525.     catch {destroy .t}
  1526.     text .t -undo 1
  1527.     pack .t
  1528.     bind .t <<Selection>> "set ::retval selection_changed"
  1529.     update idletasks
  1530.     .t insert end "nothing specialn"
  1531.     .t tag add sel 1.0 1.1
  1532.     set ::retval
  1533. } {selection_changed}
  1534. test text-25.13 {-maxundo configuration option} {
  1535.     catch {destroy .t}
  1536.     text .t -undo 1  -autoseparators 1 -maxundo 2
  1537.     pack .t
  1538.     .t insert end "line 1n"
  1539.     .t delete 1.4 1.6
  1540.     .t insert end "line 2n"
  1541.     catch {.t edit undo}
  1542.     catch {.t edit undo}
  1543.     catch {.t edit undo}
  1544.     .t get 1.0 end
  1545. } "line 1nn"
  1546. test text-25.14 {undo with space-based path} {
  1547.     set t {.t e x t}
  1548.     destroy $t
  1549.     text $t -undo 1
  1550.     $t insert end "line 1n"
  1551.     $t delete 1.4 1.6
  1552.     $t insert end "line 2n"
  1553.     $t edit undo
  1554.     $t edit undo
  1555.     $t get 1.0 end
  1556. } "line 1nn"
  1557. test text-26.1 {bug fix - 624372, ControlUtfProc long lines} {
  1558.     destroy .t
  1559.     pack [text .t -wrap none]
  1560.     .t insert end [string repeat "1" 500]
  1561. } {}
  1562. deleteWindows
  1563. option clear
  1564. # cleanup
  1565. ::tcltest::cleanupTests
  1566. return