From b7cf27f2ceae655740dab43204d72c8d7cebb873 Mon Sep 17 00:00:00 2001 From: ali kettab Date: Mon, 23 Oct 2023 19:59:51 +0100 Subject: [PATCH] Enable HitTestSingleLine test case under wxQt --- tests/controls/textctrltest.cpp | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/tests/controls/textctrltest.cpp b/tests/controls/textctrltest.cpp index d771d63754..4a66e82e77 100644 --- a/tests/controls/textctrltest.cpp +++ b/tests/controls/textctrltest.cpp @@ -28,7 +28,7 @@ #include "wx/dataobj.h" #endif // wxUSE_CLIPBOARD -#ifdef __WXGTK__ +#if defined(__WXGTK__) || defined(__WXQT__) #include "waitfor.h" #endif @@ -353,9 +353,6 @@ void TextCtrlTestCase::Redirector() void TextCtrlTestCase::HitTestSingleLine() { -#ifdef __WXQT__ - WARN("Does not work under WxQt"); -#else m_text->ChangeValue("Hit me"); // We don't know the size of the text borders, so we can't really do any @@ -366,6 +363,21 @@ void TextCtrlTestCase::HitTestSingleLine() long pos = -1; +#ifdef __WXQT__ + // Although it works fine interactively, testing HitTest() is not + // straightforward under wxQt: We have to call SetInsertionPoint() + // explicitly with the position returned by HitTest() before we call + // it a second time (in the test below) to get the correct result. + auto SetCursorPositionHack = [&](int n) + { + m_text->HitTest(wxPoint(n*sizeChar.x, yMid), &pos); + m_text->SetInsertionPoint(pos); + wxYield(); + }; +#else + #define SetCursorPositionHack(n) // do nothing under the other ports +#endif + #ifdef __WXGTK__ wxYield(); #endif @@ -374,6 +386,7 @@ void TextCtrlTestCase::HitTestSingleLine() // first few characters under it. SECTION("Normal") { + SetCursorPositionHack(2); REQUIRE( m_text->HitTest(wxPoint(2*sizeChar.x, yMid), &pos) == wxTE_HT_ON_TEXT ); CHECK( pos >= 0 ); CHECK( pos < 3 ); @@ -383,6 +396,7 @@ void TextCtrlTestCase::HitTestSingleLine() // character. SECTION("Beyond") { + SetCursorPositionHack(20); REQUIRE( m_text->HitTest(wxPoint(20*sizeChar.x, yMid), &pos) == wxTE_HT_BEYOND ); CHECK( pos == m_text->GetLastPosition() ); } @@ -395,8 +409,8 @@ void TextCtrlTestCase::HitTestSingleLine() m_text->ChangeValue(wxString(200, 'X')); m_text->SetInsertionPointEnd(); - #ifdef __WXGTK__ - // wxGTK must be given an opportunity to lay the text out. + #if defined(__WXGTK__) || defined(__WXQT__) + // wxGTK and wxQt must be given an opportunity to lay the text out. YieldForAWhile(); #endif @@ -404,13 +418,12 @@ void TextCtrlTestCase::HitTestSingleLine() CHECK( pos > 3 ); // Using negative coordinates works even under Xvfb, so test at least - // for this -- however this only works in wxGTK, not wxMSW. -#ifdef __WXGTK__ + // for this -- however this only works in wxGTK and wxQt, not wxMSW. +#if defined(__WXGTK__) || defined(__WXQT__) REQUIRE( m_text->HitTest(wxPoint(-2*sizeChar.x, yMid), &pos) == wxTE_HT_ON_TEXT ); CHECK( pos > 3 ); -#endif // __WXGTK__ +#endif // __WXGTK__ || __WXQT__ } -#endif } #if 0