]> git.saurik.com Git - wxWidgets.git/blobdiff - tests/controls/textentrytest.cpp
Fix Doxygen warnings due to documenting overloaded functions together.
[wxWidgets.git] / tests / controls / textentrytest.cpp
index fcd911cf8ce2476e659fd3ce5be99aa31f53e946..a5027b9ecf49ead96cc2d2e7fdad022745e54273 100644 (file)
@@ -3,19 +3,21 @@
 // Purpose:     TestEntryTestCase implementation
 // Author:      Vadim Zeitlin
 // Created:     2008-09-19 (extracted from textctrltest.cpp)
-// RCS-ID:      $Id$
 // Copyright:   (c) 2007, 2008 Vadim Zeitlin <vadim@wxwidgets.org>
 ///////////////////////////////////////////////////////////////////////////////
 
 #include "testprec.h"
 
 #ifndef WX_PRECOMP
+    #include "wx/app.h"
     #include "wx/event.h"
     #include "wx/textentry.h"
     #include "wx/window.h"
 #endif // WX_PRECOMP
 
 #include "textentrytest.h"
+#include "testableframe.h"
+#include "wx/uiaction.h"
 
 void TextEntryTestCase::SetValue()
 {
@@ -36,69 +38,47 @@ void TextEntryTestCase::SetValue()
     CPPUNIT_ASSERT_EQUAL( "bye", entry->GetValue() );
 }
 
-namespace
-{
-    class TextTestEventHandler : public wxEvtHandler
-    {
-    public:
-        TextTestEventHandler() { m_events = 0; }
-
-        // calling this automatically resets the events counter
-        int GetEvents()
-        {
-            const int events = m_events;
-            m_events = 0;
-            return events;
-        }
-
-        void OnText(wxCommandEvent& WXUNUSED(event)) { m_events++; }
-
-    private:
-        int m_events;
-    };
-}
-
 void TextEntryTestCase::TextChangeEvents()
 {
-    TextTestEventHandler handler;
-
-    GetTestWindow()->Connect
-                     (
-                        wxEVT_COMMAND_TEXT_UPDATED,
-                        wxCommandEventHandler(TextTestEventHandler::OnText),
-                        NULL,
-                        &handler
-                     );
+    EventCounter updated(GetTestWindow(), wxEVT_TEXT);
 
     wxTextEntry * const entry = GetTestEntry();
 
     // notice that SetValue() generates an event even if the text didn't change
     entry->SetValue("");
-    CPPUNIT_ASSERT_EQUAL( 1, handler.GetEvents() );
+    CPPUNIT_ASSERT_EQUAL( 1, updated.GetCount() );
+    updated.Clear();
 
     entry->SetValue("foo");
-    CPPUNIT_ASSERT_EQUAL( 1, handler.GetEvents() );
+    CPPUNIT_ASSERT_EQUAL( 1, updated.GetCount() );
+    updated.Clear();
 
     entry->SetValue("foo");
-    CPPUNIT_ASSERT_EQUAL( 1, handler.GetEvents() );
+    CPPUNIT_ASSERT_EQUAL( 1, updated.GetCount() );
+    updated.Clear();
 
     entry->ChangeValue("bar");
-    CPPUNIT_ASSERT_EQUAL( 0, handler.GetEvents() );
+    CPPUNIT_ASSERT_EQUAL( 0, updated.GetCount() );
 
     entry->AppendText("bar");
-    CPPUNIT_ASSERT_EQUAL( 1, handler.GetEvents() );
+    CPPUNIT_ASSERT_EQUAL( 1, updated.GetCount() );
+    updated.Clear();
 
     entry->Replace(3, 6, "baz");
-    CPPUNIT_ASSERT_EQUAL( 1, handler.GetEvents() );
+    CPPUNIT_ASSERT_EQUAL( 1, updated.GetCount() );
+    updated.Clear();
 
     entry->Remove(0, 3);
-    CPPUNIT_ASSERT_EQUAL( 1, handler.GetEvents() );
+    CPPUNIT_ASSERT_EQUAL( 1, updated.GetCount() );
+    updated.Clear();
 
     entry->WriteText("foo");
-    CPPUNIT_ASSERT_EQUAL( 1, handler.GetEvents() );
+    CPPUNIT_ASSERT_EQUAL( 1, updated.GetCount() );
+    updated.Clear();
 
     entry->Clear();
-    CPPUNIT_ASSERT_EQUAL( 1, handler.GetEvents() );
+    CPPUNIT_ASSERT_EQUAL( 1, updated.GetCount() );
+    updated.Clear();
 }
 
 void TextEntryTestCase::CheckStringSelection(const char *sel)
