sw/qa/extras/uiwriter/uiwriter6.cxx |   80 +++++++++++++++++++++++-------------
 1 file changed, 53 insertions(+), 27 deletions(-)

New commits:
commit 62f0707f6ff1c0dfca67c8e3d7f6d74d1a43db87
Author:     László Németh <nem...@numbertext.org>
AuthorDate: Wed Dec 14 10:56:43 2022 +0100
Commit:     László Németh <nem...@numbertext.org>
CommitDate: Sat Dec 17 13:53:25 2022 +0000

    tdf#124603 sw: test only if spelling dictionary is available
    
    Unit test failed on some test platforms. Disable the test,
    if the spelling dictionary is not available, like spellDialog.py
    does.
    
    Follow-up to commit e3ae86a38d6282db0f54d3545015ed22ee868ae5
    "tdf#124603 sw: pressing Up/Down triggers pending spell checking".
    
    "Building using --with-external-dict-dir=/usr/share/myspell
    and having en-US dictionary in there passes, but using
    --with-external-dict-dir=/usr/share/hunspell which doesn't
    exist breaks.", as reported by Christian Lohmaier.
    
    Change-Id: I53e92befe0ed35423c4c13ef3bf52f2ab3735cf4
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/144157
    Tested-by: Jenkins
    Reviewed-by: László Németh <nem...@numbertext.org>

diff --git a/sw/qa/extras/uiwriter/uiwriter6.cxx 
b/sw/qa/extras/uiwriter/uiwriter6.cxx
index 21fab90ca455..305e4fa18732 100644
--- a/sw/qa/extras/uiwriter/uiwriter6.cxx
+++ b/sw/qa/extras/uiwriter/uiwriter6.cxx
@@ -35,6 +35,8 @@
 #include <o3tl/cppunittraitshelper.hxx>
 #include <swdtflvr.hxx>
 #include <comphelper/propertysequence.hxx>
+#include <comphelper/processfactory.hxx>
+#include <comphelper/sequence.hxx>
 #include <LibreOfficeKit/LibreOfficeKitEnums.h>
 #include <vcl/scheduler.hxx>
 #include <config_fonts.h>
@@ -44,6 +46,18 @@
 #include <rootfrm.hxx>
 #include <unotxdoc.hxx>
 #include <wrong.hxx>
+#include <com/sun/star/linguistic2/LinguServiceManager.hpp>
+#include <com/sun/star/linguistic2/XLinguProperties.hpp>
+#include <com/sun/star/linguistic2/XSpellChecker1.hpp>
+#include <linguistic/misc.hxx>
+
+using namespace osl;
+using namespace com::sun::star;
+using namespace com::sun::star::beans;
+using namespace com::sun::star::lang;
+using namespace com::sun::star::uno;
+using namespace com::sun::star::linguistic2;
+using namespace linguistic;
 
 namespace
 {
@@ -71,6 +85,13 @@ void emulateTyping(SwXTextDocument& rTextDoc, const 
std::u16string_view& rStr)
         Scheduler::ProcessEventsToIdle();
     }
 }
+
+uno::Reference<XLinguServiceManager2> GetLngSvcMgr_Impl()
+{
+    uno::Reference<XComponentContext> 
xContext(comphelper::getProcessComponentContext());
+    uno::Reference<XLinguServiceManager2> xRes = 
LinguServiceManager::create(xContext);
+    return xRes;
+}
 } //namespace
 
 class SwUiWriterTest6 : public SwModelTestBase, public HtmlTestTools
@@ -1354,8 +1375,6 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest6, 
testSpellOnlineParameter)
     CPPUNIT_ASSERT_EQUAL(!bSet, pOpt->IsOnlineSpell());
 }
 
-// missing spelling dictionary on Windows test platform?
-#if !defined(_WIN32)
 CPPUNIT_TEST_FIXTURE(SwUiWriterTest6, testTdf124603)
 {
     createSwDoc();
@@ -1370,39 +1389,46 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest6, testTdf124603)
 
     CPPUNIT_ASSERT(pOpt->IsOnlineSpell());
 
