]> git.saurik.com Git - wxWidgets.git/blobdiff - tests/controls/textctrltest.cpp
implementing delayed freezing, fixes #12865
[wxWidgets.git] / tests / controls / textctrltest.cpp
index 4fb633784472599f129fb9ddfcd88200c2f49276..61dd87347cf55db7e526a85249e504e15e6b5169 100644 (file)
@@ -31,6 +31,8 @@
 #include "asserthelper.h"
 #include "wx/uiaction.h"
 
 #include "asserthelper.h"
 #include "wx/uiaction.h"
 
+static const int TEXT_HEIGHT = 200;
+
 // ----------------------------------------------------------------------------
 // test class
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
 // test class
 // ----------------------------------------------------------------------------
@@ -47,13 +49,37 @@ private:
     virtual wxTextEntry *GetTestEntry() const { return m_text; }
     virtual wxWindow *GetTestWindow() const { return m_text; }
 
     virtual wxTextEntry *GetTestEntry() const { return m_text; }
     virtual wxWindow *GetTestWindow() const { return m_text; }
 
+    #define SINGLE_AND_MULTI_TESTS() \
+        WXUISIM_TEST( ReadOnly ); \
+        CPPUNIT_TEST( StreamInput ); \
+        CPPUNIT_TEST( Redirector )
+
     CPPUNIT_TEST_SUITE( TextCtrlTestCase );
     CPPUNIT_TEST_SUITE( TextCtrlTestCase );
+        // These tests run for single line text controls.
         wxTEXT_ENTRY_TESTS();
         wxTEXT_ENTRY_TESTS();
-        CPPUNIT_TEST( MultiLineReplace );
-        WXUISIM_TEST( ReadOnly );
         WXUISIM_TEST( MaxLength );
         WXUISIM_TEST( MaxLength );
-        CPPUNIT_TEST( StreamInput );
-        CPPUNIT_TEST( Redirector );
+        SINGLE_AND_MULTI_TESTS();
+
+        // Now switch to the multi-line text controls.
+        CPPUNIT_TEST( PseudoTestSwitchToMultiLineStyle );
+
+        // Rerun some of the tests above. Notice that not all of them pass, so
+        // we can't just use wxTEXT_ENTRY_TESTS() here. For some of them it's
+        // normal, e.g. Hint() test isn't supposed to work for multi-line
+        // controls. Others, such as InsertionPoint() and TextChangeEvents()
+        // don't pass neither but this could be a bug.
+        CPPUNIT_TEST( SetValue );
+        CPPUNIT_TEST( Selection );
+        CPPUNIT_TEST( Replace );
+        WXUISIM_TEST( Editable );
+        CPPUNIT_TEST( CopyPaste );
+        CPPUNIT_TEST( UndoRedo );
+
+        SINGLE_AND_MULTI_TESTS();
+
+
+        // All tests from now on are for multi-line controls only.
+        CPPUNIT_TEST( MultiLineReplace );
         //WXUISIM_TEST( ProcessEnter );
         WXUISIM_TEST( Url );
         CPPUNIT_TEST( Style );
         //WXUISIM_TEST( ProcessEnter );
         WXUISIM_TEST( Url );
         CPPUNIT_TEST( Style );
@@ -65,6 +91,11 @@ private:
         CPPUNIT_TEST( PositionToCoordsRich2 );
     CPPUNIT_TEST_SUITE_END();
 
         CPPUNIT_TEST( PositionToCoordsRich2 );
     CPPUNIT_TEST_SUITE_END();
 
+    void PseudoTestSwitchToMultiLineStyle()
+    {
+        ms_style = wxTE_MULTILINE;
+    }
+
     void MultiLineReplace();
     void ReadOnly();
     void MaxLength();
     void MultiLineReplace();
     void ReadOnly();
     void MaxLength();
@@ -82,8 +113,14 @@ private:
 
     void DoPositionToCoordsTestWithStyle(long style);
 
 
     void DoPositionToCoordsTestWithStyle(long style);
 
