diff options
author | rjohnson <rjohnson> | 1998-04-01 09:51:44 (GMT) |
---|---|---|
committer | rjohnson <rjohnson> | 1998-04-01 09:51:44 (GMT) |
commit | 066ea7fd88d49cb456f74da71dbe875e4fc0aabb (patch) | |
tree | 8fb30cb152c4dc191be47fa043d2e6f5ea38c7ba /tests/font.test | |
parent | 13242623d2ff3ea02ab6a62bfb48a7dbb5c27e22 (diff) | |
download | tk-066ea7fd88d49cb456f74da71dbe875e4fc0aabb.zip tk-066ea7fd88d49cb456f74da71dbe875e4fc0aabb.tar.gz tk-066ea7fd88d49cb456f74da71dbe875e4fc0aabb.tar.bz2 |
Initial revision
Diffstat (limited to 'tests/font.test')
-rw-r--r-- | tests/font.test | 1092 |
1 files changed, 1092 insertions, 0 deletions
diff --git a/tests/font.test b/tests/font.test new file mode 100644 index 0000000..a526470 --- /dev/null +++ b/tests/font.test @@ -0,0 +1,1092 @@ +# This file is a Tcl script to test out Tk's "font" command +# plus the procedures in tkFont.c. It is organized in the +# standard fashion for Tcl tests. +# +# Copyright (c) 1996 Sun Microsystems, Inc. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. +# +# SCCS: @(#) font.test 1.22 97/10/10 14:34:54 + +if {[string compare test [info procs test]] != 0} { + source defs +} + +catch {destroy .b} +toplevel .b +wm geom .b +0+0 +update idletasks + +proc setup {} { + catch {destroy .b.f} + catch {font delete xyz} + label .b.f + pack .b.f + update +} + +label .b.l -padx 0 -pady 0 -bd 0 -highlightthickness 0 -justify left -text "0" -font "Helvetica -12 bold" +pack .b.l +canvas .b.c -closeenough 0 +.b.c create text 0 0 -tags text -anchor nw -just left -font "Helvetica -12 bold" +pack .b.c +update + +set ax [winfo reqwidth .b.l] +set ay [winfo reqheight .b.l] +proc getsize {} { + update + return "[winfo reqwidth .b.l] [winfo reqheight .b.l]" +} + +proc csetup {{str ""}} { + focus -force .b.c + .b.c dchars text 0 end + .b.c insert text 0 $str + .b.c focus text +} + +setup + +case $tcl_platform(platform) { + unix {set fixed "fixed"} + windows {set fixed "courier 12"} + macintosh {set fixed "monaco 9"} +} +set times [font actual {times 0} -family] + +test font-1.1 {font command: general} { + list [catch {font} msg] $msg +} {1 {wrong # args: should be "font option ?arg?"}} +test font-1.2 {font command: actual: arguments} { + list [catch {font actual xyz -displayof} msg] $msg +} {1 {value for "-displayof" missing}} +test font-1.3 {font command: actual: arguments} { + list [catch {font actual} msg] $msg +} {1 {wrong # args: should be "font actual font ?-displayof window? ?option?"}} +test font-1.4 {font command: actual: arguments} { + list [catch {font actual xyz abc def} msg] $msg +} {1 {wrong # args: should be "font actual font ?-displayof window? ?option?"}} +test font-1.5 {font command: actual: arguments} { + list [catch {font actual {}} msg] $msg +} {1 {font "" doesn't exist}} +test font-1.6 {font command: actual: displayof specified, so skip to next} { + catch {font actual xyz -displayof . -size} +} {0} +test font-1.7 {font command: actual: displayof specified, so skip to next} { + lindex [font actual xyz -displayof .] 0 +} {-family} +test font-1.8 {font command: actual} {unix || mac} { + string tolower [font actual {-family times} -family] +} {times} +test font-1.9 {font command: actual} {pcOnly} { + font actual {-family times} -family +} {Times New Roman} +test font-1.10 {font command: actual} { + lindex [font actual {-family times}] 0 +} {-family} +test font-1.11 {font command: bad option} { + list [catch {font actual xyz -style} msg] $msg +} {1 {bad option "-style": must be -family, -size, -weight, -slant, -underline, or -overstrike}} + +test font-2.1 {font command: configure} { + list [catch {font configure} msg] $msg +} {1 {wrong # args: should be "font configure fontname ?options?"}} +test font-2.2 {font command: configure: non-existent font} { + list [catch {font configure xyz} msg] $msg +} {1 {named font "xyz" doesn't exist}} +test font-2.3 {font command: configure: "deleted" font} { + setup + font create xyz + .b.f configure -font xyz + font delete xyz + list [catch {font configure xyz} msg] $msg +} {1 {named font "xyz" doesn't exist}} +test font-2.4 {font command: configure: get all options} { + setup + font create xyz -family xyz + lindex [font configure xyz] 1 +} xyz +test font-2.5 {font command: configure: get one option} { + setup + font create xyz -family xyz + font configure xyz -family +} xyz +test font-2.6 {font command: configure: update existing font} { + setup + font create xyz + font configure xyz -family xyz + update + font configure xyz -family +} xyz +test font-2.7 {font command: configure: bad option} { + setup + font create xyz + list [catch {font configure xyz -style} msg] $msg +} {1 {bad option "-style": must be -family, -size, -weight, -slant, -underline, or -overstrike}} + +test font-3.1 {font command: create: make up name} { + font delete [font create] + font delete [font create -family xyz] +} {} +test font-3.2 {font command: create: already exists} { + setup + font create xyz + list [catch {font create xyz} msg] $msg +} {1 {font "xyz" already exists}} +test font-3.3 {font command: create: error recreating "deleted" font} { + setup + font create xyz + .b.f configure -font xyz + font delete xyz + list [catch {font create xyz -xyz times} msg] $msg +} {1 {bad option "-xyz": must be -family, -size, -weight, -slant, -underline, or -overstrike}} +test font-3.4 {font command: create: recreate "deleted" font} { + setup + font create xyz + .b.f configure -font xyz + font delete xyz + font actual xyz + font create xyz -family times + update + font configure xyz -family +} {times} +test font-3.5 {font command: create: bad option creating new font} { + setup + list [catch {font create xyz -xyz times} msg] $msg +} {1 {bad option "-xyz": must be -family, -size, -weight, -slant, -underline, or -overstrike}} +test font-3.6 {font command: create: totally new font} { + setup + font create xyz -family xyz + font configure xyz -family +} {xyz} + +test font-4.1 {font command: delete: arguments} { + list [catch {font delete} msg] $msg +} {1 {wrong # args: should be "font delete fontname ?fontname ...?"}} +test font-4.2 {font command: delete: loop test} { + font create a -underline 1 + font create b -underline 1 + font create c -underline 1 + font delete a b c + list [font actual a -underline] [font actual b -underline] [font actual c -underline] +} {0 0 0} +test font-4.3 {font command: delete: non-existent} { + setup + list [catch {font delete xyz} msg] $msg +} {1 {named font "xyz" doesn't exist}} +test font-4.4 {font command: delete: mark for later deletion} { + setup + font create xyz + .b.f configure -font xyz + font delete xyz + font actual xyz + list [catch {font configure xyz} msg] $msg +} {1 {named font "xyz" doesn't exist}} +test font-4.5 {font command: delete: actually delete} { + setup + font create xyz -underline 1 + font delete xyz + font actual xyz -underline +} {0} + +test font-5.1 {font command: families: arguments} { + list [catch {font families -displayof} msg] $msg +} {1 {value for "-displayof" missing}} +test font-5.2 {font command: families: arguments} { + list [catch {font families xyz} msg] $msg +} {1 {wrong # args: should be "font families ?-displayof window?"}} +test font-5.3 {font command: families} { + font families + set x {} +} {} + +test font-6.1 {font command: measure: arguments} { + list [catch {font measure xyz -displayof} msg] $msg +} {1 {value for "-displayof" missing}} +test font-6.2 {font command: measure: arguments} { + list [catch {font measure} msg] $msg +} {1 {wrong # args: should be "font measure font ?-displayof window? text"}} +test font-6.3 {font command: measure: arguments} { + list [catch {font measure xyz abc def} msg] $msg +} {1 {wrong # args: should be "font measure font ?-displayof window? text"}} +test font-6.4 {font command: measure: arguments} { + list [catch {font measure {} abc} msg] $msg +} {1 {font "" doesn't exist}} +test font-6.5 {font command: measure} { + expr [font measure $fixed "abcdefg"]==[font measure $fixed "a"]*7 +} {1} + +test font-7.1 {font command: metrics: arguments} { + list [catch {font metrics xyz -displayof} msg] $msg +} {1 {value for "-displayof" missing}} +test font-7.2 {font command: metrics: arguments} { + list [catch {font metrics} msg] $msg +} {1 {wrong # args: should be "font metrics font ?-displayof window? ?option?"}} +test font-7.3 {font command: metrics: get all metrics} { + catch {unset a} + array set a [font metrics {-family xyz}] + set x [lsort [array names a]] + unset a + set x +} {-ascent -descent -fixed -linespace} +test font-7.4 {font command: metrics: get ascent} { + catch {expr [font metrics $fixed -ascent]} +} {0} +test font-7.5 {font command: metrics: get descent} { + catch {expr [font metrics {-family xyz} -descent]} +} {0} +test font-7.6 {font command: metrics: get linespace} { + catch {expr [font metrics {-family fixed} -linespace]} +} {0} +test font-7.7 {font command: metrics: get fixed} { + catch {expr [font metrics {-family fixed} -fixed]} +} {0} +test font-7.8 {font command: metrics: get ascent} { + catch {expr [font metrics {-family xyz} -ascent]} +} {0} +test font-7.9 {font command: metrics: get descent} { + catch {expr [font metrics {-family xyz} -descent]} +} {0} +test font-7.10 {font command: metrics: get linespace} { + catch {expr [font metrics {-family fixed} -linespace]} +} {0} +test font-7.11 {font command: metrics: get fixed} { + catch {expr [font metrics {-family fixed} -fixed]} +} {0} +test font-7.12 {font command: metrics: bad metric} { + list [catch {font metrics {-family fixed} -xyz} msg] $msg +} {1 {bad metric "-xyz": must be -ascent, -descent, -linespace, or -fixed}} + +test font-8.1 {font command: names: arguments} { + list [catch {font names xyz} msg] $msg +} {1 {wrong # args: should be "font names"}} +test font-8.2 {font command: names} { + setup + font create xyz + font create abc + set x [lsort [font names]] + font delete abc + font delete xyz + set x +} {abc xyz} +test font-8.3 {font command: names} { + setup + font create xyz + font create abc + set x [lsort [font names]] + .b.f config -font xyz + font delete xyz + lappend x [font names] + font delete abc + set x +} {abc xyz abc} + +test font-9.1 {font command: unknown option} { + list [catch {font xyz} msg] $msg +} {1 {bad option "xyz": must be actual, configure, create, delete, families, measure, metrics, or names}} + +test font-10.1 {UpdateDependantFonts procedure: no users} { + setup + font create xyz + font configure xyz -family times +} {} +test font-10.2 {UpdateDependantFonts procedure: pings the widgets} { + setup + font create xyz -family times -size 20 + .b.f config -font xyz -text "abcd" -padx 0 -bd 0 -highlightthickness 0 + set a1 [font measure xyz "abcd"] + update + set b1 [winfo reqwidth .b.f] + font configure xyz -family helvetica -size 20 + set a2 [font measure xyz "abcd"] + update + set b2 [winfo reqwidth .b.f] + expr {$a1==$b1 && $a2==$b2} +} {1} + +test font-11.1 {Tk_GetFont procedure: bump ref count} { + setup + .b.f config -font {-family fixed} + lindex [font actual {-family fixed}] 0 +} {-family} +test font-11.2 {Tk_GetFont procedure: bump ref count of named font, too} { + setup + font create xyz + .b.f config -font xyz + lindex [font actual xyz] 0 +} {-family} +test font-11.3 {Tk_GetFont procedure: get named font} { + setup + font create xyz + .b.f config -font xyz +} {} +test font-11.4 {Tk_GetFont procedure: get native font} {unixOnly} { + setup + .b.f config -font fixed +} {} +test font-11.5 {Tk_GetFont procedure: get native font} {pcOnly} { + setup + .b.f config -font oemfixed +} {} +test font-11.6 {Tk_GetFont procedure: get native font} {macOnly} { + setup + .b.f config -font application +} {} +test font-11.7 {Tk_GetFont procedure: get attribute font} { + list [catch {.b.f config -font {xxx yyy zzz}} msg] $msg +} {1 {expected integer but got "yyy"}} +test font-11.8 {Tk_GetFont procedure: get attribute font} { + lindex [font actual {plan 9}] 0 +} {-family} +test font-11.9 {Tk_GetFont procedure: no match} { + list [catch {font actual {}} msg] $msg +} {1 {font "" doesn't exist}} + +test font-12.1 {Tk_NameOfFont procedure} { + setup + .b.f config -font {-family fixed} + .b.f cget -font +} {-family fixed} + +test font-13.1 {Tk_FreeFont procedure: one ref} { + setup + .b.f config -font {-family fixed} + destroy .b.f +} {} +test font-13.2 {Tk_FreeFont procedure: multiple ref} { + setup + .b.f config -font {-family fixed} + button .b.b -font {-family fixed} + destroy .b.f + set x [.b.b cget -font] + destroy .b.b + set x +} {-family fixed} +test font-13.3 {Tk_FreeFont procedure: named font} { + setup + font create xyz + .b.f config -font xyz + destroy .b.f + font names +} {xyz} +test font-13.4 {Tk_FreeFont procedure: named font} { + setup + font create xyz -underline 1 + .b.f config -font xyz + font delete xyz + set x [font actual xyz -underline] + destroy .b.f + list [font actual xyz -underline] $x +} {0 1} +test font-13.5 {Tk_FreeFont procedure: named font not deleted yet} { + setup + font create xyz + .b.f config -font xyz + button .b.b -font xyz + font delete xyz + set x [font actual xyz] + destroy .b.b + list [lindex [font actual xyz] 0] [lindex $x 0] +} {-family -family} + +test font-14.1 {Tk_FontId} { + .b.f config -font "times 20" + update +} {} + +test font-15.1 {Tk_FontMetrics procedure} { + button .b.w1 -text abc + entry .b.w2 -text abcd + update + destroy .b.w1 .b.w2 +} {} + +proc psfontname {name} { + set a [.b.c itemcget text -font] + .b.c itemconfig text -font $name + set post [.b.c postscript] + .b.c itemconfig text -font $a + set end [string first "findfont" $post] + incr end -2 + set post [string range $post [expr $end-70] $end] + set start [string first "gsave" $post] + return [string range $post [expr $start+7] end] +} +test font-16.1 {Tk_PostscriptFontName procedure: native} {unixOnly} { + set x [font actual {{itc avant garde} 10} -family] + if {[string match *avant*garde $x]} { + psfontname "{itc avant garde} 10" + } else { + set x {AvantGarde-Book} + } +} {AvantGarde-Book} +test font-16.2 {Tk_PostscriptFontName procedure: native} {pcOnly} { + psfontname "arial 10" +} {Helvetica} +test font-16.3 {Tk_PostscriptFontName procedure: native} {pcOnly} { + psfontname "{times new roman} 10" +} {Times-Roman} +test font-16.4 {Tk_PostscriptFontName procedure: native} {pcOnly} { + psfontname "{courier new} 10" +} {Courier} +test font-16.5 {Tk_PostscriptFontName procedure: native} {macOnly} { + psfontname "geneva 10" +} {Helvetica} +test font-16.6 {Tk_PostscriptFontName procedure: native} {macOnly} { + psfontname "{new york} 10" +} {Times-Roman} +test font-16.7 {Tk_PostscriptFontName procedure: native} {macOnly} { + psfontname "monaco 10" +} {Courier} +test font-16.8 {Tk_PostscriptFontName procedure: spaces} {unixOnly} { + set x [font actual {{lucida bright} 10} -family] + if {[string match lucida*bright $x]} { + psfontname "{lucida bright} 10" + } else { + set x {LucidaBright} + } +} {LucidaBright} +test font-16.9 {Tk_PostscriptFontName procedure: spaces} {unixOnly} { + psfontname "{new century schoolbook} 10" +} {NewCenturySchlbk-Roman} +set i 10 +foreach p { + {"avantgarde" AvantGarde-Book AvantGarde-Demi AvantGarde-BookOblique AvantGarde-DemiOblique} + {"bookman" Bookman-Light Bookman-Demi Bookman-LightItalic Bookman-DemiItalic} + {"courier" Courier Courier-Bold Courier-Oblique Courier-BoldOblique} + {"helvetica" Helvetica Helvetica-Bold Helvetica-Oblique Helvetica-BoldOblique} + {"new century schoolbook" NewCenturySchlbk-Roman NewCenturySchlbk-Bold NewCenturySchlbk-Italic NewCenturySchlbk-BoldItalic} + {"palatino" Palatino-Roman Palatino-Bold Palatino-Italic Palatino-BoldItalic} + {"symbol" Symbol Symbol Symbol Symbol} + {"times" Times-Roman Times-Bold Times-Italic Times-BoldItalic} + {"zapfchancery" ZapfChancery-MediumItalic ZapfChancery-MediumItalic ZapfChancery-MediumItalic ZapfChancery-MediumItalic} + {"zapfdingbats" ZapfDingbats ZapfDingbats ZapfDingbats ZapfDingbats} +} { + test font-16.$i {Tk_PostscriptFontName procedure: exhaustive} {unixOnly} { + set family [lindex $p 0] + set x {} + set i 1 + foreach slant {roman italic} { + foreach weight {normal bold} { + set name [list $family 12 $slant $weight] + if {[font actual $name -family] == $family} { + lappend x [psfontname $name] + } else { + lappend x [lindex $p $i] + } + incr i + } + } + incr i + set x + } [lrange $p 1 end] +} +foreach p { + {"arial" Helvetica Helvetica-Bold Helvetica-Oblique Helvetica-BoldOblique} + {"courier new" Courier Courier-Bold Courier-Oblique Courier-BoldOblique} + {"helvetica" Helvetica Helvetica-Bold Helvetica-Oblique Helvetica-BoldOblique} + {"symbol" Symbol Symbol-Bold Symbol-Italic Symbol-BoldItalic} + {"times new roman" Times-Roman Times-Bold Times-Italic Times-BoldItalic} +} { + test font-16.$i {Tk_PostscriptFontName procedure: exhaustive} {pcOnly} { + set family [lindex $p 0] + set x {} + foreach slant {roman italic} { + foreach weight {normal bold} { + lappend x [psfontname [list $family 12 "$slant $weight"]] + } + } + incr i + set x + } [lrange $p 1 end] +} +foreach p { + {"courier" Courier Courier-Bold Courier-Oblique Courier-BoldOblique} + {"geneva" Helvetica Helvetica-Bold Helvetica-Oblique Helvetica-BoldOblique} + {"helvetica" Helvetica Helvetica-Bold Helvetica-Oblique Helvetica-BoldOblique} + {"monaco" Courier Courier-Bold Courier-Oblique Courier-BoldOblique} + {"new york" Times-Roman Times-Bold Times-Italic Times-BoldItalic} + {"symbol" Symbol Symbol-Bold Symbol-Italic Symbol-BoldItalic} + {"times" Times-Roman Times-Bold Times-Italic Times-BoldItalic} +} { + test font-16.$i {Tk_PostscriptFontName procedure: exhaustive} {macOnly} { + set family [lindex $p 0] + set x {} + foreach slant {roman italic} { + foreach weight {normal bold} { + lappend x [psfontname [list $family 12 $slant $weight]] + } + } + incr i + set x + } [lrange $p 1 end] +} + +test font-17.1 {Tk_UnderlineChars procedure} { + text .b.t + .b.t insert 1.0 abc\tdefg + .b.t tag config sel -underline 1 + .b.t tag add sel 1.0 end + update +} {} + +setup +test font-18.1 {Tk_ComputeTextLayout: empty string} { + .b.l config -text "" +} {} +test font-18.2 {Tk_ComputeTextLayout: simple string} { + .b.l config -text "000" + getsize +} "[expr $ax*3] $ay" +test font-18.3 {Tk_ComputeTextLayout: find special chars} { + .b.l config -text "000\n000" + getsize +} "[expr $ax*3] [expr $ay*2]" +test font-18.4 {Tk_ComputeTextLayout: calls Tk_MeasureChars} { + .b.l config -text "000\n000" + getsize +} "[expr $ax*3] [expr $ay*2]" +test font-18.5 {Tk_ComputeTextLayout: break line} { + .b.l config -text "000\t00000" -wrap [expr 9*$ax] + set x [getsize] + .b.l config -wrap 0 + set x +} "[expr 8*$ax] [expr 2*$ay]" +test font-18.6 {Tk_ComputeTextLayout: normal ended on special char} { + .b.l config -text "000\n000" +} {} +test font-18.7 {Tk_ComputeTextLayout: special char was \n} { + .b.l config -text "000\n0000" + getsize +} "[expr $ax*4] [expr $ay*2]" +test font-18.8 {Tk_ComputeTextLayout: special char was \t} { + .b.l config -text "000\t00" + getsize +} "[expr $ax*10] $ay" +test font-18.9 {Tk_ComputeTextLayout: tab didn't cause break} { + set x {} + .b.l config -text "000\t000" + lappend x [getsize] + .b.l config -text "000\t000" -wrap [expr 100*$ax] + lappend x [getsize] + .b.l config -wrap 0 + set x +} "{[expr $ax*11] $ay} {[expr $ax*11] $ay}" +test font-18.10 {Tk_ComputeTextLayout: tab caused break} { + set x {} + .b.l config -text "000\t" + lappend x [getsize] + .b.l config -text "000\t00" -wrap [expr $ax*6] + lappend x [getsize] + .b.l config -wrap 0 + set x +} "{[expr $ax*3] $ay} {[expr $ax*3] [expr $ay*2]}" +test font-18.11 {Tk_ComputeTextLayout: absorb spaces at eol} { + set x {} + .b.l config -text "000 000" -wrap [expr $ax*5] + lappend x [getsize] + .b.l config -text "000 " + lappend x [getsize] + .b.l config -wrap 0 + set x +} "{[expr $ax*3] [expr $ay*2]} {[expr $ax*3] $ay}" +test font-18.12 {Tk_ComputeTextLayout: append non-printing spaces to chunk} { + set x {} + .b.l config -text "000 0000" -wrap [expr $ax*5] + lappend x [getsize] + .b.l config -text "000\t00 0000" -wrap [expr $ax*12] + lappend x [getsize] + .b.l config -wrap 0 + set x +} "{[expr $ax*4] [expr $ay*2]} {[expr $ax*10] [expr $ay*2]}" +test font-18.13 {Tk_ComputeTextLayout: many lines -> realloc line array} { + .b.l config -text "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" + getsize +} "1 [expr $ay*129]" +test font-18.14 {Tk_ComputeTextLayout: text ended with \n} { + list [.b.l config -text "0000"; getsize] [.b.l config -text "0000\n"; getsize] +} "{[expr $ax*4] $ay} {[expr $ax*4] [expr $ay*2]}" +test font-18.15 {Tk_ComputeTextLayout: justification} { + csetup "000\n00000" + set x {} + .b.c itemconfig text -just left + lappend x [.b.c index text @[expr $ax*2],0] + .b.c itemconfig text -just center + lappend x [.b.c index text @[expr $ax*2],0] + .b.c itemconfig text -just right + lappend x [.b.c index text @[expr $ax*2],0] + .b.c itemconfig text -just left + set x +} {2 1 0} + +test font-19.1 {Tk_FreeTextLayout procedure} { + setup + .b.f config -text foo + .b.f config -text boo +} {} + +test font-20.1 {Tk_DrawTextLayout procedure: auto-detect last char} { + .b.f config -text foo +} {} +test font-20.2 {Tk_DrawTextLayout procedure: multiple chunks} { + csetup "000\t00\n000" +} {} +test font-20.3 {Tk_DrawTextLayout: draw subset of chunk: numDisplay <= 0} { + csetup "000\t00" + .b.c select from text 3 + .b.c select to text 5 +} {} +test font-20.4 {Tk_DrawTextLayout: draw subset of chunk: firstChar <= 0} { + .b.c select from text 3 + .b.c select to text 5 +} {} +test font-20.5 {Tk_DrawTextLayout: draw subset of chunk: firstChar > 0} { + .b.c select from text 2 + .b.c select to text 2 +} {} +test font-20.6 {Tk_DrawTextLayout: draw subset of chunk: lastChar < numChars} { + .b.c select from text 4 + .b.c select to text 4 +} {} + +test font-21.1 {Tk_UnderlineTextLayout procedure: no underline chosen} { + .b.f config -text "foo" -under -1 +} {} +test font-21.2 {Tk_UnderlineTextLayout procedure: underline not visible} { + .b.f config -text "000 00000" -wrap [expr $ax*7] -under 10 +} {} +test font-21.3 {Tk_UnderlineTextLayout procedure: underline is visible} { + .b.f config -text "000 00000" -wrap [expr $ax*7] -under 5 + .b.f config -wrap -1 -under -1 +} {} + +test font-22.1 {Tk_PointToChar procedure: above all lines} { + csetup "000" + .b.c index text @-1,0 +} {0} +test font-22.2 {Tk_PointToChar procedure: no chars} { + # After fixing the following bug: + # + # In canvas text item, it was impossible to click to position the + # insertion point just after the last character. + # + # introduced another bug that Tk_PointToChar() would return a character + # index of 1 if TextLayout contained 0 characters. + + csetup "" + .b.c index text @100,100 +} {0} +test font-22.3 {Tk_PointToChar procedure: loop test} { + csetup "000\n000\n000\n000" + .b.c index text @10000,0 +} {3} +test font-22.4 {Tk_PointToChar procedure: intersect line} { + csetup "000\n000\n000" + .b.c index text @0,$ay +} {4} +test font-22.5 {Tk_PointToChar procedure: to the left of all chunks} { + .b.c index text @-100,$ay +} {4} +test font-22.6 {Tk_PointToChar procedure: past any possible chunk} { + .b.c index text @100000,$ay +} {7} +test font-22.7 {Tk_PointToChar procedure: which chunk on this line} { + csetup "000\n000\t000\t000\n000" + .b.c index text @[expr $ax*2],$ay +} {6} +test font-22.8 {Tk_PointToChar procedure: which chunk on this line} { + csetup "000\n000\t000\t000\n000" + .b.c index text @[expr $ax*10],$ay +} {10} +test font-22.9 {Tk_PointToChar procedure: in special chunk} { + csetup "000\n000\t000\t000\n000" + .b.c index text @[expr $ax*6],$ay +} {7} +test font-22.10 {Tk_PointToChar procedure: past all chars in chunk} { + csetup "000 0000000" + .b.c itemconfig text -width [expr $ax*5] + set x [.b.c index text @[expr $ax*5],0] + .b.c itemconfig text -width 0 + set x +} {3} +test font-22.11 {Tk_PointToChar procedure: below all chunks} { + csetup "000 0000000" + .b.c index text @0,1000000 +} {11} + +test font-23.1 {Tk_CharBBox procedure: index < 0} { + .b.f config -text "000" -underline -1 +} {} +test font-23.2 {Tk_CharBBox procedure: loop} { + .b.f config -text "000\t000\t000\t000" -underline 9 +} {} +test font-23.3 {Tk_CharBBox procedure: special char} { + .b.f config -text "000\t000\t000" -underline 7 +} {} +test font-23.4 {Tk_CharBBox procedure: normal char} { + .b.f config -text "000" -underline 1 +} {} +test font-23.5 {Tk_CharBBox procedure: right edge of bbox truncated} { + .b.f config -text "0 0000" -wrap [expr $ax*4] -under 2 + .b.f config -wrap 0 +} {} +test font-23.6 {Tk_CharBBox procedure: bbox pegged to right edge} { + .b.f config -text "0 0000" -wrap [expr $ax*4] -under 3 + .b.f config -wrap 0 +} {} + +.b.c bind all <Enter> {lappend x [.b.c index current @%x,%y]} + +test font-24.1 {Tk_TextLayoutToPoint procedure: loop once} { + csetup "000\n000\n000" + set x {} + event generate .b.c <Leave> + event generate .b.c <Enter> -x 0 -y 0 + set x +} {0} +test font-24.2 {Tk_TextLayoutToPoint procedure: loop multiple} { + csetup "000\n000\n000" + set x {} + event generate .b.c <Leave> + event generate .b.c <Enter> -x $ax -y $ay + set x +} {5} +test font-24.3 {Tk_TextLayoutToPoint procedure: loop to end} { + csetup "000\n0\n000" + set x {} + event generate .b.c <Leave> + event generate .b.c <Enter> -x [expr $ax*2] -y $ay + set x +} {} +test font-24.4 {Tk_TextLayoutToPoint procedure: hit a special char (tab)} { + csetup "000\t000\n000" + set x {} + event generate .b.c <Leave> + event generate .b.c <Enter> -x [expr $ax*6] -y 0 + set x +} {3} +test font-24.5 {Tk_TextLayoutToPoint procedure: ignore newline} { + csetup "000\n0\n000" + set x {} + event generate .b.c <Leave> + event generate .b.c <Enter> -x [expr $ax*2] -y $ay + set x +} {} +test font-24.6 {Tk_TextLayoutToPoint procedure: ignore spaces at eol} { + csetup "000\n000 000000000" + .b.c itemconfig text -width [expr $ax*10] + set x {} + event generate .b.c <Leave> + event generate .b.c <Enter> -x [expr $ax*5] -y $ay + .b.c itemconfig text -width 0 + set x +} {} +.b.c itemconfig text -justify center +test font-24.7 {Tk_TextLayoutToPoint procedure: on left side} { + csetup "0\n000" + set x {} + event generate .b.c <Leave> + event generate .b.c <Enter> -x 0 -y 0 + set x +} {} +test font-24.8 {Tk_TextLayoutToPoint procedure: on right side} { + csetup "0\n000" + set x {} + event generate .b.c <Leave> + event generate .b.c <Enter> -x [expr $ax*2] -y 0 + set x +} {} +test font-24.9 {Tk_TextLayoutToPoint procedure: inside line} { + csetup "0\n000" + set x {} + event generate .b.c <Leave> + event generate .b.c <Enter> -x $ax -y 0 + set x +} {0} +test font-24.10 {Tk_TextLayoutToPoint procedure: above line} { + csetup "0\n000" + set x {} + event generate .b.c <Leave> + event generate .b.c <Enter> -x 0 -y 0 + set x +} {} +test font-24.11 {Tk_TextLayoutToPoint procedure: below line} { + csetup "000\n0" + set x {} + event generate .b.c <Leave> + event generate .b.c <Enter> -x 0 -y $ay + set x +} {} +test font-24.12 {Tk_TextLayoutToPoint procedure: in line} { + csetup "0\n000" + set x {} + event generate .b.c <Leave> + event generate .b.c <Enter> -x $ax -y $ay + set x +} {3} +.b.c itemconfig text -justify left +test font-24.13 {Tk_TextLayoutToPoint procedure: exact hit} { + csetup "000" + set x {} + event generate .b.c <Leave> + event generate .b.c <Enter> -x $ax -y 0 + set x +} {1} + +test font-25.1 {Tk_TextLayoutToArea procedure: loop once} { + csetup "000\n000\n000" + .b.c find overlapping 0 0 0 0 +} [.b.c find withtag text] +test font-25.2 {Tk_TextLayoutToArea procedure: loop multiple} { + csetup "000\t000\t000" + .b.c find overlapping [expr $ax*10] 0 [expr $ax*10] 0 +} [.b.c find withtag text] +test font-25.3 {Tk_TextLayoutToArea procedure: loop to end} { + csetup "0\n000" + .b.c find overlapping [expr $ax*2] 0 [expr $ax*2] 0 +} {} +test font-25.4 {Tk_TextLayoutToArea procedure: hit a special char (tab)} { + csetup "000\t000" + .b.c find overlapping [expr $ax*6] 0 [expr $ax*6] 0 +} [.b.c find withtag text] +test font-25.5 {Tk_TextLayoutToArea procedure: ignore newlines} { + csetup "000\n0\n000" + .b.c find overlapping $ax $ay $ax $ay +} {} +test font-25.6 {Tk_TextLayoutToArea procedure: ignore spaces at eol} { + csetup "000\n000 000000000" + .b.c itemconfig text -width [expr $ax*10] + set x [.b.c find overlapping [expr $ax*5] $ay [expr $ax*5] $ay] + .b.c itemconfig text -width 0 + set x +} {} + +test font-26.1 {Tk_TextLayoutToPostscript: ensure buffer doesn't overflow} { + # If there were a whole bunch of returns or tabs in a row, then the + # temporary buffer could overflow and write on the stack. + + csetup "qwertyuiopasdfghjklzxcvbnm1234qwertyuiopasdfghjklzxcvbnm\n" + .b.c itemconfig text -width 800 + .b.c insert text end "qwertyuiopasdfghjklzxcvbnm1234qwertyuiopasdfghjklzxcvbnm\n" + .b.c insert text end "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" + .b.c insert text end "end" + set x [.b.c postscript] + set i [string first "(qwerty" $x] + string range $x $i [expr {$i + 213}] +} {(qwertyuiopasdfghjklzxcvbnm1234qwertyuiopasdfghjklzxcvbnm) +(qwertyuiopasdfghjklzxcvbnm1234qwertyuiopasdfghjklzxcvbnm) +() +() +() +() +() +() +() +() +() +() +() +() +() +() +() +() +() +() +() +() +() +() +() +() +() +() +() +() +() +() +(end) +} + +test font-27.1 {Tk_TextWidth procedure} { + font measure [.b.l cget -font] "000" +} [expr $ax*3] + +test font-28.1 {SetupFontMetrics procedure} { + setup + .b.f config -font $fixed +} {} + +test font-29.1 {TkInitFontAttributes procedure} { + setup + font create xyz + font config xyz +} {-family {} -size 0 -weight normal -slant roman -underline 0 -overstrike 0} + +test font-30.1 {ConfigAttributes procedure: arguments} { + setup + list [catch {font create xyz -family} msg] $msg +} {1 {missing value for "-family" option}} +test font-30.2 {ConfigAttributes procedure: arguments} { + setup + list [catch {font create xyz -xyz xyz} msg] $msg +} {1 {bad option "-xyz": must be -family, -size, -weight, -slant, -underline, or -overstrike}} +set i 3 +foreach p { + {family xyz times} + {size 20 40} + {weight normal bold} + {slant roman italic} + {underline 0 1} + {overstrike 0 1} +} { + set opt [lindex $p 0] + test font-30.$i "ConfigAttributes procedure: $opt" { + setup + set x {} + font create xyz -$opt [lindex $p 1] + lappend x [font config xyz -$opt] + font config xyz -$opt [lindex $p 2] + lappend x [font config xyz -$opt] + } [lrange $p 1 2] + incr i +} +foreach p { + {size xyz {1 {expected integer but got "xyz"}}} + {weight xyz {1 {bad -weight value "xyz": must be normal, bold}}} + {slant xyz {1 {bad -slant value "xyz": must be roman, italic}}} + {underline xyz {1 {expected boolean value but got "xyz"}}} + {overstrike xyz {1 {expected boolean value but got "xyz"}}} +} { + test font-30.$i "ConfigAttributes procedure: [lindex $p 0]" { + setup + list [catch {font create xyz -[lindex $p 0] [lindex $p 1]} msg] $msg + } [lindex $p 2] + incr i +} + +test font-31.1 {GetAttributeInfo procedure: error} { + list [catch {font actual xyz -style} msg] $msg +} {1 {bad option "-style": must be -family, -size, -weight, -slant, -underline, or -overstrike}} +test font-31.2 {GetAttributeInfo procedure: all attributes} { + setup + font create xyz -family xyz + font config xyz +} {-family xyz -size 0 -weight normal -slant roman -underline 0 -overstrike 0} +set i 3 +foreach p { + {family xyz xyz} + {size 20 20} + {weight normal normal} + {slant italic italic} + {underline yes 1} + {overstrike false 0} +} { + test font-31.$i "GetAttributeInfo procedure: [lindex $p 0]" { + setup + font create xyz -[lindex $p 0] [lindex $p 1] + font config xyz -[lindex $p 0] + } [lindex $p 2] + incr i +} + +# In tests below, one field is set to "xyz" so that font name doesn't +# look like a native X font, so that ParseFontName or TkParseXLFD will +# be called. + +setup + +test font-32.1 {ParseFontName procedure: begins with -} { + lindex [font actual -xyz-times-*-*-*-*-*-*-*-*-*-*-*-*] 1 +} $times +test font-32.2 {ParseFontName procedure: begins with -*} { + lindex [font actual -*-times-xyz-*-*-*-*-*-*-*-*-*-*-*] 1 +} $times +test font-32.3 {ParseFontName procedure: begins with -, doesn't look like list} { + lindex [font actual -xyz-times-*-*-*-*-*-*-*-*-*-*-*-*] 1 +} $times +test font-32.4 {ParseFontName procedure: begins with -, looks like list} { + lindex [font actual {-family times}] 1 +} $times +test font-32.5 {ParseFontName procedure: begins with *} { + lindex [font actual *-times-xyz-*-*-*-*-*-*-*-*-*-*-*] 1 +} $times +test font-32.6 {ParseFontName procedure: begins with *} { + font actual *-times-xyz -family +} $times +test font-32.7 {ParseFontName procedure: arguments} { + list [catch {font actual {}} msg] $msg +} {1 {font "" doesn't exist}} +test font-32.8 {ParseFontName procedure: arguments} { + list [catch {font actual {times 20 xyz xyz}} msg] $msg +} {1 {unknown font style "xyz"}} +test font-32.9 {ParseFontName procedure: arguments} { + list [catch {font actual {times xyz xyz}} msg] $msg +} {1 {expected integer but got "xyz"}} +test font-32.10 {ParseFontName procedure: stylelist loop} {macOnly} { + lrange [font actual {times 12 bold italic overstrike underline}] 4 end +} {-weight bold -slant italic -underline 1 -overstrike 0} +test font-32.11 {ParseFontName procedure: stylelist loop} {unixOrPc} { + lrange [font actual {times 12 bold italic overstrike underline}] 4 end +} {-weight bold -slant italic -underline 1 -overstrike 1} +test font-32.12 {ParseFontName procedure: stylelist error} { + list [catch {font actual {times 12 bold xyz}} msg] $msg +} {1 {unknown font style "xyz"}} + +test font-33.1 {TkParseXLFD procedure: initial dash} { + font actual -xyz-times-*-*-*-*-*-*-*-*-*-*-*-* -family +} $times +test font-33.2 {TkParseXLFD procedure: no initial dash} { + font actual *-times-*-*-*-*-*-*-*-*-*-*-*-xyz -family +} $times +test font-33.3 {TkParseXLFD procedure: not enough fields} { + font actual -xyz-times-*-*-* -family +} $times +test font-33.4 {TkParseXLFD procedure: all fields unspecified} { + lindex [font actual -xyz-*-*-*-*-*-*-*-*-*-*-*-*-*] 0 +} {-family} +test font-33.5 {TkParseXLFD procedure: all fields specified} { + lindex [font actual -foundry-times-weight-slant-setwidth-addstyle-10-10-10-10-spacing-avgwidth-registry-encoding] 1 +} $times +test font-33.6 {TkParseXLFD procedure: arguments} { + # XLFD with bad pointsize: fallback to some system font. + font actual -*-*-*-*-*-*-xyz-*-*-*-*-*-*-* + set x {} +} {} +test font-33.7 {TkParseXLFD procedure: arguments} { + # XLFD with bad pixelsize: fallback to some system font. + font actual -*-*-*-*-*-*-*-xyz-*-*-*-*-*-* + set x {} +} {} +test font-33.8 {TkParseXLFD procedure: pixelsize specified} { + font metrics -xyz-times-*-*-*-*-12-*-*-*-*-*-*-* -linespace + set x {} +} {} +test font-33.9 {TkParseXLFD procedure: weird pixelsize specified} { + font metrics {-xyz-times-*-*-*-*-[ 12.0 0 12.0 0]-*-*-*-*-*-*-*} -linespace + set x {} +} {} +test font-33.10 {TkParseXLFD procedure: pointsize specified} { + font metrics -xyz-times-*-*-*-*-*-120-*-*-*-*-*-* -linespace + set x {} +} {} +test font-33.11 {TkParseXLFD procedure: weird pointsize specified} { + font metrics {-xyz-times-*-*-*-*-*-[ 12.0 0 12.0 0]-*-*-*-*-*-*} -linespace + set x {} +} {} + +test font-34.1 {FieldSpecified procedure: specified vs. non-specified} { + font actual -xyz--*-*-*-*-*-*-*-*-*-*-*-* + font actual -xyz-*-*-*-*-*-*-*-*-*-*-*-*-* + font actual -xyz-?-*-*-*-*-*-*-*-*-*-*-*-* + lindex [font actual -xyz-times-*-*-*-*-*-*-*-*-*-*-*-*] 1 +} $times + +test font-35.1 {NewChunk procedure: test realloc} { + .b.f config -text "xxx\nxxx\txxx\nxxx\t\t\t" +} {} + +destroy .b +return |