Improve wxTextCtrl::GetNumberOfLines() unit test and documentation.
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
This commit is contained in:
		@@ -1197,19 +1197,15 @@ public:
 | 
				
			|||||||
    /**
 | 
					    /**
 | 
				
			||||||
        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
 | 
					        @remarks
 | 
				
			||||||
            Note that even empty text controls have one line (where the
 | 
					            Note that even empty text controls have one line (where the
 | 
				
			||||||
            insertion point is), so GetNumberOfLines() never returns 0.
 | 
					            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;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -388,7 +388,6 @@ void TextCtrlTestCase::Style()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void TextCtrlTestCase::Lines()
 | 
					void TextCtrlTestCase::Lines()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
#ifndef __WXOSX__
 | 
					 | 
				
			||||||
    delete m_text;
 | 
					    delete m_text;
 | 
				
			||||||
    m_text = new wxTextCtrl(wxTheApp->GetTopWindow(), wxID_ANY, "",
 | 
					    m_text = new wxTextCtrl(wxTheApp->GetTopWindow(), wxID_ANY, "",
 | 
				
			||||||
                            wxDefaultPosition, wxSize(400, 200), wxTE_MULTILINE | wxTE_DONTWRAP);
 | 
					                            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(5, m_text->GetNumberOfLines());
 | 
				
			||||||
    CPPUNIT_ASSERT_EQUAL(0, m_text->GetLineLength(3));
 | 
					    CPPUNIT_ASSERT_EQUAL(0, m_text->GetLineLength(3));
 | 
				
			||||||
    CPPUNIT_ASSERT_EQUAL("", m_text->GetLineText(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
 | 
					#endif
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user