1# This file is a Tcl script to test the code in the file tkTextMark.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$
10
11package require tcltest 2.1
12eval tcltest::configure $argv
13tcltest::loadTestedCommands
14
15catch {destroy .t}
16text .t -width 20 -height 10
17testConstraint haveCourier12 [expr {[catch {
18    .t configure -font {Courier 12}
19}] == 0}]
20pack append . .t {top expand fill}
21update
22.t debug on
23wm 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
28wm withdraw .
29wm minsize . 1 1
30wm positionfrom . user
31wm deiconify .
32
33entry .t.e
34.t insert 1.0 "Line 1
35abcdefghijklm
3612345
37Line 4
38bOy GIrl .#@? x_yz
39!@#$%
40Line 7"
41
42test textMark-1.1 {TkTextMarkCmd - missing option} haveCourier12 {
43    list [catch {.t mark} msg] $msg
44} {1 {wrong # args: should be ".t mark option ?arg arg ...?"}}
45test textMark-1.2 {TkTextMarkCmd - bogus option} haveCourier12 {
46    list [catch {.t mark gorp} msg] $msg
47} {1 {bad mark option "gorp": must be gravity, names, next, previous, set, or unset}}
48test textMark-1.3 {TkTextMarkCmd - "gravity" option} haveCourier12 {
49    list [catch {.t mark gravity foo} msg] $msg
50} {1 {there is no mark named "foo"}}
51test textMark-1.4 {TkTextMarkCmd - "gravity" option} haveCourier12 {
52    .t mark unset x
53    .t mark set x 1.3
54    .t insert 1.3 x
55    list [.t mark gravity x] [.t index x]
56} {right 1.4}
57test textMark-1.5 {TkTextMarkCmd - "gravity" option} haveCourier12 {
58    .t mark unset x
59    .t mark set x 1.3
60    .t mark g x left
61    .t insert 1.3 x
62    list [.t mark gravity x] [.t index x]
63} {left 1.3}
64test textMark-1.6 {TkTextMarkCmd - "gravity" option} haveCourier12 {
65    .t mark unset x
66    .t mark set x 1.3
67    .t mark gravity x right
68    .t insert 1.3 x
69    list [.t mark gravity x] [.t index x]
70} {right 1.4}
71test textMark-1.7 {TkTextMarkCmd - "gravity" option} haveCourier12 {
72    list [catch {.t mark gravity x gorp} msg] $msg
73} {1 {bad mark gravity "gorp": must be left or right}}
74test textMark-1.8 {TkTextMarkCmd - "gravity" option} haveCourier12 {
75    list [catch {.t mark gravity} msg] $msg
76} {1 {wrong # args: should be ".t mark gravity markName ?gravity?"}}
77
78test textMark-2.1 {TkTextMarkCmd - "names" option} haveCourier12 {
79    list [catch {.t mark names 2} msg] $msg
80} {1 {wrong # args: should be ".t mark names"}}
81.t mark unset x
82test textMark-2.2 {TkTextMarkCmd - "names" option} haveCourier12 {
83    lsort [.t mark na]
84} {current insert}
85test textMark-2.3 {TkTextMarkCmd - "names" option} haveCourier12 {
86    .t mark set a 1.1
87    .t mark set "b c" 2.3
88    lsort [.t mark names]
89} {a {b c} current insert}
90
91test textMark-3.1 {TkTextMarkCmd - "set" option} haveCourier12 {
92    list [catch {.t mark set a} msg] $msg
93} {1 {wrong # args: should be ".t mark set markName index"}}
94test textMark-3.2 {TkTextMarkCmd - "set" option} haveCourier12 {
95    list [catch {.t mark s a b c} msg] $msg
96} {1 {wrong # args: should be ".t mark set markName index"}}
97test textMark-3.3 {TkTextMarkCmd - "set" option} haveCourier12 {
98    list [catch {.t mark set a @x} msg] $msg
99} {1 {bad text index "@x"}}
100test textMark-3.4 {TkTextMarkCmd - "set" option} haveCourier12 {
101    .t mark set a 1.2
102    .t index a
103} 1.2
104test textMark-3.5 {TkTextMarkCmd - "set" option} haveCourier12 {
105    .t mark set a end
106    .t index a
107} {8.0}
108
109test textMark-4.1 {TkTextMarkCmd - "unset" option} haveCourier12 {
110    list [catch {.t mark unset} msg] $msg
111} {0 {}}
112test textMark-4.2 {TkTextMarkCmd - "unset" option} haveCourier12 {
113    .t mark set a 1.2
114    .t mark set b 2.3
115    .t mark unset a b
116        list [catch {.t index a} msg] $msg [catch {.t index b} msg2] $msg2
117} {1 {bad text index "a"} 1 {bad text index "b"}}
118test textMark-4.3 {TkTextMarkCmd - "unset" option} haveCourier12 {
119    .t mark set a 1.2
120    .t mark set b 2.3
121    .t mark set 49ers 3.1
122    eval .t mark unset [.t mark names]
123    lsort [.t mark names]
124} {current insert}
125
126test textMark-5.1 {TkTextMarkCmd - miscellaneous} haveCourier12 {
127    list [catch {.t mark} msg] $msg
128} {1 {wrong # args: should be ".t mark option ?arg arg ...?"}}
129test textMark-5.2 {TkTextMarkCmd - miscellaneous} haveCourier12 {
130    list [catch {.t mark foo} msg] $msg
131} {1 {bad mark option "foo": must be gravity, names, next, previous, set, or unset}}
132
133test textMark-6.1 {TkTextMarkSegToIndex} haveCourier12 {
134    .t mark set a 1.2
135    .t mark set b 1.2
136    .t mark set c 1.2
137    .t mark set d 1.4
138    list [.t index a] [.t index b] [.t index c ] [.t index d]
139} {1.2 1.2 1.2 1.4}
140
141catch {eval {.t mark unset} [.t mark names]}
142test textMark-7.1 {MarkFindNext - invalid mark name} haveCourier12 {
143    catch {.t mark next bogus} x
144    set x
145} {bad text index "bogus"}
146test textMark-7.2 {MarkFindNext - marks at same location} haveCourier12 {
147    .t mark set insert 2.0
148    .t mark set current 2.0
149    .t mark next current
150} {insert}
151test textMark-7.3 {MarkFindNext - numerical starting mark} haveCourier12 {
152    .t mark set current 1.0
153    .t mark set insert 1.0
154    .t mark next 1.0
155} {insert}
156test textMark-7.4 {MarkFindNext - mark on the same line} haveCourier12 {
157    .t mark set current 1.0
158    .t mark set insert 1.1
159    .t mark next current
160} {insert}
161test textMark-7.5 {MarkFindNext - mark on the next line} haveCourier12 {
162    .t mark set current 1.end
163    .t mark set insert 2.0
164    .t mark next current
165} {insert}
166test textMark-7.6 {MarkFindNext - mark far away} haveCourier12 {
167    .t mark set current 1.2
168    .t mark set insert 7.0
169    .t mark next current
170} {insert}
171test textMark-7.7 {MarkFindNext - mark on top of end} haveCourier12 {
172    .t mark set current end
173    .t mark next end
174} {current}
175test textMark-7.8 {MarkFindNext - no next mark} haveCourier12 {
176    .t mark set current 1.0
177    .t mark set insert 3.0
178    .t mark next insert
179} {}
180test textMark-8.1 {MarkFindPrev - invalid mark name} haveCourier12 {
181    catch {.t mark prev bogus} x
182    set x
183} {bad text index "bogus"}
184test textMark-8.2 {MarkFindPrev - marks at same location} haveCourier12 {
185    .t mark set insert 2.0
186    .t mark set current 2.0
187    .t mark prev insert
188} {current}
189test textMark-8.3 {MarkFindPrev - numerical starting mark} haveCourier12 {
190    .t mark set current 1.0
191    .t mark set insert 1.0
192    .t mark prev 1.1
193} {current}
194test textMark-8.4 {MarkFindPrev - mark on the same line} haveCourier12 {
195    .t mark set current 1.0
196    .t mark set insert 1.1
197    .t mark prev insert
198} {current}
199test textMark-8.5 {MarkFindPrev - mark on the previous line} haveCourier12 {
200    .t mark set current 1.end
201    .t mark set insert 2.0
202    .t mark prev insert
203} {current}
204test textMark-8.6 {MarkFindPrev - mark far away} haveCourier12 {
205    .t mark set current 1.2
206    .t mark set insert 7.0
207    .t mark prev insert
208} {current}
209test textMark-8.7 {MarkFindPrev - mark on top of end} haveCourier12 {
210    .t mark set insert 3.0
211    .t mark set current end
212    .t mark prev end
213} {insert}
214test textMark-8.8 {MarkFindPrev - no previous mark} haveCourier12 {
215    .t mark set current 1.0
216    .t mark set insert 3.0
217    .t mark prev current
218} {}
219
220catch {destroy .t}
221
222# cleanup
223cleanupTests
224return
225