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

通讯编程

开发平台:

Visual C++

  1. # This file is a Tcl script to test out Tk's "font" command
  2. # plus the procedures in tkFont.c.  It is organized in the
  3. # standard white-box fashion for Tcl tests.
  4. #
  5. # Copyright (c) 1996-1998 Sun Microsystems, Inc.
  6. # Copyright (c) 1998-1999 by Scriptics Corporation.
  7. # All rights reserved.
  8. #
  9. # RCS: @(#) $Id: font.test,v 1.8 2002/07/14 05:48:46 dgp 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. catch {destroy .b}
  17. toplevel .b
  18. wm geom .b +0+0
  19. update idletasks
  20. proc setup {} {
  21.     catch {destroy .b.f}
  22.     catch {eval font delete [font names]}
  23.     label .b.f 
  24.     pack .b.f
  25.     update
  26. }
  27. label .b.l -padx 0 -pady 0 -bd 0 -highlightthickness 0 -justify left -text "0" -font "Courier -12"
  28. pack .b.l
  29. canvas .b.c -closeenough 0 
  30. .b.c create text 0 0 -tags text -anchor nw -just left -font "Courier -12"
  31. pack .b.c
  32. update
  33. set ax [winfo reqwidth .b.l]
  34. set ay [winfo reqheight .b.l]
  35. proc getsize {} {
  36.     update
  37.     return "[winfo reqwidth .b.l] [winfo reqheight .b.l]"
  38. }
  39. proc csetup {{str ""}} {
  40.     focus -force .b.c
  41.     .b.c dchars text 0 end
  42.     .b.c insert text 0 $str
  43.     .b.c focus text
  44. }
  45. setup
  46. case $tcl_platform(platform) {
  47.     unix {set fixed "fixed"}
  48.     windows {set fixed "courier 12"}
  49.     macintosh {set fixed "monaco 9"}
  50. }
  51. set times [font actual {times 0} -family]
  52. test font-1.1 {TkFontPkgInit} {
  53.     catch {interp delete foo}
  54.     interp create foo
  55.     foo eval {
  56. load {} Tk
  57. wm geometry . +0+0
  58. update
  59.     }
  60.     interp delete foo
  61. } {}
  62. test font-2.1 {TkFontPkgFree} {
  63.     catch {interp delete foo}
  64.     interp create foo
  65.     set x {}
  66.     # Makes sure that named font was visible only to child interp.
  67.     foo eval {
  68. load {} Tk
  69. wm geometry . +0+0
  70. button .b -font {times 16} -text "hi"
  71. pack .b
  72. font create wiggles -family courier -underline 1
  73. update
  74.     }
  75.     lappend x [catch {font configure wiggles} msg; set msg]
  76.     # Tests cancelling the idle handler for TheWorldHasChanged,
  77.     # because app goes away before idle serviced.
  78.     
  79.     foo eval {
  80. .b config -font wiggles
  81. font config wiggles -size 24
  82. destroy .
  83.     }
  84.     lappend x [foo eval {catch {font families} msg; set msg}]
  85.     interp delete foo
  86.     set x
  87. } {{named font "wiggles" doesn't exist} {can't invoke "font" command:  application has been destroyed}}
  88. test font-3.1 {font command: general} {
  89.     list [catch {font} msg] $msg
  90. } {1 {wrong # args: should be "font option ?arg?"}}
  91. test font-3.2 {font command: general} {
  92.     list [catch {font xyz} msg] $msg
  93. } {1 {bad option "xyz": must be actual, configure, create, delete, families, measure, metrics, or names}}
  94. test font-4.1 {font command: actual: arguments} {
  95.     # (skip < 0)
  96.     list [catch {font actual xyz -displayof} msg] $msg
  97. } {1 {value for "-displayof" missing}}
  98. test font-4.2 {font command: actual: arguments} {
  99.     # (objc < 3) 
  100.     list [catch {font actual} msg] $msg
  101. } {1 {wrong # args: should be "font actual font ?-displayof window? ?option?"}}
  102. test font-4.3 {font command: actual: arguments} {
  103.     # (objc - skip > 4) when skip == 0
  104.     list [catch {font actual xyz abc def} msg] $msg
  105. } {1 {wrong # args: should be "font actual font ?-displayof window? ?option?"}}
  106. test font-4.4 {font command: actual: displayof specified, so skip to next} {
  107.     catch {font actual xyz -displayof . -size}
  108. } {0}
  109. test font-4.5 {font command: actual: displayof specified, so skip to next} {
  110.     lindex [font actual xyz -displayof .] 0
  111. } {-family}
  112. test font-4.6 {font command: actual: arguments} {
  113.     # (objc - skip > 4) when skip == 2
  114.     list [catch {font actual xyz -displayof . abc def} msg] $msg
  115. } {1 {wrong # args: should be "font actual font ?-displayof window? ?option?"}}
  116. test font-4.7 {font command: actual: arguments} {noExceed} {
  117.     # (tkfont == NULL)
  118.     list [catch {font actual "{xyz"} msg] $msg
  119. } [list 1 "font "{xyz" doesn't exist"]
  120. test font-4.8 {font command: actual: all attributes} {
  121.     # not (objc > 3) so objPtr = NULL
  122.     lindex [font actual {-family times}] 0
  123. } {-family}
  124. test font-4.9 {font command: actual} {macOrUnix noExceed} {
  125.     # (objc > 3) so objPtr = objv[3 + skip]
  126.     string tolower [font actual {-family times} -family]
  127. } {times}
  128. test font-4.10 {font command: actual} {pcOnly} {
  129.     # (objc > 3) so objPtr = objv[3 + skip]
  130.     font actual {-family times} -family
  131. } {Times New Roman}
  132. test font-4.11 {font command: bad option} {
  133.     list [catch {font actual xyz -style} msg] $msg
  134. } {1 {bad option "-style": must be -family, -size, -weight, -slant, -underline, or -overstrike}}
  135. test font-5.1 {font command: configure} {
  136.     # (objc < 3) 
  137.     list [catch {font configure} msg] $msg
  138. } {1 {wrong # args: should be "font configure fontname ?options?"}}
  139. test font-5.2 {font command: configure: non-existent font} {
  140.     # (namedHashPtr == NULL)
  141.     list [catch {font configure xyz} msg] $msg
  142. } {1 {named font "xyz" doesn't exist}}
  143. test font-5.3 {font command: configure: "deleted" font} {
  144.     # (nfPtr->deletePending != 0) 
  145.     setup
  146.     font create xyz
  147.     .b.f configure -font xyz
  148.     font delete xyz
  149.     list [catch {font configure xyz} msg] $msg
  150. } {1 {named font "xyz" doesn't exist}}
  151. test font-5.4 {font command: configure: get all options} {
  152.     # (objc == 3) so objPtr = NULL
  153.     setup
  154.     font create xyz -family xyz
  155.     lindex [font configure xyz] 1
  156. } xyz
  157. test font-5.5 {font command: configure: get one option} {
  158.     # (objc == 4) so objPtr = objv[3]
  159.     setup
  160.     font create xyz -family xyz
  161.     font configure xyz -family
  162. } xyz
  163. test font-5.6 {font command: configure: update existing font} {
  164.     # else result = ConfigAttributesObj()
  165.     setup
  166.     font create xyz
  167.     font configure xyz -family xyz
  168.     update
  169.     font configure xyz -family
  170. } xyz
  171. test font-5.7 {font command: configure: bad option} {
  172.     setup
  173.     font create xyz
  174.     list [catch {font configure xyz -style} msg] $msg
  175. } {1 {bad option "-style": must be -family, -size, -weight, -slant, -underline, or -overstrike}}
  176. test font-6.1 {font command: create: make up name} {
  177.     # (objc < 3) so name = NULL
  178.     setup
  179.     font create
  180.     font names
  181. } {font1}
  182. test font-6.2 {font command: create: name specified} {
  183.     # not (objc < 3)
  184.     setup
  185.     font create xyz
  186.     font names
  187. } {xyz}
  188. test font-6.3 {font command: create: name not really specified} {
  189.     # (name[0] == '-') so name = NULL
  190.     setup
  191.     font create -family xyz
  192.     font names
  193. } {font1}
  194. test font-6.4 {font command: create: generate name} {
  195.     # (name == NULL)
  196.     setup
  197.     font create -family one
  198.     font create -family two
  199.     font create -family three
  200.     font delete font2
  201.     font create -family four
  202.     font configure font2 -family
  203. } {four}
  204. test font-6.5 {font command: create: bad option creating new font} {
  205.     # name was specified so skip = 3 
  206.     setup
  207.     list [catch {font create xyz -xyz times} msg] $msg
  208. } {1 {bad option "-xyz": must be -family, -size, -weight, -slant, -underline, or -overstrike}}
  209. test font-6.6 {font command: create: bad option creating new font} {
  210.     # name was not specified so skip = 2 
  211.     setup
  212.     list [catch {font create -xyz times} msg] $msg
  213. } {1 {bad option "-xyz": must be -family, -size, -weight, -slant, -underline, or -overstrike}}
  214. test font-6.7 {font command: create: already exists} {
  215.     # (CreateNamedFont() != TCL_OK)
  216.     setup
  217.     font create xyz
  218.     list [catch {font create xyz} msg] $msg
  219. } {1 {named font "xyz" already exists}}
  220. test font-7.1 {font command: delete: arguments} {
  221.     # (objc < 3) 
  222.     list [catch {font delete} msg] $msg
  223. } {1 {wrong # args: should be "font delete fontname ?fontname ...?"}}
  224. test font-7.2 {font command: delete: loop test} {
  225.     # for (i = 2; i < objc; i++) 
  226.     setup
  227.     set x {}
  228.     font create a -underline 1
  229.     font create b -underline 1
  230.     font create c -underline 1
  231.     font create d -underline 1
  232.     font create e -underline 1
  233.     lappend x [lsort [font names]]
  234.     font delete a e c b
  235.     lappend x [lsort [font names]]
  236. } {{a b c d e} d}
  237. test font-7.3 {font command: delete: loop test} {
  238.     # (namedHashPtr == NULL) in middle of loop
  239.     setup
  240.     set x {}
  241.     font create a -underline 1
  242.     font create b -underline 1
  243.     font create c -underline 1
  244.     font create d -underline 1
  245.     font create e -underline 1
  246.     lappend x [lsort [font names]]
  247.     catch {font delete a d q c e b}
  248.     lappend x [lsort [font names]]
  249. } {{a b c d e} {b c e}}
  250. test font-7.4 {font command: delete: non-existent} {
  251.     # (namedHashPtr == NULL) 
  252.     setup
  253.     list [catch {font delete xyz} msg] $msg
  254. } {1 {named font "xyz" doesn't exist}}
  255. test font-7.5 {font command: delete: mark for later deletion} {
  256.     # (nfPtr->refCount != 0)
  257.     setup
  258.     font create xyz
  259.     .b.f configure -font xyz
  260.     font delete xyz
  261.     font actual xyz
  262.     list [catch {font configure xyz} msg] $msg [.b.f cget -font]
  263. } {1 {named font "xyz" doesn't exist} xyz}
  264. test font-7.6 {font command: delete: actually delete} {
  265.     # not (nfPtr->refCount != 0)
  266.     setup
  267.     font create xyz -underline 1
  268.     font delete xyz
  269.     catch {font config xyz}
  270. } {1}
  271. setup
  272. test font-8.1 {font command: families: arguments} {
  273.     # (skip < 0)
  274.     list [catch {font families -displayof} msg] $msg
  275. } {1 {value for "-displayof" missing}}
  276. test font-8.2 {font command: families: arguments} {
  277.     # (objc - skip != 2) when skip == 0
  278.     list [catch {font families xyz} msg] $msg
  279. } {1 {wrong # args: should be "font families ?-displayof window?"}}
  280. test font-8.3 {font command: families: arguments} {
  281.     # (objc - skip != 2) when skip == 2
  282.     list [catch {font families -displayof . xyz} msg] $msg
  283. } {1 {wrong # args: should be "font families ?-displayof window?"}}
  284. test font-8.4 {font command: families} {
  285.     # TkpGetFontFamilies()
  286.     regexp -nocase times [font families]
  287. } {1}
  288. test font-9.1 {font command: measure: arguments} {
  289.     # (skip < 0)
  290.     list [catch {font measure xyz -displayof} msg] $msg
  291. } {1 {value for "-displayof" missing}}
  292. test font-9.2 {font command: measure: arguments} {
  293.     # (objc - skip != 4) 
  294.     list [catch {font measure} msg] $msg
  295. } {1 {wrong # args: should be "font measure font ?-displayof window? text"}}
  296. test font-9.3 {font command: measure: arguments} {
  297.     # (objc - skip != 4) 
  298.     list [catch {font measure xyz abc def} msg] $msg
  299. } {1 {wrong # args: should be "font measure font ?-displayof window? text"}}
  300. test font-9.4 {font command: measure: arguments} {noExceed} {
  301.     # (tkfont == NULL)
  302.     list [catch {font measure "{xyz" abc} msg] $msg
  303. } [list 1 "font "{xyz" doesn't exist"]
  304. test font-9.5 {font command: measure} {
  305.     # Tk_TextWidth()
  306.     expr [font measure $fixed "abcdefg"]==[font measure $fixed "a"]*7
  307. } {1}
  308. test font-10.1 {font command: metrics: arguments} {
  309.     list [catch {font metrics xyz -displayof} msg] $msg
  310. } {1 {value for "-displayof" missing}}
  311. test font-10.2 {font command: metrics: arguments} {
  312.     # (skip < 0)
  313.     list [catch {font metrics xyz -displayof} msg] $msg
  314. } {1 {value for "-displayof" missing}}
  315. test font-10.3 {font command: metrics: arguments} {
  316.     # (objc < 3) 
  317.     list [catch {font metrics} msg] $msg
  318. } {1 {wrong # args: should be "font metrics font ?-displayof window? ?option?"}}
  319. test font-10.4 {font command: metrics: arguments} {
  320.     # (objc - skip) > 4) when skip == 0
  321.     list [catch {font metrics xyz abc def} msg] $msg
  322. } {1 {wrong # args: should be "font metrics font ?-displayof window? ?option?"}}
  323. test font-10.5 {font command: metrics: arguments} {
  324.     # (objc - skip) > 4) when skip == 2
  325.     list [catch {font metrics xyz -displayof . abc} msg] $msg
  326. } {1 {bad metric "abc": must be -ascent, -descent, -linespace, or -fixed}}
  327. test font-10.6 {font command: metrics: bad font} {noExceed} {
  328.     # (tkfont == NULL)
  329.     list [catch {font metrics "{xyz"} msg] $msg
  330. } [list 1 "font "{xyz" doesn't exist"]
  331. test font-10.7 {font command: metrics: get all metrics} {
  332.     # (objc == 3)
  333.     catch {unset a}
  334.     array set a [font metrics {-family xyz}]
  335.     set x [lsort [array names a]]
  336.     unset a
  337.     set x    
  338. } {-ascent -descent -fixed -linespace}
  339. test font-10.8 {font command: metrics: bad metric} {
  340.     # (Tcl_GetIndexFromObj() != TCL_OK)
  341.     list [catch {font metrics $fixed -xyz} msg] $msg
  342. } {1 {bad metric "-xyz": must be -ascent, -descent, -linespace, or -fixed}}
  343. test font-10.9 {font command: metrics: get individual metrics} {
  344.     font metrics $fixed -ascent
  345.     font metrics $fixed -descent
  346.     font metrics $fixed -linespace
  347.     font metrics $fixed -fixed
  348. } {1}
  349. test font-11.1 {font command: names: arguments} {
  350.     # (objc != 2)
  351.     list [catch {font names xyz} msg] $msg
  352. } {1 {wrong # args: should be "font names"}}
  353. test font-11.2 {font command: names: loop test: no passes} {
  354.     setup
  355.     font names
  356. } {}
  357. test font-11.3 {font command: names: loop test: one pass} {
  358.     setup
  359.     font create
  360.     font names
  361. } {font1}
  362. test font-11.4 {font command: names: loop test: multiple passes} {
  363.     setup
  364.     font create xyz
  365.     font create abc
  366.     font create def
  367.     lsort [font names]
  368. } {abc def xyz}
  369. test font-11.5 {font command: names: skip deletePending fonts} {
  370.     # (nfPtr->deletePending == 0)
  371.     setup
  372.     set x {}
  373.     font create xyz
  374.     font create abc
  375.     lappend x [lsort [font names]]
  376.     .b.f config -font xyz
  377.     font delete xyz
  378.     lappend x [font names]
  379. } {{abc xyz} abc}
  380. test font-12.1 {UpdateDependantFonts procedure: no users} {
  381.     # (nfPtr->refCount == 0)
  382.     setup
  383.     font create xyz
  384.     font configure xyz -family times
  385. } {}
  386. test font-12.2 {UpdateDependantFonts procedure: pings the widgets} {
  387.     setup
  388.     font create xyz -family times -size 20
  389.     .b.f config -font xyz -text "abcd" -padx 0 -bd 0 -highlightthickness 0
  390.     set a1 [font measure xyz "abcd"]
  391.     update
  392.     set b1 [winfo reqwidth .b.f]
  393.     font configure xyz -family helvetica -size 20
  394.     set a2 [font measure xyz "abcd"]
  395.     update
  396.     set b2 [winfo reqwidth .b.f]
  397.     expr {$a1==$b1 && $a2==$b2}
  398. } {1}
  399. test font-13.1 {CreateNamedFont: new named font} {
  400.     # not (new == 0)
  401.     setup
  402.     set x {}
  403.     lappend x [font names]
  404.     font create xyz
  405.     lappend x [font names]
  406. } {{} xyz}
  407. test font-13.2 {CreateNamedFont: named font already exists} {
  408.     # (new == 0)
  409.     setup
  410.     font create xyz
  411.     list [catch {font create xyz} msg] $msg
  412. } {1 {named font "xyz" already exists}}
  413. test font-13.3 {CreateNamedFont: named font already exists} {
  414.     # (nfPtr->deletePending == 0)
  415.     setup
  416.     font create xyz
  417.     list [catch {font create xyz} msg] $msg
  418. } {1 {named font "xyz" already exists}}
  419. test font-13.4 {CreateNamedFont: recreate "deleted" font} {
  420.     # not (nfPtr->deletePending == 0)
  421.     setup
  422.     font create xyz -family times
  423.     .b.f configure -font xyz
  424.     font delete xyz
  425.     font create xyz -family courier
  426.     font configure xyz -family
  427. } {courier}
  428. test font-14.1 {Tk_GetFont procedure} {
  429. } {}
  430. test font-15.1 {Tk_AllocFontFromObj - converting internal reps} testfont {
  431.     set x {Times 16}
  432.     lindex $x 0
  433.     destroy .b1 .b2
  434.     button .b1 -font $x
  435.     lindex $x 0
  436.     testfont counts {Times 16}
  437. } {{1 0}}
  438. test font-15.2 {Tk_AllocFontFromObj - discard stale font} testfont {
  439.     set x {Times 16}
  440.     destroy .b1 .b2
  441.     button .b1 -font $x
  442.     destroy .b1
  443.     set result {}
  444.     lappend result [testfont counts {Times 16}]
  445.     button .b2 -font $x
  446.     lappend result [testfont counts {Times 16}]
  447. } {{} {{1 1}}}
  448. test font-15.3 {Tk_AllocFontFromObj - reuse existing font} testfont {
  449.     set x {Times 16}
  450.     destroy .b1 .b2
  451.     button .b1 -font $x
  452.     set result {}
  453.     lappend result [testfont counts {Times 16}]
  454.     button .b2 -font $x
  455.     pack .b1 .b2 -side top
  456.     lappend result [testfont counts {Times 16}]
  457. } {{{1 1}} {{2 1}}}
  458. test font-15.4 {Tk_AllocFontFromObj procedure: bump ref count} {
  459.     # (new == 0)
  460.     setup
  461.     .b.f config -font {-family fixed}
  462.     lindex [font actual {-family fixed}] 0
  463. } {-family}
  464. test font-15.5 {Tk_AllocFontFromObj procedure: get named font} {
  465.     # (namedHashPtr != NULL) 
  466.     setup
  467.     font create xyz 
  468.     .b.f config -font xyz 
  469. } {}
  470. test font-15.6 {Tk_AllocFontFromObj procedure: not a named font} {
  471.     # not (namedHashPtr != NULL)
  472.     setup
  473.     .b.f config -font {times 20}
  474. } {}
  475. test font-15.7 {Tk_AllocFontFromObj procedure: get native font} {unixOnly} {
  476.     # not (fontPtr == NULL) 
  477.     setup
  478.     .b.f config -font fixed
  479. } {}
  480. test font-15.8 {Tk_AllocFontFromObj procedure: get native font} {pcOnly} {
  481.     # not (fontPtr == NULL) 
  482.     setup
  483.     .b.f config -font oemfixed
  484. } {}
  485. test font-15.9 {Tk_AllocFontFromObj procedure: get native font} {macOnly} {
  486.     # not (fontPtr == NULL) 
  487.     setup
  488.     .b.f config -font application
  489. } {}
  490. test font-15.10 {Tk_AllocFontFromObj procedure: get attribute font} {
  491.     # (fontPtr == NULL) 
  492.     list [catch {.b.f config -font {xxx yyy zzz}} msg] $msg
  493. } {1 {expected integer but got "yyy"}}
  494. test font-15.11 {Tk_AllocFontFromObj procedure: no match} {noExceed} {
  495.     # (ParseFontNameObj() != TCL_OK)
  496.     list [catch {font actual "{xyz"} msg] $msg
  497. } [list 1 "font "{xyz" doesn't exist"]
  498. test font-15.12 {Tk_AllocFontFromObj procedure: get attribute font} {
  499.     # not (ParseFontNameObj() != TCL_OK)
  500.     lindex [font actual {plan 9}] 0
  501. } {-family}
  502. test font-15.13 {Tk_AllocFontFromObj procedure: setup tab width} {
  503.     # Tk_MeasureChars(fontPtr, "0", ...)
  504.     label .l -bd 0 -padx 0  -highlightthickness 0 -font $fixed -text "atb"
  505.     update
  506.     set x [winfo reqwidth .l]
  507.     destroy .l
  508.     set x
  509. } [expr [font measure $fixed "0"]*9]
  510. test font-15.14 {Tk_AllocFontFromObj procedure: underline position} {
  511.     # (fontPtr->underlineHeight == 0) because size was < 10
  512.     setup
  513.     .b.f config -text "underline" -font "times -8 underline"
  514.     update
  515. } {}    
  516. test font-16.1 {Tk_NameOfFont procedure} {
  517.     setup
  518.     .b.f config -font -family fixed
  519.     .b.f cget -font
  520. } {-family fixed}
  521. test font-17.1 {Tk_FreeFontFromObj - reference counts} testfont {
  522.     set x {Courier 12}
  523.     destroy .b1 .b2 .b3
  524.     button .b1 -font $x
  525.     button .b3 -font $x
  526.     button .b2 -font $x
  527.     set result {}
  528.     lappend result [testfont counts {Courier 12}]
  529.     destroy .b1
  530.     lappend result [testfont counts {Courier 12}]
  531.     destroy .b2
  532.     lappend result [testfont counts {Courier 12}]
  533.     destroy .b3
  534.     lappend result [testfont counts {Courier 12}]
  535. } {{{3 1}} {{2 1}} {{1 1}} {}}
  536. test font-17.2 {Tk_FreeFont procedure: one ref} {
  537.     # (fontPtr->refCount == 0)
  538.     setup
  539.     .b.f config -font {-family fixed}
  540.     destroy .b.f
  541. } {}
  542. test font-17.3 {Tk_FreeFont procedure: multiple ref} {
  543.     # not (fontPtr->refCount == 0)
  544.     setup
  545.     .b.f config -font {-family fixed}
  546.     button .b.b -font {-family fixed}
  547.     destroy .b.f
  548.     set x [.b.b cget -font]
  549.     destroy .b.b
  550.     set x
  551. } {-family fixed}
  552. test font-17.4 {Tk_FreeFont procedure: named font} {
  553.     # (fontPtr->namedHashPtr != NULL) 
  554.     setup
  555.     font create xyz
  556.     .b.f config -font xyz
  557.     destroy .b.f
  558.     font names
  559. } {xyz}
  560. test font-17.5 {Tk_FreeFont procedure: named font} {
  561.     # not (fontPtr->refCount == 0) 
  562.     setup
  563.     font create xyz -underline 1
  564.     .b.f config -font xyz
  565.     font delete xyz
  566.     set x [font actual xyz -underline]
  567.     destroy .b.f
  568.     list [font actual xyz -underline] $x
  569. } {0 1}
  570. test font-17.6 {Tk_FreeFont procedure: named font not deleted yet} {
  571.     setup
  572.     font create xyz 
  573.     .b.f config -font xyz
  574.     button .b.b -font xyz
  575.     font delete xyz
  576.     set x [font actual xyz]
  577.     destroy .b.b
  578.     list [lindex [font actual xyz] 0] [lindex $x 0]
  579. } {-family -family}
  580. test font-18.1 {FreeFontObjProc} testfont {
  581.     destroy .b1
  582.     set x [format {Courier 12}]
  583.     button .b1 -font $x
  584.     set y [format {Courier 12}]
  585.     .b1 configure -font $y
  586.     set z [format {Courier 12}]
  587.     .b1 configure -font $z
  588.     set result {}
  589.     lappend result [testfont counts {Courier 12}]
  590.     set x red
  591.     lappend result [testfont counts {Courier 12}]
  592.     set z 32
  593.     lappend result [testfont counts {Courier 12}]
  594.     destroy .b1
  595.     lappend result [testfont counts {Courier 12}]
  596.     set y bogus
  597.     set result
  598. } {{{1 3}} {{1 2}} {{1 1}} {}}
  599. test font-19.1 {Tk_FontId} {
  600.     .b.f config -font "times 20"
  601.     update
  602. } {}
  603. test font-20.1 {Tk_GetFontMetrics procedure} {
  604.     button .b.w1 -text abc
  605.     entry .b.w2 -text abcd
  606.     update
  607.     destroy .b.w1 .b.w2
  608. } {}
  609. proc psfontname {name} {
  610.     set a [.b.c itemcget text -font]
  611.     .b.c itemconfig text -text "We need text" -font $name
  612.     set post [.b.c postscript]
  613.     .b.c itemconfig text -font $a
  614.     set end [string first "findfont" $post]
  615.     incr end -2
  616.     set post [string range $post [expr $end-70] $end]
  617.     set start [string first "gsave" $post]
  618.     return [string range $post [expr $start+7] end]
  619. }
  620. test font-21.1 {Tk_PostscriptFontName procedure: native} {unixOnly} {
  621.     set x [font actual {{itc avant garde} 10} -family]
  622.     if {[string match *avant*garde $x]} {
  623. psfontname "{itc avant garde} 10"
  624.     } else {
  625. set x {AvantGarde-Book}
  626.     }
  627. } {AvantGarde-Book}
  628. test font-21.2 {Tk_PostscriptFontName procedure: native} {pcOnly} {
  629.     psfontname "arial 10"
  630. } {Helvetica}
  631. test font-21.3 {Tk_PostscriptFontName procedure: native} {pcOnly} {
  632.     psfontname "{times new roman} 10"
  633. } {Times-Roman}
  634. test font-21.4 {Tk_PostscriptFontName procedure: native} {pcOnly} {
  635.     psfontname "{courier new} 10"
  636. } {Courier}
  637. test font-21.5 {Tk_PostscriptFontName procedure: native} {macOnly} {
  638.     psfontname "geneva 10"
  639. } {Helvetica}
  640. test font-21.6 {Tk_PostscriptFontName procedure: native} {macOnly} {
  641.     psfontname "{new york} 10"
  642. } {Times-Roman}
  643. test font-21.7 {Tk_PostscriptFontName procedure: native} {macOnly} {
  644.     psfontname "monaco 10"
  645. } {Courier}
  646. test font-21.8 {Tk_PostscriptFontName procedure: spaces} {unixOnly} {
  647.     set x [font actual {{lucida bright} 10} -family]
  648.     if {[string match lucida*bright $x]} {
  649. psfontname "{lucida bright} 10"
  650.     } else {
  651. set x {LucidaBright}
  652.     }
  653. } {LucidaBright}
  654. test font-21.9 {Tk_PostscriptFontName procedure: spaces} {unixOnly} {
  655.     psfontname "{new century schoolbook} 10"
  656. } {NewCenturySchlbk-Roman}
  657. set i 10
  658. foreach p {
  659.     {"avantgarde" AvantGarde-Book AvantGarde-Demi AvantGarde-BookOblique AvantGarde-DemiOblique}
  660.     {"bookman" Bookman-Light Bookman-Demi Bookman-LightItalic Bookman-DemiItalic}
  661.     {"courier" Courier Courier-Bold Courier-Oblique Courier-BoldOblique}
  662.     {"helvetica" Helvetica Helvetica-Bold Helvetica-Oblique Helvetica-BoldOblique}
  663.     {"new century schoolbook" NewCenturySchlbk-Roman NewCenturySchlbk-Bold NewCenturySchlbk-Italic NewCenturySchlbk-BoldItalic}
  664.     {"palatino" Palatino-Roman Palatino-Bold Palatino-Italic Palatino-BoldItalic}
  665.     {"symbol" Symbol Symbol Symbol Symbol}
  666.     {"times" Times-Roman Times-Bold Times-Italic Times-BoldItalic}
  667.     {"zapfchancery" ZapfChancery-MediumItalic ZapfChancery-MediumItalic ZapfChancery-MediumItalic ZapfChancery-MediumItalic}
  668.     {"zapfdingbats" ZapfDingbats ZapfDingbats ZapfDingbats ZapfDingbats}
  669. } {
  670.     test font-21.$i {Tk_PostscriptFontName procedure: exhaustive} {unixOnly} {
  671. set family [lindex $p 0]
  672. set x {}
  673. set i 1
  674. foreach slant {roman italic} {
  675.     foreach weight {normal bold} {
  676. set name [list $family 12 $slant $weight]
  677. if {[font actual $name -family] == $family} {
  678.     lappend x [psfontname $name]
  679. } else {
  680.     lappend x [lindex $p $i]
  681. }
  682. incr i
  683.     }
  684. }
  685.         incr i
  686. set x
  687.     } [lrange $p 1 end]
  688. }
  689. foreach p {
  690.     {"arial" Helvetica Helvetica-Bold Helvetica-Oblique Helvetica-BoldOblique}
  691.     {"courier new" Courier Courier-Bold Courier-Oblique Courier-BoldOblique}
  692.     {"helvetica" Helvetica Helvetica-Bold Helvetica-Oblique Helvetica-BoldOblique}
  693.     {"symbol" Symbol Symbol-Bold Symbol-Italic Symbol-BoldItalic}
  694.     {"times new roman" Times-Roman Times-Bold Times-Italic Times-BoldItalic}
  695. } {
  696.     test font-21.$i {Tk_PostscriptFontName procedure: exhaustive} {pcOnly} {
  697. set family [lindex $p 0]
  698. set x {}
  699. foreach slant {roman italic} {
  700.     foreach weight {normal bold} {
  701. lappend x [psfontname [list $family 12 "$slant $weight"]]
  702.     }
  703. }
  704.         incr i
  705. set x
  706.     } [lrange $p 1 end]
  707. }
  708. foreach p {
  709.     {"courier" Courier Courier-Bold Courier-Oblique Courier-BoldOblique}
  710.     {"geneva" Helvetica Helvetica-Bold Helvetica-Oblique Helvetica-BoldOblique}
  711.     {"helvetica" Helvetica Helvetica-Bold Helvetica-Oblique Helvetica-BoldOblique}
  712.     {"monaco" Courier Courier-Bold Courier-Oblique Courier-BoldOblique}
  713.     {"new york" Times-Roman Times-Bold Times-Italic Times-BoldItalic}
  714.     {"symbol" Symbol Symbol-Bold Symbol-Italic Symbol-BoldItalic}
  715.     {"times" Times-Roman Times-Bold Times-Italic Times-BoldItalic}
  716. } {
  717.     test font-21.$i {Tk_PostscriptFontName procedure: exhaustive} {macOnly} {
  718. set family [lindex $p 0]
  719. set x {}
  720. foreach slant {roman italic} {
  721.     foreach weight {normal bold} {
  722. lappend x [psfontname [list $family 12 $slant $weight]]
  723.     }
  724. }
  725. incr i
  726. set x
  727.     } [lrange $p 1 end]
  728. }
  729. test font-22.1 {Tk_TextWidth procedure} {
  730.     font measure [.b.l cget -font] "000"
  731. } [expr $ax*3]
  732. test font-23.1 {Tk_UnderlineChars procedure} {
  733.     text .b.t
  734.     .b.t insert 1.0 abctdefg
  735.     .b.t tag config sel -underline 1
  736.     .b.t tag add sel 1.0 end
  737.     update
  738. } {}
  739. setup
  740. test font-24.1 {Tk_ComputeTextLayout: empty string} {
  741.     .b.l config -text ""
  742. } {}
  743. test font-24.2 {Tk_ComputeTextLayout: simple string} {
  744.     .b.l config -text "000"
  745.     getsize
  746. } "[expr $ax*3] $ay"
  747. test font-24.3 {Tk_ComputeTextLayout: find special chars} {
  748.     .b.l config -text "000n000"
  749.     getsize
  750. } "[expr $ax*3] [expr $ay*2]"
  751. test font-24.4 {Tk_ComputeTextLayout: calls Tk_MeasureChars} {
  752.     .b.l config -text "000n000"
  753.     getsize
  754. } "[expr $ax*3] [expr $ay*2]"
  755. test font-24.5 {Tk_ComputeTextLayout: break line} {
  756.     .b.l config -text "000t00000" -wrap [expr 9*$ax]
  757.     set x [getsize]
  758.     .b.l config -wrap 0
  759.     set x
  760. } "[expr 8*$ax] [expr 2*$ay]"
  761. test font-24.6 {Tk_ComputeTextLayout: normal ended on special char} {
  762.     .b.l config -text "000n000"
  763. } {}
  764. test font-24.7 {Tk_ComputeTextLayout: special char was n} {
  765.     .b.l config -text "000n0000"
  766.     getsize
  767. } "[expr $ax*4] [expr $ay*2]"
  768. test font-24.8 {Tk_ComputeTextLayout: special char was t} {
  769.     .b.l config -text "000t00"
  770.     getsize
  771. } "[expr $ax*10] $ay"
  772. test font-24.9 {Tk_ComputeTextLayout: tab didn't cause break} {
  773.     set x {}
  774.     .b.l config -text "000t000"
  775.     lappend x [getsize]
  776.     .b.l config -text "000t000" -wrap [expr 100*$ax]
  777.     lappend x [getsize]
  778.     .b.l config -wrap 0
  779.     set x
  780. } "{[expr $ax*11] $ay} {[expr $ax*11] $ay}"
  781. test font-24.10 {Tk_ComputeTextLayout: tab caused break} {
  782.     set x {}
  783.     .b.l config -text "000t"
  784.     lappend x [getsize]
  785.     .b.l config -text "000t00" -wrap [expr $ax*6]
  786.     lappend x [getsize]
  787.     .b.l config -wrap 0
  788.     set x
  789. } "{[expr $ax*3] $ay} {[expr $ax*3] [expr $ay*2]}"
  790. test font-24.11 {Tk_ComputeTextLayout: absorb spaces at eol} {
  791.     set x {}
  792.     .b.l config -text "000            000" -wrap [expr $ax*5]
  793.     lappend x [getsize]
  794.     .b.l config -text "000            "
  795.     lappend x [getsize]
  796.     .b.l config -wrap 0
  797.     set x
  798. } "{[expr $ax*3] [expr $ay*2]} {[expr $ax*3] $ay}"
  799. test font-24.12 {Tk_ComputeTextLayout: append non-printing spaces to chunk} {
  800.     set x {}
  801.     .b.l config -text "000            0000" -wrap [expr $ax*5]
  802.     lappend x [getsize]
  803.     .b.l config -text "000t00            0000" -wrap [expr $ax*12]
  804.     lappend x [getsize]
  805.     .b.l config -wrap 0
  806.     set x
  807. } "{[expr $ax*4] [expr $ay*2]} {[expr $ax*10] [expr $ay*2]}"
  808. test font-24.13 {Tk_ComputeTextLayout: many lines -> realloc line array} {
  809.     .b.l config -text "nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn"
  810.     getsize
  811. } "1 [expr $ay*129]"
  812. test font-24.14 {Tk_ComputeTextLayout: text ended with n} {
  813.     list [.b.l config -text "0000"; getsize] [.b.l config -text "0000n"; getsize]
  814. } "{[expr $ax*4] $ay} {[expr $ax*4] [expr $ay*2]}"
  815. test font-24.15 {Tk_ComputeTextLayout: justification} {
  816.     csetup "000n00000"
  817.     set x {}
  818.     .b.c itemconfig text -just left
  819.     lappend x [.b.c index text @[expr $ax*2],0]
  820.     .b.c itemconfig text -just center
  821.     lappend x [.b.c index text @[expr $ax*2],0]
  822.     .b.c itemconfig text -just right
  823.     lappend x [.b.c index text @[expr $ax*2],0]
  824.     .b.c itemconfig text -just left
  825.     set x
  826. } {2 1 0}
  827. test font-25.1 {Tk_FreeTextLayout procedure} {
  828.     setup
  829.     .b.f config -text foo
  830.     .b.f config -text boo
  831. } {}
  832.     
  833. test font-26.1 {Tk_DrawTextLayout procedure: auto-detect last char} {
  834.     .b.f config -text foo
  835. } {}
  836. test font-26.2 {Tk_DrawTextLayout procedure: multiple chunks} {
  837.     csetup "000t00n000"
  838. } {}
  839. test font-26.3 {Tk_DrawTextLayout: draw subset of chunk: numDisplay <= 0} {
  840.     csetup "000t00"
  841.     .b.c select from text 3
  842.     .b.c select to text 5
  843. } {}
  844. test font-26.4 {Tk_DrawTextLayout: draw subset of chunk: firstChar <= 0} {
  845.     .b.c select from text 3
  846.     .b.c select to text 5
  847. } {}
  848. test font-26.5 {Tk_DrawTextLayout: draw subset of chunk: firstChar > 0} {
  849.     .b.c select from text 2
  850.     .b.c select to text 2
  851. } {}
  852. test font-26.6 {Tk_DrawTextLayout: draw subset of chunk: lastChar < numChars} {
  853.     .b.c select from text 4
  854.     .b.c select to text 4
  855. } {}
  856. test font-27.1 {Tk_UnderlineTextLayout procedure: no underline chosen} {
  857.     .b.f config -text "foo" -under -1
  858. } {}
  859. test font-27.2 {Tk_UnderlineTextLayout procedure: underline not visible} {
  860.     .b.f config -text "000          00000" -wrap [expr $ax*7] -under 10
  861. } {}
  862. test font-27.3 {Tk_UnderlineTextLayout procedure: underline is visible} {
  863.     .b.f config -text "000          00000" -wrap [expr $ax*7] -under 5
  864.     .b.f config -wrap -1 -under -1
  865. } {}
  866.     
  867. test font-28.1 {Tk_PointToChar procedure: above all lines} {
  868.     csetup "000"
  869.     .b.c index text @-1,0
  870. } {0}
  871. test font-28.2 {Tk_PointToChar procedure: no chars} {
  872.     # After fixing the following bug:
  873.     #
  874.     # In canvas text item, it was impossible to click to position the
  875.     # insertion point just after the last character.
  876.     #
  877.     # introduced another bug that Tk_PointToChar() would return a character
  878.     # index of 1 if TextLayout contained 0 characters.
  879.     csetup ""
  880.     .b.c index text @100,100
  881. } {0}
  882. test font-28.3 {Tk_PointToChar procedure: loop test} {
  883.     csetup "000n000n000n000"
  884.     .b.c index text @10000,0
  885. } {3}
  886. test font-28.4 {Tk_PointToChar procedure: intersect line} {
  887.     csetup "000n000n000"
  888.     .b.c index text @0,$ay
  889. } {4}
  890. test font-28.5 {Tk_PointToChar procedure: to the left of all chunks} {
  891.     .b.c index text @-100,$ay
  892. } {4}
  893. test font-28.6 {Tk_PointToChar procedure: past any possible chunk} {
  894.     .b.c index text @100000,$ay
  895. } {7}
  896. test font-28.7 {Tk_PointToChar procedure: which chunk on this line} {
  897.     csetup "000n000t000t000n000"
  898.     .b.c index text @[expr $ax*2],$ay
  899. } {6}
  900. test font-28.8 {Tk_PointToChar procedure: which chunk on this line} {
  901.     csetup "000n000t000t000n000"
  902.     .b.c index text @[expr $ax*10],$ay
  903. } {10}
  904. test font-28.9 {Tk_PointToChar procedure: in special chunk} {
  905.     csetup "000n000t000t000n000"
  906.     .b.c index text @[expr $ax*6],$ay
  907. } {7}
  908. test font-28.10 {Tk_PointToChar procedure: past all chars in chunk} {
  909.     csetup "000 0000000"
  910.     .b.c itemconfig text -width [expr $ax*5]
  911.     set x [.b.c index text @[expr $ax*5],0]
  912.     .b.c itemconfig text -width 0
  913.     set x
  914. } {3}
  915. test font-28.11 {Tk_PointToChar procedure: below all chunks} {
  916.     csetup "000 0000000"
  917.     .b.c index text @0,1000000
  918. } {11}
  919.     
  920. test font-29.1 {Tk_CharBBox procedure: index < 0} {
  921.     .b.f config -text "000" -underline -1
  922. } {}
  923. test font-29.2 {Tk_CharBBox procedure: loop} {
  924.     .b.f config -text "000t000t000t000" -underline 9
  925. } {}
  926. test font-29.3 {Tk_CharBBox procedure: special char} {
  927.     .b.f config -text "000t000t000" -underline 7
  928. } {}
  929. test font-29.4 {Tk_CharBBox procedure: normal char} {
  930.     .b.f config -text "000" -underline 1
  931. } {}
  932. test font-29.5 {Tk_CharBBox procedure: right edge of bbox truncated} {
  933.     .b.f config -text "0    0000" -wrap [expr $ax*4] -under 2
  934.     .b.f config -wrap 0
  935. } {}
  936. test font-29.6 {Tk_CharBBox procedure: bbox pegged to right edge} {
  937.     .b.f config -text "0    0000" -wrap [expr $ax*4] -under 3
  938.     .b.f config -wrap 0
  939. } {}
  940. .b.c bind all <Enter> {lappend x [.b.c index current @%x,%y]}
  941. test font-30.1 {Tk_DistanceToTextLayout procedure: loop once} {
  942.     csetup "000n000n000"
  943.     set x {}
  944.     event generate .b.c <Leave>
  945.     event generate .b.c <Enter> -x 0 -y 0
  946.     set x
  947. } {0}
  948. test font-30.2 {Tk_DistanceToTextLayout procedure: loop multiple} {
  949.     csetup "000n000n000"
  950.     set x {}
  951.     event generate .b.c <Leave>
  952.     event generate .b.c <Enter> -x $ax -y $ay
  953.     set x
  954. } {5}
  955. test font-30.3 {Tk_DistanceToTextLayout procedure: loop to end} {
  956.     csetup "000n0n000"
  957.     set x {}
  958.     event generate .b.c <Leave>
  959.     event generate .b.c <Enter> -x [expr $ax*2] -y $ay
  960.     set x
  961. } {}
  962. test font-30.4 {Tk_DistanceToTextLayout procedure: hit a special char (tab)} {
  963.     csetup "000t000n000"
  964.     set x {}
  965.     event generate .b.c <Leave>
  966.     event generate .b.c <Enter> -x [expr $ax*6] -y 0
  967.     set x
  968. } {3}
  969. test font-30.5 {Tk_DistanceToTextLayout procedure: ignore newline} {
  970.     csetup "000n0n000"
  971.     set x {}
  972.     event generate .b.c <Leave>
  973.     event generate .b.c <Enter> -x [expr $ax*2] -y $ay
  974.     set x
  975. } {}
  976. test font-30.6 {Tk_DistanceToTextLayout procedure: ignore spaces at eol} {
  977.     csetup "000n000      000000000"
  978.     .b.c itemconfig text -width [expr $ax*10]
  979.     set x {}
  980.     event generate .b.c <Leave>
  981.     event generate .b.c <Enter> -x [expr $ax*5] -y $ay
  982.     .b.c itemconfig text -width 0
  983.     set x
  984. } {}
  985. .b.c itemconfig text -justify center
  986. test font-30.7 {Tk_DistanceToTextLayout procedure: on left side} {
  987.     csetup "0n000"
  988.     set x {}
  989.     event generate .b.c <Leave>
  990.     event generate .b.c <Enter> -x 0 -y 0
  991.     set x
  992. } {}
  993. test font-30.8 {Tk_DistanceToTextLayout procedure: on right side} {
  994.     csetup "0n000"
  995.     set x {}
  996.     event generate .b.c <Leave>
  997.     event generate .b.c <Enter> -x [expr $ax*2] -y 0
  998.     set x
  999. } {}
  1000. test font-30.9 {Tk_DistanceToTextLayout procedure: inside line} {
  1001.     csetup "0n000"
  1002.     set x {}
  1003.     event generate .b.c <Leave>
  1004.     event generate .b.c <Enter> -x $ax -y 0
  1005.     set x
  1006. } {0}
  1007. test font-30.10 {Tk_DistanceToTextLayout procedure: above line} {
  1008.     csetup "0n000"
  1009.     set x {}
  1010.     event generate .b.c <Leave>
  1011.     event generate .b.c <Enter> -x 0 -y 0
  1012.     set x
  1013. } {}
  1014. test font-30.11 {Tk_DistanceToTextLayout procedure: below line} {
  1015.     csetup "000n0"
  1016.     set x {}
  1017.     event generate .b.c <Leave>
  1018.     event generate .b.c <Enter> -x 0 -y $ay
  1019.     set x
  1020. } {}
  1021. test font-30.12 {Tk_DistanceToTextLayout procedure: in line} {
  1022.     csetup "0n000"
  1023.     set x {}
  1024.     event generate .b.c <Leave>
  1025.     event generate .b.c <Enter> -x $ax -y $ay
  1026.     set x
  1027. } {3}
  1028. .b.c itemconfig text -justify left
  1029. test font-30.13 {Tk_DistanceToTextLayout procedure: exact hit} {
  1030.     csetup "000"
  1031.     set x {}
  1032.     event generate .b.c <Leave>
  1033.     event generate .b.c <Enter> -x $ax -y 0
  1034.     set x
  1035. } {1}
  1036. test font-31.1 {Tk_IntersectTextLayout procedure: loop once} {
  1037.     csetup "000n000n000"
  1038.     .b.c find overlapping 0 0 0 0
  1039. } [.b.c find withtag text]
  1040. test font-31.2 {Tk_IntersectTextLayout procedure: loop multiple} {
  1041.     csetup "000t000t000"
  1042.     .b.c find overlapping [expr $ax*10] 0 [expr $ax*10] 0
  1043. } [.b.c find withtag text]
  1044. test font-31.3 {Tk_IntersectTextLayout procedure: loop to end} {
  1045.     csetup "0n000"
  1046.     .b.c find overlapping [expr $ax*2] 0 [expr $ax*2] 0
  1047. } {}
  1048. test font-31.4 {Tk_IntersectTextLayout procedure: hit a special char (tab)} {
  1049.     csetup "000t000"
  1050.     .b.c find overlapping [expr $ax*6] 0 [expr $ax*6] 0
  1051. } [.b.c find withtag text]
  1052. test font-31.5 {Tk_IntersectTextLayout procedure: ignore newlines} {
  1053.     csetup "000n0n000"
  1054.     .b.c find overlapping $ax $ay $ax $ay
  1055. } {}
  1056. test font-31.6 {Tk_IntersectTextLayout procedure: ignore spaces at eol} {
  1057.     csetup "000n000      000000000"
  1058.     .b.c itemconfig text -width [expr $ax*10]
  1059.     set x [.b.c find overlapping [expr $ax*5] $ay [expr $ax*5] $ay]
  1060.     .b.c itemconfig text -width 0
  1061.     set x
  1062. } {}
  1063. test font-32.1 {Tk_TextLayoutToPostscript: ensure buffer doesn't overflow} {
  1064.     # If there were a whole bunch of returns or tabs in a row, then the
  1065.     # temporary buffer could overflow and write on the stack.
  1066.     
  1067.     csetup "qwertyuiopasdfghjklzxcvbnm1234qwertyuiopasdfghjklzxcvbnmn"
  1068.     .b.c itemconfig text -width 800
  1069.     .b.c insert text end "qwertyuiopasdfghjklzxcvbnm1234qwertyuiopasdfghjklzxcvbnmn"
  1070.     .b.c insert text end "nnnnnnnnnnnnnnnnnnnnnnnnnnnnnn"
  1071.     .b.c insert text end "end"
  1072.     set x [.b.c postscript]
  1073.     set i [string first "(qwerty" $x] 
  1074.     string range $x $i [expr {$i + 278}]
  1075. } {(qwertyuiopasdfghjklzxcvbnm1234qwertyuiopasdfghjklzxcvbnm)]
  1076. [(qwertyuiopasdfghjklzxcvbnm1234qwertyuiopasdfghjklzxcvbnm)]
  1077. [()]
  1078. [()]
  1079. [()]
  1080. [()]
  1081. [()]
  1082. [()]
  1083. [()]
  1084. [()]
  1085. [()]
  1086. [()]
  1087. [()]
  1088. [()]
  1089. [()]
  1090. [()]
  1091. [()]
  1092. [()]
  1093. [()]
  1094. [()]
  1095. [()]
  1096. [()]
  1097. [()]
  1098. [()]
  1099. [()]
  1100. [()]
  1101. [()]
  1102. [()]
  1103. [()]
  1104. [()]
  1105. [()]
  1106. [()]
  1107. [(end)]
  1108. }
  1109. test font-33.1 {Tk_TextWidth procedure} {
  1110. } {}
  1111. test font-33.2 {ConfigAttributesObj procedure: arguments} {
  1112.     # (Tcl_GetIndexFromObj() != TCL_OK)
  1113.     setup
  1114.     list [catch {font create xyz -xyz} msg] $msg
  1115. } {1 {bad option "-xyz": must be -family, -size, -weight, -slant, -underline, or -overstrike}}
  1116. test font-34.1 {ConfigAttributesObj procedure: arguments} {
  1117.     # (objc & 1)
  1118.     setup
  1119.     list [catch {font create xyz -family} msg] $msg
  1120. } {1 {value for "-family" option missing}}
  1121. set i 3
  1122. foreach p {
  1123.     {family xyz times}
  1124.     {size 20 40}
  1125.     {weight normal bold}
  1126.     {slant roman italic}
  1127.     {underline 0 1}
  1128.     {overstrike 0 1}
  1129. } {
  1130.     set opt [lindex $p 0]
  1131.     test font-34.$i "ConfigAttributesObj procedure: $opt" {
  1132. setup
  1133. set x {}
  1134. font create xyz -$opt [lindex $p 1]
  1135. lappend x [font config xyz -$opt]
  1136. font config xyz -$opt [lindex $p 2]
  1137. lappend x [font config xyz -$opt]
  1138.     } [lrange $p 1 2]
  1139.     incr i
  1140. }
  1141. foreach p {
  1142.     {size xyz {1 {expected integer but got "xyz"}}}
  1143.     {weight xyz {1 {bad -weight value "xyz": must be normal, or bold}}}
  1144.     {slant xyz {1 {bad -slant value "xyz": must be roman, or italic}}}
  1145.     {underline xyz {1 {expected boolean value but got "xyz"}}}
  1146.     {overstrike xyz {1 {expected boolean value but got "xyz"}}}
  1147. } {
  1148.     test font-34.$i "ConfigAttributesObj procedure: [lindex $p 0]" {
  1149. setup
  1150. list [catch {font create xyz -[lindex $p 0] [lindex $p 1]} msg] $msg
  1151.     } [lindex $p 2]
  1152.     incr i
  1153. }
  1154. test font-35.1 {GetAttributeInfoObj procedure: one attribute} {
  1155.     # (objPtr != NULL)
  1156.     setup
  1157.     font create xyz -family xyz
  1158.     font config xyz -family
  1159. } {xyz}
  1160. test font-36.1 {GetAttributeInfoObj procedure: unknown attribute} {
  1161.     # (Tcl_GetIndexFromObj() != TCL_OK)
  1162.     setup
  1163.     font create xyz
  1164.     list [catch {font config xyz -xyz} msg] $msg
  1165. } {1 {bad option "-xyz": must be -family, -size, -weight, -slant, -underline, or -overstrike}}
  1166. test font-37.1 {GetAttributeInfoObj procedure: all attributes} {
  1167.     # not (objPtr != NULL) 
  1168.     setup
  1169.     font create xyz -family xyz
  1170.     font config xyz
  1171. } {-family xyz -size 0 -weight normal -slant roman -underline 0 -overstrike 0}
  1172. set i 4
  1173. foreach p {
  1174.     {family xyz xyz}
  1175.     {size 20 20}
  1176.     {weight normal normal}
  1177.     {slant italic italic}
  1178.     {underline yes 1}
  1179.     {overstrike false 0}
  1180. } {
  1181.     test font-31.$i "GetAttributeInfo procedure: [lindex $p 0]" {
  1182. setup
  1183. font create xyz -[lindex $p 0] [lindex $p 1]
  1184. font config xyz -[lindex $p 0]
  1185.     } [lindex $p 2]
  1186.     incr i
  1187. }
  1188. # In tests below, one field is set to "xyz" so that font name doesn't
  1189. # look like a native X font, so that ParseFontNameObj or TkParseXLFD will
  1190. # be called.
  1191. setup
  1192. test font-38.1 {ParseFontNameObj procedure: begins with -} {
  1193.     lindex [font actual -xyz-times-*-*-*-*-*-*-*-*-*-*-*-*] 1
  1194. } $times
  1195. test font-38.2 {ParseFontNameObj procedure: begins with -*} {
  1196.     lindex [font actual -*-times-xyz-*-*-*-*-*-*-*-*-*-*-*] 1
  1197. } $times
  1198. test font-38.3 {ParseFontNameObj procedure: begins with -, doesn't look like list} {
  1199.     lindex [font actual -xyz-times-*-*-*-*-*-*-*-*-*-*-*-*] 1
  1200. } $times
  1201. test font-38.4 {ParseFontNameObj procedure: begins with -, looks like list} {
  1202.     lindex [font actual {-family times}] 1
  1203. } $times
  1204. test font-38.5 {ParseFontNameObj procedure: begins with *} {
  1205.     lindex [font actual *-times-xyz-*-*-*-*-*-*-*-*-*-*-*] 1
  1206. } $times
  1207. test font-38.6 {ParseFontNameObj procedure: begins with *} {
  1208.     font actual *-times-xyz -family
  1209. } $times
  1210. test font-38.7 {ParseFontNameObj procedure: arguments} {noExceed} {
  1211.     list [catch {font actual "{xyz"} msg] $msg
  1212. } [list 1 "font "{xyz" doesn't exist"]
  1213. test font-38.8 {ParseFontNameObj procedure: arguments} {noExceed} {
  1214.     list [catch {font actual ""} msg] $msg
  1215. } {1 {font "" doesn't exist}}
  1216. test font-38.9 {ParseFontNameObj procedure: arguments} {
  1217.     list [catch {font actual {times 20 xyz xyz}} msg] $msg
  1218. } {1 {unknown font style "xyz"}}
  1219. test font-38.10 {ParseFontNameObj procedure: arguments} {
  1220.     list [catch {font actual {times xyz xyz}} msg] $msg
  1221. } {1 {expected integer but got "xyz"}}
  1222. test font-38.11 {ParseFontNameObj procedure: stylelist loop} {macOnly} {
  1223.     lrange [font actual {times 12 bold italic overstrike underline}] 4 end
  1224. } {-weight bold -slant italic -underline 1 -overstrike 0}
  1225. test font-38.12 {ParseFontNameObj procedure: stylelist loop} {unixOrPc} {
  1226.     lrange [font actual {times 12 bold italic overstrike underline}] 4 end
  1227. } {-weight bold -slant italic -underline 1 -overstrike 1}
  1228. test font-38.13 {ParseFontNameObj procedure: stylelist error} {
  1229.     list [catch {font actual {times 12 bold xyz}} msg] $msg
  1230. } {1 {unknown font style "xyz"}}
  1231. test font-39.1 {NewChunk procedure: test realloc} {
  1232.     .b.f config -text "xxxnxxxtxxxnxxxttt"
  1233. } {}
  1234. test font-40.1 {TkFontParseXLFD procedure: initial dash} {
  1235.     font actual -xyz-times-*-*-*-*-*-*-*-*-*-*-*-* -family
  1236. } $times
  1237. test font-40.2 {TkFontParseXLFD procedure: no initial dash} {
  1238.     font actual *-times-*-*-*-*-*-*-*-*-*-*-*-xyz -family
  1239. } $times
  1240. test font-40.3 {TkFontParseXLFD procedure: not enough fields} {
  1241.     font actual -xyz-times-*-*-* -family
  1242. } $times
  1243. test font-40.4 {TkFontParseXLFD procedure: all fields unspecified} {
  1244.     lindex [font actual -xyz-*-*-*-*-*-*-*-*-*-*-*-*-*] 0
  1245. } {-family}
  1246. test font-40.5 {TkFontParseXLFD procedure: all fields specified} {
  1247.     lindex [font actual -foundry-times-weight-slant-setwidth-addstyle-10-10-10-10-spacing-avgwidth-registry-encoding] 1
  1248. } $times
  1249. test font-41.1 {TkParseXLFD procedure: arguments} {
  1250.     # XLFD with bad pointsize: fallback to some system font.
  1251.     font actual -*-*-*-*-*-*-xyz-*-*-*-*-*-*-*
  1252.     set x {}
  1253. } {}
  1254. test font-42.1 {TkFontParseXLFD procedure: arguments} {
  1255.     # XLFD with bad pixelsize: fallback to some system font.
  1256.     font actual -*-*-*-*-*-*-*-xyz-*-*-*-*-*-*
  1257.     set x {}
  1258. } {}
  1259. test font-42.2 {TkFontParseXLFD procedure: pixelsize specified} {
  1260.     font metrics -xyz-times-*-*-*-*-12-*-*-*-*-*-*-* -linespace
  1261.     set x {}
  1262. } {}
  1263. test font-42.3 {TkFontParseXLFD procedure: weird pixelsize specified} {
  1264.     font metrics {-xyz-times-*-*-*-*-[ 12.0 0 12.0 0]-*-*-*-*-*-*-*} -linespace
  1265.     set x {}
  1266. } {}
  1267. test font-42.4 {TkFontParseXLFD procedure: pointsize specified} {
  1268.     font metrics -xyz-times-*-*-*-*-*-120-*-*-*-*-*-* -linespace
  1269.     set x {}
  1270. } {}
  1271. test font-42.5 {TkFontParseXLFD procedure: weird pointsize specified} {
  1272.     font metrics {-xyz-times-*-*-*-*-*-[ 12.0 0 12.0 0]-*-*-*-*-*-*} -linespace
  1273.     set x {}
  1274. } {}
  1275. test font-43.1 {FieldSpecified procedure: specified vs. non-specified} {
  1276.     font actual -xyz--*-*-*-*-*-*-*-*-*-*-*-*
  1277.     font actual -xyz-*-*-*-*-*-*-*-*-*-*-*-*-*
  1278.     font actual -xyz-?-*-*-*-*-*-*-*-*-*-*-*-*
  1279.     lindex [font actual -xyz-times-*-*-*-*-*-*-*-*-*-*-*-*] 1
  1280. } $times
  1281. set oldscale [tk scaling]
  1282. tk scaling 0.5
  1283. test font-44.1 {TkFontGetPixels: size < 0} {
  1284.     font actual {times -12} -size
  1285. } {24}
  1286. test font-44.2 {TkFontGetPoints: size >= 0} {noExceed} {
  1287.     font actual {times 12} -size
  1288. } {12}
  1289. tk scaling $oldscale
  1290. test font-45.1 {TkFontGetAliasList: no match} {
  1291.     font actual {snarky 10} -family
  1292. } [font actual {-size 10} -family]
  1293. test font-45.2 {TkFontGetAliasList: match} {macOnly} {
  1294.     # Result could be either "Times" or "New York"
  1295.     font actual {{times new roman} 10} -family
  1296. } [font actual {times 10} -family]
  1297. test font-45.3 {TkFontGetAliasList: match} {pcOnly} {
  1298.     font actual {times 10} -family
  1299. } {Times New Roman}
  1300. test font-45.4 {TkFontGetAliasList: match} {unixOnly noExceed} {
  1301.     # can fail on Unix systems that have a real "times new roman" font
  1302.     font actual {{times new roman} 10} -family
  1303. } [font actual {times 10} -family]
  1304. setup
  1305. destroy .b
  1306. # cleanup
  1307. ::tcltest::cleanupTests
  1308. return