diff options
author | Caolán McNamara <caolanm@redhat.com> | 2013-03-01 10:50:11 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2013-03-01 12:20:24 +0000 |
commit | a526370737099b57b399f2ca8de43e74e24ab794 (patch) | |
tree | 3e81a72060b06e5e3b5de1c9d0b249349906ca30 /editeng | |
parent | 4a05ab1dd4c7da10810fec9948b2de76b7bdd0b6 (diff) |
Related: fdo#55693 add regression tests for autocorrection
Change-Id: Ie9bbeb38ec9cc2fa0377709e75abb0338b20bab5
Diffstat (limited to 'editeng')
-rw-r--r-- | editeng/CppunitTest_editeng_core.mk | 1 | ||||
-rw-r--r-- | editeng/qa/unit/core-test.cxx | 116 | ||||
-rw-r--r-- | editeng/source/misc/svxacorr.cxx | 9 |
3 files changed, 123 insertions, 3 deletions
diff --git a/editeng/CppunitTest_editeng_core.mk b/editeng/CppunitTest_editeng_core.mk index 6db6082ccfe7..d8ede2ea322d 100644 --- a/editeng/CppunitTest_editeng_core.mk +++ b/editeng/CppunitTest_editeng_core.mk @@ -81,6 +81,7 @@ $(eval $(call gb_CppunitTest_use_components,editeng_core,\ configmgr/source/configmgr \ framework/util/fwk \ i18npool/util/i18npool \ + linguistic/source/lng \ sfx2/util/sfx \ ucb/source/core/ucb1 \ ucb/source/ucp/file/ucpfile1 \ diff --git a/editeng/qa/unit/core-test.cxx b/editeng/qa/unit/core-test.cxx index a43dcaa46332..dd4711cac8fb 100644 --- a/editeng/qa/unit/core-test.cxx +++ b/editeng/qa/unit/core-test.cxx @@ -38,6 +38,7 @@ #include "editeng/eeitem.hxx" #include "editeng/editids.hrc" #include "editeng/editdoc.hxx" +#include "editeng/svxacorr.hxx" #include "editeng/unofield.hxx" #include <com/sun/star/text/textfield/Type.hpp> @@ -61,9 +62,15 @@ public: */ void testUnoTextFields(); + /** + * AutoCorrect tests + */ + void testAutocorrect(); + CPPUNIT_TEST_SUITE(Test); CPPUNIT_TEST(testConstruction); CPPUNIT_TEST(testUnoTextFields); + CPPUNIT_TEST(testAutocorrect); CPPUNIT_TEST_SUITE_END(); private: @@ -221,6 +228,115 @@ void Test::testUnoTextFields() } } +class TestAutoCorrDoc : public SvxAutoCorrDoc +{ +public: + TestAutoCorrDoc(const OUString &rText, LanguageType eLang) + : m_sText(rText) + , m_eLang(eLang) + { + } + OUString getResult() const + { + return m_sText.toString(); + } +private: + OUStringBuffer m_sText; + LanguageType m_eLang; + virtual sal_Bool Delete( xub_StrLen nStt, xub_StrLen nEnd ) + { + //fprintf(stderr, "TestAutoCorrDoc::Delete\n"); + m_sText.remove(nStt, nEnd-nStt); + return true; + } + virtual sal_Bool Insert( xub_StrLen nPos, const String& rTxt ) + { + //fprintf(stderr, "TestAutoCorrDoc::Insert\n"); + m_sText.insert(nPos, rTxt); + return true; + } + virtual sal_Bool Replace( xub_StrLen nPos, const String& rTxt ) + { + //fprintf(stderr, "TestAutoCorrDoc::Replace\n"); + return ReplaceRange( nPos, rTxt.Len(), rTxt ); + } + virtual sal_Bool ReplaceRange( xub_StrLen nPos, xub_StrLen nLen, const String& rTxt ) + { + //fprintf(stderr, "TestAutoCorrDoc::ReplaceRange %d %d %s\n", nPos, nLen, OUStringToOString(rTxt, RTL_TEXTENCODING_UTF8).getStr()); + m_sText.remove(nPos, nLen); + m_sText.insert(nPos, rTxt); + return true; + } + virtual sal_Bool SetAttr( xub_StrLen, xub_StrLen, sal_uInt16, SfxPoolItem& ) + { + //fprintf(stderr, "TestAutoCorrDoc::SetAttr\n"); + return true; + } + virtual sal_Bool SetINetAttr( xub_StrLen, xub_StrLen, const String& ) + { + //fprintf(stderr, "TestAutoCorrDoc::SetINetAttr\n"); + return true; + } + virtual const String* GetPrevPara( sal_Bool ) + { + //fprintf(stderr, "TestAutoCorrDoc::GetPrevPara\n"); + return NULL; + } + virtual sal_Bool ChgAutoCorrWord( sal_uInt16& rSttPos, + sal_uInt16 nEndPos, SvxAutoCorrect& rACorrect, + const String** ppPara ) + { + //fprintf(stderr, "TestAutoCorrDoc::ChgAutoCorrWord\n"); + + if (m_sText.isEmpty()) + return false; + + const SvxAutocorrWord* pFnd = rACorrect.SearchWordsInList(m_sText.toString(), rSttPos, nEndPos, *this, m_eLang); + if (pFnd && pFnd->IsTextOnly()) + { + m_sText.remove(rSttPos, nEndPos); + m_sText.insert(rSttPos, pFnd->GetLong()); + if( ppPara ) + *ppPara = NULL;//&pCurNode->GetString(); + return true; + } + + return false; + } +}; + +//https://bugs.freedesktop.org/show_bug.cgi?id=55693 +//Two capitalized letters are not corrected if dash or slash are directly +//before the two letters +void Test::testAutocorrect() +{ + OUString sShareAutocorrFile; + OUString sUserAutocorrFile; + SvxAutoCorrect aAutoCorrect(sShareAutocorrFile, sUserAutocorrFile); + + { + OUString sInput("TEst-TEst"); + sal_Unicode cNextChar(' '); + OUString sExpected("Test-Test "); + + TestAutoCorrDoc aFoo(sInput, LANGUAGE_ENGLISH_US); + aAutoCorrect.AutoCorrect(aFoo, sInput, sInput.getLength(), cNextChar, true); + + CPPUNIT_ASSERT_MESSAGE("autocorrect", aFoo.getResult() == sExpected); + } + + { + OUString sInput("TEst/TEst"); + sal_Unicode cNextChar(' '); + OUString sExpected("Test/Test "); + + TestAutoCorrDoc aFoo(sInput, LANGUAGE_ENGLISH_US); + aAutoCorrect.AutoCorrect(aFoo, sInput, sInput.getLength(), cNextChar, true); + + CPPUNIT_ASSERT_MESSAGE("autocorrect", aFoo.getResult() == sExpected); + } +} + CPPUNIT_TEST_SUITE_REGISTRATION(Test); } diff --git a/editeng/source/misc/svxacorr.cxx b/editeng/source/misc/svxacorr.cxx index e0a018029b04..fb05f4d7c078 100644 --- a/editeng/source/misc/svxacorr.cxx +++ b/editeng/source/misc/svxacorr.cxx @@ -1458,12 +1458,15 @@ sal_uLong SvxAutoCorrect::AutoCorrect( SvxAutoCorrDoc& rDoc, const String& rTxt, if( nHelpId ) { - nHelpId -= 1; - Application::GetHelp()->OpenHelpAgent( aHelpIds[nHelpId] ); + Help* pHelp = Application::GetHelp(); + if (pHelp) + { + nHelpId -= 1; + Application::GetHelp()->OpenHelpAgent( aHelpIds[nHelpId] ); + } } } - return nRet; } |