]> git.saurik.com Git - wxWidgets.git/blame - tests/controls/textentrytest.cpp
Revert "Split documentation of non-GUI wxEvent-related classes."
[wxWidgets.git] / tests / controls / textentrytest.cpp
CommitLineData
f0f6a32d
VZ
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
232fdc63 13 #include "wx/app.h"
f0f6a32d
VZ
14 #include "wx/event.h"
15 #include "wx/textentry.h"
16 #include "wx/window.h"
17#endif // WX_PRECOMP
18
19#include "textentrytest.h"
232fdc63
VZ
20#include "testableframe.h"
21#include "wx/uiaction.h"
f0f6a32d
VZ
22
23void 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
3c778901
VZ
42void TextEntryTestCase::TextChangeEvents()
43{
744d91d4 44 EventCounter updated(GetTestWindow(), wxEVT_COMMAND_TEXT_UPDATED);
f0f6a32d
VZ
45
46 wxTextEntry * const entry = GetTestEntry();
47
48 // notice that SetValue() generates an event even if the text didn't change
49 entry->SetValue("");
744d91d4
SL
50 CPPUNIT_ASSERT_EQUAL( 1, updated.GetCount() );
51 updated.Clear();
f0f6a32d
VZ
52
53 entry->SetValue("foo");
744d91d4
SL
54 CPPUNIT_ASSERT_EQUAL( 1, updated.GetCount() );
55 updated.Clear();
f0f6a32d
VZ
56
57 entry->SetValue("foo");
744d91d4
SL
58 CPPUNIT_ASSERT_EQUAL( 1, updated.GetCount() );
59 updated.Clear();
f0f6a32d
VZ
60
61 entry->ChangeValue("bar");
744d91d4 62 CPPUNIT_ASSERT_EQUAL( 0, updated.GetCount() );
f0f6a32d
VZ
63
64 entry->AppendText("bar");
744d91d4
SL
65 CPPUNIT_ASSERT_EQUAL( 1, updated.GetCount() );
66 updated.Clear();
f0f6a32d
VZ
67
68 entry->Replace(3, 6, "baz");
744d91d4
SL
69 CPPUNIT_ASSERT_EQUAL( 1, updated.GetCount() );
70 updated.Clear();
f0f6a32d
VZ
71
72 entry->Remove(0, 3);
744d91d4
SL
73 CPPUNIT_ASSERT_EQUAL( 1, updated.GetCount() );
74 updated.Clear();
f0f6a32d
VZ
75
76 entry->WriteText("foo");
744d91d4
SL
77 CPPUNIT_ASSERT_EQUAL( 1, updated.GetCount() );
78 updated.Clear();
f0f6a32d
VZ
79
80 entry->Clear();
744d91d4
SL
81 CPPUNIT_ASSERT_EQUAL( 1, updated.GetCount() );
82 updated.Clear();
f0f6a32d
VZ
83}
84
dc7f9c9c
VZ
85void TextEntryTestCase::CheckStringSelection(const char *sel)
86{
87 CPPUNIT_ASSERT_EQUAL( sel, GetTestEntry()->GetStringSelection() );
88}
89
f0f6a32d
VZ
90void 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 );
f0f6a32d
VZ
101
102 CPPUNIT_ASSERT_EQUAL( from, entry->GetInsertionPoint() );
dc7f9c9c
VZ
103
104 CheckStringSelection(sel);
f0f6a32d
VZ
105}
106
107void 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
126void 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() );
f40377be
VZ
152
153 entry->SetValue("something different"); // should still reset the caret
154 CPPUNIT_ASSERT_EQUAL( 0, entry->GetInsertionPoint() );
f0f6a32d
VZ
155}
156
059979d8
VZ
157void TextEntryTestCase::Replace()
158{
159 wxTextEntry * const entry = GetTestEntry();
160
d911dc04 161 entry->SetValue("Hello replace!"
059979d8
VZ
162 "0123456789012");
163 entry->SetInsertionPoint(0);
164
165 entry->Replace(6, 13, "changed");
166
d911dc04 167 CPPUNIT_ASSERT_EQUAL("Hello changed!"
059979d8
VZ
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
232fdc63
VZ
181void TextEntryTestCase::Editable()
182{
183#if wxUSE_UIACTIONSIMULATOR
232fdc63
VZ
184 wxTextEntry * const entry = GetTestEntry();
185 wxWindow * const window = GetTestWindow();
186
744d91d4 187 EventCounter updated(window, wxEVT_COMMAND_TEXT_UPDATED);
232fdc63
VZ
188
189 window->SetFocus();
190 wxYield();
191
192 wxUIActionSimulator sim;
193 sim.Text("abcdef");
194 wxYield();
195
196 CPPUNIT_ASSERT_EQUAL("abcdef", entry->GetValue());
744d91d4
SL
197 CPPUNIT_ASSERT_EQUAL(6, updated.GetCount());
198
199 updated.Clear();
232fdc63
VZ
200
201 entry->SetEditable(false);
202 sim.Text("gh");
203 wxYield();
204
205 CPPUNIT_ASSERT_EQUAL("abcdef", entry->GetValue());
744d91d4 206 CPPUNIT_ASSERT_EQUAL(0, updated.GetCount());
232fdc63
VZ
207#endif
208}
209
210void TextEntryTestCase::Hint()
211{
212 GetTestEntry()->SetHint("This is a hint");
213 CPPUNIT_ASSERT_EQUAL("", GetTestEntry()->GetValue());
214}
215
216void 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
238void 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}