+    // Create the control with the following styles added to ms_style which may
+    // (or not) already contain wxTE_MULTILINE.
+    void CreateText(long extraStyles);
+
     wxTextCtrl *m_text;
 
     wxTextCtrl *m_text;
 
+    static long ms_style;
+
     DECLARE_NO_COPY_CLASS(TextCtrlTestCase)
 };
 
     DECLARE_NO_COPY_CLASS(TextCtrlTestCase)
 };
 
@@ -97,9 +134,24 @@ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( TextCtrlTestCase, "TextCtrlTestCase" );
 // test initialization
 // ----------------------------------------------------------------------------
 
 // test initialization
 // ----------------------------------------------------------------------------
 
+// This is 0 initially and set to wxTE_MULTILINE later to allow running the
+// same tests for both single and multi line controls.
+long TextCtrlTestCase::ms_style = 0;
+
+void TextCtrlTestCase::CreateText(long extraStyles)
+{
+    wxSize size;
+    if ( ms_style == wxTE_MULTILINE )
+        size = wxSize(400, TEXT_HEIGHT);
+
+    m_text = new wxTextCtrl(wxTheApp->GetTopWindow(), wxID_ANY, "",
+                            wxDefaultPosition, size,
+                            ms_style | extraStyles);
+}
+
 void TextCtrlTestCase::setUp()
 {
 void TextCtrlTestCase::setUp()
 {
-    m_text = new wxTextCtrl(wxTheApp->GetTopWindow(), wxID_ANY);
+    CreateText(ms_style);
 }
 
 void TextCtrlTestCase::tearDown()
 }
 
 void TextCtrlTestCase::tearDown()
@@ -113,12 +165,6 @@ void TextCtrlTestCase::tearDown()
 
 void TextCtrlTestCase::MultiLineReplace()
 {
 
 void TextCtrlTestCase::MultiLineReplace()
 {
-    // we need a multiline control for this test so recreate it
-    delete m_text;
-    m_text = new wxTextCtrl(wxTheApp->GetTopWindow(), wxID_ANY, "",
-                            wxDefaultPosition, wxDefaultSize,
-                            wxTE_MULTILINE);
-
     m_text->SetValue("Hello replace\n"
                     "0123456789012");
     m_text->SetInsertionPoint(0);
     m_text->SetValue("Hello replace\n"
                     "0123456789012");
     m_text->SetInsertionPoint(0);
@@ -133,9 +179,6 @@ void TextCtrlTestCase::MultiLineReplace()
     m_text->Replace(13, -1, "");
     CPPUNIT_ASSERT_EQUAL("Hello changed", m_text->GetValue());
     CPPUNIT_ASSERT_EQUAL(13, m_text->GetInsertionPoint());
     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()
 }
 
 void TextCtrlTestCase::ReadOnly()
@@ -143,9 +186,7 @@ void TextCtrlTestCase::ReadOnly()
 #if wxUSE_UIACTIONSIMULATOR
     // we need a read only control for this test so recreate it
     delete m_text;
 #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);
+    CreateText(wxTE_READONLY);
 
     EventCounter updated(m_text, wxEVT_COMMAND_TEXT_UPDATED);
 
 
     EventCounter updated(m_text, wxEVT_COMMAND_TEXT_UPDATED);
 
@@ -166,9 +207,6 @@ void TextCtrlTestCase::ReadOnly()
 
     CPPUNIT_ASSERT_EQUAL("abcdef", m_text->GetValue());
     CPPUNIT_ASSERT_EQUAL(6, updated.GetCount());
 
     CPPUNIT_ASSERT_EQUAL("abcdef", m_text->GetValue());
     CPPUNIT_ASSERT_EQUAL(6, updated.GetCount());
-
-    delete m_text;
-    m_text = new wxTextCtrl(wxTheApp->GetTopWindow(), wxID_ANY);
 #endif
 }
 
 #endif
 }
 
@@ -293,9 +331,7 @@ void TextCtrlTestCase::ProcessEnter()
 
     // we need a text control with wxTE_PROCESS_ENTER for this test
     delete m_text;
 
     // 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);
