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

通讯编程

开发平台:

Visual C++

  1. # This file is a Tcl script to test the code in the file tkTextIndex.c.
  2. # This file is organized in the standard fashion for Tcl tests.
  3. #
  4. # Copyright (c) 1994 The Regents of the University of California.
  5. # Copyright (c) 1994 Sun Microsystems, Inc.
  6. # Copyright (c) 1998-1999 by Scriptics Corporation.
  7. # All rights reserved.
  8. #
  9. # RCS: @(#) $Id: textIndex.test,v 1.7.2.1 2005/05/13 13:48:21 vincentdarley 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. # Some tests require the testtext command
  17. testConstraint testtext [llength [info commands testtext]]
  18. catch {destroy .t}
  19. text .t -font {Courier -12} -width 20 -height 10
  20. pack append . .t {top expand fill}
  21. update
  22. .t debug on
  23. wm geometry . {}
  24.   
  25. # The statements below reset the main window;  it's needed if the window
  26. # manager is mwm to make mwm forget about a previous minimum size setting.
  27. wm withdraw .
  28. wm minsize . 1 1
  29. wm positionfrom . user
  30. wm deiconify .
  31. .t insert 1.0 "Line 1
  32. abcdefghijklm
  33. 12345
  34. Line 4
  35. bu4e4fy GIrl .#@? x_yz
  36. !@#$%
  37. Line 7"
  38. image create photo textimage -width 10 -height 10
  39. textimage put red -to 0 0 9 9
  40. test textIndex-1.1 {TkTextMakeByteIndex} {testtext} {
  41.     # (lineIndex < 0)
  42.     testtext .t byteindex -1 3
  43. } {1.0 0}
  44. test textIndex-1.2 {TkTextMakeByteIndex} {testtext} {
  45.     # (lineIndex < 0), because lineIndex == strtol(argv[2]) - 1
  46.     testtext .t byteindex 0 3
  47. } {1.0 0}
  48. test textIndex-1.3 {TkTextMakeByteIndex} {testtext} {
  49.     # not (lineIndex < 0)
  50.     testtext .t byteindex 1 3
  51. } {1.3 3}
  52. test textIndex-1.4 {TkTextMakeByteIndex} {testtext} {
  53.     # (byteIndex < 0)
  54.     testtext .t byteindex 3 -1
  55. } {3.0 0}
  56. test textIndex-1.5 {TkTextMakeByteIndex} {testtext} {
  57.     # not (byteIndex < 0)
  58.     testtext .t byteindex 3 3
  59. } {3.3 3}
  60. test textIndex-1.6 {TkTextMakeByteIndex} {testtext} {
  61.     # (indexPtr->linePtr == NULL)
  62.     testtext .t byteindex 9 2
  63. } {8.0 0}
  64. test textIndex-1.7 {TkTextMakeByteIndex} {testtext} {
  65.     # not (indexPtr->linePtr == NULL)
  66.     testtext .t byteindex 7 2
  67. } {7.2 2}
  68. test textIndex-1.8 {TkTextMakeByteIndex: shortcut for 0} {testtext} {
  69.     # (byteIndex == 0)
  70.     testtext .t byteindex 1 0
  71. } {1.0 0}
  72. test textIndex-1.9 {TkTextMakeByteIndex: shortcut for 0} {testtext} {
  73.     # not (byteIndex == 0)
  74.     testtext .t byteindex 3 80
  75. } {3.5 5}
  76. test textIndex-1.10 {TkTextMakeByteIndex: verify index is in range} {testtext} {
  77.     # for (segPtr = indexPtr->linePtr->segPtr; ; segPtr = segPtr->nextPtr) 
  78.     # one segment
  79.     testtext .t byteindex 3 5
  80. } {3.5 5}
  81. test textIndex-1.11 {TkTextMakeByteIndex: verify index is in range} {testtext} {
  82.     # for (segPtr = indexPtr->linePtr->segPtr; ; segPtr = segPtr->nextPtr)
  83.     #     index += segPtr->size
  84.     # Multiple segments, make sure add segment size to index.
  85.     .t mark set foo 3.2 
  86.     set x [testtext .t byteindex 3 7]
  87.     .t mark unset foo
  88.     set x
  89. } {3.5 5}
  90. test textIndex-1.12 {TkTextMakeByteIndex: verify index is in range} {testtext} {
  91.     # (segPtr == NULL)
  92.     testtext .t byteindex 3 7
  93. } {3.5 5}
  94. test textIndex-1.13 {TkTextMakeByteIndex: verify index is in range} {testtext} {
  95.     # not (segPtr == NULL)
  96.     testtext .t byteindex 3 4
  97. } {3.4 4}
  98. test textIndex-1.14 {TkTextMakeByteIndex: verify index is in range} {testtext} {
  99.     # (index + segPtr->size > byteIndex)
  100.     # in this segment.
  101.     testtext .t byteindex 3 4
  102. } {3.4 4}
  103. test textIndex-1.15 {TkTextMakeByteIndex: verify index is in range} {testtext} {
  104.     # (index + segPtr->size > byteIndex), index != 0
  105.     # in this segment.
  106.     .t mark set foo 3.2
  107.     set x [testtext .t byteindex 3 4]
  108.     .t mark unset foo
  109.     set x
  110. } {3.4 4}
  111. test textIndex-1.16 {TkTextMakeByteIndex: UTF-8 characters} {testtext} {
  112.     testtext .t byteindex 5 100
  113. } {5.18 20}
  114. test textIndex-1.17 {TkTextMakeByteIndex: prevent splitting UTF-8 character} 
  115. {testtext} {
  116.     # ((byteIndex > index) && (segPtr->typePtr == &tkTextCharType)) 
  117.     # Wrong answer would be xb9 (the 2nd byte of UTF rep of 0x4e4f).
  118.     set x [testtext .t byteindex 5 2]
  119.     list $x [.t get insert]
  120. } {{5.2 4} y}
  121. test textIndex-1.18 {TkTextMakeByteIndex: prevent splitting UTF-8 character} 
  122. {testtext} {
  123.     # ((byteIndex > index) && (segPtr->typePtr == &tkTextCharType)) 
  124.     testtext .t byteindex 5 1
  125.     .t get insert
  126. } "u4e4f"
  127. test textIndex-2.1 {TkTextMakeCharIndex} {
  128.     # (lineIndex < 0)
  129.     .t index -1.3
  130. } 1.0
  131. test textIndex-2.2 {TkTextMakeCharIndex} {
  132.     # (lineIndex < 0), because lineIndex == strtol(argv[2]) - 1
  133.     .t index 0.3
  134. } 1.0
  135. test textIndex-2.3 {TkTextMakeCharIndex} {
  136.     # not (lineIndex < 0)
  137.     .t index 1.3
  138. } 1.3
  139. test textIndex-2.4 {TkTextMakeCharIndex} {
  140.     # (charIndex < 0)
  141.     .t index 3.-1
  142. } 3.0
  143. test textIndex-2.5 {TkTextMakeCharIndex} {
  144.     # (charIndex < 0)
  145.     .t index 3.3
  146. } 3.3
  147. test textIndex-2.6 {TkTextMakeCharIndex} {
  148.     # (indexPtr->linePtr == NULL)
  149.     .t index 9.2
  150. } 8.0
  151. test textIndex-2.7 {TkTextMakeCharIndex} {
  152.     # not (indexPtr->linePtr == NULL)
  153.     .t index 7.2
  154. } 7.2
  155. test textIndex-2.8 {TkTextMakeCharIndex: verify index is in range} {
  156.     # for (segPtr = indexPtr->linePtr->segPtr; ; segPtr = segPtr->nextPtr)
  157.     # one segment
  158.     .t index 3.5
  159. } 3.5
  160. test textIndex-2.9 {TkTextMakeCharIndex: verify index is in range} {
  161.     # for (segPtr = indexPtr->linePtr->segPtr; ; segPtr = segPtr->nextPtr)
  162.     # Multiple segments, make sure add segment size to index.
  163.     .t mark set foo 3.2 
  164.     set x [.t index 3.7]
  165.     .t mark unset foo
  166.     set x
  167. } 3.5
  168. test textIndex-2.10 {TkTextMakeCharIndex: verify index is in range} {
  169.     # (segPtr == NULL)
  170.     .t index 3.7
  171. } 3.5
  172. test textIndex-2.11 {TkTextMakeCharIndex: verify index is in range} {
  173.     # not (segPtr == NULL)
  174.     .t index 3.4
  175. } 3.4
  176. test textIndex-2.12 {TkTextMakeCharIndex: verify index is in range} {
  177.     # (segPtr->typePtr == &tkTextCharType)
  178.     # Wrong answer would be xb9 (the 2nd byte of UTF rep of 0x4e4f).
  179.     .t mark set insert 5.2
  180.     .t get insert
  181. } y
  182. test textIndex-2.13 {TkTextMakeCharIndex: verify index is in range} {
  183.     # not (segPtr->typePtr == &tkTextCharType)
  184.     .t image create 5.2 -image textimage
  185.     .t mark set insert 5.5
  186.     set x [.t get insert]
  187.     .t delete 5.2
  188.     set x
  189. } "G"
  190. test textIndex-2.14 {TkTextMakeCharIndex: verify index is in range} {
  191.     # (charIndex < segPtr->size)
  192.     .t image create 5.0 -image textimage
  193.     set x [.t index 5.0]
  194.     .t delete 5.0
  195.     set x
  196. } 5.0
  197. .t mark set foo 3.2
  198. .t tag add x 2.8 2.11
  199. .t tag add x 6.0 6.2
  200. set weirdTag "funny . +- 22.1nt{"
  201. .t tag add $weirdTag 2.1  2.6
  202. set weirdMark "asdf n{-+ 66.2t"
  203. .t mark set $weirdMark 4.0
  204. .t tag config y -relief raised
  205. test textIndex-3.1 {TkTextGetIndex, weird mark names} {
  206.     list [catch {.t index $weirdMark} msg] $msg
  207. } {0 4.0}
  208. test textIndex-4.1 {TkTextGetIndex, tags} {
  209.     list [catch {.t index x.first} msg] $msg
  210. } {0 2.8}
  211. test textIndex-4.2 {TkTextGetIndex, tags} {
  212.     list [catch {.t index x.last} msg] $msg
  213. } {0 6.2}
  214. test textIndex-4.3 {TkTextGetIndex, weird tags} {
  215.     list [.t index $weirdTag.first+1c] [.t index $weirdTag.last+2c]
  216. } {2.2 2.8}
  217. test textIndex-4.4 {TkTextGetIndex, tags} {
  218.     list [catch {.t index x.gorp} msg] $msg
  219. } {1 {bad text index "x.gorp"}}
  220. test textIndex-4.5 {TkTextGetIndex, tags} {
  221.     list [catch {.t index foo.last} msg] $msg
  222. } {1 {bad text index "foo.last"}}
  223. test textIndex-4.6 {TkTextGetIndex, tags} {
  224.     list [catch {.t index y.first} msg] $msg
  225. } {1 {text doesn't contain any characters tagged with "y"}}
  226. test textIndex-4.7 {TkTextGetIndex, tags} {
  227.     list [catch {.t index x.last,} msg] $msg
  228. } {1 {bad text index "x.last,"}}
  229. test textIndex-4.8 {TkTextGetIndex, tags} {
  230.     .t tag add z 1.0
  231.     set result [list [.t index z.first] [.t index z.last]]
  232.     .t tag delete z
  233.     set result
  234. } {1.0 1.1}
  235. test textIndex-5.1 {TkTextGetIndex, "@"} {nonPortable fonts} {
  236.     .t index @12,9
  237. } 1.1
  238. test textIndex-5.2 {TkTextGetIndex, "@"} {fonts} {
  239.     .t index @-2,7
  240. } 1.0
  241. test textIndex-5.3 {TkTextGetIndex, "@"} {fonts} {
  242.     .t index @10,-7
  243. } 1.0
  244. test textIndex-5.4 {TkTextGetIndex, "@"} {fonts} {
  245.     list [catch {.t index @x} msg] $msg
  246. } {1 {bad text index "@x"}}
  247. test textIndex-5.5 {TkTextGetIndex, "@"} {fonts} {
  248.     list [catch {.t index @10q} msg] $msg
  249. } {1 {bad text index "@10q"}}
  250. test textIndex-5.6 {TkTextGetIndex, "@"} {fonts} {
  251.     list [catch {.t index @10,} msg] $msg
  252. } {1 {bad text index "@10,"}}
  253. test textIndex-5.7 {TkTextGetIndex, "@"} {fonts} {
  254.     list [catch {.t index @10,a} msg] $msg
  255. } {1 {bad text index "@10,a"}}
  256. test textIndex-5.8 {TkTextGetIndex, "@"} {fonts} {
  257.     list [catch {.t index @10,9,} msg] $msg
  258. } {1 {bad text index "@10,9,"}}
  259. test textIndex-6.1 {TkTextGetIndex, numeric} {
  260.     list [catch {.t index 2.3} msg] $msg
  261. } {0 2.3}
  262. test textIndex-6.2 {TkTextGetIndex, numeric} {
  263.     list [catch {.t index -} msg] $msg
  264. } {1 {bad text index "-"}}
  265. test textIndex-6.3 {TkTextGetIndex, numeric} {
  266.     list [catch {.t index 2.end} msg] $msg
  267. } {0 2.13}
  268. test textIndex-6.4 {TkTextGetIndex, numeric} {
  269.     list [catch {.t index 2.x} msg] $msg
  270. } {1 {bad text index "2.x"}}
  271. test textIndex-6.5 {TkTextGetIndex, numeric} {
  272.     list [catch {.t index 2.3x} msg] $msg
  273. } {1 {bad text index "2.3x"}}
  274. test textIndex-7.1 {TkTextGetIndex, miscellaneous other bases} {
  275.     list [catch {.t index end} msg] $msg
  276. } {0 8.0}
  277. test textIndex-7.2 {TkTextGetIndex, miscellaneous other bases} {
  278.     list [catch {.t index foo} msg] $msg
  279. } {0 3.2}
  280. test textIndex-7.3 {TkTextGetIndex, miscellaneous other bases} {
  281.     list [catch {.t index foo+1c} msg] $msg
  282. } {0 3.3}
  283. test textIndex-8.1 {TkTextGetIndex, modifiers} {
  284.     list [catch {.t index 2.1+1char} msg] $msg
  285. } {0 2.2}
  286. test textIndex-8.2 {TkTextGetIndex, modifiers} {
  287.     list [catch {.t index "2.1   +1char"} msg] $msg
  288. } {0 2.2}
  289. test textIndex-8.3 {TkTextGetIndex, modifiers} {
  290.     list [catch {.t index 2.1-1char} msg] $msg
  291. } {0 2.0}
  292. test textIndex-8.4 {TkTextGetIndex, modifiers} {
  293.     list [catch {.t index {2.1  }} msg] $msg
  294. } {0 2.1}
  295. test textIndex-8.5 {TkTextGetIndex, modifiers} {
  296.     list [catch {.t index {2.1+foo bar}} msg] $msg
  297. } {1 {bad text index "2.1+foo bar"}}
  298. test textIndex-8.6 {TkTextGetIndex, modifiers} {
  299.     list [catch {.t index {2.1 foo bar}} msg] $msg
  300. } {1 {bad text index "2.1 foo bar"}}
  301. test textIndex-9.1 {TkTextIndexCmp} {
  302.     list [.t compare 3.1 < 3.2] [.t compare 3.1 == 3.2]
  303. } {1 0}
  304. test textIndex-9.2 {TkTextIndexCmp} {
  305.     list [.t compare 3.2 < 3.2] [.t compare 3.2 == 3.2]
  306. } {0 1}
  307. test textIndex-9.3 {TkTextIndexCmp} {
  308.     list [.t compare 3.3 < 3.2] [.t compare 3.3 == 3.2]
  309. } {0 0}
  310. test textIndex-9.4 {TkTextIndexCmp} {
  311.     list [.t compare 2.1 < 3.2] [.t compare 2.1 == 3.2]
  312. } {1 0}
  313. test textIndex-9.5 {TkTextIndexCmp} {
  314.     list [.t compare 4.1 < 3.2] [.t compare 4.1 == 3.2]
  315. } {0 0}
  316. test textIndex-10.1 {ForwBack} {
  317.     list [catch {.t index {2.3 + x}} msg] $msg
  318. } {1 {bad text index "2.3 + x"}}
  319. test textIndex-10.2 {ForwBack} {
  320.     list [catch {.t index {2.3 + 2 chars}} msg] $msg
  321. } {0 2.5}
  322. test textIndex-10.3 {ForwBack} {
  323.     list [catch {.t index {2.3 + 2c}} msg] $msg
  324. } {0 2.5}
  325. test textIndex-10.4 {ForwBack} {
  326.     list [catch {.t index {2.3 - 3ch}} msg] $msg
  327. } {0 2.0}
  328. test textIndex-10.5 {ForwBack} {
  329.     list [catch {.t index {1.3 + 3 lines}} msg] $msg
  330. } {0 4.3}
  331. test textIndex-10.6 {ForwBack} {
  332.     list [catch {.t index {2.3 -1l}} msg] $msg
  333. } {0 1.3}
  334. test textIndex-10.7 {ForwBack} {
  335.     list [catch {.t index {2.3 -1 gorp}} msg] $msg
  336. } {1 {bad text index "2.3 -1 gorp"}}
  337. test textIndex-10.8 {ForwBack} {
  338.     list [catch {.t index {2.3 - 4 lines}} msg] $msg
  339. } {0 1.3}
  340. test textIndex-10.9 {ForwBack} {
  341.     .t mark set insert 2.0
  342.     list [catch {.t index {insert -0 chars}} msg] $msg
  343. } {0 2.0}
  344. test textIndex-10.10 {ForwBack} {
  345.     .t mark set insert 2.end
  346.     list [catch {.t index {insert +0 chars}} msg] $msg
  347. } {0 2.13}
  348. test textIndex-11.1 {TkTextIndexForwBytes} {testtext} {
  349.     testtext .t forwbytes 2.3 -7
  350. } {1.3 3}
  351. test textIndex-11.2 {TkTextIndexForwBytes} {testtext} {
  352.     testtext .t forwbytes 2.3 5
  353. } {2.8 8}
  354. test textIndex-11.3 {TkTextIndexForwBytes} {testtext} {
  355.     testtext .t forwbytes 2.3 10
  356. } {2.13 13}
  357. test textIndex-11.4 {TkTextIndexForwBytes} {testtext} {
  358.     testtext .t forwbytes 2.3 11
  359. } {3.0 0}
  360. test textIndex-11.5 {TkTextIndexForwBytes} {testtext} {
  361.     testtext .t forwbytes 2.3 57
  362. } {7.6 6}
  363. test textIndex-11.6 {TkTextIndexForwBytes} {testtext} {
  364.     testtext .t forwbytes 2.3 58
  365. } {8.0 0}
  366. test textIndex-11.7 {TkTextIndexForwBytes} {testtext} {
  367.     testtext .t forwbytes 2.3 59
  368. } {8.0 0}
  369. test textIndex-12.1 {TkTextIndexForwChars} {
  370.     # (charCount < 0)
  371.     .t index {2.3 + -7 chars}
  372. } 1.3
  373. test textIndex-12.2 {TkTextIndexForwChars} {
  374.     # not (charCount < 0)
  375.     .t index {2.3 + 5 chars}
  376. } 2.8
  377. test textIndex-12.3 {TkTextIndexForwChars: find index} {
  378.     # for ( ; segPtr != NULL; segPtr = segPtr->nextPtr)
  379.     # one loop
  380.     .t index {2.3 + 9 chars}
  381. } 2.12
  382. test textIndex-12.4 {TkTextIndexForwChars: find index} {
  383.     # for ( ; segPtr != NULL; segPtr = segPtr->nextPtr)
  384.     # multiple loops
  385.     .t mark set foo 2.5
  386.     set x [.t index {2.3 + 9 chars}]
  387.     .t mark unset foo
  388.     set x
  389. } 2.12
  390. test textIndex-12.5 {TkTextIndexForwChars: find index} {
  391.     # for ( ; segPtr != NULL; segPtr = segPtr->nextPtr)
  392.     # border condition: last char
  393.     .t index {2.3 + 10 chars}
  394. } 2.13
  395. test textIndex-12.6 {TkTextIndexForwChars: find index} {
  396.     # for ( ; segPtr != NULL; segPtr = segPtr->nextPtr)
  397.     # border condition: segPtr == NULL -> beginning of next line
  398.     
  399.     .t index {2.3 + 11 chars}
  400. } 3.0
  401. test textIndex-12.7 {TkTextIndexForwChars: find index} {
  402.     # (segPtr->typePtr == &tkTextCharType)
  403.     .t index {2.3 + 2 chars}
  404. } 2.5
  405. test textIndex-12.8 {TkTextIndexForwChars: find index} {
  406.     # (charCount == 0)
  407.     # No more chars, so we found byte offset.
  408.     .t index {2.3 + 2 chars}
  409. } 2.5
  410. test textIndex-12.9 {TkTextIndexForwChars: find index} {
  411.     # not (segPtr->typePtr == &tkTextCharType)
  412.     .t image create 2.4 -image textimage
  413.     set x [.t get {2.3 + 3 chars}]
  414.     .t delete 2.4
  415.     set x    
  416. } "f"
  417. test textIndex-12.10 {TkTextIndexForwChars: find index} {
  418.     # dstPtr->byteIndex += segPtr->size - byteOffset
  419.     # When moving to next segment, account for bytes in last segment.
  420.     # Wrong answer would be 2.4
  421.     .t mark set foo 2.4
  422.     set x [.t index {2.3 + 5 chars}]
  423.     .t mark unset foo
  424.     set x
  425. } 2.8
  426. test textIndex-12.11 {TkTextIndexForwChars: go to next line} {
  427.     # (linePtr == NULL)
  428.     .t index {7.6 + 3 chars}
  429. } 8.0
  430. test textIndex-12.12 {TkTextIndexForwChars: go to next line} {
  431.     # Reset byteIndex to 0 now that we are on a new line.
  432.     # Wrong answer would be 2.9
  433.     .t index {1.3 + 6 chars}
  434. } 2.2
  435. test textIndex-12.13 {TkTextIndexForwChars} {
  436.     # right to end
  437.     .t index {2.3 + 56 chars}
  438. } 8.0
  439. test textIndex-12.14 {TkTextIndexForwChars} {
  440.     # try to go past end
  441.     .t index {2.3 + 57 chars}
  442. } 8.0
  443. test textIndex-13.1 {TkTextIndexBackBytes} {testtext} {
  444.     testtext .t backbytes 3.2 -10
  445. } {4.6 6}
  446. test textIndex-13.2 {TkTextIndexBackBytes} {testtext} {
  447.     testtext .t backbytes 3.2 2
  448. } {3.0 0}
  449. test textIndex-13.3 {TkTextIndexBackBytes} {testtext} {
  450.     testtext .t backbytes 3.2 3
  451. } {2.13 13}
  452. test textIndex-13.4 {TkTextIndexBackBytes} {testtext} {
  453.     testtext .t backbytes 3.2 22
  454. } {1.1 1}
  455. test textIndex-13.5 {TkTextIndexBackBytes} {testtext} {
  456.     testtext .t backbytes 3.2 23
  457. } {1.0 0}
  458. test textIndex-13.6 {TkTextIndexBackBytes} {testtext} {
  459.     testtext .t backbytes 3.2 24
  460. } {1.0 0}
  461. test textIndex-14.1 {TkTextIndexBackChars} {
  462.     # (charCount < 0)
  463.     .t index {3.2 - -10 chars}
  464. } 4.6
  465. test textIndex-14.2 {TkTextIndexBackChars} {
  466.     # not (charCount < 0)
  467.     .t index {3.2 - 2 chars}
  468. } 3.0
  469. test textIndex-14.3 {TkTextIndexBackChars: find starting segment} {
  470.     # for (segPtr = dstPtr->linePtr->segPtr; ; segPtr = segPtr->nextPtr)
  471.     # single loop
  472.     .t index {3.2 - 3 chars}
  473. } 2.13
  474. test textIndex-14.4 {TkTextIndexBackChars: find starting segment} {
  475.     # for (segPtr = dstPtr->linePtr->segPtr; ; segPtr = segPtr->nextPtr)
  476.     # multiple loop
  477.     .t mark set foo1 2.5
  478.     .t mark set foo2 2.7
  479.     .t mark set foo3 2.10
  480.     set x [.t index {2.9 - 1 chars}]
  481.     .t mark unset foo1 foo2 foo3
  482.     set x
  483. } 2.8
  484. test textIndex-14.5 {TkTextIndexBackChars: find starting seg and offset} {
  485.     # for (segPtr = dstPtr->linePtr->segPtr; ; segPtr = segPtr->nextPtr)
  486.     # Make sure segSize was decremented.  Wrong answer would be 2.10
  487.     .t mark set foo 2.2
  488.     set x [.t index {2.9 - 1 char}]
  489.     .t mark unset foo
  490.     set x
  491. } 2.8
  492. test textIndex-14.6 {TkTextIndexBackChars: back over characters} {
  493.     # (segPtr->typePtr == &tkTextCharType)
  494.     .t index {3.2 - 22 chars}
  495. } 1.1
  496. test textIndex-14.7 {TkTextIndexBackChars: loop backwards over chars} {
  497.     # (charCount == 0)
  498.     # No more chars, so we found byte offset.
  499.     .t index {3.4 - 2 chars}
  500. } 3.2
  501. test textIndex-14.8 {TkTextIndexBackChars: loop backwards over chars} {
  502.     # (p == start)
  503.     # Still more chars, but we reached beginning of segment
  504.     .t image create 5.6 -image textimage
  505.     set x [.t index {5.8 - 3 chars}]
  506.     .t delete 5.6
  507.     set x
  508. } 5.5
  509. test textIndex-14.9 {TkTextIndexBackChars: back over image} {
  510.     # not (segPtr->typePtr == &tkTextCharType)
  511.     .t image create 5.6 -image textimage
  512.     set x [.t get {5.8 - 4 chars}]
  513.     .t delete 5.6
  514.     set x
  515. } "G"
  516. test textIndex-14.10 {TkTextIndexBackChars: move to previous segment} {
  517.     # (segPtr != oldPtr)
  518.     # More segments to go
  519.     .t mark set foo 3.4
  520.     set x [.t index {3.5 - 2 chars}]
  521.     .t mark unset foo
  522.     set x
  523. } 3.3
  524. test textIndex-14.11 {TkTextIndexBackChars: move to previous segment} {
  525.     # not (segPtr != oldPtr)
  526.     # At beginning of line.
  527.     .t mark set foo 3.4
  528.     set x [.t index {3.5 - 10 chars}]
  529.     .t mark unset foo
  530.     set x
  531. } 2.9
  532. test textIndex-14.12 {TkTextIndexBackChars: move to previous line} {
  533.     # (lineIndex == 0) 
  534.     .t index {1.5 - 10 chars}
  535. } 1.0
  536. test textIndex-14.13 {TkTextIndexBackChars: move to previous line} {
  537.     # not (lineIndex == 0) 
  538.     .t index {2.5 - 10 chars}
  539. } 1.2
  540. test textIndex-14.14 {TkTextIndexBackChars: move to previous line} {
  541.     # for (segPtr = oldPtr; segPtr != NULL; segPtr = segPtr->nextPtr)
  542.     # Set byteIndex to end of previous line so we can subtract more
  543.     # bytes from it.  Otherwise we get an TkTextIndex with a negative
  544.     # byteIndex.
  545.     .t index {2.5 - 6 chars}
  546. } 1.6
  547. test textIndex-14.15 {TkTextIndexBackChars: UTF} {
  548.     .t get {5.3 - 1 chars}
  549. } y
  550. test textIndex-14.16 {TkTextIndexBackChars: UTF} {
  551.     .t get {5.3 - 2 chars}
  552. } u4e4f
  553. test textIndex-14.17 {TkTextIndexBackChars: UTF} {
  554.     .t get {5.3 - 3 chars}
  555. } b
  556. proc getword index {
  557.     .t get [.t index "$index wordstart"] [.t index "$index wordend"]
  558. }
  559. test textIndex-15.1 {StartEnd} {
  560.     list [catch {.t index {2.3 lineend}} msg] $msg
  561. } {0 2.13}
  562. test textIndex-15.2 {StartEnd} {
  563.     list [catch {.t index {2.3 linee}} msg] $msg
  564. } {0 2.13}
  565. test textIndex-15.3 {StartEnd} {
  566.     list [catch {.t index {2.3 line}} msg] $msg
  567. } {1 {bad text index "2.3 line"}}
  568. test textIndex-15.4 {StartEnd} {
  569.     list [catch {.t index {2.3 linestart}} msg] $msg
  570. } {0 2.0}
  571. test textIndex-15.5 {StartEnd} {
  572.     list [catch {.t index {2.3 lines}} msg] $msg
  573. } {0 2.0}
  574. test textIndex-15.6 {StartEnd} {
  575.     getword 5.3
  576. } { }
  577. test textIndex-15.7 {StartEnd} {
  578.     getword 5.4
  579. } GIrl
  580. test textIndex-15.8 {StartEnd} {
  581.     getword 5.7
  582. } GIrl
  583. test textIndex-15.9 {StartEnd} {
  584.     getword 5.8
  585. } { }
  586. test textIndex-15.10 {StartEnd} {
  587.     getword 5.14
  588. } x_yz
  589. test textIndex-15.11 {StartEnd} {
  590.     getword 6.2
  591. } #
  592. test textIndex-15.12 {StartEnd} {
  593.     getword 3.4
  594. } 12345
  595. .t tag add x 2.8 2.11
  596. test textIndex-15.13 {StartEnd} {
  597.     list [catch {.t index {2.2 worde}} msg] $msg
  598. } {0 2.13}
  599. test textIndex-15.14 {StartEnd} {
  600.     list [catch {.t index {2.12 words}} msg] $msg
  601. } {0 2.0}
  602. test textIndex-15.15 {StartEnd} {
  603.     list [catch {.t index {2.12 word}} msg] $msg
  604. } {1 {bad text index "2.12 word"}}
  605. test testIndex-16.1 {TkTextPrintIndex} {
  606.     set t [text .t2]
  607.     $t insert end n
  608.     $t window create end -window [button $t.b]
  609.     set result [$t index end-2c]
  610.     pack $t
  611.     catch {destroy $t}
  612. } 0
  613. test testIndex-16.2 {TkTextPrintIndex} {
  614.     set t [text .t2]
  615.     $t insert end n
  616.     $t window create end -window [button $t.b]
  617.     set result [$t tag add {} end-2c]
  618.     pack $t
  619.     catch {destroy $t}
  620. } 0
  621. test textIndex-23.1 {text paragraph start} {
  622.     pack [text .t2]
  623.     .t2 insert end " Text"
  624.     set res 2.0
  625.     for {set i 0} {$i < 2} {incr i} {
  626. lappend res [::tk::TextPrevPara .t2 [lindex $res end]]
  627.     }
  628.     destroy .t2
  629.     set res
  630. } {2.0 1.1 1.1}
  631. # cleanup
  632. rename textimage {}
  633. catch {destroy .t}
  634. ::tcltest::cleanupTests
  635. return