-    // Type a correct word
+    // check available en_US dictionary and test spelling with it
+    uno::Reference<XLinguServiceManager2> xLngSvcMgr(GetLngSvcMgr_Impl());
+    uno::Reference<XSpellChecker1> xSpell;
+    xSpell.set(xLngSvcMgr->getSpellChecker(), UNO_QUERY);
+    LanguageType eLang = LanguageTag::convertToLanguageType(lang::Locale("en", 
"US", OUString()));
+    if (xSpell.is() && xSpell->hasLanguage(static_cast<sal_uInt16>(eLang)))
+    {
+        // Type a correct word
 
-    SwXTextDocument* pTextDoc = 
dynamic_cast<SwXTextDocument*>(mxComponent.get());
-    emulateTyping(*pTextDoc, u"the ");
-    SwCursorShell* pShell(pDoc->GetEditShell());
-    SwTextNode* pNode = pShell->GetCursor()->GetPointNode().GetTextNode();
-    // no bad word
-    CPPUNIT_ASSERT_EQUAL(static_cast<SwWrongList*>(nullptr), 
pNode->GetWrong());
+        SwXTextDocument* pTextDoc = 
dynamic_cast<SwXTextDocument*>(mxComponent.get());
+        emulateTyping(*pTextDoc, u"the ");
+        SwCursorShell* pShell(pDoc->GetEditShell());
+        SwTextNode* pNode = pShell->GetCursor()->GetPointNode().GetTextNode();
+        // no bad word
+        CPPUNIT_ASSERT_EQUAL(static_cast<SwWrongList*>(nullptr), 
pNode->GetWrong());
 
-    // Create a bad word from the good: "the" -> "thex"
+        // Create a bad word from the good: "the" -> "thex"
 
-    pWrtShell->Left(SwCursorSkipMode::Chars, /*bSelect=*/false, 1, 
/*bBasicCall=*/false);
-    emulateTyping(*pTextDoc, u"x");
-    // tdf#92036 pending spell checking
-    bool bPending = !pNode->GetWrong() || !pNode->GetWrong()->Count();
-    CPPUNIT_ASSERT(bPending);
+        pWrtShell->Left(SwCursorSkipMode::Chars, /*bSelect=*/false, 1, 
/*bBasicCall=*/false);
+        emulateTyping(*pTextDoc, u"x");
+        // tdf#92036 pending spell checking
+        bool bPending = !pNode->GetWrong() || !pNode->GetWrong()->Count();
+        CPPUNIT_ASSERT(bPending);
 
-    // Move right, leave the bad word
+        // Move right, leave the bad word
 
-    pWrtShell->Right(SwCursorSkipMode::Chars, /*bSelect=*/false, 1, 
/*bBasicCall=*/false);
-    // tdf#92036 still pending spell checking
-    bPending = !pNode->GetWrong() || !pNode->GetWrong()->Count();
-    CPPUNIT_ASSERT(bPending);
+        pWrtShell->Right(SwCursorSkipMode::Chars, /*bSelect=*/false, 1, 
/*bBasicCall=*/false);
+        // tdf#92036 still pending spell checking
+        bPending = !pNode->GetWrong() || !pNode->GetWrong()->Count();
+        CPPUNIT_ASSERT(bPending);
 
-    // Move down to trigger spell checking
+        // Move down to trigger spell checking
 
-    pWrtShell->Down(/*bSelect=*/false, 1);
-    Scheduler::ProcessEventsToIdle();
-    CPPUNIT_ASSERT(pNode->GetWrong());
-    // This was 0 (pending spell checking)
-    CPPUNIT_ASSERT_EQUAL(sal_uInt16(1), pNode->GetWrong()->Count());
+        pWrtShell->Down(/*bSelect=*/false, 1);
+        Scheduler::ProcessEventsToIdle();
+        CPPUNIT_ASSERT(pNode->GetWrong());
+        // This was 0 (pending spell checking)
+        CPPUNIT_ASSERT_EQUAL(sal_uInt16(1), pNode->GetWrong()->Count());
+    }
 }
-#endif
 
 CPPUNIT_TEST_FIXTURE(SwUiWriterTest6, testRedlineAutoCorrect)
 {

Reply via email to