+    CreateText(wxTE_PROCESS_ENTER);
 
     m_text->SetFocus();
 
 
     m_text->SetFocus();
 
@@ -311,9 +347,7 @@ void TextCtrlTestCase::Url()
 {
 #if wxUSE_UIACTIONSIMULATOR && defined(__WXMSW__)
     delete m_text;
 {
 #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);
+    CreateText(wxTE_RICH | wxTE_AUTO_URL);
 
     EventCounter url(m_text, wxEVT_COMMAND_TEXT_URL);
 
 
     EventCounter url(m_text, wxEVT_COMMAND_TEXT_URL);
 
@@ -333,8 +367,7 @@ void TextCtrlTestCase::Style()
 #ifndef __WXOSX__
     delete m_text;
     // We need wxTE_RICH under windows for style support
 #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);
+    CreateText(wxTE_RICH);
 
     // Red text on a white background
     m_text->SetDefaultStyle(wxTextAttr(*wxRED, *wxWHITE));
 
     // Red text on a white background
     m_text->SetDefaultStyle(wxTextAttr(*wxRED, *wxWHITE));
@@ -390,9 +423,7 @@ void TextCtrlTestCase::FontStyle()
     // We need wxTE_RICH under MSW and wxTE_MULTILINE under GTK for style
     // support so recreate the control with these styles.
     delete m_text;
     // We need wxTE_RICH under MSW and wxTE_MULTILINE under GTK for style
     // support so recreate the control with these styles.
     delete m_text;
-    m_text = new wxTextCtrl(wxTheApp->GetTopWindow(), wxID_ANY, "",
-                            wxDefaultPosition, wxDefaultSize,
-                            wxTE_MULTILINE | wxTE_RICH);
+    CreateText(wxTE_RICH);
 
     // Check that we get back the same font from GetStyle() after setting it
     // with SetDefaultStyle().
 
     // Check that we get back the same font from GetStyle() after setting it
     // with SetDefaultStyle().
@@ -443,10 +474,6 @@ void TextCtrlTestCase::FontStyle()
 
 void TextCtrlTestCase::Lines()
 {
 
 void TextCtrlTestCase::Lines()
 {
-    delete m_text;
-    m_text = new wxTextCtrl(wxTheApp->GetTopWindow(), wxID_ANY, "",
-                            wxDefaultPosition, wxSize(400, 200), wxTE_MULTILINE);
-
     m_text->SetValue("line1\nline2\nlong long line 3");
     m_text->Refresh();
     m_text->Update();
     m_text->SetValue("line1\nline2\nlong long line 3");
     m_text->Refresh();
     m_text->Update();
@@ -477,11 +504,6 @@ void TextCtrlTestCase::Lines()
 
 void TextCtrlTestCase::LogTextCtrl()
 {
 
 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);
     CPPUNIT_ASSERT(m_text->IsEmpty());
 
     wxLogTextCtrl* logtext = new wxLogTextCtrl(m_text);
@@ -512,12 +534,8 @@ void TextCtrlTestCase::PositionToCoordsRich2()
 
 void TextCtrlTestCase::DoPositionToCoordsTestWithStyle(long style)
 {
 
 void TextCtrlTestCase::DoPositionToCoordsTestWithStyle(long style)
 {
-    static const int TEXT_HEIGHT = 200;
-
     delete m_text;
     delete m_text;
-    m_text = new wxTextCtrl(wxTheApp->GetTopWindow(), wxID_ANY, "",
-                            wxDefaultPosition, wxSize(400, TEXT_HEIGHT),
-                            wxTE_MULTILINE | style);
+    CreateText(style);
 
     // Asking for invalid index should fail.
     WX_ASSERT_FAILS_WITH_ASSERT( m_text->PositionToCoords(1) );
 
     // Asking for invalid index should fail.
     WX_ASSERT_FAILS_WITH_ASSERT( m_text->PositionToCoords(1) );