]> git.saurik.com Git - wxWidgets.git/commitdiff
Improve wxTextCtrl::GetNumberOfLines() unit test and documentation.
authorVadim Zeitlin <vadim@wxwidgets.org>
Sat, 30 Jul 2011 21:54:15 +0000 (21:54 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sat, 30 Jul 2011 21:54:15 +0000 (21:54 +0000)
First, enable execution of the Lines() wxTextCtrl unit test case under wxOSX
as it passes since the fix in the previous commit.

Do add a test for GetNumberOfLines() that currently doesn't work in the same
way under all platforms -- but with this test we at least can be sure how does
it work exactly where.

Also mention the current discrepancy in this function behaviour in the
documentation.

See #12366.

Fix Lines() wxTextCtrl unit test to pass under wxGTK too.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68465 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

interface/wx/textctrl.h
tests/controls/textctrltest.cpp

index 6dfd9143208c18c20686c838fcb0a1467cd662e0..422a703e5a9bae7647081474d2e473f9701ce294 100644 (file)
@@ -1197,19 +1197,15 @@ public:
     /**
         Returns the number of lines in the text control buffer.
 
+        The returned number is the number of logical lines, i.e. just the count
+        of the number of newline characters in the control + 1, for wxGTK and
+        wxOSX/Cocoa ports while it is the number of physical lines, i.e. the
+        count of lines actually shown in the control, in wxMSW and wxOSX/Carbon.
+        Because of this discrepancy, it is not recommended to use this function.
+
         @remarks
             Note that even empty text controls have one line (where the
             insertion point is), so GetNumberOfLines() never returns 0.
-            For wxGTK using GTK+ 1.2.x and earlier, the number of lines in a
-            multi-line text control is calculated by actually counting newline
-            characters in the buffer, i.e. this function returns the number of
-            logical lines and doesn't depend on whether any of them are wrapped.
-            For all the other platforms, the number of physical lines in the
-            control is returned.
-            Also note that you may wish to avoid using functions that work with
-            line numbers if you are working with controls that contain large
-            amounts of text as this function has O(N) complexity for N being
-            the number of lines.
     */
     virtual int GetNumberOfLines() const;
 
index 86f0fbee7a5de5da5f99ba538e9c9441dcfce77c..1c001d3ac20e5d0830a37f3ea55a2c38941935c0 100644 (file)
@@ -388,7 +388,6 @@ void TextCtrlTestCase::Style()
 
 void TextCtrlTestCase::Lines()
 {
-#ifndef __WXOSX__
     delete m_text;
     m_text = new wxTextCtrl(wxTheApp->GetTopWindow(), wxID_ANY, "",
                             wxDefaultPosition, wxSize(400, 200), wxTE_MULTILINE | wxTE_DONTWRAP);
@@ -407,6 +406,17 @@ void TextCtrlTestCase::Lines()
     CPPUNIT_ASSERT_EQUAL(5, m_text->GetNumberOfLines());
     CPPUNIT_ASSERT_EQUAL(0, m_text->GetLineLength(3));
     CPPUNIT_ASSERT_EQUAL("", m_text->GetLineText(3));
+
+    // Verify that wrapped lines count as 2 lines.
+    //
+    // This currently doesn't work neither in wxGTK nor wxOSX/Cocoa, see
+    // #12366, where GetNumberOfLines() always returns the number of logical,
+    // not physical, lines.
+    m_text->AppendText("\n" + wxString(50, '1') + ' ' + wxString(50, '2'));
+#if defined(__WXGTK__) || defined(__WXOSX_COCOA__)
+    CPPUNIT_ASSERT_EQUAL(6, m_text->GetNumberOfLines());
+#else
+    CPPUNIT_ASSERT_EQUAL(7, m_text->GetNumberOfLines());
 #endif
 }