]> git.saurik.com Git - wxWidgets.git/blame - tests/controls/treectrltest.cpp
Use shorter sleep times in wxStopWatch unit test.
[wxWidgets.git] / tests / controls / treectrltest.cpp
CommitLineData
fa97ee24
VZ
1///////////////////////////////////////////////////////////////////////////////
2// Name: tests/controls/treectrltest.cpp
3// Purpose: wxTreeCtrl unit test
4// Author: Vadim Zeitlin
5// Created: 2008-11-26
6// RCS-ID: $Id$
7// Copyright: (c) 2008 Vadim Zeitlin <vadim@wxwidgets.org>
232fdc63 8// (c) 2010 Steven Lamerton
fa97ee24
VZ
9///////////////////////////////////////////////////////////////////////////////
10
11// ----------------------------------------------------------------------------
12// headers
13// ----------------------------------------------------------------------------
14
15#include "testprec.h"
16
232fdc63
VZ
17#if wxUSE_TREECTRL
18
fa97ee24
VZ
19#ifdef __BORLANDC__
20 #pragma hdrstop
21#endif
22
23#ifndef WX_PRECOMP
24 #include "wx/app.h"
25#endif // WX_PRECOMP
26
232fdc63
VZ
27#include "wx/artprov.h"
28#include "wx/imaglist.h"
fa97ee24 29#include "wx/treectrl.h"
232fdc63
VZ
30#include "wx/uiaction.h"
31#include "testableframe.h"
fa97ee24
VZ
32
33// ----------------------------------------------------------------------------
34// test class
35// ----------------------------------------------------------------------------
36
37class TreeCtrlTestCase : public CppUnit::TestCase
38{
39public:
40 TreeCtrlTestCase() { }
41
42 virtual void setUp();
43 virtual void tearDown();
44
45private:
46 CPPUNIT_TEST_SUITE( TreeCtrlTestCase );
232fdc63
VZ
47 WXUISIM_TEST( ItemClick );
48 CPPUNIT_TEST( DeleteItem );
49 WXUISIM_TEST( LabelEdit );
50 WXUISIM_TEST( KeyDown );
51#ifndef __WXGTK__
52 WXUISIM_TEST( CollapseExpandEvents );
53 WXUISIM_TEST( SelectionChange );
54#endif // !__WXGTK__
55 WXUISIM_TEST( Menu );
56 CPPUNIT_TEST( ItemData );
57 CPPUNIT_TEST( Iteration );
58 CPPUNIT_TEST( Parent );
59 CPPUNIT_TEST( CollapseExpand );
60 CPPUNIT_TEST( AssignImageList );
61 CPPUNIT_TEST( Focus );
62 CPPUNIT_TEST( Bold );
63 CPPUNIT_TEST( Visible );
64 CPPUNIT_TEST( Sort );
65 WXUISIM_TEST( KeyNavigation );
fa97ee24 66 CPPUNIT_TEST( HasChildren );
756c98b0
VZ
67 CPPUNIT_TEST( SelectItemSingle );
68 CPPUNIT_TEST( PseudoTest_MultiSelect );
69 CPPUNIT_TEST( SelectItemMulti );
fa97ee24
VZ
70 CPPUNIT_TEST( PseudoTest_SetHiddenRoot );
71 CPPUNIT_TEST( HasChildren );
72 CPPUNIT_TEST_SUITE_END();
73
232fdc63
VZ
74 void ItemClick();
75 void DeleteItem();
76 void LabelEdit();
77 void KeyDown();
78#ifndef __WXGTK__
79 void CollapseExpandEvents();
80 void SelectionChange();
81#endif // !__WXGTK__
82 void Menu();
83 void ItemData();
84 void Iteration();
85 void Parent();
86 void CollapseExpand();
87 void AssignImageList();
88 void Focus();
89 void Bold();
90 void Visible();
91 void Sort();
92 void KeyNavigation();
fa97ee24 93 void HasChildren();
756c98b0
VZ
94 void SelectItemSingle();
95 void SelectItemMulti();
96 void PseudoTest_MultiSelect() { ms_multiSelect = true; }
fa97ee24
VZ
97 void PseudoTest_SetHiddenRoot() { ms_hiddenRoot = true; }
98
756c98b0 99 static bool ms_multiSelect;
fa97ee24
VZ
100 static bool ms_hiddenRoot;
101
756c98b0 102 // the tree control itself
fa97ee24
VZ
103 wxTreeCtrl *m_tree;
104
756c98b0
VZ
105 // and some of its items
106 wxTreeItemId m_root,
107 m_child1,
108 m_child2,
109 m_grandchild;
110
fa97ee24
VZ
111 DECLARE_NO_COPY_CLASS(TreeCtrlTestCase)
112};
113
114// register in the unnamed registry so that these tests are run by default
115CPPUNIT_TEST_SUITE_REGISTRATION( TreeCtrlTestCase );
116
e3778b4d 117// also include in its own registry so that these tests can be run alone
fa97ee24
VZ
118CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( TreeCtrlTestCase, "TreeCtrlTestCase" );
119
120// ----------------------------------------------------------------------------
121// test initialization
122// ----------------------------------------------------------------------------
123
756c98b0 124bool TreeCtrlTestCase::ms_multiSelect = false;
fa97ee24
VZ
125bool TreeCtrlTestCase::ms_hiddenRoot = false;
126
127void TreeCtrlTestCase::setUp()
128{
232fdc63
VZ
129 m_tree = new wxTreeCtrl(wxTheApp->GetTopWindow(),
130 wxID_ANY,
131 wxDefaultPosition,
132 wxSize(400, 200),
133 wxTR_DEFAULT_STYLE | wxTR_EDIT_LABELS);
756c98b0
VZ
134
135 if ( ms_multiSelect )
136 m_tree->ToggleWindowStyle(wxTR_MULTIPLE);
137
fa97ee24
VZ
138 if ( ms_hiddenRoot )
139 m_tree->ToggleWindowStyle(wxTR_HIDE_ROOT); // actually set it
756c98b0
VZ
140
141 m_root = m_tree->AddRoot("root");
142 m_child1 = m_tree->AppendItem(m_root, "child1");
143 m_child2 = m_tree->AppendItem(m_root, "child2");
144 m_grandchild = m_tree->AppendItem(m_child1, "grandchild");
232fdc63
VZ
145
146 m_tree->SetSize(400, 200);
147 m_tree->ExpandAll();
148 m_tree->Refresh();
149 m_tree->Update();
fa97ee24
VZ
150}
151
152void TreeCtrlTestCase::tearDown()
153{
154 delete m_tree;
155 m_tree = NULL;
756c98b0
VZ
156
157 m_root =
158 m_child1 =
159 m_child2 =
160 m_grandchild = wxTreeItemId();
fa97ee24
VZ
161}
162
163// ----------------------------------------------------------------------------
164// the tests themselves
165// ----------------------------------------------------------------------------
166
167void TreeCtrlTestCase::HasChildren()
168{
756c98b0
VZ
169 CPPUNIT_ASSERT( m_tree->HasChildren(m_root) );
170 CPPUNIT_ASSERT( m_tree->HasChildren(m_child1) );
171 CPPUNIT_ASSERT( !m_tree->HasChildren(m_child2) );
172 CPPUNIT_ASSERT( !m_tree->HasChildren(m_grandchild) );
173}
174
175void TreeCtrlTestCase::SelectItemSingle()
176{
177 // this test should be only ran in single-selection control
178 CPPUNIT_ASSERT( !m_tree->HasFlag(wxTR_MULTIPLE) );
179
180 // initially nothing is selected
181 CPPUNIT_ASSERT( !m_tree->IsSelected(m_child1) );
182
183 // selecting an item should make it selected
184 m_tree->SelectItem(m_child1);
185 CPPUNIT_ASSERT( m_tree->IsSelected(m_child1) );
186
187 // selecting it again shouldn't change anything
188 m_tree->SelectItem(m_child1);
189 CPPUNIT_ASSERT( m_tree->IsSelected(m_child1) );
190
191 // selecting another item should switch the selection to it
192 m_tree->SelectItem(m_child2);
193 CPPUNIT_ASSERT( !m_tree->IsSelected(m_child1) );
194 CPPUNIT_ASSERT( m_tree->IsSelected(m_child2) );
195
196 // selecting it again still shouldn't change anything
197 m_tree->SelectItem(m_child2);
198 CPPUNIT_ASSERT( !m_tree->IsSelected(m_child1) );
199 CPPUNIT_ASSERT( m_tree->IsSelected(m_child2) );
200
201 // deselecting an item should remove the selection entirely
202 m_tree->UnselectItem(m_child2);
203 CPPUNIT_ASSERT( !m_tree->IsSelected(m_child1) );
204 CPPUNIT_ASSERT( !m_tree->IsSelected(m_child2) );
205}
206
207void TreeCtrlTestCase::SelectItemMulti()
208{
209 // this test should be only ran in multi-selection control
210 CPPUNIT_ASSERT( m_tree->HasFlag(wxTR_MULTIPLE) );
211
212 // initially nothing is selected
213 CPPUNIT_ASSERT( !m_tree->IsSelected(m_child1) );
214
215 // selecting an item should make it selected
216 m_tree->SelectItem(m_child1);
217 CPPUNIT_ASSERT( m_tree->IsSelected(m_child1) );
218
219 // selecting it again shouldn't change anything
220 m_tree->SelectItem(m_child1);
221 CPPUNIT_ASSERT( m_tree->IsSelected(m_child1) );
222
223 // selecting another item shouldn't deselect the previously selected one
224 m_tree->SelectItem(m_child2);
225 CPPUNIT_ASSERT( m_tree->IsSelected(m_child1) );
226 CPPUNIT_ASSERT( m_tree->IsSelected(m_child2) );
227
228 // selecting it again still shouldn't change anything
229 m_tree->SelectItem(m_child2);
230 CPPUNIT_ASSERT( m_tree->IsSelected(m_child1) );
231 CPPUNIT_ASSERT( m_tree->IsSelected(m_child2) );
232
233 // deselecting one of the items should leave the others selected
234 m_tree->UnselectItem(m_child1);
235 CPPUNIT_ASSERT( !m_tree->IsSelected(m_child1) );
236 CPPUNIT_ASSERT( m_tree->IsSelected(m_child2) );
fa97ee24
VZ
237}
238
232fdc63
VZ
239void TreeCtrlTestCase::ItemClick()
240{
241#if wxUSE_UIACTIONSIMULATOR
242 wxTestableFrame* frame = wxStaticCast(wxTheApp->GetTopWindow(),
243 wxTestableFrame);
244
245 EventCounter count(m_tree, wxEVT_COMMAND_TREE_ITEM_ACTIVATED);
246 EventCounter count1(m_tree, wxEVT_COMMAND_TREE_ITEM_RIGHT_CLICK);
247
248 wxUIActionSimulator sim;
249
250 wxRect pos;
251 m_tree->GetBoundingRect(m_child1, pos, true);
252
253 // We move in slightly so we are not on the edge
254 wxPoint point = m_tree->ClientToScreen(pos.GetPosition()) + wxPoint(4, 4);
255
256 sim.MouseMove(point);
257 wxYield();
258
259 sim.MouseDblClick();
260 wxYield();
261
262 sim.MouseClick(wxMOUSE_BTN_RIGHT);
263 wxYield();
264
265 CPPUNIT_ASSERT_EQUAL(1, frame->GetEventCount(wxEVT_COMMAND_TREE_ITEM_ACTIVATED));
266 CPPUNIT_ASSERT_EQUAL(1, frame->GetEventCount(wxEVT_COMMAND_TREE_ITEM_RIGHT_CLICK));
267#endif // wxUSE_UIACTIONSIMULATOR
268}
269
270void TreeCtrlTestCase::DeleteItem()
271{
272 wxTestableFrame* frame = wxStaticCast(wxTheApp->GetTopWindow(),
273 wxTestableFrame);
274
275 EventCounter count(m_tree, wxEVT_COMMAND_TREE_DELETE_ITEM);
276
277 wxTreeItemId todelete = m_tree->AppendItem(m_root, "deleteme");
278 m_tree->Delete(todelete);
279 // We do not test DeleteAllItems() as under some versions of Windows events
280 // are not generated.
281
282 CPPUNIT_ASSERT_EQUAL(1, frame->GetEventCount());
283}
284
285#if wxUSE_UIACTIONSIMULATOR
286
287void TreeCtrlTestCase::LabelEdit()
288{
289 wxTestableFrame* frame = wxStaticCast(wxTheApp->GetTopWindow(),
290 wxTestableFrame);
291
292 EventCounter count(m_tree, wxEVT_COMMAND_TREE_BEGIN_LABEL_EDIT);
293 EventCounter count1(m_tree, wxEVT_COMMAND_TREE_END_LABEL_EDIT);
294
295 wxUIActionSimulator sim;
296
297 m_tree->SetFocusedItem(m_tree->GetRootItem());
298 m_tree->EditLabel(m_tree->GetRootItem());
299
300 sim.Text("newroottext");
301 wxYield();
302
303 CPPUNIT_ASSERT_EQUAL(1, frame->GetEventCount());
304
305 sim.Char(WXK_RETURN);
306 wxYield();
307
308 CPPUNIT_ASSERT_EQUAL(1, frame->GetEventCount());
309}
310
311void TreeCtrlTestCase::KeyDown()
312{
313 wxTestableFrame* frame = wxStaticCast(wxTheApp->GetTopWindow(),
314 wxTestableFrame);
315
316 EventCounter count(m_tree, wxEVT_COMMAND_TREE_KEY_DOWN);
317
318 wxUIActionSimulator sim;
319
320 m_tree->SetFocus();
321 sim.Text("aAbB");
322 wxYield();
323
89416032 324 CPPUNIT_ASSERT_EQUAL(6, frame->GetEventCount());
232fdc63
VZ
325}
326
327#if !defined(__WXGTK__)
328
329void TreeCtrlTestCase::CollapseExpandEvents()
330{
331 wxTestableFrame* frame = wxStaticCast(wxTheApp->GetTopWindow(),
332 wxTestableFrame);
333
334 m_tree->CollapseAll();
335
336 EventCounter count(m_tree, wxEVT_COMMAND_TREE_ITEM_COLLAPSED);
337 EventCounter count1(m_tree, wxEVT_COMMAND_TREE_ITEM_COLLAPSING);
338 EventCounter count2(m_tree, wxEVT_COMMAND_TREE_ITEM_EXPANDED);
339 EventCounter count3(m_tree, wxEVT_COMMAND_TREE_ITEM_EXPANDING);
340
341 wxUIActionSimulator sim;
342
343 wxRect pos;
344 m_tree->GetBoundingRect(m_root, pos, true);
345
346 // We move in slightly so we are not on the edge
347 wxPoint point = m_tree->ClientToScreen(pos.GetPosition()) + wxPoint(4, 4);
348
349 sim.MouseMove(point);
350 wxYield();
351
352 sim.MouseDblClick();
353 wxYield();
354
355 CPPUNIT_ASSERT_EQUAL(1, frame->GetEventCount(wxEVT_COMMAND_TREE_ITEM_EXPANDING));
356 CPPUNIT_ASSERT_EQUAL(1, frame->GetEventCount(wxEVT_COMMAND_TREE_ITEM_EXPANDED));
357
358 sim.MouseDblClick();
359 wxYield();
360
361 CPPUNIT_ASSERT_EQUAL(1, frame->GetEventCount(wxEVT_COMMAND_TREE_ITEM_COLLAPSING));
362 CPPUNIT_ASSERT_EQUAL(1, frame->GetEventCount(wxEVT_COMMAND_TREE_ITEM_COLLAPSED));
363}
364
365void TreeCtrlTestCase::SelectionChange()
366{
367 wxTestableFrame* frame = wxStaticCast(wxTheApp->GetTopWindow(),
368 wxTestableFrame);
369
370 m_tree->ExpandAll();
371 m_tree->UnselectAll();
372
373 EventCounter count(m_tree, wxEVT_COMMAND_TREE_SEL_CHANGED);
374 EventCounter count1(m_tree, wxEVT_COMMAND_TREE_SEL_CHANGING);
375
376 wxUIActionSimulator sim;
377
378 wxRect poschild1, poschild2;
379 m_tree->GetBoundingRect(m_child1, poschild1, true);
380 m_tree->GetBoundingRect(m_child1, poschild2, true);
381
382 // We move in slightly so we are not on the edge
383 wxPoint point1 = m_tree->ClientToScreen(poschild1.GetPosition()) + wxPoint(4, 4);
384 wxPoint point2 = m_tree->ClientToScreen(poschild2.GetPosition()) + wxPoint(4, 4);
385
386 sim.MouseMove(point1);
387 wxYield();
388
389 sim.MouseClick();
390 wxYield();
391
392 sim.MouseMove(point2);
393 wxYield();
394
395 sim.MouseClick();
396 wxYield();
397
398 CPPUNIT_ASSERT_EQUAL(2, frame->GetEventCount(wxEVT_COMMAND_TREE_SEL_CHANGED));
399 CPPUNIT_ASSERT_EQUAL(2, frame->GetEventCount(wxEVT_COMMAND_TREE_SEL_CHANGING));
400}
401
402#endif // !__WXGTK__
403
404void TreeCtrlTestCase::Menu()
405{
406 wxTestableFrame* frame = wxStaticCast(wxTheApp->GetTopWindow(),
407 wxTestableFrame);
408
409 EventCounter count(m_tree, wxEVT_COMMAND_TREE_ITEM_MENU);
410 wxUIActionSimulator sim;
411
412 wxRect pos;
413 m_tree->GetBoundingRect(m_child1, pos, true);
414
415 // We move in slightly so we are not on the edge
416 wxPoint point = m_tree->ClientToScreen(pos.GetPosition()) + wxPoint(4, 4);
417
418 sim.MouseMove(point);
419 wxYield();
420
421 sim.MouseClick(wxMOUSE_BTN_RIGHT);
422 wxYield();
423
424 CPPUNIT_ASSERT_EQUAL(1, frame->GetEventCount(wxEVT_COMMAND_TREE_ITEM_MENU));
425}
426
427#endif // wxUSE_UIACTIONSIMULATOR
428
429void TreeCtrlTestCase::ItemData()
430{
431 wxTreeItemData* child1data = new wxTreeItemData();
432 wxTreeItemData* appenddata = new wxTreeItemData();
433 wxTreeItemData* insertdata = new wxTreeItemData();
434
435 m_tree->SetItemData(m_child1, child1data);
436
437 CPPUNIT_ASSERT_EQUAL(child1data, m_tree->GetItemData(m_child1));
438 CPPUNIT_ASSERT_EQUAL(m_child1, child1data->GetId());
439
440 wxTreeItemId append = m_tree->AppendItem(m_root, "new", -1, -1, appenddata);
441
442 CPPUNIT_ASSERT_EQUAL(appenddata, m_tree->GetItemData(append));
443 CPPUNIT_ASSERT_EQUAL(append, appenddata->GetId());
444
445 wxTreeItemId insert = m_tree->InsertItem(m_root, m_child1, "new", -1, -1,
446 insertdata);
447
448 CPPUNIT_ASSERT_EQUAL(insertdata, m_tree->GetItemData(insert));
449 CPPUNIT_ASSERT_EQUAL(insert, insertdata->GetId());
450}
451
452void TreeCtrlTestCase::Iteration()
453{
454 // Get first / next / last child
455 wxTreeItemIdValue cookie;
456 CPPUNIT_ASSERT_EQUAL(m_tree->GetFirstChild(m_root, cookie), m_child1);
457 CPPUNIT_ASSERT_EQUAL(m_tree->GetNextChild(m_root, cookie),
458 m_tree->GetLastChild(m_root));
459 CPPUNIT_ASSERT_EQUAL(m_child2, m_tree->GetLastChild(m_root));
460
461 // Get next / previous sibling
462 CPPUNIT_ASSERT_EQUAL(m_child2, m_tree->GetNextSibling(m_child1));
463 CPPUNIT_ASSERT_EQUAL(m_child1, m_tree->GetPrevSibling(m_child2));
464}
465
466void TreeCtrlTestCase::Parent()
467{
468 CPPUNIT_ASSERT_EQUAL(m_root, m_tree->GetRootItem());
469 CPPUNIT_ASSERT_EQUAL(m_root, m_tree->GetItemParent(m_child1));
470 CPPUNIT_ASSERT_EQUAL(m_root, m_tree->GetItemParent(m_child2));
471 CPPUNIT_ASSERT_EQUAL(m_child1, m_tree->GetItemParent(m_grandchild));
472}
473
474void TreeCtrlTestCase::CollapseExpand()
475{
476 m_tree->ExpandAll();
477
478 CPPUNIT_ASSERT(m_tree->IsExpanded(m_root));
479 CPPUNIT_ASSERT(m_tree->IsExpanded(m_child1));
480
481 m_tree->CollapseAll();
482
483 CPPUNIT_ASSERT(!m_tree->IsExpanded(m_root));
484 CPPUNIT_ASSERT(!m_tree->IsExpanded(m_child1));
485
486 m_tree->ExpandAllChildren(m_root);
487
488 CPPUNIT_ASSERT(m_tree->IsExpanded(m_root));
489 CPPUNIT_ASSERT(m_tree->IsExpanded(m_child1));
490
491 m_tree->CollapseAllChildren(m_child1);
492
493 CPPUNIT_ASSERT(!m_tree->IsExpanded(m_child1));
494
495 m_tree->Expand(m_child1);
496
497 CPPUNIT_ASSERT(m_tree->IsExpanded(m_child1));
498
499 m_tree->Collapse(m_root);
500
501 CPPUNIT_ASSERT(!m_tree->IsExpanded(m_root));
502 CPPUNIT_ASSERT(m_tree->IsExpanded(m_child1));
503
504 m_tree->CollapseAndReset(m_root);
505
506 CPPUNIT_ASSERT(!m_tree->IsExpanded(m_root));
507}
508
509void TreeCtrlTestCase::AssignImageList()
510{
511 wxSize size(16, 16);
512
513 wxImageList *imagelist = new wxImageList(size.x, size.y);
514 imagelist->Add(wxArtProvider::GetIcon(wxART_QUESTION, wxART_OTHER, size));
515
516 wxImageList *statelist = new wxImageList(size.x, size.y);
517 statelist->Add(wxArtProvider::GetIcon(wxART_ERROR, wxART_OTHER, size));
518
519 m_tree->AssignImageList(imagelist);
520 m_tree->AssignStateImageList(statelist);
521
522 CPPUNIT_ASSERT_EQUAL(imagelist, m_tree->GetImageList());
523 CPPUNIT_ASSERT_EQUAL(statelist, m_tree->GetStateImageList());
524}
525
526void TreeCtrlTestCase::Focus()
527{
528#if !defined(__WXGTK__) && !defined(__WXOSX__)
529 m_tree->SetFocusedItem(m_child1);
530
531 CPPUNIT_ASSERT_EQUAL(m_child1, m_tree->GetFocusedItem());
532
533 m_tree->ClearFocusedItem();
534
535 CPPUNIT_ASSERT(!m_tree->GetFocusedItem());
536#endif
537}
538
539void TreeCtrlTestCase::Bold()
540{
541 CPPUNIT_ASSERT(!m_tree->IsBold(m_child1));
542
543 m_tree->SetItemBold(m_child1);
544
545 CPPUNIT_ASSERT(m_tree->IsBold(m_child1));
546
547 m_tree->SetItemBold(m_child1, false);
548
549 CPPUNIT_ASSERT(!m_tree->IsBold(m_child1));
550}
551
552void TreeCtrlTestCase::Visible()
553{
554 m_tree->CollapseAll();
555
556 CPPUNIT_ASSERT(m_tree->IsVisible(m_root));
557 CPPUNIT_ASSERT(!m_tree->IsVisible(m_child1));
558
559 m_tree->EnsureVisible(m_grandchild);
560
561 CPPUNIT_ASSERT(m_tree->IsVisible(m_grandchild));
562
563 m_tree->ExpandAll();
564
565 CPPUNIT_ASSERT_EQUAL(m_root, m_tree->GetFirstVisibleItem());
566 CPPUNIT_ASSERT_EQUAL(m_child1, m_tree->GetNextVisible(m_root));
567 CPPUNIT_ASSERT_EQUAL(m_grandchild, m_tree->GetNextVisible(m_child1));
568 CPPUNIT_ASSERT_EQUAL(m_child2, m_tree->GetNextVisible(m_grandchild));
569
570 CPPUNIT_ASSERT(!m_tree->GetNextVisible(m_child2));
571 CPPUNIT_ASSERT(!m_tree->GetPrevVisible(m_root));
572}
573
574void TreeCtrlTestCase::Sort()
575{
576 wxTreeItemId zitem = m_tree->AppendItem(m_root, "zzzz");
577 wxTreeItemId aitem = m_tree->AppendItem(m_root, "aaaa");
578
579 m_tree->SortChildren(m_root);
580
581 wxTreeItemIdValue cookie;
582
583 CPPUNIT_ASSERT_EQUAL(aitem, m_tree->GetFirstChild(m_root, cookie));
584 CPPUNIT_ASSERT_EQUAL(m_child1, m_tree->GetNextChild(m_root, cookie));
585 CPPUNIT_ASSERT_EQUAL(m_child2, m_tree->GetNextChild(m_root, cookie));
586 CPPUNIT_ASSERT_EQUAL(zitem, m_tree->GetNextChild(m_root, cookie));
587}
588
589void TreeCtrlTestCase::KeyNavigation()
590{
591#if wxUSE_UIACTIONSIMULATOR && !defined(__WXGTK__)
592 wxUIActionSimulator sim;
593
594 m_tree->CollapseAll();
595
596 m_tree->SelectItem(m_root);
597
a7dc5395 598 m_tree->SetFocus();
232fdc63
VZ
599 sim.Char(WXK_RIGHT);
600 wxYield();
601
602 CPPUNIT_ASSERT(m_tree->IsExpanded(m_root));
603
604 sim.Char(WXK_LEFT);
605 wxYield();
606
607 CPPUNIT_ASSERT(!m_tree->IsExpanded(m_root));
608
609 sim.Char(WXK_RIGHT);
610 sim.Char(WXK_DOWN);
611 wxYield();
612
613 CPPUNIT_ASSERT_EQUAL(m_child1, m_tree->GetSelection());
614
615 sim.Char(WXK_DOWN);
616 wxYield();
617
618 CPPUNIT_ASSERT_EQUAL(m_child2, m_tree->GetSelection());
619#endif
620}
621
622#endif //wxUSE_TREECTRL