]> git.saurik.com Git - wxWidgets.git/blame - tests/controls/textctrltest.cpp
set buffer length after reading the file contents into it successfully (part of ...
[wxWidgets.git] / tests / controls / textctrltest.cpp
CommitLineData
c0d9b217
VZ
1///////////////////////////////////////////////////////////////////////////////
2// Name: tests/textctrl/textctrltest.cpp
3// Purpose: wxTextCtrl unit test
4// Author: Vadim Zeitlin
5// Created: 2007-09-25
6// RCS-ID: $Id$
7// Copyright: (c) 2007 Vadim Zeitlin <vadim@wxwidgets.org>
8///////////////////////////////////////////////////////////////////////////////
9
10// ----------------------------------------------------------------------------
11// headers
12// ----------------------------------------------------------------------------
13
14#include "testprec.h"
15
16#ifdef __BORLANDC__
17 #pragma hdrstop
18#endif
19
20#ifndef WX_PRECOMP
21 #include "wx/app.h"
22 #include "wx/textctrl.h"
23#endif // WX_PRECOMP
24
25// ----------------------------------------------------------------------------
26// test class
27// ----------------------------------------------------------------------------
28
29class TextCtrlTestCase : public CppUnit::TestCase
30{
31public:
32 TextCtrlTestCase() { }
33
34 virtual void setUp();
35 virtual void tearDown();
36
37private:
38 CPPUNIT_TEST_SUITE( TextCtrlTestCase );
39 CPPUNIT_TEST( SetValue );
40 CPPUNIT_TEST( TextChangeEvents );
b2b0bee6 41 CPPUNIT_TEST( Selection );
5166d04e 42 CPPUNIT_TEST( InsertionPoint );
c0d9b217
VZ
43 CPPUNIT_TEST_SUITE_END();
44
45 void SetValue();
46 void TextChangeEvents();
b2b0bee6 47 void Selection();
5166d04e 48 void InsertionPoint();
b2b0bee6
VZ
49
50 // Selection() test helper: verify that selection is as described by the
51 // function parameters
52 void AssertSelection(int from, int to, const char *sel);
c0d9b217
VZ
53
54 wxTextCtrl *m_text;
55 wxFrame *m_frame;
56
57 DECLARE_NO_COPY_CLASS(TextCtrlTestCase)
58};
59
60// register in the unnamed registry so that these tests are run by default
61CPPUNIT_TEST_SUITE_REGISTRATION( TextCtrlTestCase );
62
63// also include in it's own registry so that these tests can be run alone
64CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( TextCtrlTestCase, "TextCtrlTestCase" );
65
66// ----------------------------------------------------------------------------
67// test initialization
68// ----------------------------------------------------------------------------
69
70void TextCtrlTestCase::setUp()
71{
72 m_text = new wxTextCtrl(wxTheApp->GetTopWindow(), wxID_ANY);
73}
74
75void TextCtrlTestCase::tearDown()
76{
77 delete m_text;
78 m_text = NULL;
79}
80
81// ----------------------------------------------------------------------------
82// tests themselves
83// ----------------------------------------------------------------------------
84
85void TextCtrlTestCase::SetValue()
86{
87 CPPUNIT_ASSERT( m_text->IsEmpty() );
88
89 m_text->SetValue("foo");
1de532f5 90 CPPUNIT_ASSERT_EQUAL( "foo", m_text->GetValue() );
c0d9b217
VZ
91
92 m_text->SetValue("");
93 CPPUNIT_ASSERT( m_text->IsEmpty() );
94
95 m_text->SetValue("hi");
1de532f5 96 CPPUNIT_ASSERT_EQUAL( "hi", m_text->GetValue() );
c0d9b217
VZ
97
98 m_text->SetValue("bye");
1de532f5 99 CPPUNIT_ASSERT_EQUAL( "bye", m_text->GetValue() );
c0d9b217
VZ
100}
101
102void TextCtrlTestCase::TextChangeEvents()
103{
104 class TextTestEventHandler : public wxEvtHandler
105 {
106 public:
107 TextTestEventHandler() { m_events = 0; }
108
109 // calling this automatically resets the events counter
110 int GetEvents()
111 {
112 const int events = m_events;
113 m_events = 0;
114 return events;
115 }
116
117 void OnText(wxCommandEvent& WXUNUSED(event)) { m_events++; }
118
119 private:
120 int m_events;
121 } handler;
122
123 m_text->Connect(wxEVT_COMMAND_TEXT_UPDATED,
124 wxCommandEventHandler(TextTestEventHandler::OnText),
125 NULL,
126 &handler);
127
128 // notice that SetValue() generates an event even if the text didn't change
129 m_text->SetValue("");
130 CPPUNIT_ASSERT_EQUAL( 1, handler.GetEvents() );
131
132 m_text->SetValue("foo");
133 CPPUNIT_ASSERT_EQUAL( 1, handler.GetEvents() );
134
135 m_text->SetValue("foo");
136 CPPUNIT_ASSERT_EQUAL( 1, handler.GetEvents() );
137
138 m_text->ChangeValue("bar");
139 CPPUNIT_ASSERT_EQUAL( 0, handler.GetEvents() );
140
141 m_text->AppendText("bar");
142 CPPUNIT_ASSERT_EQUAL( 1, handler.GetEvents() );
143
144 m_text->Replace(3, 6, "baz");
145 CPPUNIT_ASSERT_EQUAL( 1, handler.GetEvents() );
146
147 m_text->Remove(0, 3);
148 CPPUNIT_ASSERT_EQUAL( 1, handler.GetEvents() );
149
150 m_text->WriteText("foo");
151 CPPUNIT_ASSERT_EQUAL( 1, handler.GetEvents() );
152
153 m_text->Clear();
154 CPPUNIT_ASSERT_EQUAL( 1, handler.GetEvents() );
155}
156
b2b0bee6
VZ
157void TextCtrlTestCase::AssertSelection(int from, int to, const char *sel)
158{
159 CPPUNIT_ASSERT( m_text->HasSelection() );
160
161 long fromReal,
162 toReal;
163 m_text->GetSelection(&fromReal, &toReal);
164 CPPUNIT_ASSERT_EQUAL( from, fromReal );
165 CPPUNIT_ASSERT_EQUAL( to, toReal );
166 CPPUNIT_ASSERT_EQUAL( sel, m_text->GetStringSelection() );
167
168 CPPUNIT_ASSERT_EQUAL( from, m_text->GetInsertionPoint() );
169}
170
171void TextCtrlTestCase::Selection()
172{
173 m_text->SetValue("0123456789");
174
175 m_text->SetSelection(2, 4);
176 AssertSelection(2, 4, "23"); // not "234"!
177
178 m_text->SetSelection(3, -1);
179 AssertSelection(3, 10, "3456789");
180
181 m_text->SelectAll();
182 AssertSelection(0, 10, "0123456789");
183
184 m_text->SetSelection(0, 0);
185 CPPUNIT_ASSERT( !m_text->HasSelection() );
186}
5166d04e
VZ
187
188void TextCtrlTestCase::InsertionPoint()
189{
190 CPPUNIT_ASSERT_EQUAL( 0, m_text->GetLastPosition() );
191 CPPUNIT_ASSERT_EQUAL( 0, m_text->GetInsertionPoint() );
192
193 m_text->SetValue("0"); // should put the insertion point in front
194 CPPUNIT_ASSERT_EQUAL( 1, m_text->GetLastPosition() );
195 CPPUNIT_ASSERT_EQUAL( 0, m_text->GetInsertionPoint() );
196
197 m_text->AppendText("12"); // should update the insertion point position
198 CPPUNIT_ASSERT_EQUAL( 3, m_text->GetLastPosition() );
199 CPPUNIT_ASSERT_EQUAL( 3, m_text->GetInsertionPoint() );
200
201 m_text->SetInsertionPoint(1);
202 CPPUNIT_ASSERT_EQUAL( 3, m_text->GetLastPosition() );
203 CPPUNIT_ASSERT_EQUAL( 1, m_text->GetInsertionPoint() );
204
205 m_text->SetInsertionPointEnd();
206 CPPUNIT_ASSERT_EQUAL( 3, m_text->GetInsertionPoint() );
207
208 m_text->SetInsertionPoint(0);
209 m_text->WriteText("-"); // should move it after the written text
210 CPPUNIT_ASSERT_EQUAL( 4, m_text->GetLastPosition() );
211 CPPUNIT_ASSERT_EQUAL( 1, m_text->GetInsertionPoint() );
212}
213