]> git.saurik.com Git - wxWidgets.git/blob - tests/controls/textentrytest.cpp
Insert another item in the list control in its unit test.
[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 wxTestableFrame* frame = wxStaticCast(wxTheApp->GetTopWindow(),
45 wxTestableFrame);
46
47 EventCounter count(GetTestWindow(), wxEVT_COMMAND_TEXT_UPDATED);
48
49 wxTextEntry * const entry = GetTestEntry();
50
51 // notice that SetValue() generates an event even if the text didn't change
52 entry->SetValue("");
53 CPPUNIT_ASSERT_EQUAL( 1, frame->GetEventCount() );
54
55 entry->SetValue("foo");
56 CPPUNIT_ASSERT_EQUAL( 1, frame->GetEventCount() );
57
58 entry->SetValue("foo");
59 CPPUNIT_ASSERT_EQUAL( 1, frame->GetEventCount() );
60
61 entry->ChangeValue("bar");
62 CPPUNIT_ASSERT_EQUAL( 0, frame->GetEventCount() );
63
64 entry->AppendText("bar");
65 CPPUNIT_ASSERT_EQUAL( 1, frame->GetEventCount() );
66
67 entry->Replace(3, 6, "baz");
68 CPPUNIT_ASSERT_EQUAL( 1, frame->GetEventCount() );
69
70 entry->Remove(0, 3);
71 CPPUNIT_ASSERT_EQUAL( 1, frame->GetEventCount() );
72
73 entry->WriteText("foo");
74 CPPUNIT_ASSERT_EQUAL( 1, frame->GetEventCount() );
75
76 entry->Clear();
77 CPPUNIT_ASSERT_EQUAL( 1, frame->GetEventCount() );
78 }
79
80 void TextEntryTestCase::CheckStringSelection(const char *sel)
81 {
82 CPPUNIT_ASSERT_EQUAL( sel, GetTestEntry()->GetStringSelection() );
83 }
84
85 void TextEntryTestCase::AssertSelection(int from, int to, const char *sel)
86 {
87 wxTextEntry * const entry = GetTestEntry();
88
89 CPPUNIT_ASSERT( entry->HasSelection() );
90
91 long fromReal,
92 toReal;
93 entry->GetSelection(&fromReal, &toReal);
94 CPPUNIT_ASSERT_EQUAL( from, fromReal );
95 CPPUNIT_ASSERT_EQUAL( to, toReal );
96
97 CPPUNIT_ASSERT_EQUAL( from, entry->GetInsertionPoint() );
98
99 CheckStringSelection(sel);
100 }
101
102 void TextEntryTestCase::Selection()
103 {
104 wxTextEntry * const entry = GetTestEntry();
105
106 entry->SetValue("0123456789");
107
108 entry->SetSelection(2, 4);
109 AssertSelection(2, 4, "23"); // not "234"!
110
111 entry->SetSelection(3, -1);
112 AssertSelection(3, 10, "3456789");
113
114 entry->SelectAll();
115 AssertSelection(0, 10, "0123456789");
116
117 entry->SetSelection(0, 0);
118 CPPUNIT_ASSERT( !entry->HasSelection() );
119 }
120
121 void TextEntryTestCase::InsertionPoint()
122 {
123 wxTextEntry * const entry = GetTestEntry();
124
125 CPPUNIT_ASSERT_EQUAL( 0, entry->GetLastPosition() );
126 CPPUNIT_ASSERT_EQUAL( 0, entry->GetInsertionPoint() );
127
128 entry->SetValue("0"); // should put the insertion point in front
129 CPPUNIT_ASSERT_EQUAL( 1, entry->GetLastPosition() );
130 CPPUNIT_ASSERT_EQUAL( 0, entry->GetInsertionPoint() );
131
132 entry->AppendText("12"); // should update the insertion point position
133 CPPUNIT_ASSERT_EQUAL( 3, entry->GetLastPosition() );
134 CPPUNIT_ASSERT_EQUAL( 3, entry->GetInsertionPoint() );
135
136 entry->SetInsertionPoint(1);
137 CPPUNIT_ASSERT_EQUAL( 3, entry->GetLastPosition() );
138 CPPUNIT_ASSERT_EQUAL( 1, entry->GetInsertionPoint() );
139
140 entry->SetInsertionPointEnd();
141 CPPUNIT_ASSERT_EQUAL( 3, entry->GetInsertionPoint() );
142
143 entry->SetInsertionPoint(0);
144 entry->WriteText("-"); // should move it after the written text
145 CPPUNIT_ASSERT_EQUAL( 4, entry->GetLastPosition() );
146 CPPUNIT_ASSERT_EQUAL( 1, entry->GetInsertionPoint() );
147 }
148
149 void TextEntryTestCase::Replace()
150 {
151 wxTextEntry * const entry = GetTestEntry();
152
153 entry->SetValue("Hello replace!"
154 "0123456789012");
155 entry->SetInsertionPoint(0);
156
157 entry->Replace(6, 13, "changed");
158
159 CPPUNIT_ASSERT_EQUAL("Hello changed!"
160 "0123456789012",
161 entry->GetValue());
162 CPPUNIT_ASSERT_EQUAL(13, entry->GetInsertionPoint());
163
164 entry->Replace(13, -1, "");
165 CPPUNIT_ASSERT_EQUAL("Hello changed", entry->GetValue());
166 CPPUNIT_ASSERT_EQUAL(13, entry->GetInsertionPoint());
167
168 entry->Replace(0, 6, "Un");
169 CPPUNIT_ASSERT_EQUAL("Unchanged", entry->GetValue());
170 CPPUNIT_ASSERT_EQUAL(2, entry->GetInsertionPoint());
171 }
172
173 void TextEntryTestCase::Editable()
174 {
175 #if wxUSE_UIACTIONSIMULATOR
176 wxTestableFrame* frame = wxStaticCast(wxTheApp->GetTopWindow(),
177 wxTestableFrame);
178
179 wxTextEntry * const entry = GetTestEntry();
180 wxWindow * const window = GetTestWindow();
181
182 EventCounter count(window, wxEVT_COMMAND_TEXT_UPDATED);
183
184 window->SetFocus();
185 wxYield();
186
187 wxUIActionSimulator sim;
188 sim.Text("abcdef");
189 wxYield();
190
191 CPPUNIT_ASSERT_EQUAL("abcdef", entry->GetValue());
192 CPPUNIT_ASSERT_EQUAL(6, frame->GetEventCount());
193
194 entry->SetEditable(false);
195 sim.Text("gh");
196 wxYield();
197
198 CPPUNIT_ASSERT_EQUAL("abcdef", entry->GetValue());
199 CPPUNIT_ASSERT_EQUAL(0, frame->GetEventCount());
200 #endif
201 }
202
203 void TextEntryTestCase::Hint()
204 {
205 GetTestEntry()->SetHint("This is a hint");
206 CPPUNIT_ASSERT_EQUAL("", GetTestEntry()->GetValue());
207 }
208
209 void TextEntryTestCase::CopyPaste()
210 {
211 #ifndef __WXOSX__
212 wxTextEntry * const entry = GetTestEntry();
213
214 entry->AppendText("sometext");
215 entry->SelectAll();
216
217 if(entry->CanCopy() && entry->CanPaste())
218 {
219 entry->Copy();
220 entry->Clear();
221 CPPUNIT_ASSERT(entry->IsEmpty());
222
223 wxYield();
224
225 entry->Paste();
226 CPPUNIT_ASSERT_EQUAL("sometext", entry->GetValue());
227 }
228 #endif
229 }
230
231 void TextEntryTestCase::UndoRedo()
232 {
233 wxTextEntry * const entry = GetTestEntry();
234
235 entry->AppendText("sometext");
236
237 if(entry->CanUndo())
238 {
239 entry->Undo();
240 CPPUNIT_ASSERT(entry->IsEmpty());
241
242 if(entry->CanRedo())
243 {
244 entry->Redo();
245 CPPUNIT_ASSERT_EQUAL("sometext", entry->GetValue());
246 }
247 }
248 }