Merge the new GUI tests from SOC2010_GUI_TEST branch.

Add a lot of tests for many wx GUI classes.

Add tests using the new wxUIActionSimulator class but disable them under OS X
as too many of them currently fail there.

Refactor the test suite to make organizing the existing tests and adding the
new ones easier.

Improve documentation using the information gathered while testing the
classes. Also update the documentation of the testing system itself.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@65386 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2010-08-22 22:16:05 +00:00
parent 571d991bb3
commit 232fdc630c
79 changed files with 9150 additions and 491 deletions

View File

@@ -13,6 +13,8 @@
#include "testprec.h"
#if wxUSE_TEXTCTRL
#ifdef __BORLANDC__
#pragma hdrstop
#endif
@@ -23,12 +25,15 @@
#endif // WX_PRECOMP
#include "textentrytest.h"
#include "testableframe.h"
#include "asserthelper.h"
#include "wx/uiaction.h"
// ----------------------------------------------------------------------------
// test class
// ----------------------------------------------------------------------------
class TextCtrlTestCase : public TextEntryTestCase
class TextCtrlTestCase : public TextEntryTestCase, public CppUnit::TestCase
{
public:
TextCtrlTestCase() { }
@@ -43,9 +48,27 @@ private:
CPPUNIT_TEST_SUITE( TextCtrlTestCase );
wxTEXT_ENTRY_TESTS();
CPPUNIT_TEST( MultiLineReplace );
WXUISIM_TEST( ReadOnly );
WXUISIM_TEST( MaxLength );
CPPUNIT_TEST( StreamInput );
CPPUNIT_TEST( Redirector );
//WXUISIM_TEST( ProcessEnter );
WXUISIM_TEST( Url );
CPPUNIT_TEST( Style );
CPPUNIT_TEST( Lines );
CPPUNIT_TEST( LogTextCtrl );
CPPUNIT_TEST_SUITE_END();
void MultiLineReplace();
void ReadOnly();
void MaxLength();
void StreamInput();
void Redirector();
//void ProcessEnter();
void Url();
void Style();
void Lines();
void LogTextCtrl();
wxTextCtrl *m_text;
@@ -69,8 +92,7 @@ void TextCtrlTestCase::setUp()
void TextCtrlTestCase::tearDown()
{
delete m_text;
m_text = NULL;
wxDELETE(m_text);
}
// ----------------------------------------------------------------------------
@@ -99,5 +121,297 @@ void TextCtrlTestCase::MultiLineReplace()
m_text->Replace(13, -1, "");
CPPUNIT_ASSERT_EQUAL("Hello changed", m_text->GetValue());
CPPUNIT_ASSERT_EQUAL(13, m_text->GetInsertionPoint());
delete m_text;
m_text = new wxTextCtrl(wxTheApp->GetTopWindow(), wxID_ANY);
}
void TextCtrlTestCase::ReadOnly()
{
#if wxUSE_UIACTIONSIMULATOR
// we need a read only control for this test so recreate it
delete m_text;
m_text = new wxTextCtrl(wxTheApp->GetTopWindow(), wxID_ANY, "",
wxDefaultPosition, wxDefaultSize,
wxTE_READONLY);
wxTestableFrame* frame = wxStaticCast(wxTheApp->GetTopWindow(),
wxTestableFrame);
EventCounter count(m_text, wxEVT_COMMAND_TEXT_UPDATED);
m_text->SetFocus();
wxUIActionSimulator sim;
sim.Text("abcdef");
wxYield();
CPPUNIT_ASSERT_EQUAL("", m_text->GetValue());
CPPUNIT_ASSERT_EQUAL(0, frame->GetEventCount());
// SetEditable() is supposed to override wxTE_READONLY
m_text->SetEditable(true);
sim.Text("abcdef");
wxYield();
CPPUNIT_ASSERT_EQUAL("abcdef", m_text->GetValue());
CPPUNIT_ASSERT_EQUAL(6, frame->GetEventCount());
delete m_text;
m_text = new wxTextCtrl(wxTheApp->GetTopWindow(), wxID_ANY);
#endif
}
void TextCtrlTestCase::MaxLength()
{
#if wxUSE_UIACTIONSIMULATOR
wxTestableFrame* frame = wxStaticCast(wxTheApp->GetTopWindow(),
wxTestableFrame);
EventCounter count(m_text, wxEVT_COMMAND_TEXT_UPDATED);
EventCounter count1(m_text, wxEVT_COMMAND_TEXT_MAXLEN);
m_text->SetFocus();
m_text->SetMaxLength(10);
wxUIActionSimulator sim;
sim.Text("abcdef");
wxYield();
CPPUNIT_ASSERT_EQUAL(0, frame->GetEventCount(wxEVT_COMMAND_TEXT_MAXLEN));
sim.Text("ghij");
wxYield();
CPPUNIT_ASSERT_EQUAL(0, frame->GetEventCount(wxEVT_COMMAND_TEXT_MAXLEN));
CPPUNIT_ASSERT_EQUAL(10, frame->GetEventCount(wxEVT_COMMAND_TEXT_UPDATED));
sim.Text("k");
wxYield();
CPPUNIT_ASSERT_EQUAL(1, frame->GetEventCount(wxEVT_COMMAND_TEXT_MAXLEN));
CPPUNIT_ASSERT_EQUAL(0, frame->GetEventCount(wxEVT_COMMAND_TEXT_UPDATED));
m_text->SetMaxLength(0);
sim.Text("k");
wxYield();
CPPUNIT_ASSERT_EQUAL(0, frame->GetEventCount(wxEVT_COMMAND_TEXT_MAXLEN));
CPPUNIT_ASSERT_EQUAL(1, frame->GetEventCount(wxEVT_COMMAND_TEXT_UPDATED));
#endif
}
void TextCtrlTestCase::StreamInput()
{
#ifndef __WXOSX__
*m_text << "stringinput"
<< 10
<< 1000L
<< 3.14f
<< 2.71
<< 'a'
<< L'b';
CPPUNIT_ASSERT_EQUAL("stringinput1010003.142.71ab", m_text->GetValue());
m_text->SetValue("");
#if wxHAS_TEXT_WINDOW_STREAM
std::ostream stream(m_text);
// We don't test a wide character as this is not a wide stream
stream << "stringinput"
<< 10
<< 1000L
<< 3.14f
<< 2.71
<< 'a';
stream.flush();
CPPUNIT_ASSERT_EQUAL("stringinput1010003.142.71a", m_text->GetValue());
#endif
#endif
}
void TextCtrlTestCase::Redirector()
{
#if wxHAS_TEXT_WINDOW_STREAM && wxUSE_STD_IOSTREAM
wxStreamToTextRedirector redirect(m_text);
std::cout << "stringinput"
<< 10
<< 1000L
<< 3.14f
<< 2.71
<< 'a';
CPPUNIT_ASSERT_EQUAL("stringinput1010003.142.71a", m_text->GetValue());
#endif
}
#if 0
void TextCtrlTestCase::ProcessEnter()
{
#if wxUSE_UIACTIONSIMULATOR
wxTestableFrame* frame = wxStaticCast(wxTheApp->GetTopWindow(),
wxTestableFrame);
EventCounter count(m_text, wxEVT_COMMAND_TEXT_ENTER);
m_text->SetFocus();
wxUIActionSimulator sim;
sim.Char(WXK_RETURN);
wxYield();
CPPUNIT_ASSERT_EQUAL(0, frame->GetEventCount(wxEVT_COMMAND_TEXT_ENTER));
// we need a text control with wxTE_PROCESS_ENTER for this test
delete m_text;
m_text = new wxTextCtrl(wxTheApp->GetTopWindow(), wxID_ANY, "",
wxDefaultPosition, wxDefaultSize,
wxTE_PROCESS_ENTER);
m_text->SetFocus();
sim.Char(WXK_RETURN);
wxYield();
CPPUNIT_ASSERT_EQUAL(1, frame->GetEventCount(wxEVT_COMMAND_TEXT_ENTER));
#endif
}
#endif
void TextCtrlTestCase::Url()
{
#if wxUSE_UIACTIONSIMULATOR && defined(__WXMSW__)
delete m_text;
m_text = new wxTextCtrl(wxTheApp->GetTopWindow(), wxID_ANY, "",
wxDefaultPosition, wxDefaultSize,
wxTE_MULTILINE | wxTE_RICH | wxTE_AUTO_URL);
wxTestableFrame* frame = wxStaticCast(wxTheApp->GetTopWindow(),
wxTestableFrame);
EventCounter count(m_text, wxEVT_COMMAND_TEXT_URL);
m_text->AppendText("http://www.wxwidgets.org");
wxUIActionSimulator sim;
sim.MouseMove(m_text->ClientToScreen(wxPoint(5, 5)));
sim.MouseClick();
wxYield();
CPPUNIT_ASSERT_EQUAL(1, frame->GetEventCount());
#endif
}
void TextCtrlTestCase::Style()
{
#ifndef __WXOSX__
delete m_text;
// We need wxTE_RICH under windows for style support
m_text = new wxTextCtrl(wxTheApp->GetTopWindow(), wxID_ANY, "",
wxDefaultPosition, wxDefaultSize, wxTE_RICH);
// Red text on a white background
m_text->SetDefaultStyle(wxTextAttr(*wxRED, *wxWHITE));
CPPUNIT_ASSERT_EQUAL(m_text->GetDefaultStyle().GetTextColour(), *wxRED);
CPPUNIT_ASSERT_EQUAL(m_text->GetDefaultStyle().GetBackgroundColour(),
*wxWHITE);
m_text->AppendText("red on white ");
// Red text on a grey background
m_text->SetDefaultStyle(wxTextAttr(wxNullColour, *wxLIGHT_GREY));
CPPUNIT_ASSERT_EQUAL(m_text->GetDefaultStyle().GetTextColour(), *wxRED);
CPPUNIT_ASSERT_EQUAL(m_text->GetDefaultStyle().GetBackgroundColour(),
*wxLIGHT_GREY);
m_text->AppendText("red on grey ");
// Blue text on a grey background
m_text->SetDefaultStyle(wxTextAttr(*wxBLUE));
CPPUNIT_ASSERT_EQUAL(m_text->GetDefaultStyle().GetTextColour(), *wxBLUE);
CPPUNIT_ASSERT_EQUAL(m_text->GetDefaultStyle().GetBackgroundColour(),
*wxLIGHT_GREY);
m_text->AppendText("blue on grey");
// Get getting the style at a specific location
wxTextAttr style;
// We have to check that styles are supported
if(m_text->GetStyle(3, style))
{
CPPUNIT_ASSERT_EQUAL(style.GetTextColour(), *wxRED);
CPPUNIT_ASSERT_EQUAL(style.GetBackgroundColour(), *wxWHITE);
}
// And then setting the style
if(m_text->SetStyle(15, 18, style))
{
m_text->GetStyle(17, style);
CPPUNIT_ASSERT_EQUAL(style.GetTextColour(), *wxRED);
CPPUNIT_ASSERT_EQUAL(style.GetBackgroundColour(), *wxWHITE);
}
#endif
}
void TextCtrlTestCase::Lines()
{
#ifndef __WXOSX__
delete m_text;
m_text = new wxTextCtrl(wxTheApp->GetTopWindow(), wxID_ANY, "",
wxDefaultPosition, wxSize(400, 200), wxTE_MULTILINE | wxTE_DONTWRAP);
m_text->SetValue("line1\nline2\nlong long line 3");
m_text->Refresh();
m_text->Update();
CPPUNIT_ASSERT_EQUAL(3, m_text->GetNumberOfLines());
CPPUNIT_ASSERT_EQUAL(5, m_text->GetLineLength(0));
CPPUNIT_ASSERT_EQUAL("line2", m_text->GetLineText(1));
CPPUNIT_ASSERT_EQUAL(16, m_text->GetLineLength(2));
m_text->AppendText("\n\nMore text on line 5");
CPPUNIT_ASSERT_EQUAL(5, m_text->GetNumberOfLines());
CPPUNIT_ASSERT_EQUAL(0, m_text->GetLineLength(3));
CPPUNIT_ASSERT_EQUAL("", m_text->GetLineText(3));
#endif
}
void TextCtrlTestCase::LogTextCtrl()
{
delete m_text;
m_text = new wxTextCtrl(wxTheApp->GetTopWindow(), wxID_ANY, "",
wxDefaultPosition, wxSize(400, 200),
wxTE_MULTILINE);
CPPUNIT_ASSERT(m_text->IsEmpty());
wxLogTextCtrl* logtext = new wxLogTextCtrl(m_text);
wxLog* old = wxLog::SetActiveTarget(logtext);
logtext->LogText("text");
delete wxLog::SetActiveTarget(old);
CPPUNIT_ASSERT(!m_text->IsEmpty());
}
#endif //wxUSE_TEXTCTRL