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