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
/**
Returns the number of lines in the text control buffer.
/**
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.
@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;
*/
virtual int GetNumberOfLines() const;
void TextCtrlTestCase::Lines()
{
void TextCtrlTestCase::Lines()
{
delete m_text;
m_text = new wxTextCtrl(wxTheApp->GetTopWindow(), wxID_ANY, "",
wxDefaultPosition, wxSize(400, 200), wxTE_MULTILINE | wxTE_DONTWRAP);
delete m_text;
m_text = new wxTextCtrl(wxTheApp->GetTopWindow(), wxID_ANY, "",
wxDefaultPosition, wxSize(400, 200), wxTE_MULTILINE | wxTE_DONTWRAP);
CPPUNIT_ASSERT_EQUAL(5, m_text->GetNumberOfLines());
CPPUNIT_ASSERT_EQUAL(0, m_text->GetLineLength(3));
CPPUNIT_ASSERT_EQUAL("", m_text->GetLineText(3));
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());