X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/04b2b47a4e817fb32a78316b8b50efd0612509b9..e5354813181461c154044d52a464b29fa1aefaf8:/tests/controls/richtextctrltest.cpp diff --git a/tests/controls/richtextctrltest.cpp b/tests/controls/richtextctrltest.cpp index f3813de3c5..a01cf7a611 100644 --- a/tests/controls/richtextctrltest.cpp +++ b/tests/controls/richtextctrltest.cpp @@ -62,6 +62,7 @@ private: CPPUNIT_TEST( Font ); CPPUNIT_TEST( Delete ); CPPUNIT_TEST( Url ); + CPPUNIT_TEST( Table ); CPPUNIT_TEST_SUITE_END(); void CharacterEvent(); @@ -91,6 +92,7 @@ private: void Font(); void Delete(); void Url(); + void Table(); wxRichTextCtrl* m_rich; @@ -106,7 +108,7 @@ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( RichTextCtrlTestCase, "RichTextCtrlTestCa void RichTextCtrlTestCase::setUp() { m_rich = new wxRichTextCtrl(wxTheApp->GetTopWindow(), wxID_ANY, "", - wxDefaultPosition, wxSize(400, 200)); + wxDefaultPosition, wxSize(400, 200), wxWANTS_CHARS); } void RichTextCtrlTestCase::tearDown() @@ -121,8 +123,8 @@ void RichTextCtrlTestCase::CharacterEvent() // There seems to be an event sequence problem on GTK+ that causes the events // to be disconnected before they're processed, generating spurious errors. #if !defined(__WXGTK__) - EventCounter character(m_rich, wxEVT_COMMAND_RICHTEXT_CHARACTER); - EventCounter content(m_rich, wxEVT_COMMAND_RICHTEXT_CONTENT_INSERTED); + EventCounter character(m_rich, wxEVT_RICHTEXT_CHARACTER); + EventCounter content(m_rich, wxEVT_RICHTEXT_CONTENT_INSERTED); m_rich->SetFocus(); @@ -153,8 +155,8 @@ void RichTextCtrlTestCase::DeleteEvent() // There seems to be an event sequence problem on GTK+ that causes the events // to be disconnected before they're processed, generating spurious errors. #if !defined(__WXGTK__) - EventCounter deleteevent(m_rich, wxEVT_COMMAND_RICHTEXT_DELETE); - EventCounter contentdelete(m_rich, wxEVT_COMMAND_RICHTEXT_CONTENT_DELETED); + EventCounter deleteevent(m_rich, wxEVT_RICHTEXT_DELETE); + EventCounter contentdelete(m_rich, wxEVT_RICHTEXT_CONTENT_DELETED); m_rich->SetFocus(); @@ -177,7 +179,7 @@ void RichTextCtrlTestCase::ReturnEvent() // There seems to be an event sequence problem on GTK+ that causes the events // to be disconnected before they're processed, generating spurious errors. #if !defined(__WXGTK__) - EventCounter returnevent(m_rich, wxEVT_COMMAND_RICHTEXT_RETURN); + EventCounter returnevent(m_rich, wxEVT_RICHTEXT_RETURN); m_rich->SetFocus(); @@ -192,7 +194,7 @@ void RichTextCtrlTestCase::ReturnEvent() void RichTextCtrlTestCase::StyleEvent() { - EventCounter stylechanged(m_rich, wxEVT_COMMAND_RICHTEXT_STYLE_CHANGED); + EventCounter stylechanged(m_rich, wxEVT_RICHTEXT_STYLE_CHANGED); m_rich->SetValue("Sometext"); m_rich->SetStyle(0, 8, wxTextAttr(*wxRED, *wxWHITE)); @@ -202,7 +204,7 @@ void RichTextCtrlTestCase::StyleEvent() void RichTextCtrlTestCase::BufferResetEvent() { - EventCounter reset(m_rich, wxEVT_COMMAND_RICHTEXT_BUFFER_RESET); + EventCounter reset(m_rich, wxEVT_RICHTEXT_BUFFER_RESET); m_rich->AppendText("more text!"); m_rich->SetValue(""); @@ -227,7 +229,7 @@ void RichTextCtrlTestCase::UrlEvent() #if wxUSE_UIACTIONSIMULATOR // Mouse up event not being caught on GTK+ #if !defined(__WXGTK__) - EventCounter url(m_rich, wxEVT_COMMAND_TEXT_URL); + EventCounter url(m_rich, wxEVT_TEXT_URL); m_rich->BeginURL("http://www.wxwidgets.org"); m_rich->WriteText("http://www.wxwidgets.org"); @@ -249,7 +251,7 @@ void RichTextCtrlTestCase::TextEvent() { #if wxUSE_UIACTIONSIMULATOR #if !defined(__WXGTK__) - EventCounter updated(m_rich, wxEVT_COMMAND_TEXT_UPDATED); + EventCounter updated(m_rich, wxEVT_TEXT); m_rich->SetFocus(); @@ -409,7 +411,7 @@ void RichTextCtrlTestCase::Editable() { #if wxUSE_UIACTIONSIMULATOR #if !defined(__WXGTK__) - EventCounter updated(m_rich, wxEVT_COMMAND_TEXT_UPDATED); + EventCounter updated(m_rich, wxEVT_TEXT); m_rich->SetFocus(); @@ -755,4 +757,138 @@ void RichTextCtrlTestCase::Url() CPPUNIT_ASSERT_EQUAL("http://www.wxwidgets.org", url.GetURL()); } + // Helper function for ::Table() +wxRichTextTable* GetCurrentTableInstance(wxRichTextParagraph* para) +{ + wxRichTextTable* table = wxDynamicCast(para->FindObjectAtPosition(0), wxRichTextTable); + CPPUNIT_ASSERT(table); + return table; +} + +void RichTextCtrlTestCase::Table() +{ + m_rich->BeginSuppressUndo(); + wxRichTextTable* table = m_rich->WriteTable(1, 1); + m_rich->EndSuppressUndo(); + CPPUNIT_ASSERT(table); + CPPUNIT_ASSERT(m_rich->CanUndo() == false); + + // Run the tests twice: first for the original table, then for a contained one + for (int t = 0; t < 2; ++t) + { + size_t n; // FIXME-VC6: outside of the loops for VC6 only. + + // Undo() and Redo() switch table instances, so invalidating 'table' + // The containing paragraph isn't altered, and so can be used to find the current object + wxRichTextParagraph* para = wxDynamicCast(table->GetParent(), wxRichTextParagraph); + CPPUNIT_ASSERT(para); + + CPPUNIT_ASSERT(table->GetColumnCount() == 1); + CPPUNIT_ASSERT(table->GetRowCount() == 1); + + // Test adding columns and rows + for (n = 0; n < 3; ++n) + { + m_rich->BeginBatchUndo("Add col and row"); + + table->AddColumns(0, 1); + table->AddRows(0, 1); + + m_rich->EndBatchUndo(); + } + CPPUNIT_ASSERT(table->GetColumnCount() == 4); + CPPUNIT_ASSERT(table->GetRowCount() == 4); + + // Test deleting columns and rows + for (n = 0; n < 3; ++n) + { + m_rich->BeginBatchUndo("Delete col and row"); + + table->DeleteColumns(table->GetColumnCount() - 1, 1); + table->DeleteRows(table->GetRowCount() - 1, 1); + + m_rich->EndBatchUndo(); + } + CPPUNIT_ASSERT(table->GetColumnCount() == 1); + CPPUNIT_ASSERT(table->GetRowCount() == 1); + + // Test undo, first of the deletions... + CPPUNIT_ASSERT(m_rich->CanUndo()); + for (n = 0; n < 3; ++n) + { + m_rich->Undo(); + } + table = GetCurrentTableInstance(para); + CPPUNIT_ASSERT(table->GetColumnCount() == 4); + CPPUNIT_ASSERT(table->GetRowCount() == 4); + + // ...then the additions + for (n = 0; n < 3; ++n) + { + m_rich->Undo(); + } + table = GetCurrentTableInstance(para); + CPPUNIT_ASSERT(table->GetColumnCount() == 1); + CPPUNIT_ASSERT(table->GetRowCount() == 1); + CPPUNIT_ASSERT(m_rich->CanUndo() == false); + + // Similarly test redo. Additions: + CPPUNIT_ASSERT(m_rich->CanRedo()); + for (n = 0; n < 3; ++n) + { + m_rich->Redo(); + } + table = GetCurrentTableInstance(para); + CPPUNIT_ASSERT(table->GetColumnCount() == 4); + CPPUNIT_ASSERT(table->GetRowCount() == 4); + + // Deletions: + for (n = 0; n < 3; ++n) + { + m_rich->Redo(); + } + table = GetCurrentTableInstance(para); + CPPUNIT_ASSERT(table->GetColumnCount() == 1); + CPPUNIT_ASSERT(table->GetRowCount() == 1); + CPPUNIT_ASSERT(m_rich->CanRedo() == false); + + // Now test multiple addition and deletion, and also suppression + m_rich->BeginSuppressUndo(); + table->AddColumns(0, 3); + table->AddRows(0, 3); + CPPUNIT_ASSERT(table->GetColumnCount() == 4); + CPPUNIT_ASSERT(table->GetRowCount() == 4); + + // Only delete 2 of these. This makes it easy to be sure we're dealing with the child table when we loop + table->DeleteColumns(0, 2); + table->DeleteRows(0, 2); + CPPUNIT_ASSERT(table->GetColumnCount() == 2); + CPPUNIT_ASSERT(table->GetRowCount() == 2); + m_rich->EndSuppressUndo(); + + m_rich->GetCommandProcessor()->ClearCommands(); // otherwise the command-history from this loop will cause CPPUNIT_ASSERT failures in the next one + + if (t == 0) + { + // For round 2, re-run the tests on another table inside the last cell of the first one + wxRichTextCell* cell = table->GetCell(table->GetRowCount() - 1, table->GetColumnCount() - 1); + CPPUNIT_ASSERT(cell); + m_rich->SetFocusObject(cell); + m_rich->BeginSuppressUndo(); + table = m_rich->WriteTable(1, 1); + m_rich->EndSuppressUndo(); + CPPUNIT_ASSERT(table); + } + } + + // Test ClearTable() + table->ClearTable(); + CPPUNIT_ASSERT_EQUAL(0, table->GetCells().GetCount()); + CPPUNIT_ASSERT_EQUAL(0, table->GetColumnCount()); + CPPUNIT_ASSERT_EQUAL(0, table->GetRowCount()); + + m_rich->Clear(); + m_rich->SetFocusObject(NULL); +} + #endif //wxUSE_RICHTEXT