]> git.saurik.com Git - wxWidgets.git/blob - tests/controls/textentrytest.cpp
Disable Unity global menu while native modal dialogs are shown in wxGTK.
[wxWidgets.git] / tests / controls / textentrytest.cpp
1 ///////////////////////////////////////////////////////////////////////////////
2 // Name: tests/controls/textentrytest.cpp
3 // Purpose: TestEntryTestCase implementation
4 // Author: Vadim Zeitlin
5 // Created: 2008-09-19 (extracted from textctrltest.cpp)
6 // RCS-ID: $Id$
7 // Copyright: (c) 2007, 2008 Vadim Zeitlin <vadim@wxwidgets.org>
8 ///////////////////////////////////////////////////////////////////////////////
9
10 #include "testprec.h"
11
12 #ifndef WX_PRECOMP
13 #include "wx/app.h"
14 #include "wx/event.h"
15 #include "wx/textentry.h"
16 #include "wx/window.h"
17 #endif // WX_PRECOMP
18
19 #include "textentrytest.h"
20 #include "testableframe.h"
21 #include "wx/uiaction.h"
22
23 void TextEntryTestCase::SetValue()
24 {
25 wxTextEntry * const entry = GetTestEntry();
26
27 CPPUNIT_ASSERT( entry->IsEmpty() );
28
29 entry->SetValue("foo");
30 CPPUNIT_ASSERT_EQUAL( "foo", entry->GetValue() );
31
32 entry->SetValue("");
33 CPPUNIT_ASSERT( entry->IsEmpty() );
34
35 entry->SetValue("hi");
36 CPPUNIT_ASSERT_EQUAL( "hi", entry->GetValue() );
37
38 entry->SetValue("bye");
39 CPPUNIT_ASSERT_EQUAL( "bye", entry->GetValue() );
40 }
41
42 void TextEntryTestCase::TextChangeEvents()
43 {
44 EventCounter updated(GetTestWindow(), wxEVT_COMMAND_TEXT_UPDATED);
45
46 wxTextEntry * const entry = GetTestEntry();
47
48 // notice that SetValue() generates an event even if the text didn't change
49 entry->SetValue("");
50 CPPUNIT_ASSERT_EQUAL( 1, updated.GetCount() );
51 updated.Clear();
52
53 entry->SetValue("foo");
54 CPPUNIT_ASSERT_EQUAL( 1, updated.GetCount() );
55 updated.Clear();
56
57 entry->SetValue("foo");
58 CPPUNIT_ASSERT_EQUAL( 1, updated.GetCount() );
59 updated.Clear();
60
61 entry->ChangeValue("bar");
62 CPPUNIT_ASSERT_EQUAL( 0, updated.GetCount() );
63
64 entry->AppendText("bar");
65 CPPUNIT_ASSERT_EQUAL( 1, updated.GetCount() );
66 updated.Clear();
67
68 entry->Replace(3, 6, "baz");
69 CPPUNIT_ASSERT_EQUAL( 1, updated.GetCount() );
70 updated.Clear();
71
72 entry->Remove(0, 3);
73 CPPUNIT_ASSERT_EQUAL( 1, updated.GetCount() );
74 updated.Clear();
75
76 entry->WriteText("foo");
77 CPPUNIT_ASSERT_EQUAL( 1, updated.GetCount() );
78 updated.Clear();
79
80 entry->Clear();
81 CPPUNIT_ASSERT_EQUAL( 1, updated.GetCount() );
82 updated.Clear();
83 }
84
85 void TextEntryTestCase::CheckStringSelection(const char *sel)
86 {
87 CPPUNIT_ASSERT_EQUAL( sel, GetTestEntry()->GetStringSelection() );
88 }
89
90 void TextEntryTestCase::AssertSelection(int from, int to, const char *sel)
91 {
92 wxTextEntry * const entry = GetTestEntry();
93
94 CPPUNIT_ASSERT( entry->HasSelection() );
95
96 long fromReal,
97 toReal;
98 entry->GetSelection(&fromReal, &toReal);
99 CPPUNIT_ASSERT_EQUAL( from, fromReal );
100 CPPUNIT_ASSERT_EQUAL( to, toReal );
101
102 CPPUNIT_ASSERT_EQUAL( from, entry->GetInsertionPoint() );
103
104 CheckStringSelection(sel);
105 }
106
107 void TextEntryTestCase::Selection()
108 {
109 wxTextEntry * const entry = GetTestEntry();
110
111 entry->SetValue("0123456789");
112
113 entry->SetSelection(2, 4);
114 AssertSelection(2, 4, "23"); // not "234"!
115
116 entry->SetSelection(3, -1);
117 AssertSelection(3, 10, "3456789");
118
119 entry->SelectAll();
120 AssertSelection(0, 10, "0123456789");
121
122 entry->SetSelection(0, 0);
123 CPPUNIT_ASSERT( !entry->HasSelection() );
124 }
125
126 void TextEntryTestCase::InsertionPoint()
127 {
128 wxTextEntry * const entry = GetTestEntry();
129
130 CPPUNIT_ASSERT_EQUAL( 0, entry->GetLastPosition() );
131 CPPUNIT_ASSERT_EQUAL( 0, entry->GetInsertionPoint() );
132
133 entry->SetValue("0"); // should put the insertion point in front
134 CPPUNIT_ASSERT_EQUAL( 1, entry->GetLastPosition() );
135 CPPUNIT_ASSERT_EQUAL( 0, entry->GetInsertionPoint() );
136
137 entry->AppendText("12"); // should update the insertion point position
138 CPPUNIT_ASSERT_EQUAL( 3, entry->GetLastPosition() );
139 CPPUNIT_ASSERT_EQUAL( 3, entry->GetInsertionPoint() );
140
141 entry->SetInsertionPoint(1);
142 CPPUNIT_ASSERT_EQUAL( 3, entry->GetLastPosition() );
143 CPPUNIT_ASSERT_EQUAL( 1, entry->GetInsertionPoint() );
144
145 entry->SetInsertionPointEnd();
146 CPPUNIT_ASSERT_EQUAL( 3, entry->GetInsertionPoint() );
147
148 entry->SetInsertionPoint(0);
149 entry->WriteText("-"); // should move it after the written text
150 CPPUNIT_ASSERT_EQUAL( 4, entry->GetLastPosition() );
151 CPPUNIT_ASSERT_EQUAL( 1, entry->GetInsertionPoint() );
152
153 entry->SetValue("something different"); // should still reset the caret
154 CPPUNIT_ASSERT_EQUAL( 0, entry->GetInsertionPoint() );
155 }
156
157 void TextEntryTestCase::Replace()
158 {
159 wxTextEntry * const entry = GetTestEntry();
160
161 entry->SetValue("Hello replace!"
162 "0123456789012");
163 entry->SetInsertionPoint(0);
164
165 entry->Replace(6, 13, "changed");
166
167 CPPUNIT_ASSERT_EQUAL("Hello changed!"
168 "0123456789012",
169 entry->GetValue());
170 CPPUNIT_ASSERT_EQUAL(13, entry->GetInsertionPoint());
171
172 entry->Replace(13, -1, "");
173 CPPUNIT_ASSERT_EQUAL("Hello changed", entry->GetValue());
174 CPPUNIT_ASSERT_EQUAL(13, entry->GetInsertionPoint());
175
176 entry->Replace(0, 6, "Un");
177 CPPUNIT_ASSERT_EQUAL("Unchanged", entry->GetValue());
178 CPPUNIT_ASSERT_EQUAL(2, entry->GetInsertionPoint());
179 }
180
181 void TextEntryTestCase::Editable()
182 {
183 #if wxUSE_UIACTIONSIMULATOR
184 wxTextEntry * const entry = GetTestEntry();
185 wxWindow * const window = GetTestWindow();
186
187 EventCounter updated(window, wxEVT_COMMAND_TEXT_UPDATED);
188
189 window->SetFocus();
190 wxYield();
191
192 wxUIActionSimulator sim;
193 sim.Text("abcdef");
194 wxYield();
195
196 CPPUNIT_ASSERT_EQUAL("abcdef", entry->GetValue());
197 CPPUNIT_ASSERT_EQUAL(6, updated.GetCount());
198
199 updated.Clear();
200
201 entry->SetEditable(false);
202 sim.Text("gh");
203 wxYield();
204
205 CPPUNIT_ASSERT_EQUAL("abcdef", entry->GetValue());
206 CPPUNIT_ASSERT_EQUAL(0, updated.GetCount());
207 #endif
208 }
209
210 void TextEntryTestCase::Hint()
211 {
212 GetTestEntry()->SetHint("This is a hint");
213 CPPUNIT_ASSERT_EQUAL("", GetTestEntry()->GetValue());
214 }
215
216 void TextEntryTestCase::CopyPaste()
217 {
218 #ifndef __WXOSX__
219 wxTextEntry * const entry = GetTestEntry();
220
221 entry->AppendText("sometext");
222 entry->SelectAll();
223
224 if(entry->CanCopy() && entry->CanPaste())
225 {
226 entry->Copy();
227 entry->Clear();
228 CPPUNIT_ASSERT(entry->IsEmpty());
229
230 wxYield();
231
232 entry->Paste();
233 CPPUNIT_ASSERT_EQUAL("sometext", entry->GetValue());
234 }
235 #endif
236 }
237
238 void TextEntryTestCase::UndoRedo()
239 {
240 wxTextEntry * const entry = GetTestEntry();
241
242 entry->AppendText("sometext");
243
244 if(entry->CanUndo())
245 {
246 entry->Undo();
247 CPPUNIT_ASSERT(entry->IsEmpty());
248
249 if(entry->CanRedo())
250 {
251 entry->Redo();
252 CPPUNIT_ASSERT_EQUAL("sometext", entry->GetValue());
253 }
254 }
255 }