]> git.saurik.com Git - wxWidgets.git/blob - tests/controls/gridtest.cpp
Send generic wxListCtrl wxEVT_COMMAND_LIST_KEY_DOWN events from OnKeyDown rather...
[wxWidgets.git] / tests / controls / gridtest.cpp
1 ///////////////////////////////////////////////////////////////////////////////
2 // Name: tests/controls/gridtest.cpp
3 // Purpose: wxGrid unit test
4 // Author: Steven Lamerton
5 // Created: 2010-06-25
6 // RCS-ID: $Id$
7 // Copyright: (c) 2010 Steven Lamerton
8 ///////////////////////////////////////////////////////////////////////////////
9
10 #include "testprec.h"
11
12 #if wxUSE_GRID
13
14 #ifdef __BORLANDC__
15 #pragma hdrstop
16 #endif
17
18 #ifndef WX_PRECOMP
19 #include "wx/app.h"
20 #endif // WX_PRECOMP
21
22 #include "wx/grid.h"
23 #include "testableframe.h"
24 #include "asserthelper.h"
25 #include "wx/uiaction.h"
26
27 class GridTestCase : public CppUnit::TestCase
28 {
29 public:
30 GridTestCase() { }
31
32 virtual void setUp();
33 virtual void tearDown();
34
35 private:
36 CPPUNIT_TEST_SUITE( GridTestCase );
37 WXUISIM_TEST( CellEdit );
38 WXUISIM_TEST( CellClick );
39 WXUISIM_TEST( CellSelect );
40 WXUISIM_TEST( LabelClick );
41 WXUISIM_TEST( SortClick );
42 WXUISIM_TEST( Size );
43 WXUISIM_TEST( RangeSelect );
44 CPPUNIT_TEST( Cursor );
45 CPPUNIT_TEST( Selection );
46 CPPUNIT_TEST( AddRowCol );
47 CPPUNIT_TEST( ColumnOrder );
48 CPPUNIT_TEST( LineFormatting );
49 CPPUNIT_TEST( SortSupport );
50 CPPUNIT_TEST( Labels );
51 CPPUNIT_TEST( SelectionMode );
52 CPPUNIT_TEST( CellFormatting );
53 WXUISIM_TEST( Editable );
54 WXUISIM_TEST( ReadOnly );
55 CPPUNIT_TEST( PseudoTest_NativeHeader );
56 WXUISIM_TEST( LabelClick );
57 WXUISIM_TEST( SortClick );
58 CPPUNIT_TEST( ColumnOrder );
59 CPPUNIT_TEST( PseudoTest_NativeLabels );
60 WXUISIM_TEST( LabelClick );
61 WXUISIM_TEST( SortClick );
62 CPPUNIT_TEST( ColumnOrder );
63 CPPUNIT_TEST_SUITE_END();
64
65 void CellEdit();
66 void CellClick();
67 void CellSelect();
68 void LabelClick();
69 void SortClick();
70 void Size();
71 void RangeSelect();
72 void Cursor();
73 void Selection();
74 void AddRowCol();
75 void ColumnOrder();
76 void LineFormatting();
77 void SortSupport();
78 void Labels();
79 void SelectionMode();
80 void CellFormatting();
81 void Editable();
82 void ReadOnly();
83 void PseudoTest_NativeHeader() { ms_nativeheader = true; }
84 void PseudoTest_NativeLabels() { ms_nativeheader = false;
85 ms_nativelabels = true; }
86
87 static bool ms_nativeheader;
88 static bool ms_nativelabels;
89
90 wxGrid *m_grid;
91
92 DECLARE_NO_COPY_CLASS(GridTestCase)
93 };
94
95 // register in the unnamed registry so that these tests are run by default
96 CPPUNIT_TEST_SUITE_REGISTRATION( GridTestCase );
97
98 // also include in it's own registry so that these tests can be run alone
99 CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( GridTestCase, "GridTestCase" );
100
101 //initialise the static variable
102 bool GridTestCase::ms_nativeheader = false;
103 bool GridTestCase::ms_nativelabels = false;
104
105 void GridTestCase::setUp()
106 {
107 m_grid = new wxGrid(wxTheApp->GetTopWindow(), wxID_ANY);
108 m_grid->CreateGrid(10, 2);
109 m_grid->SetSize(400, 200);
110
111 if( ms_nativeheader )
112 m_grid->UseNativeColHeader();
113
114 if( ms_nativelabels )
115 m_grid->SetUseNativeColLabels();
116
117 m_grid->Refresh();
118 m_grid->Update();
119 }
120
121 void GridTestCase::tearDown()
122 {
123 wxDELETE(m_grid);
124 }
125
126 void GridTestCase::CellEdit()
127 {
128 #if wxUSE_UIACTIONSIMULATOR
129 wxTestableFrame* frame = wxStaticCast(wxTheApp->GetTopWindow(),
130 wxTestableFrame);
131
132 EventCounter count(m_grid, wxEVT_GRID_CELL_CHANGING);
133 EventCounter count1(m_grid, wxEVT_GRID_CELL_CHANGED);
134 EventCounter count2(m_grid, wxEVT_GRID_EDITOR_CREATED);
135
136 wxUIActionSimulator sim;
137
138 m_grid->SetFocus();
139 m_grid->SetGridCursor(1, 1);
140 m_grid->ShowCellEditControl();
141
142 sim.Text("abab");
143 sim.Char(WXK_RETURN);
144
145 wxYield();
146
147 CPPUNIT_ASSERT_EQUAL(1, frame->GetEventCount(wxEVT_GRID_EDITOR_CREATED));
148 CPPUNIT_ASSERT_EQUAL(1, frame->GetEventCount(wxEVT_GRID_CELL_CHANGING));
149 CPPUNIT_ASSERT_EQUAL(1, frame->GetEventCount(wxEVT_GRID_CELL_CHANGED));
150 #endif
151 }
152
153 void GridTestCase::CellClick()
154 {
155 #if wxUSE_UIACTIONSIMULATOR
156 wxTestableFrame* frame = wxStaticCast(wxTheApp->GetTopWindow(),
157 wxTestableFrame);
158
159 EventCounter count(m_grid, wxEVT_GRID_CELL_LEFT_CLICK);
160 EventCounter count1(m_grid, wxEVT_GRID_CELL_LEFT_DCLICK);
161 EventCounter count2(m_grid, wxEVT_GRID_CELL_RIGHT_CLICK);
162 EventCounter count3(m_grid, wxEVT_GRID_CELL_RIGHT_DCLICK);
163
164
165 wxUIActionSimulator sim;
166
167 wxRect rect = m_grid->CellToRect(0, 0);
168 wxPoint point = m_grid->CalcScrolledPosition(rect.GetPosition());
169 point = frame->ClientToScreen(point + wxPoint(m_grid->GetRowLabelSize(),
170 m_grid->GetColLabelSize())
171 + wxPoint(2, 2));
172
173 sim.MouseMove(point);
174 wxYield();
175
176 sim.MouseClick();
177 wxYield();
178
179 CPPUNIT_ASSERT_EQUAL(1, frame->GetEventCount(wxEVT_GRID_CELL_LEFT_CLICK));
180
181 sim.MouseDblClick();
182 wxYield();
183
184 //A double click event sends a single click event first
185 //test to ensure this still happens in the future
186 CPPUNIT_ASSERT_EQUAL(1, frame->GetEventCount(wxEVT_GRID_CELL_LEFT_CLICK));
187 CPPUNIT_ASSERT_EQUAL(1, frame->GetEventCount(wxEVT_GRID_CELL_LEFT_DCLICK));
188
189 sim.MouseClick(wxMOUSE_BTN_RIGHT);
190 wxYield();
191
192 CPPUNIT_ASSERT_EQUAL(1, frame->GetEventCount(wxEVT_GRID_CELL_RIGHT_CLICK));
193
194 sim.MouseDblClick(wxMOUSE_BTN_RIGHT);
195 wxYield();
196
197 CPPUNIT_ASSERT_EQUAL(1, frame->GetEventCount(wxEVT_GRID_CELL_RIGHT_CLICK));
198 CPPUNIT_ASSERT_EQUAL(1, frame->GetEventCount(wxEVT_GRID_CELL_RIGHT_DCLICK));
199 #endif
200 }
201
202 void GridTestCase::CellSelect()
203 {
204 #if wxUSE_UIACTIONSIMULATOR
205 wxTestableFrame* frame = wxStaticCast(wxTheApp->GetTopWindow(),
206 wxTestableFrame);
207
208 EventCounter count(m_grid, wxEVT_GRID_SELECT_CELL);
209
210 wxUIActionSimulator sim;
211
212 wxRect rect = m_grid->CellToRect(0, 0);
213 wxPoint point = m_grid->CalcScrolledPosition(rect.GetPosition());
214 point = frame->ClientToScreen(point + wxPoint(m_grid->GetRowLabelSize(),
215 m_grid->GetColLabelSize())
216 + wxPoint(4, 4));
217
218 sim.MouseMove(point);
219 wxYield();
220
221 sim.MouseClick();
222 wxYield();
223
224 CPPUNIT_ASSERT_EQUAL(1, frame->GetEventCount(wxEVT_GRID_SELECT_CELL));
225
226 m_grid->SetGridCursor(1, 1);
227 m_grid->GoToCell(1, 0);
228
229 sim.MouseMove(point);
230 wxYield();
231
232 sim.MouseDblClick();
233 wxYield();
234
235 CPPUNIT_ASSERT_EQUAL(3, frame->GetEventCount(wxEVT_GRID_SELECT_CELL));
236 #endif
237 }
238
239 void GridTestCase::LabelClick()
240 {
241 #if wxUSE_UIACTIONSIMULATOR && !defined(__WXGTK__)
242 wxTestableFrame* frame = wxStaticCast(wxTheApp->GetTopWindow(),
243 wxTestableFrame);
244
245 EventCounter count(m_grid, wxEVT_GRID_LABEL_LEFT_CLICK);
246 EventCounter count1(m_grid, wxEVT_GRID_LABEL_LEFT_DCLICK);
247 EventCounter count2(m_grid, wxEVT_GRID_LABEL_RIGHT_CLICK);
248 EventCounter count3(m_grid, wxEVT_GRID_LABEL_RIGHT_DCLICK);
249
250 wxUIActionSimulator sim;
251
252 wxPoint pos(m_grid->GetRowLabelSize() + 2, 2);
253 pos = m_grid->ClientToScreen(pos);
254
255 sim.MouseMove(pos);
256 wxYield();
257
258 sim.MouseClick();
259 wxYield();
260
261 CPPUNIT_ASSERT_EQUAL(1, frame->GetEventCount(wxEVT_GRID_LABEL_LEFT_CLICK));
262
263 sim.MouseDblClick();
264 wxYield();
265
266 //A double click event sends a single click event first
267 //test to ensure this still happens in the future
268 CPPUNIT_ASSERT_EQUAL(1, frame->GetEventCount(wxEVT_GRID_LABEL_LEFT_CLICK));
269 CPPUNIT_ASSERT_EQUAL(1, frame->GetEventCount(wxEVT_GRID_LABEL_LEFT_DCLICK));
270
271 sim.MouseClick(wxMOUSE_BTN_RIGHT);
272 wxYield();
273
274 CPPUNIT_ASSERT_EQUAL(1, frame->GetEventCount(wxEVT_GRID_LABEL_RIGHT_CLICK));
275
276 sim.MouseDblClick(wxMOUSE_BTN_RIGHT);
277 wxYield();
278
279 if( ms_nativeheader )
280 {
281 //Right double click not supported with native headers so we get two
282 //right click events
283 CPPUNIT_ASSERT_EQUAL(2, frame->GetEventCount(wxEVT_GRID_LABEL_RIGHT_CLICK));
284 }
285 else
286 {
287 CPPUNIT_ASSERT_EQUAL(1, frame->GetEventCount(wxEVT_GRID_LABEL_RIGHT_CLICK));
288 CPPUNIT_ASSERT_EQUAL(1, frame->GetEventCount(wxEVT_GRID_LABEL_RIGHT_DCLICK));
289 }
290 #endif
291 }
292
293 void GridTestCase::SortClick()
294 {
295 #if wxUSE_UIACTIONSIMULATOR && !defined(__WXGTK__)
296 m_grid->SetSortingColumn(0);
297
298 wxTestableFrame* frame = wxStaticCast(wxTheApp->GetTopWindow(),
299 wxTestableFrame);
300
301 EventCounter count(m_grid, wxEVT_GRID_COL_SORT);
302
303 wxUIActionSimulator sim;
304
305 wxPoint pos(m_grid->GetRowLabelSize() + 4, 4);
306 pos = m_grid->ClientToScreen(pos);
307
308 sim.MouseMove(pos);
309 wxYield();
310
311 sim.MouseClick();
312 wxYield();
313
314 CPPUNIT_ASSERT_EQUAL(1, frame->GetEventCount());
315
316 m_grid->SetSortingColumn(wxNOT_FOUND);
317 #endif
318 }
319
320 void GridTestCase::Size()
321 {
322 #if wxUSE_UIACTIONSIMULATOR && !defined(__WXGTK__)
323 wxTestableFrame* frame = wxStaticCast(wxTheApp->GetTopWindow(),
324 wxTestableFrame);
325
326 EventCounter count(m_grid, wxEVT_GRID_COL_SIZE);
327 EventCounter count1(m_grid, wxEVT_GRID_ROW_SIZE);
328
329 wxUIActionSimulator sim;
330
331 wxPoint pt = m_grid->ClientToScreen(wxPoint(m_grid->GetRowLabelSize() +
332 m_grid->GetColSize(0), 5));
333
334 sim.MouseMove(pt);
335 wxYield();
336
337 sim.MouseDown();
338 wxYield();
339
340 sim.MouseMove(pt.x + 50, pt.y);
341 wxYield();
342
343 sim.MouseUp();
344 wxYield();
345
346 CPPUNIT_ASSERT_EQUAL(1, frame->GetEventCount(wxEVT_GRID_COL_SIZE));
347
348 pt = m_grid->ClientToScreen(wxPoint(5, m_grid->GetColLabelSize() +
349 m_grid->GetRowSize(0)));
350
351 sim.MouseDragDrop(pt.x, pt.y, pt.x, pt.y + 50);
352 wxYield();
353
354 CPPUNIT_ASSERT_EQUAL(1, frame->GetEventCount(wxEVT_GRID_ROW_SIZE));
355 #endif
356 }
357
358 void GridTestCase::RangeSelect()
359 {
360 #if wxUSE_UIACTIONSIMULATOR
361 wxTestableFrame* frame = wxStaticCast(wxTheApp->GetTopWindow(),
362 wxTestableFrame);
363
364 EventCounter count(m_grid, wxEVT_GRID_RANGE_SELECT);
365
366 wxUIActionSimulator sim;
367
368 //We add the extra 10 to ensure that we are inside the cell
369 wxPoint pt = m_grid->ClientToScreen(wxPoint(m_grid->GetRowLabelSize() + 10,
370 m_grid->GetColLabelSize() + 10)
371 );
372
373 sim.MouseMove(pt);
374 wxYield();
375
376 sim.MouseDown();
377 wxYield();
378
379 sim.MouseMove(pt.x + 50, pt.y + 50);
380 wxYield();
381
382 sim.MouseUp();
383 wxYield();
384
385 CPPUNIT_ASSERT_EQUAL(1, frame->GetEventCount(wxEVT_GRID_RANGE_SELECT));
386 #endif
387 }
388
389 void GridTestCase::Cursor()
390 {
391 m_grid->SetGridCursor(1, 1);
392
393 CPPUNIT_ASSERT_EQUAL(1, m_grid->GetGridCursorCol());
394 CPPUNIT_ASSERT_EQUAL(1, m_grid->GetGridCursorRow());
395
396 m_grid->MoveCursorDown(false);
397 m_grid->MoveCursorLeft(false);
398 m_grid->MoveCursorUp(false);
399 m_grid->MoveCursorUp(false);
400 m_grid->MoveCursorRight(false);
401
402 CPPUNIT_ASSERT_EQUAL(1, m_grid->GetGridCursorCol());
403 CPPUNIT_ASSERT_EQUAL(0, m_grid->GetGridCursorRow());
404
405 m_grid->SetCellValue(0, 0, "some text");
406 m_grid->SetCellValue(3, 0, "other text");
407 m_grid->SetCellValue(0, 1, "more text");
408 m_grid->SetCellValue(3, 1, "extra text");
409
410 m_grid->Update();
411 m_grid->Refresh();
412
413 m_grid->MoveCursorLeftBlock(false);
414
415 CPPUNIT_ASSERT_EQUAL(0, m_grid->GetGridCursorCol());
416 CPPUNIT_ASSERT_EQUAL(0, m_grid->GetGridCursorRow());
417
418 m_grid->MoveCursorDownBlock(false);
419
420 CPPUNIT_ASSERT_EQUAL(0, m_grid->GetGridCursorCol());
421 CPPUNIT_ASSERT_EQUAL(3, m_grid->GetGridCursorRow());
422
423 m_grid->MoveCursorRightBlock(false);
424
425 CPPUNIT_ASSERT_EQUAL(1, m_grid->GetGridCursorCol());
426 CPPUNIT_ASSERT_EQUAL(3, m_grid->GetGridCursorRow());
427
428 m_grid->MoveCursorUpBlock(false);
429
430 CPPUNIT_ASSERT_EQUAL(1, m_grid->GetGridCursorCol());
431 CPPUNIT_ASSERT_EQUAL(0, m_grid->GetGridCursorRow());
432 }
433
434 void GridTestCase::Selection()
435 {
436 m_grid->SelectAll();
437
438 CPPUNIT_ASSERT(m_grid->IsSelection());
439 CPPUNIT_ASSERT(m_grid->IsInSelection(0, 0));
440 CPPUNIT_ASSERT(m_grid->IsInSelection(9, 1));
441
442 m_grid->SelectBlock(1, 0, 3, 1);
443
444 wxGridCellCoordsArray topleft = m_grid->GetSelectionBlockTopLeft();
445 wxGridCellCoordsArray bottomright = m_grid->GetSelectionBlockBottomRight();
446
447 CPPUNIT_ASSERT_EQUAL(1, topleft.Count());
448 CPPUNIT_ASSERT_EQUAL(1, bottomright.Count());
449
450 CPPUNIT_ASSERT_EQUAL(0, topleft.Item(0).GetCol());
451 CPPUNIT_ASSERT_EQUAL(1, topleft.Item(0).GetRow());
452 CPPUNIT_ASSERT_EQUAL(1, bottomright.Item(0).GetCol());
453 CPPUNIT_ASSERT_EQUAL(3, bottomright.Item(0).GetRow());
454
455 m_grid->SelectCol(1);
456
457 CPPUNIT_ASSERT(m_grid->IsInSelection(0, 1));
458 CPPUNIT_ASSERT(m_grid->IsInSelection(9, 1));
459 CPPUNIT_ASSERT(!m_grid->IsInSelection(3, 0));
460
461 m_grid->SelectRow(4);
462
463 CPPUNIT_ASSERT(m_grid->IsInSelection(4, 0));
464 CPPUNIT_ASSERT(m_grid->IsInSelection(4, 1));
465 CPPUNIT_ASSERT(!m_grid->IsInSelection(3, 0));
466 }
467
468 void GridTestCase::AddRowCol()
469 {
470 CPPUNIT_ASSERT_EQUAL(10, m_grid->GetNumberRows());
471 CPPUNIT_ASSERT_EQUAL(2, m_grid->GetNumberCols());
472
473 m_grid->AppendCols();
474 m_grid->AppendRows();
475
476 CPPUNIT_ASSERT_EQUAL(11, m_grid->GetNumberRows());
477 CPPUNIT_ASSERT_EQUAL(3, m_grid->GetNumberCols());
478
479 m_grid->AppendCols(2);
480 m_grid->AppendRows(2);
481
482 CPPUNIT_ASSERT_EQUAL(13, m_grid->GetNumberRows());
483 CPPUNIT_ASSERT_EQUAL(5, m_grid->GetNumberCols());
484
485 m_grid->InsertCols(1, 2);
486 m_grid->InsertRows(2, 3);
487
488 CPPUNIT_ASSERT_EQUAL(16, m_grid->GetNumberRows());
489 CPPUNIT_ASSERT_EQUAL(7, m_grid->GetNumberCols());
490 }
491
492 void GridTestCase::ColumnOrder()
493 {
494 m_grid->AppendCols(2);
495
496 CPPUNIT_ASSERT_EQUAL(4, m_grid->GetNumberCols());
497
498 wxArrayInt neworder;
499 neworder.push_back(1);
500 neworder.push_back(3);
501 neworder.push_back(2);
502 neworder.push_back(0);
503
504 m_grid->SetColumnsOrder(neworder);
505
506 CPPUNIT_ASSERT_EQUAL(0, m_grid->GetColPos(1));
507 CPPUNIT_ASSERT_EQUAL(1, m_grid->GetColPos(3));
508 CPPUNIT_ASSERT_EQUAL(2, m_grid->GetColPos(2));
509 CPPUNIT_ASSERT_EQUAL(3, m_grid->GetColPos(0));
510
511 CPPUNIT_ASSERT_EQUAL(1, m_grid->GetColAt(0));
512 CPPUNIT_ASSERT_EQUAL(3, m_grid->GetColAt(1));
513 CPPUNIT_ASSERT_EQUAL(2, m_grid->GetColAt(2));
514 CPPUNIT_ASSERT_EQUAL(0, m_grid->GetColAt(3));
515
516 m_grid->ResetColPos();
517
518 CPPUNIT_ASSERT_EQUAL(0, m_grid->GetColPos(0));
519 CPPUNIT_ASSERT_EQUAL(1, m_grid->GetColPos(1));
520 CPPUNIT_ASSERT_EQUAL(2, m_grid->GetColPos(2));
521 CPPUNIT_ASSERT_EQUAL(3, m_grid->GetColPos(3));
522 }
523
524 void GridTestCase::LineFormatting()
525 {
526 CPPUNIT_ASSERT(m_grid->GridLinesEnabled());
527
528 m_grid->EnableGridLines(false);
529
530 CPPUNIT_ASSERT(!m_grid->GridLinesEnabled());
531
532 m_grid->EnableGridLines();
533
534 m_grid->SetGridLineColour(*wxRED);
535
536 CPPUNIT_ASSERT_EQUAL(m_grid->GetGridLineColour(), *wxRED);
537 }
538
539 void GridTestCase::SortSupport()
540 {
541 CPPUNIT_ASSERT_EQUAL(wxNOT_FOUND, m_grid->GetSortingColumn());
542
543 m_grid->SetSortingColumn(1);
544
545 CPPUNIT_ASSERT(!m_grid->IsSortingBy(0));
546 CPPUNIT_ASSERT(m_grid->IsSortingBy(1));
547 CPPUNIT_ASSERT(m_grid->IsSortOrderAscending());
548
549 m_grid->SetSortingColumn(0, false);
550
551 CPPUNIT_ASSERT(m_grid->IsSortingBy(0));
552 CPPUNIT_ASSERT(!m_grid->IsSortingBy(1));
553 CPPUNIT_ASSERT(!m_grid->IsSortOrderAscending());
554
555 m_grid->UnsetSortingColumn();
556
557 CPPUNIT_ASSERT(!m_grid->IsSortingBy(0));
558 CPPUNIT_ASSERT(!m_grid->IsSortingBy(1));
559 }
560
561 void GridTestCase::Labels()
562 {
563 CPPUNIT_ASSERT_EQUAL("A", m_grid->GetColLabelValue(0));
564 CPPUNIT_ASSERT_EQUAL("1", m_grid->GetRowLabelValue(0));
565
566 m_grid->SetColLabelValue(0, "Column 1");
567 m_grid->SetRowLabelValue(0, "Row 1");
568
569 CPPUNIT_ASSERT_EQUAL("Column 1", m_grid->GetColLabelValue(0));
570 CPPUNIT_ASSERT_EQUAL("Row 1", m_grid->GetRowLabelValue(0));
571
572 m_grid->SetLabelTextColour(*wxGREEN);
573 m_grid->SetLabelBackgroundColour(*wxRED);
574
575 CPPUNIT_ASSERT_EQUAL(*wxGREEN, m_grid->GetLabelTextColour());
576 CPPUNIT_ASSERT_EQUAL(*wxRED, m_grid->GetLabelBackgroundColour());
577
578 m_grid->SetColLabelTextOrientation(wxVERTICAL);
579
580 CPPUNIT_ASSERT_EQUAL(static_cast<int>(wxVERTICAL),
581 static_cast<int>(m_grid->GetColLabelTextOrientation()));
582 }
583
584 void GridTestCase::SelectionMode()
585 {
586 //We already test this mode in Select
587 CPPUNIT_ASSERT_EQUAL(wxGrid::wxGridSelectCells,
588 m_grid->GetSelectionMode());
589
590 //Test row selection be selecting a single cell and checking the whole
591 //row is selected
592 m_grid->SetSelectionMode(wxGrid::wxGridSelectRows);
593 m_grid->SelectBlock(3, 1, 3, 1);
594
595 wxGridCellCoordsArray topleft = m_grid->GetSelectionBlockTopLeft();
596 wxGridCellCoordsArray bottomright = m_grid->GetSelectionBlockBottomRight();
597
598 CPPUNIT_ASSERT_EQUAL(1, topleft.Count());
599 CPPUNIT_ASSERT_EQUAL(1, bottomright.Count());
600
601 CPPUNIT_ASSERT_EQUAL(0, topleft.Item(0).GetCol());
602 CPPUNIT_ASSERT_EQUAL(3, topleft.Item(0).GetRow());
603 CPPUNIT_ASSERT_EQUAL(1, bottomright.Item(0).GetCol());
604 CPPUNIT_ASSERT_EQUAL(3, bottomright.Item(0).GetRow());
605
606 CPPUNIT_ASSERT_EQUAL(wxGrid::wxGridSelectRows,
607 m_grid->GetSelectionMode());
608
609
610 //Test column selection be selecting a single cell and checking the whole
611 //column is selected
612 m_grid->SetSelectionMode(wxGrid::wxGridSelectColumns);
613 m_grid->SelectBlock(3, 1, 3, 1);
614
615 topleft = m_grid->GetSelectionBlockTopLeft();
616 bottomright = m_grid->GetSelectionBlockBottomRight();
617
618 CPPUNIT_ASSERT_EQUAL(1, topleft.Count());
619 CPPUNIT_ASSERT_EQUAL(1, bottomright.Count());
620
621 CPPUNIT_ASSERT_EQUAL(1, topleft.Item(0).GetCol());
622 CPPUNIT_ASSERT_EQUAL(0, topleft.Item(0).GetRow());
623 CPPUNIT_ASSERT_EQUAL(1, bottomright.Item(0).GetCol());
624 CPPUNIT_ASSERT_EQUAL(9, bottomright.Item(0).GetRow());
625
626 CPPUNIT_ASSERT_EQUAL(wxGrid::wxGridSelectColumns,
627 m_grid->GetSelectionMode());
628 }
629
630 void GridTestCase::CellFormatting()
631 {
632 //Check that initial alignment is default
633 int horiz, cellhoriz, vert, cellvert;
634
635 m_grid->GetDefaultCellAlignment(&horiz, &vert);
636 m_grid->GetCellAlignment(0, 0, &cellhoriz, &cellvert);
637
638 CPPUNIT_ASSERT_EQUAL(cellhoriz, horiz);
639 CPPUNIT_ASSERT_EQUAL(cellvert, vert);
640
641 //Check initial text colour and background colour are default
642 wxColour text, back;
643
644 back = m_grid->GetDefaultCellBackgroundColour();
645
646 CPPUNIT_ASSERT_EQUAL(back, m_grid->GetCellBackgroundColour(0, 0));
647
648 back = m_grid->GetDefaultCellTextColour();
649
650 CPPUNIT_ASSERT_EQUAL(back, m_grid->GetCellTextColour(0, 0));
651
652 m_grid->SetCellAlignment(wxALIGN_CENTRE, 0, 0);
653 m_grid->GetCellAlignment(0, 0, &cellhoriz, &cellvert);
654
655 CPPUNIT_ASSERT_EQUAL(static_cast<int>(wxALIGN_CENTRE), cellhoriz);
656 CPPUNIT_ASSERT_EQUAL(static_cast<int>(wxALIGN_CENTRE), cellvert);
657
658 m_grid->SetCellAlignment(0, 0, wxALIGN_LEFT, wxALIGN_BOTTOM);
659 m_grid->GetCellAlignment(0, 0, &cellhoriz, &cellvert);
660
661 CPPUNIT_ASSERT_EQUAL(static_cast<int>(wxALIGN_LEFT), cellhoriz);
662 CPPUNIT_ASSERT_EQUAL(static_cast<int>(wxALIGN_BOTTOM), cellvert);
663
664 m_grid->SetCellTextColour(*wxRED, 0, 0);
665
666 CPPUNIT_ASSERT_EQUAL(*wxRED, m_grid->GetCellTextColour(0, 0));
667
668 m_grid->SetCellTextColour(0, 0, *wxGREEN);
669
670 CPPUNIT_ASSERT_EQUAL(*wxGREEN, m_grid->GetCellTextColour(0, 0));
671 }
672
673 void GridTestCase::Editable()
674 {
675 #if wxUSE_UIACTIONSIMULATOR
676 wxTestableFrame* frame = wxStaticCast(wxTheApp->GetTopWindow(),
677 wxTestableFrame);
678
679 //As the grid is not editable we shouldn't create an editor
680 EventCounter count(m_grid, wxEVT_GRID_EDITOR_CREATED);
681
682 wxUIActionSimulator sim;
683
684 CPPUNIT_ASSERT(m_grid->IsEditable());
685
686 m_grid->EnableEditing(false);
687
688 CPPUNIT_ASSERT(!m_grid->IsEditable());
689
690 m_grid->SetFocus();
691 m_grid->SetGridCursor(1, 1);
692 m_grid->ShowCellEditControl();
693
694 sim.Text("abab");
695 wxYield();
696
697 sim.Char(WXK_RETURN);
698 wxYield();
699
700 CPPUNIT_ASSERT_EQUAL(0, frame->GetEventCount());
701 #endif
702 }
703
704 void GridTestCase::ReadOnly()
705 {
706 #if wxUSE_UIACTIONSIMULATOR
707 wxTestableFrame* frame = wxStaticCast(wxTheApp->GetTopWindow(),
708 wxTestableFrame);
709
710 //As the cell is readonly we shouldn't create an editor
711 EventCounter count(m_grid, wxEVT_GRID_EDITOR_CREATED);
712
713 wxUIActionSimulator sim;
714
715 CPPUNIT_ASSERT(!m_grid->IsReadOnly(1, 1));
716
717 m_grid->SetReadOnly(1, 1);
718
719 CPPUNIT_ASSERT(m_grid->IsReadOnly(1, 1));
720
721 m_grid->SetFocus();
722 m_grid->SetGridCursor(1, 1);
723
724 CPPUNIT_ASSERT(m_grid->IsCurrentCellReadOnly());
725
726 m_grid->ShowCellEditControl();
727
728 sim.Text("abab");
729 wxYield();
730
731 sim.Char(WXK_RETURN);
732 wxYield();
733
734 CPPUNIT_ASSERT_EQUAL(0, frame->GetEventCount());
735 #endif
736 }
737
738 #endif //wxUSE_GRID