]> git.saurik.com Git - wxWidgets.git/blame - tests/controls/textentrytest.cpp
paint events cannot be constructed outside a native redraw in OSX
[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
13 #include "wx/event.h"
14 #include "wx/textentry.h"
15 #include "wx/window.h"
16#endif // WX_PRECOMP
17
18#include "textentrytest.h"
19
20void TextEntryTestCase::SetValue()
21{
22 wxTextEntry * const entry = GetTestEntry();
23
24 CPPUNIT_ASSERT( entry->IsEmpty() );
25
26 entry->SetValue("foo");
27 CPPUNIT_ASSERT_EQUAL( "foo", entry->GetValue() );
28
29 entry->SetValue("");
30 CPPUNIT_ASSERT( entry->IsEmpty() );
31
32 entry->SetValue("hi");
33 CPPUNIT_ASSERT_EQUAL( "hi", entry->GetValue() );
34
35 entry->SetValue("bye");
36 CPPUNIT_ASSERT_EQUAL( "bye", entry->GetValue() );
37}
38
3c778901 39namespace
f0f6a32d
VZ
40{
41 class TextTestEventHandler : public wxEvtHandler
42 {
43 public:
44 TextTestEventHandler() { m_events = 0; }
45
46 // calling this automatically resets the events counter
47 int GetEvents()
48 {
49 const int events = m_events;
50 m_events = 0;
51 return events;
52 }
53
54 void OnText(wxCommandEvent& WXUNUSED(event)) { m_events++; }
55
56 private:
57 int m_events;
3c778901
VZ
58 };
59}
60
61void TextEntryTestCase::TextChangeEvents()
62{
63 TextTestEventHandler handler;
f0f6a32d
VZ
64
65 GetTestWindow()->Connect
66 (
67 wxEVT_COMMAND_TEXT_UPDATED,
68 wxCommandEventHandler(TextTestEventHandler::OnText),
69 NULL,
70 &handler
71 );
72
73 wxTextEntry * const entry = GetTestEntry();
74
75 // notice that SetValue() generates an event even if the text didn't change
76 entry->SetValue("");
77 CPPUNIT_ASSERT_EQUAL( 1, handler.GetEvents() );
78
79 entry->SetValue("foo");
80 CPPUNIT_ASSERT_EQUAL( 1, handler.GetEvents() );
81
82 entry->SetValue("foo");
83 CPPUNIT_ASSERT_EQUAL( 1, handler.GetEvents() );
84
85 entry->ChangeValue("bar");
86 CPPUNIT_ASSERT_EQUAL( 0, handler.GetEvents() );
87
88 entry->AppendText("bar");
89 CPPUNIT_ASSERT_EQUAL( 1, handler.GetEvents() );
90
91 entry->Replace(3, 6, "baz");
92 CPPUNIT_ASSERT_EQUAL( 1, handler.GetEvents() );
93
94 entry->Remove(0, 3);
95 CPPUNIT_ASSERT_EQUAL( 1, handler.GetEvents() );
96
97 entry->WriteText("foo");
98 CPPUNIT_ASSERT_EQUAL( 1, handler.GetEvents() );
99
100 entry->Clear();
101 CPPUNIT_ASSERT_EQUAL( 1, handler.GetEvents() );
102}
103
dc7f9c9c
VZ
104void TextEntryTestCase::CheckStringSelection(const char *sel)
105{
106 CPPUNIT_ASSERT_EQUAL( sel, GetTestEntry()->GetStringSelection() );
107}
108
f0f6a32d
VZ
109void TextEntryTestCase::AssertSelection(int from, int to, const char *sel)
110{
111 wxTextEntry * const entry = GetTestEntry();
112
113 CPPUNIT_ASSERT( entry->HasSelection() );
114
115 long fromReal,
116 toReal;
117 entry->GetSelection(&fromReal, &toReal);
118 CPPUNIT_ASSERT_EQUAL( from, fromReal );
119 CPPUNIT_ASSERT_EQUAL( to, toReal );
f0f6a32d
VZ
120
121 CPPUNIT_ASSERT_EQUAL( from, entry->GetInsertionPoint() );
dc7f9c9c
VZ
122
123 CheckStringSelection(sel);
f0f6a32d
VZ
124}
125
126void TextEntryTestCase::Selection()
127{
128 wxTextEntry * const entry = GetTestEntry();
129
130 entry->SetValue("0123456789");
131
132 entry->SetSelection(2, 4);
133 AssertSelection(2, 4, "23"); // not "234"!
134
135 entry->SetSelection(3, -1);
136 AssertSelection(3, 10, "3456789");
137
138 entry->SelectAll();
139 AssertSelection(0, 10, "0123456789");
140
141 entry->SetSelection(0, 0);
142 CPPUNIT_ASSERT( !entry->HasSelection() );
143}
144
145void TextEntryTestCase::InsertionPoint()
146{
147 wxTextEntry * const entry = GetTestEntry();
148
149 CPPUNIT_ASSERT_EQUAL( 0, entry->GetLastPosition() );
150 CPPUNIT_ASSERT_EQUAL( 0, entry->GetInsertionPoint() );
151
152 entry->SetValue("0"); // should put the insertion point in front
153 CPPUNIT_ASSERT_EQUAL( 1, entry->GetLastPosition() );
154 CPPUNIT_ASSERT_EQUAL( 0, entry->GetInsertionPoint() );
155
156 entry->AppendText("12"); // should update the insertion point position
157 CPPUNIT_ASSERT_EQUAL( 3, entry->GetLastPosition() );
158 CPPUNIT_ASSERT_EQUAL( 3, entry->GetInsertionPoint() );
159
160 entry->SetInsertionPoint(1);
161 CPPUNIT_ASSERT_EQUAL( 3, entry->GetLastPosition() );
162 CPPUNIT_ASSERT_EQUAL( 1, entry->GetInsertionPoint() );
163
164 entry->SetInsertionPointEnd();
165 CPPUNIT_ASSERT_EQUAL( 3, entry->GetInsertionPoint() );
166
167 entry->SetInsertionPoint(0);
168 entry->WriteText("-"); // should move it after the written text
169 CPPUNIT_ASSERT_EQUAL( 4, entry->GetLastPosition() );
170 CPPUNIT_ASSERT_EQUAL( 1, entry->GetInsertionPoint() );
171}
172
059979d8
VZ
173void TextEntryTestCase::Replace()
174{
175 wxTextEntry * const entry = GetTestEntry();
176
d911dc04 177 entry->SetValue("Hello replace!"
059979d8
VZ
178 "0123456789012");
179 entry->SetInsertionPoint(0);
180
181 entry->Replace(6, 13, "changed");
182
d911dc04 183 CPPUNIT_ASSERT_EQUAL("Hello changed!"
059979d8
VZ
184 "0123456789012",
185 entry->GetValue());
186 CPPUNIT_ASSERT_EQUAL(13, entry->GetInsertionPoint());
187
188 entry->Replace(13, -1, "");
189 CPPUNIT_ASSERT_EQUAL("Hello changed", entry->GetValue());
190 CPPUNIT_ASSERT_EQUAL(13, entry->GetInsertionPoint());
191
192 entry->Replace(0, 6, "Un");
193 CPPUNIT_ASSERT_EQUAL("Unchanged", entry->GetValue());
194 CPPUNIT_ASSERT_EQUAL(2, entry->GetInsertionPoint());
195}
196