@@ -168,6 +148,9 @@ void TextEntryTestCase::InsertionPoint()
     entry->WriteText("-"); // should move it after the written text
     CPPUNIT_ASSERT_EQUAL( 4, entry->GetLastPosition() );
     CPPUNIT_ASSERT_EQUAL( 1, entry->GetInsertionPoint() );
+
+    entry->SetValue("something different"); // should still reset the caret
+    CPPUNIT_ASSERT_EQUAL( 0, entry->GetInsertionPoint() );
 }
 
 void TextEntryTestCase::Replace()
@@ -194,3 +177,93 @@ void TextEntryTestCase::Replace()
     CPPUNIT_ASSERT_EQUAL(2, entry->GetInsertionPoint());
 }
 
+void TextEntryTestCase::Editable()
+{
+#if wxUSE_UIACTIONSIMULATOR
+
+#ifdef __WXGTK__
+    // FIXME: For some reason this test regularly (although not always) fails
+    //        in wxGTK build bot builds when testing wxBitmapComboBox, but I
+    //        can't reproduce the failure locally. For now, disable this check
+    //        to let the entire test suite pass in automatic tests instead of
+    //        failing sporadically.
+    if ( wxStrcmp(GetTestWindow()->GetClassInfo()->GetClassName(),
+                  "wxBitmapComboBox") == 0 &&
+           IsAutomaticTest() )
+    {
+        return;
+    }
+#endif // __WGTK__
+
+    wxTextEntry * const entry = GetTestEntry();
+    wxWindow * const window = GetTestWindow();
+
+    EventCounter updated(window, wxEVT_TEXT);
+
+    window->SetFocus();
+    wxYield();
+
+    wxUIActionSimulator sim;
+    sim.Text("abcdef");
+    wxYield();
+
+    CPPUNIT_ASSERT_EQUAL("abcdef", entry->GetValue());
+    CPPUNIT_ASSERT_EQUAL(6, updated.GetCount());
+
+    updated.Clear();
+
+    entry->SetEditable(false);
+    sim.Text("gh");
+    wxYield();
+
+    CPPUNIT_ASSERT_EQUAL("abcdef", entry->GetValue());
+    CPPUNIT_ASSERT_EQUAL(0, updated.GetCount());
+#endif
+}
+
+void TextEntryTestCase::Hint()
+{
+    GetTestEntry()->SetHint("This is a hint");
+    CPPUNIT_ASSERT_EQUAL("", GetTestEntry()->GetValue());
+}
+
+void TextEntryTestCase::CopyPaste()
+{
+#ifndef __WXOSX__
+    wxTextEntry * const entry = GetTestEntry();
+
+    entry->AppendText("sometext");
+    entry->SelectAll();
+
+    if(entry->CanCopy() && entry->CanPaste())
+    {
+        entry->Copy();
+        entry->Clear();
+        CPPUNIT_ASSERT(entry->IsEmpty());
+
+        wxYield();
+
+        entry->Paste();
+        CPPUNIT_ASSERT_EQUAL("sometext", entry->GetValue());
+    }
+#endif
+}
+
+void TextEntryTestCase::UndoRedo()
+{
+    wxTextEntry * const entry = GetTestEntry();
+
+    entry->AppendText("sometext");
+
+    if(entry->CanUndo())
+    {
+        entry->Undo();
+        CPPUNIT_ASSERT(entry->IsEmpty());
+
+        if(entry->CanRedo())
+        {
+            entry->Redo();
+            CPPUNIT_ASSERT_EQUAL("sometext", entry->GetValue());
+        }
+    }
+}